【6.3.1】服务器安装 Docker Swarm中搭建 PXC + Haproxy

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 [email protected]

# 启动其他主机的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)

你可能感兴趣的:(【6.3.1】服务器安装 Docker Swarm中搭建 PXC + Haproxy)