Docker下配置双机热备PXC集群
架构:
步骤:
1、安装centos7 ,设置宿主机IP:192.168.1.224
2、先更新yum软件管理器,再安装docker
1、yum -y update
2、yum install -y docker
docker管理
docker启动,停止,重启
service docker start /stop /restart
3、启动docker,配置镜像下载地址
https://www.daocloud.io 中找到docker加速器,找到linux版本加速器,拷贝在linux中执行
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
执行后编辑配置文件: /etc/docker/daemon.json 中将最后一个逗号去掉后保存即可
4、常用docker命令:
查找docker镜像:
docker xxxx search
如:docker java search
查看当前docker镜像:
docker images
导出镜像:
docker save 镜像id > 目标位置
如:
docker save docker.io/java > /home/java.tar.gz
导入镜像:
docker load < 镜像位置
删除镜像:
docker rmi 镜像id
5、安装PXC镜像
docker pull percona/percona-xtradb-cluster
6、为PXC镜像改名
docker tag percona/percona-xtradb-cluster pxc
7、为镜像创建net网段
docker network create --subnet=172.18.0.0/24 net1
8、为5个pxc集群容器创建5个数据卷
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
docker volume create --name v4
docker volume create --name v5
为便于修改mysql配置文件,最好创建mysql配置文件的数据卷
docker volume create --name conf1
docker volume create --name conf2
docker volume create --name conf3
docker volume create --name conf4
docker volume create --name conf5
9、创建热备份数据卷(容器一旦启动后,不停下来无法创建新的数据卷,所以先创建出来用于保存备份的数据卷)
docker volume create --name backup
10、创建第一个pxc节点容器node1,创建完成后等待1-2分钟,用mysql客户端工具连接成功后再创建剩下的2-5pxc容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -v v1:/var/lib/mysql -v backup:/data -v conf1:/etc/mysql --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
创建成功后,以root帐号进入node1,修改mysql配置文件中的默认sql_mode
以root帐号进入docker容器 node1: docker exec -it --user root node1 bash
安装vim:
apt-get update
apt-get install -y vim
修改mysql配置文件:
vim /etc/mysql/my.cnf
[mysqld]
sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
保存后停掉docker stop node1 重启node1 docker start node1
按如此方式依次创建node2-5,因node3-5创建的docker容器卷与宿主机的映射conf3-5,所以可以直接在宿主机的conf3-5中直接修改my.cnf
查看conf3-5路径:
docker inspect conf3
11、创建第2-5pxc容器
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v conf2:/etc/mysql --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql -v conf3:/etc/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql -v conf4:/etc/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v conf5:/etc/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
至此,5个节点的pxc集群搭建完成,可以使用mysql客户端工具分别连接后验证同步情况。
11、下载Haproxy镜像
docker pull haproxy
12、宿主机上编写Haproxy配置文件
vi /home/soft/haproxy/haproxy.cfg
haproxy文件配置:
global #工作目录 chroot /usr/local/etc/haproxy #日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info log 127.0.0.1 local5 info #守护进程运行 daemon defaults log global mode http #日志格式 option httplog #日志中不记录负载均衡的心跳检测记录 option dontlognull #连接超时(毫秒) timeout connect 5000 #客户端超时(毫秒) timeout client 50000 #服务器超时(毫秒) timeout server 50000 #监控界面 listen admin_stats #监控界面的访问的IP和端口 bind 0.0.0.0:8888 #访问协议 mode http #URI相对地址 stats uri /dbs #统计报告格式 stats realm Global\ statistics #登陆帐户信息 stats auth admin:lezhu123456 #数据库负载均衡 listen proxy-mysql #访问的IP和端口 bind 0.0.0.0:3306 #网络协议 mode tcp #负载均衡算法(轮询算法) #轮询算法:roundrobin #权重算法:static-rr #最少连接算法:leastconn #请求源IP算法:source balance roundrobin #日志格式 option tcplog #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测 option mysql-check user haproxy server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000 server MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000 server MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 server MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000 server MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000 #使用keepalive检测死链 option tcpka
13、在任一pxc节点中创建一个用户haproxy心跳检测的mysql账户:haproxy,该账户密码可为空,不赋予任何权限
create user 'haproxy'@'%' IDENTIFIED BY ''
14、安装一主一备2个Haproxy容器:
#创建第1个Haproxy负载均衡服务器 docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy #进入h1容器,启动Haproxy docker exec -it h1 bash #加载配置文件,启动h1 haproxy -f /usr/local/etc/haproxy/haproxy.cfg #创建第2个Haproxy负载均衡服务器 docker run -it -d -p 4003:8888 -p 4004:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h2 --privileged --net=net1 --ip 172.18.0.8 haproxy #进入h2容器,启动Haproxy docker exec -it h2 bash #加载配置文件,启动h2 haproxy -f /usr/local/etc/haproxy/haproxy.cfg
至此,一主一备Haproxy设置完毕,可以使用宿主机ip在浏览器中查看haproxy:192.168.1.224:4001/dbs 或192.168.1.224:4003/dbs 或使用mysql客户端连接haproxy验证 ip:宿主机ip,端口 4002 与4004
15、安装Keepalived容器(keepalived必须安装在对应的haproxy容器中,该容器使用乌班图系统,故下载命令改为apt -get )
#进入h1容器 docker exec -it h1 bash #更新软件包 apt-get update #安装VIM apt-get install vim #安装Keepalived apt-get install keepalived #编辑Keepalived配置文件(参考下方配置文件) vim /etc/keepalived/keepalived.conf #启动Keepalived service keepalived start #宿主机执行ping命令 ping 172.18.0.201
配置文件内容如下:
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 172.18.0.201 } }
16 、安装第二个Keepalived
#进入h2容器 docker exec -it h2 bash #更新软件包 apt-get update #安装VIM apt-get install vim #安装Keepalived apt-get install keepalived #编辑Keepalived配置文件 vim /etc/keepalived/keepalived.conf #启动Keepalived service keepalived start #宿主机执行ping命令 ping 172.18.0.201 配置文件内容如下: vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 172.18.0.201 } }
17、宿主机安装Keepalived,实现双击热备
#宿主机执行安装Keepalived yum -y install keepalived #修改Keepalived配置文件 vi /etc/keepalived/keepalived.conf #启动Keepalived service keepalived start Keepalived配置文件如下: vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.99.150 } } virtual_server 192.168.99.150 8888 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 172.18.0.201 8888 { weight 1 } } virtual_server 192.168.99.150 3306 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 172.18.0.201 3306 { weight 1 } }
18、热备份数据
#进入node1容器 docker exec -it node1 bash #更新软件包 apt-get update #安装热备工具 apt-get install percona-xtrabackup-24 #全量热备 innobackupex --user=root --password=lezhu123456 /data/backup/full
19、冷还原数据
停止其余4个节点,并删除节点,由于前面做过了数据卷,故mysql中数据不会丢失,只是删除容器
docker stop node2
docker stop node3
docker stop node4
docker stop node5
docker rm node2
docker rm node3
docker rm node4
docker rm node5
node1容器中删除MySQL的数据
#删除数据
rm -rf /var/lib/mysql/*
#清空事务
innobackupex --user=root --password=lezhu123456 --apply-back /data/backup/full/2018-04-15_05-09-07/
#还原数据
innobackupex --user=root --password=lezhu123456 --copy-back /data/backup/full/2018-04-15_05-09-07/
重新创建其余4个节点,组件PXC集群
20、安装Redis,配置RedisCluster集群
待续.......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)