当前位置:网站首页>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 net1
3、创建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 haproxy
2、编写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
边栏推荐
- arcgis的基本使用1
- Li Mu D2L (VI) -- model selection
- Qt | 关于如何使用事件过滤器 eventFilter
- Server memory failure prediction can actually do this!
- 839. 模拟堆
- Windows通过命令备份数据库到本地
- Pat grade a a1076 forwards on Weibo
- 【Mysql】redo log,undo log 和binlog详解(四)
- js中树与数组的相互转化(树的子节点若为空隐藏children字段)
- Redis principle and use - Basic Features
猜你喜欢
Does volatile rely on the MESI protocol to solve the visibility problem? (next)
Object 的Wait Notify NotifyAll 源码解析
JS output diamond on the console
Voice chat app source code - Nath live broadcast system source code
围棋智能机器人阿法狗,阿尔法狗机器人围棋
Ext4 file system opens dir_ After nlink feature, link_ Use link after count exceeds 65000_ Count=1 means the quantity is unknown
Innovus is stuck, prompting x error:
Go intelligent robot alpha dog, alpha dog robot go
jvm命令归纳
Sending and receiving of C serialport
随机推荐
HBuilderX 运行微信开发者工具 “Fail to open IDE“报错解决
点击input时,不显示边框!
The Child and Binary Tree-多项式开根求逆
性格测试系统v1.0
Where are the laravel framework log files stored? How to use it?
C# Serialport的发送和接收
Elastic APM installation and use
Conditions for JVM to trigger minor GC
Li Mu D2L (V) -- multilayer perceptron
What is asynchronous operation
Sending and receiving of C serialport
js中树与数组的相互转化(树的子节点若为空隐藏children字段)
模板(三)
TabbarController的封装
Use of off heap memory
暑假末尾学习笔记
csdn空格用什么表示
TableviewCell高度自适应
[use of final keyword]
Hbuilderx runs the wechat developer tool "fail to open ide" to solve the error