zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Docker - 搭建Mysql PXC高可用集群环境部署

mysqlDocker集群部署 环境 搭建 可用 PXC
2023-06-13 09:15:30 时间

Docker 基本用法

1.安装 docker

yum -y update
yum install -y docker

2.启动 / 关闭 / 重启 docker

service docker start / systemctl start docker
service docker stop / systemctl stop docker
service docker restart / systemctl restart docker

ps:我本地机器用第二个命令启动成功的。

3.配置docker镜像加速器

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh |
sh -s http://f1361db2.m.daocloud.io  #linux
http://f1361db2.m.daocloud.io #macOs
http://f1361db2.m.daocloud.io #Windows

ps:设置如果报错,去配置文件修改,去掉最后的一个逗号,路径vim /etc/docker/daemon.json , 修改配置完,最好重启docker,以避免不必要的错误。

如果是添加阿里云docker的加速器,开通加速服务在配置项里找到对应的命令,

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://lgltjulp.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4.查找并安装镜像

docker search java  #查找镜像
docker pull docker.io/java #安装你需要的镜像

5.查看docker中已经安装的镜像

docker images

6.导入和导出镜像

docker save docker.io/java > /home/docker/java.tar.gz #导出docker镜像
docker load < /home/docker/java.tar.gz 导入docker镜像
docker images
docker rmi java

7.启动容器

docker run -it docker.io/java bash 
-p 9000:8080 -p 9001:8085  # -p 映射宿主机和虚拟机的端口
-v /home/project:/soft  #-v 映射宿主机和虚拟机的文件夹
--privileged # 目录权限
--name myjava
docker run -it -p 9000:8080 -p 9001:8085 -v /home/project:/soft
 --privileged --name myjava docker.io/java bash

8.暂停和停止容器

docker pause myjava # 暂停容器
docker unpause myjava #恢复容器的运行
docker stop myjava #暂停容器
docker start -i myjava #重启

9.查看运行的容器

docker ps -a 

docker run -it -p 9000:8080 -p 9001:8085 
-v /home/project:/soft
--privileged 
--name myjava 
docker.io/java bash

Mysql PXC集群环境部署

PXC集群特点:

  • 同步复制,事务在所有的集群节点要么同时提交,要么同时不提交
  • Replication采用异步复制,无法保证数据的一致性

1.下载镜像

docker pull percona/percona-xtradb-cluster

2.出于安全考虑,需要给pxc集群实例创建docker内部网络

docker network create --subnet=172.20.1.0/24 net1
docker network inspect net1
docker network rm net1

ps:阿里云服务器没有成功???!!中间遇到了一个小问题,<font color=red>Error response from daemon, 这个是因为172.18 的网段已经存在,可以docker network ls查看,换一个网段就解决了</font>

3.创建docker卷

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

4.查看docker卷信息

docker inspect v1
#创建第一个节点
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 
--name=node1 --net=net1 --ip 172.20.1.2 pxc

#创建第二个节点
docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456
-e CLUSTER_JOIN=node1
--name=node2 --net=net1 --ip 172.20.1.3 pxc

#创建第三个节点
docker run -d -p 3315:3306 -e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456
-e CLUSTER_JOIN=node1 
--name=node3 --net=net1 --ip 172.20.1.7 pxc

#创建第四个节点
docker run -d -p 3313:3306 -e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456
-e CLUSTER_JOIN=node1  
--name=node4 --net=net1 --ip 172.20.1.5 pxc

#创建第五个节点
docker run -d -p 3314:3306 -e MYSQL_ROOT_PASSWORD=123456
-e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456
-e CLUSTER_JOIN=node1
--name=node5  --net=net1 --ip 172.20.1.6 pxc

ps:在这个地方又遇到了个问题,创建了5个node节点,但是只启动了2个,3个失败???暂时还不知道原因???启动的状态都为Exited???!!

使用这句命令全部启动实例docker ps -aq | xargs -I {} docker start {}

5.mysql的负载均衡haproxy

docker pull haproxy

6.实例化haproxy

docker run -it -d -p 4001:8888 -p 4002:3306 
-v /home/soft/haproxy:/usr/local/etc/haproxy 
--name h1 --privileged 
--net=net1 --ip 172.20.1.10 haproxy
	
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.20.1.2:3306 check weight 1 maxconn 2000
   server  MySQL_2 172.20.1.3:3306 check weight 1 maxconn 2000
   server  MySQL_3 172.20.1.7:3306 check weight 1 maxconn 2000
   server  MySQL_4 172.20.1.5:3306 check weight 1 maxconn 2000
   server  MySQL_5 172.20.1.6:3306 check weight 1 maxconn 2000
	
	#使用keepalive检测死链
   option  tcpka

7.登陆到交互容器里

docker exec -it h1 bash

8.安装keepalive 完成双机热备,登录haproxy,执行命令

apt-get update
apt-get install keepalived

9.配置keepalive,

#创建第2个Haproxy负载均衡服务器
docker run -it -d -p 4003:8888 
-p 4004:3306 
-v /home/soft/haproxy:/usr/local/etc/haproxy 
--name h2 --privileged 
--net=net1 
--ip 172.20.1.10 
haproxy
 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.20.1.201
    }
}

#启动Keepalived
service keepalived start
#宿主机执行ping命令
ping 172.20.1.201
#创建第2个Haproxy负载均衡服务器
docker run -it -d -p 4003:8888 -p 4004:3306 
-v /home/soft/haproxy:/usr/local/etc/haproxy 
--name h2 --privileged 
--net=net1 --ip 172.20.1.11 haproxy
#进入h2容器,启动Haproxy
docker exec -it h2 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg