【4.3.1】服务器安装 Docker Swarm中搭建 PX
2021-07-20 本文已影响0人
王滕辉
https://www.jianshu.com/p/a3dba4d4aff5
(一) docker pxc 搭建
# 新建文件夹并赋予权限
mkdir -p /home/log
mkdir -p /home/data
mkdir -p /home/mysql-files
mkdir -p /home/backup
chmod 755 /home/log
chmod 755 /home/data
chmod 755 /home/mysql-files
chmod 755 /home/backup
# images
docker pull percona/percona-xtradb-cluster
# 创建网络
docker network create -d overlay --attachable swarm_test
# 查看 网络ip
docker network inspect swarm_test
# 创建第一个节点
docker run -d -p 3506:3306 --ip 10.0.3.2 -e MYSQL_ROOT_PASSWORD=admin -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=admin -v /home/data:/var/lib/mysql --privileged --name=node1 --net=swarm_test pxc
# 重新创建第二个节点,加入配置路径
docker rm -f node2
docker run -d -p 3506:3306 --ip 10.0.3.3 -e MYSQL_ROOT_PASSWORD=admin -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=admin -e CLUSTER_JOIN=node1 -v /home/backup:/data -v /home/data:/var/lib/mysql -v /home/log:/var/log/mysql -v /home/mysql-files:/var/lib/mysql-files --privileged --name=node2 --net=swarm_test pxc
# 重新创建第三个节点,加入配置路径
docker rm -f node3
docker run -d -p 3606:3306 --ip 10.0.3.4 -e MYSQL_ROOT_PASSWORD=admin -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=admin -e CLUSTER_JOIN=node2 -v /home/backup:/data -v /home/data:/var/lib/mysql -v /home/log:/var/log/mysql -v /home/mysql-files:/var/lib/mysql-files --privileged --name=node3 --net=swarm_test pxc
# 最后一次重新创建一遍把配置文件加进去 加入到第三个节点后面
docker rm -f node1
docker run -d -p 3506:3306 --ip 10.0.3.2 -e MYSQL_ROOT_PASSWORD=admin -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=admin -e CLUSTER_JOIN=node3 -v /home/backup:/data -v /home/data:/var/lib/mysql -v /home/log:/var/log/mysql -v /home/mysql-files:/var/lib/mysql-files --privileged --name=node1 --net=swarm_test pxc
# node1 > node2 >node3 > node1
# 机房断电后,查看所有的mysql服务器,找到具有最高seqno的节点,把safe_to_boostrap的值改为1
[root@mysql3 ~]# cat /home/data/mysql/grastate.dat
# GALERA saved state
version: 2.1
uuid: a3b378ea-ce50-11eb-b624-0780367f3ddd
seqno: 7
safe_to_bootstrap: 1
[root@mysql3 ~]# systemctl start mysql@bootstrap.service
# 启动其他主机的mysql服务
[root@mysql1 ~]# systemctl start mysql
[root@mysql2 ~]# systemctl start mysql
可以直接用navicat连接三个节点
image.png
(二) Haproxy
# 下载2.3版本,最新版本有问题
docker pull haproxy:2.3
参考官网
Create a dockerfile
#Dockerfile
FROM haproxy:2.3
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
Create a 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:123456
#数据库负载均衡
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 node1 10.0.3.2:3306 check weight 1 maxconn 2000
server node2 10.0.3.3:3306 check weight 1 maxconn 2000
server node3 10.0.3.4:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option tcpka
在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
CREATE USER `haproxy`@`%` IDENTIFIED WITH mysql_native_password;
Build the container
# 创建新的images
docker build -t haproxy-mysql .
# 运行
docker run -it -d -p 4001:8888 -p 4002:3306 -d --name haproxy -v /home/config:/usr/local/etc/haproxy:ro --net=swarm_test --ip 10.0.3.77 --privileged haproxy-mysql
docker rm -f haproxy
docker run -it -d -p 4001:8888 -p 4002:3306 -d --name haproxy -v /home/config/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro --net=swarm_test --ip 10.0.3.77 --privileged haproxy-mysql
访问地址 ip:4001/dbs admin/123456
image.png
navicat 连接 ip:4002 账号密码还是数据库密码
image.png点波关注 系统搭建(docker)