天辰建设网站公司,顺通建设集团有限公司 网站,网站视觉规范,在线图片制作器记录一下简单的搭建步骤以便后期查验 目录 前言步骤1. 安装环境2. 重新制作镜像3. 导入新镜像4. 创建容器 前言
假设已经搭建了MySQL8的MGR集群方式#xff08;一主两从#xff09;。
MGR本身有故障转移重新选举新的主节点功能#xff0c;但是上游的应用程序需要自己手动修… 记录一下简单的搭建步骤以便后期查验 目录 前言步骤1. 安装环境2. 重新制作镜像3. 导入新镜像4. 创建容器 前言
假设已经搭建了MySQL8的MGR集群方式一主两从。
MGR本身有故障转移重新选举新的主节点功能但是上游的应用程序需要自己手动修改数据库连接地址重新指向主节点。
为了了能不用手动方式切换主节点需要中间代理访问程序提供的方案有很多例如 nginx、keepalived、proxysql等这里我们先选择使用keepalived后期使用proxysql代理。
步骤
1. 安装环境
安装Docker和MGR 这里略过
2. 重新制作镜像
登录任意一个节点服务器下载原始镜像
docker pull osixia/keepalived:2.0.20创建临时容器
docker run --name keepalivedtest --cap-addNET_ADMIN --cap-addNET_BROADCAST --cap-addNET_RAW -e KEEPALIVED_INTERFACEenp6s0 --nethost -d osixia/keepalived:2.0.20登录进临时容器
docker exec -it keepalivedtest /bin/bash然后安装mysql客户端
apk add mysql mysql-client
...稍等片刻
...
安装完成后
退出容器 exit从零时容器生成一个新的镜像mgr_keepalived
docker commit keepalivedtest mgr_keepalived:2.0.20导出镜像文件上传其他MGR节点服务器 docker save -o mgr_keepalived2.tar mgr_keepalived:2.0.203. 导入新镜像
在每一个MGR节点服务器上导入镜像 docker load -i mgr_keepalived2.tar
4. 创建容器
这里假设3台服务器环境如下
服务器文件路径备注192.168.1.246/apps/keepalived/keepalived.conf /apps/keepalived/mysql_master_check.sh记得sh文件赋予可执行权限当前MGR主节点192.168.1.247/apps/keepalived/keepalived.conf /apps/keepalived/mysql_master_check.sh从节点192.168.1.248/apps/keepalived/keepalived.conf /apps/keepalived/mysql_master_check.sh从节点
各服务器文件路径都一致 mysql_master_check.sh 脚本文件内容如下
#!/bin/bash# 替换以下变量为你的实际MySQL用户、密码和端口
MYSQL_USERrpl_user
MYSQL_PASS请填写账号密码
MYSQL_PORT请填写端口号
MYSQL_HOST请填写节点主机IP# 检查MySQL服务是否运行
if nc -z $MYSQL_HOST $MYSQL_PORT; thenecho MySQL 服务在 $MYSQL_HOST:$MYSQL_PORT 上正在运行
elseecho MySQL 服务在 $MYSQL_HOST:$MYSQL_PORT 上未运行exit 1
fi# 检查当前节点是否为主节点
IS_MASTER$(mysql -u$MYSQL_USER -p$MYSQL_PASS -P$MYSQL_PORT -h$MYSQL_HOST -e SHOW GLOBAL VARIABLES LIKE read_only; | grep -c OFF)if [[ $IS_MASTER -eq 1 ]]; thenecho 当前节点是主节点exit 0
elseecho 当前节点不是主节点exit 1
fi
各个节点上的文件注意 MYSQL_USER“rpl_user” MYSQL_PASS“请填写账号密码” MYSQL_PORT“请填写端口号” MYSQL_HOST“请填写节点主机IP” 这几个变量的修改 用户 rpl_user是用于MGR复制用的也可以填写其他的用户名但是用户的密码认证方式必须是之前老式的 mysql_native_password 因为镜像里面的mysql客户端暂不支持MySQL8默认的密码认证方式。
keepalived.conf 文件内容大致如下
vrrp_script chk_mysql {script /usr/local/bin/mysql_master_check.shinterval 2weight 2
}vrrp_instance VI_1 {state MASTERinterface enp6s0virtual_router_id 51priority 101advert_int 1 authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.110}track_script {chk_mysql}
}
主要是如下几个变量要注意
interface 当前节点服务器的网卡名称priority 优先级每一个节点上不一样virtual_ipaddress 虚拟ip
3台节点服务器上创建容器如下
docker run -d --name mgr8keepalived \--cap-addNET_ADMIN \--cap-addNET_BROADCAST \--cap-addNET_RAW \--nethost \-e KEEPALIVED_INTERFACEenp6s0 \-v /apps/keepalived/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \-v /apps/keepalived/mysql_master_check.sh:/usr/local/bin/mysql_master_check.sh \mgr_keepalived:2.0.20 --loglevel debug --copy-service变量 KEEPALIVED_INTERFACE 是指当前节点服务器的网卡名称如果不想开启debug模式去掉–loglevel debug
查看docker日志一般会有如下信息
...
Wed Jan 31 09:32:53 2024: Reset ARP config counter 0
Wed Jan 31 09:32:53 2024: Original arp_ignore 0
Wed Jan 31 09:32:53 2024: Original arp_filter 0
Wed Jan 31 09:32:53 2024: Original promote_secondaries 1
Wed Jan 31 09:32:53 2024: Reset promote_secondaries counter 0
Wed Jan 31 09:32:53 2024: Tracking VRRP instances 0
Wed Jan 31 09:32:53 2024: (VI_1) Entering BACKUP STATE (init)
Wed Jan 31 09:32:53 2024: VRRP sockpool: [ifindex(2), family(IPv4), proto(112), unicast(0), fd(11,12)]
Wed Jan 31 09:32:53 2024: VRRP_Script(chk_mysql) succeeded
Wed Jan 31 09:32:53 2024: (VI_1) Changing effective priority from 101 to 103
Wed Jan 31 09:32:57 2024: (VI_1) Receive advertisement timeout
Wed Jan 31 09:32:57 2024: (VI_1) Entering MASTER STATE
Wed Jan 31 09:32:57 2024: (VI_1) setting VIPs.
Wed Jan 31 09:32:57 2024: Sending gratuitous ARP on enp6s0 for 192.168.1.110
Wed Jan 31 09:32:57 2024: (VI_1) Sending/queueing gratuitous ARPs on enp6s0 for 192.168.1.110
Wed Jan 31 09:32:57 2024: Sending gratuitous ARP on enp6s0 for 192.168.1.110
Wed Jan 31 09:32:57 2024: Sending gratuitous ARP on enp6s0 for 192.168.1.110
...可以使用虚拟IP 192.168.1.110 连上看下是否可以操作数据库。
可以关闭一个MySQL实例看下keepalived的效果是否还正常使用虚拟IP此时是否浮动到新的主节点服务器上了。