使用docker搭建mysql集群
如何使用docker搭建mysql的集群(使用了percona/percona-xtradb-cluster和haproxy镜像)
获取docker的mysql镜像
获取docker仓库存在的mysql镜像
docker pull percona/percona-xtradb-cluster:latest #获取镜像
#也可使用docker tag 【镜像名称】 【你需要的命名】 ,来个镜像加标签,可以让镜像名字短一些,便于使用
创建mysql集群服务
新建属于mysql集群的网段
docker network create --subnet=172.18.0.0/16 mysql-cluster-net
新建属于mysql服务的数据卷
docker volume create v1
docker volume create v2
docker volume create v3
docker volume create v4
docker volume create v5
创建第一个mysql的节点
docker run -d -p 3406:3306 -e MYSQL_ROOT_PASSWORD=Radiant123 -e CLUSTER_NAME=MIXEDINFOS-PXC -e XTRABACKUP_PASSWORD=Radiant123 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=mysql-cluster-net --ip 172.18.0.2 mixedinfos-pxc
创建后续的五个mysql节点
docker run -d -p 3407:3306 -e MYSQL_ROOT_PASSWORD=Radiant123 -e CLUSTER_NAME=MIXEDINFOS-PXC -e XTRABACKUP_PASSWORD=Radiant123 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=mysql-cluster-net --ip 172.18.0.3 mixedinfos-pxc
docker run -d -p 3408:3306 -e MYSQL_ROOT_PASSWORD=Radiant123 -e CLUSTER_NAME=MIXEDINFOS-PXC -e XTRABACKUP_PASSWORD=Radiant123 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql -v backup:/data --privileged --name=node3 --net=mysql-cluster-net --ip 172.18.0.4 mixedinfos-pxc
docker run -d -p 3409:3306 -e MYSQL_ROOT_PASSWORD=Radiant123 -e CLUSTER_NAME=MIXEDINFOS-PXC -e XTRABACKUP_PASSWORD=Radiant123 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql -v backup:/data --privileged --name=node4 --net=mysql-cluster-net --ip 172.18.0.5 mixedinfos-pxc
docker run -d -p 3410:3306 -e MYSQL_ROOT_PASSWORD=Radiant123 -e CLUSTER_NAME=MIXEDINFOS-PXC -e XTRABACKUP_PASSWORD=Radiant123 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=mysql-cluster-net --ip 172.18.0.6 mixedinfos-pxc
#第一个几点的命令和后续的几个有些不同
在节点创建完毕后登入其中任意一个镜像,创建一个名字叫“haproxy”且无密码无权限的用户,用于提供给haproxy来监听数据库的状态
docker exec -it node1 bash
mysql -uroot -p
#登录数据库
CREATE USER haproxy; -- 创建用户
FLUSH PRIVILEGES; -- 刷新权限
使用haproxy对mysql进行负载均衡
获取haproxy镜像
docker pull haproxy:latest
准备好haproxy的配置文件haproxy.cfg
我用的是docker for windows,和其他的系统有些差异
配置文件如下:
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:abc123456
#数据库负载均衡
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
将创建好的配置文件放在E:\root\mysql-cluster 下,
然后执行docker命令
docker run -it -d -p 4001:8888 -p 4002:3306 -v E:\root\mysql-cluster\haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --name mixedinfos-haproxy --privileged --net=mysql-cluster-net --ip 172.18.0.7 haproxy
如果无法启动,可执行
docker logs 镜像名称
来查看失败的原因
进入haproxy镜像启动服务
docker exec -it mixedinfos-haproxy bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
登录网页查看集群的状况
数据库的连接
这里直接连接haproxy和docker之间映射的端口4002即可,密码是数据库密码
来源:CSDN
作者:qq_36263535
链接:https://blog.csdn.net/qq_36263535/article/details/103988096