学习笔记:docker部署高可用MySQL集群
环境
CentOS 7.5 (IP:106.xx.xx.xx)
Docker 18.06.0-ce
一、docker设置
# 定义子网
docker network create --subnet=172.18.0.0/16 net1
二、mysql集群(5台)
使用Percona-XtraDB-Cluster方案
通过mysql工具连接106.xx.xx.xx:30001~30005测试是否安装成功
172.18.10.11 30001:3306
172.18.10.12 30002:3306
172.18.10.13 30003:3306
172.18.10.14 30004:3306
172.18.10.15 30005:3306
安装镜像
docker pull percona/percona-xtradb-cluster
镜像改名
docker tag percona/percona-xtradb-cluster 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
创建备份数据卷(用于热备份数据)
docker volume create —name backup
创建第1个MySQL节点
docker run -d -p 30001:3306 -e MYSQL_ROOT_PASSWORD=db123456 -e CLUSTER_NAME=JWSPXC -e XTRABACKUP_PASSWORD=db123456 -v v1:/var/lib/mysql -v backup:/data —privileged —name=db1 —net=net1 —ip 172.18.10.11 pxc
创建第2个MySQL节点
docker run -d -p 30002:3306 -e MYSQL_ROOT_PASSWORD=db123456 -e CLUSTER_NAME=JWSPXC -e XTRABACKUP_PASSWORD=db123456 -e CLUSTER_JOIN=db1 -v v2:/var/lib/mysql -v backup:/data —privileged —name=db2 —net=net1 —ip 172.18.10.12 pxc
创建第3个MySQL节点
docker run -d -p 30003:3306 -e MYSQL_ROOT_PASSWORD=db123456 -e CLUSTER_NAME=JWSPXC -e XTRABACKUP_PASSWORD=db123456 -e CLUSTER_JOIN=db1 -v v3:/var/lib/mysql -v backup:/data —privileged —name=db3 —net=net1 —ip 172.18.10.13 pxc
创建第4个MySQL节点
docker run -d -p 30004:3306 -e MYSQL_ROOT_PASSWORD=db123456 -e CLUSTER_NAME=JWSPXC -e XTRABACKUP_PASSWORD=db123456 -e CLUSTER_JOIN=db1 -v v4:/var/lib/mysql -v backup:/data —privileged —name=db4 —net=net1 —ip 172.18.10.14 pxc
创建第5个MySQL节点
docker run -d -p 30005:3306 -e MYSQL_ROOT_PASSWORD=db123456 -e CLUSTER_NAME=JWSPXC -e XTRABACKUP_PASSWORD=db123456 -e CLUSTER_JOIN=db1 -v v5:/var/lib/mysql -v backup:/data —privileged —name=db5 —net=net1 —ip 172.18.10.15 pxc
三、haproxy(2台)
实现负载均衡
mysql中创建用户用于心跳检测create user 'haproxy'@'%' identified by ''
通过访问106.xx.xx.xx:31011|31012测试是否安装成功
通过mysql工具连接106.xx.xx.xx:31021|31022测试是否安装成功
172.18.10.21 31011:8888 31021:3306
172.18.10.22 31012:8888 31022:3306
拉取镜像
docker pull haproxy
创建第1个Haproxy负载均衡服务器
docker run -it -d -p 31011:8888 -p 31021:3306 -v /root/soft/haproxy:/usr/local/etc/haproxy —name h1 —privileged —net=net1 —ip 172.18.10.21 haproxy
进入h1容器,启动Haproxy
docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
创建第2个Haproxy负载均衡服务器
docker run -it -d -p 31012:8888 -p 31022:3306 -v /root/soft/haproxy:/usr/local/etc/haproxy —name h2 —privileged —net=net1 —ip 172.18.10.22 haproxy
进入h2容器,启动Haproxy
docker exec -it h2 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
配置文件haproxy.cfg
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:ha123456
#数据库负载均衡
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数据库心跳检测
#create user 'haproxy'@'%' identified by ''
option mysql-check user haproxy
server MySQL_1 172.18.10.11:3306 check weight 1 maxconn 2000
server MySQL_2 172.18.10.12:3306 check weight 1 maxconn 2000
server MySQL_3 172.18.10.13:3306 check weight 1 maxconn 2000
server MySQL_4 172.18.10.14:3306 check weight 1 maxconn 2000
server MySQL_5 172.18.10.15:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option tcpka
四、双机热备
1. 两台haproxy分别安装keepalived
通过ping 172.18.8.11测试是否安装成功
#进入h1容器
docker exec -it h1 bash
#更新软件包
apt-get update
#安装Keepalived
apt-get install keepalived
#宿主机拷贝配置文件到h1容器
docker cp keepalived.conf h1:/etc/keepalived/
#启动Keepalived
service keepalived start
#宿主机执行ping命令
ping 172.18.8.11
配置文件keepalived.conf,设置虚拟IP
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.8.11 }
}
2.1 (方案1)宿主机安装keepalived,设置虚拟IP,转发到haproxy中设置的虚拟IP
该方式不适合在一台云主机上测试,因为本地访问不到虚拟IP(192.168.31.246)
通过访问192.168.31.246:8888测试是否安装成功
通过mysql工具连接192.168.31.246:3306测试是否安装成功
# 配置/etc/keepalived/keepalived.conf
# 启动keepalived
service keepalived start
# 通过虚拟ip(192.168.31.246)进行访问
配置文件/etc/keepalived/keepalived.conf
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.31.246 }
}
virtual_server 192.168.31.246 8888 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 172.18.8.11 8888 { weight 1 }
}
virtual_server 192.168.31.246 3306 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 172.18.8.11 3306 { weight 1 }
}
2.2 (方案2)nginx直接转发到haproxy中设置的虚拟ip
nginx端口转发,configure时需要加上参数–with-stream
通过访问106.xx.xx.xx:8888测试是否安装成功
通过mysql工具连接106.xx.xx.xx:3306测试是否安装成功
配置文件/usr/local/nginx/conf/nginx.conf中加入端口转发到指定虚拟IP
stream {
upstream ha8888 {
server 172.18.8.11:8888;
}
upstream db3306 {
server 172.18.8.11:3306;
}
server {
listen 8888;
proxy_connect_timeout 5s;
proxy_timeout 5s;
proxy_pass ha8888;
}
server {
listen 3306;
proxy_connect_timeout 5s;
proxy_timeout 5s;
proxy_pass db3306;
}
}
- 文章链接: https://blog.zhangcun.store/2022/09/16/docker-bu-shu-gao-ke-yong-mysql-ji-qun/
- 版权声明: 本网站所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!
你的赏识是我前进的动力
支付宝
微信