当前位置:网站首页>docker配置mysql集群
docker配置mysql集群
2022-07-26 09:23:00 【为天空着色】
原文:https://www.cnblogs.com/zhenghongxin/p/9228101.html
安装docker
yum install -y docker启动docker
#启动docker
systemctl start docker
#停止docker
systemctl stop docker
#重启docker
systemctl restart docker
#查看docker是否已经启动
docker ps
说明docker已经启动了
安装pxc集群
1、获取pxc镜像
#获取pxc镜像
docker pull percona/percona-xtradb-cluster
#重命名
docker tag percona/percona-xtradb-cluster pxc
#查看镜像列表
docker images
----------------------------------------------------------------------------------------------
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/percona/percona-xtradb-cluster latest 7ad1b9c338b6 5 weeks ago 413 MB
pxc latest 7ad1b9c338b6 5 weeks ago 413 MB
2、创建网段net1(注意不要与宿主机ip段一样,如果一样冲突会导致外部链接不上docker上安装的mysql)
#创建网段net1
docker network create --subnet=172.18.0.0/16 net1
#查看net1网段
docker inspect net1
#删除net1网段
docker network rm net13、创建5个数据卷(pxc无法直接存取宿主机的数据,通过docker卷来存储)
#创建数据卷
docker volume create v1
docker volume create v2
docker volume create v3
docker volume create v4
docker volume create v5
#查看数据卷
docker inspect v1
4、创建5个pxc节点
#创建第1个MySQL节点
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
--------------------------------------------------------------------------------
-d:表示后台运行
-v:映射Docker卷到容器的mysql数据目录
MYSQL_ROOT_PASSWORD:表示创建的数据库密码
CLUSTER_NAME: 表示创建出的集群名字
XTRABACKUP_PASSWORD:表示集群通信密码
--privileged:表示分配最高权限
--net:指定网段
--ip:指定IP
等待2分钟后,再创建第二个节点,等待第一个节点实例化完毕后,才能开启第二个节点实例,不然可能会出现瞬间停止
#创建第2个MySQL节点
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
#创建第3个MySQL节点
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
#创建第4个MySQL节点
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
#创建第5个MySQL节点
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
5、查看容器mysql节点列表
看到5个节点都已经启动成功,进入任意一个节点创建数据库,观察别的mysql是否同步
至此pxc简单集群已经搭建完成。
注意:宿主机重启后使用docker start node1 启动任意节点失败,是因为集群之前的同步机制造成的,启动任何一个节点,该节点都会去其它节点同步数据,其它节点仍处于宕机状态,所以该节点启动失败,这也是pxc集群的强一致性的表现,解决方式是,删除所有节点docker rm node1 node2 node3 node4 node 5 和数据卷中的grastate.dat文件 ,然后,重新执行集群创建的命令即可,因为数据都在数据卷中,所有放心,集群重新启动都数据仍然都在.(如果有某一个节点启动失败,可以删除该节点,然后重新执行创建命令,数据会同步过来)
#删除所有节点
docker rm node1 node2 node3 node4 node5
#输出数据卷中的grastate.dat文件
rm -rf /var/lib/docker/volumes/v1/_data/grastate.dat
rm -rf /var/lib/docker/volumes/v2/_data/grastate.dat
rm -rf /var/lib/docker/volumes/v3/_data/grastate.dat
rm -rf /var/lib/docker/volumes/v4/_data/grastate.dat
rm -rf /var/lib/docker/volumes/v5/_data/grastate.dat安装Haproxy进行高可用与负载均衡
1、获取haproxy镜像
docker pull haproxy2、编写Haproxy配置文件
vim /home/soft/haproxy/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: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在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
创建第1个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.18.0.7 haproxy进入h1容器,启动Haproxy
docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg查看是否启动成功:
访问http://ip:4001/dbs

边栏推荐
- Li Mu D2L (IV) -- softmax regression
- 吴恩达机器学习之线性回归
- Zxing simplified version, reprinted
- ZXing简化版,转载
- 您的登录IP不在管理员配置的登录掩码范围内
- Under a directory of ext3 file system, subfolders cannot be created, but files can be created
- 暑假末尾学习笔记
- 微信小程序开发
- The problem of the sum of leetcode three numbers
- 2022 mobile crane driver test question simulation test question bank simulation test platform operation
猜你喜欢

Canal 的学习笔记

【线上问题】Timeout waiting for connection from pool 问题排查

2022 tea artist (intermediate) special operation certificate examination question bank simulated examination platform operation

Object 的Wait Notify NotifyAll 源码解析

antUI中a-modal 拖拽功能制作

Nuxt - Project packaging deployment and online to server process (SSR server rendering)

Under a directory of ext3 file system, subfolders cannot be created, but files can be created

Paper notes: knowledge map kgat (unfinished temporary storage)

Innovus is stuck, prompting x error:

神经网络与深度学习-6- 支持向量机1 -PyTorch
随机推荐
Basic use of ArcGIS 1
Basic use of Arc GIS 2
JS - DataTables control on the number of displays per page
756. 蛇形矩阵
opencv图像处理
Error: Cannot find module ‘umi‘ 问题处理
"No input file specified" problem handling
2022 Shanghai safety officer C certificate examination questions and mock examination
MySQL 强化知识点
【Mysql】一条SQL语句是怎么执行的(二)
(2006, MySQL server has gone away) problem handling
Thread Join 和Object wait 的区别
原根与NTT 五千字详解
微信小程序学习笔记1
Error: cannot find module 'UMI' problem handling
Original root and NTT 5000 word explanation
Byte buffer stream & character stream explanation
a-table中的rowSelection清空问题
Sending and receiving of C serialport
滑动窗口、双指针、单调队列、单调栈