总体参考:
https://zhuanlan.zhihu.com/p/60632693
方案:
基于Percona Xtradb Cluster Docker来部署mysql节点,同样基于Docker 来部署keepalived + haproxy节点,实现mysql主主环形结构的负载均衡。
本次测试 mysql节点部署9个,haproxy节点两个,在宿主机上部署keepalived实现负载均衡。
本次测试环境是centos7。
1、环境准备
首先先在机器上安装并启动docker,最好是安装高版本docker,yum源里的一般比较老了,不建议用,高版本安装可以自行解决。
然后从Docker Hub中pull下需要的image。
PXC:
docker pull percona/percona-xtradb-cluster:5.7.21 (我这边环境用lastest版本有bug,所以用了5.7.21版本)
keepalived + haproxy:
docker pull pelin/haproxy-keepalived (haproxy与keepalived合在同一个docker image中)
NOTE:pull下来的image里面mysql参数是默认参数,性能不高,需要修改参数(包括mysql、sysctl、ulimit参数),我这边以官方image为基础,run起来后exec进去,修改mysql配置文件node.cnf,然后commit出一个自己的image,tag是optimizev3(docker的相关操作这里不细说,自行解决)
2、部署
- mysql docker节点部署
写了一个脚本,一步创建全部九个节点。脚本如下(可根据实际情况自行修改脚本):
#!/bin/bash
echo "创建网络"
docker network create --subnet=172.18.0.0/24 pxc_net
echo "创建5个docker卷"
docker volume create v1
docker volume create v2
docker volume create v3
docker volume create v4
docker volume create v5
docker volume create v6
docker volume create v7
docker volume create v8
docker volume create v9
echo "创建节点 node1"
docker run -d -p 23306:3306 --net=pxc_net --name=node1 \
-e CLUSTER_NAME=PXC \
-e MYSQL_ROOT_PASSWORD=a123456 \
-e XTRABACKUP_PASSWORD=a123456 \
-v v1:/var/lib/mysql \
--privileged \
--ip 172.18.0.2 \
percona/percona-xtradb-cluster:optimizev3
sleep 1m
echo "创建节点 node2"
docker run -d -p 23307:3306 --net=pxc_net --name=