汕头论坛网站建设,建设手机网站的公司,seo精灵,腾讯云服务器租用费用pxc学习流程
mysql pxc高可用 单主机 多主机部署#xff08;一#xff09; mysql pxc 高可用多主机离线部署#xff08;二#xff09; mysql pxc高可用离线部署#xff08;三#xff09;
mysql pxc高可用 跨主机部署pxc
本文使用docker进行安装#xff0c;主机间通过…pxc学习流程
mysql pxc高可用 单主机 多主机部署一 mysql pxc 高可用多主机离线部署二 mysql pxc高可用离线部署三
mysql pxc高可用 跨主机部署pxc
本文使用docker进行安装主机间通过docker swarm网络进行通讯。不了解Docker的请自行先网上看以下教程入门一下。这里没有深入的Docker知识只要跟着命令做就可以了。
三台主机都安装好了docker
虚拟ip主机IPnode1192.168.56.100192.168.56.120node2192.168.56.101node3192.168.56.102
node1 开放防火墙
1TCP端口2377 该端口用于Docker集群或集群中各节点之间的通信。
它只需要在管理器节点上打开。
2TCP和UDP端口7946 该端口用于节点之间的通信(容器网络发现)。
3UDP端口4789 此端口用于覆盖网络流量(集装箱接入网络)。
在node1 开放防火墙
firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.56.101 accept
firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.56.102 accept
firewall-cmd --reload
firewall-cmd --list-all在node2 开放防火墙
firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.56.100 accept
firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.56.102 acceptfirewall-cmd --reload
firewall-cmd --list-all在node3 开放防火墙
firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.56.101 accept
firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.56.100 acceptfirewall-cmd --reload
firewall-cmd --list-all1. 在3台主机上配置swarm
创建 /home/pxc
mkdir -p /home/pxc cd /home/pxcpxcPackage.zip下载地址 链接https://pan.baidu.com/s/1pbzlkx5U3BhnoWiuxqJGOg?pwdr1dx 3台机器分别将pxcPackage.zip拷贝到 /home/pxc 在node1上执行
docker swarm init --advertise-addr 192.168.56.100
docker swarm join-token manager返回类似以下内容
docker swarm join --token SWMTKN-1-614xi9dvksycykobgifxb4pgopc1wwgczwqct5wqkq8zao6tmx-0ds4jj3ozclrr2wukcaoakxso 192.168.56.100:2377在node2、node3上执行上面的返回结果
docker swarm join --token SWMTKN-1-2c2xopn2rld8oltcof24sue370681ijhbo3bwcqarjlhq9lkea-2g53o5qn2anre4j9puv4hecrn 192.168.0.101:23772. 创建swarm网络
在node1上执行以下命令
docker network create -d overlay --attachable pxc_swarm3. 3台主机导入PXC镜像
cd /home/pxc/images bash images-load.sh4. 创建文件
在3台服务器上分别执行以下命令
chmod 777 /home/pxc/data5. 安装第一个节点
node1执行
docker run -d -v /home/pxc/data:/var/lib/mysql -v /home/pxc/conf/my.cnf:/etc/mysql/my.cnf -v /etc/localtime:/etc/localtime:ro --name node1 -e CLUSTER_NAMEscsdm_pxc -e MYSQL_ROOT_PASSWORDhancloud1234! -e MYSQL_DATABASEscsdm -e MYSQL_USERscsdm -e MYSQL_PASSWORDscsdm123 --netpxc_swarm --privileged --restartalways percona/percona-xtradb-cluster:5.7.27注意自行修改密码不要使用过于简单的密码。参数说明 CLUTER_NAME: 集群名称 MYSQL_ROOT_PASSWORD: root密码 MYSQL_DATABASE: 默认初始化数据库名 MYSQL_USER: 默认初始化账号 MYSQL_PASSWORD: 默认初始化密码 docker logs -f node1
# 出现下面的内容代表启动成功
2023-12-05T09:03:29.10453508:00 1 [Note] WSREP: Setting wsrep_ready to true
2023-12-05T09:03:29.10453908:00 1 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
2023-12-05T09:03:29.18559908:00 0 [Note] InnoDB: Buffer pool(s) load completed at 231205 9:03:29
6. 加入其他节点
node2(192.168.56.101):
docker run -d -v /home/pxc/data:/var/lib/mysql -v /home/pxc/conf/my.cnf:/etc/mysql/my.cnf -v /etc/localtime:/etc/localtime:ro --name node2 -e CLUSTER_NAMEscsdm_pxc -e CLUSTER_JOINnode1 -e MYSQL_ROOT_PASSWORDhancloud1234! -e MYSQL_DATABASEscsdm -e MYSQL_USERscsdm -e MYSQL_PASSWORDscsdm123 --netpxc_swarm --privileged --restartalways percona/percona-xtradb-cluster:5.7.27node3(192.168.56.102):
docker run -d -v /home/pxc/data:/var/lib/mysql -v /home/pxc/conf/my.cnf:/etc/mysql/my.cnf -v /etc/localtime:/etc/localtime:ro --name node3 -e CLUSTER_NAMEscsdm_pxc -e CLUSTER_JOINnode1 -e MYSQL_ROOT_PASSWORDhancloud1234! -e MYSQL_DATABASEscsdm -e MYSQL_USERscsdm -e MYSQL_PASSWORDscsdm123 --netpxc_swarm --privileged --restartalways percona/percona-xtradb-cluster:5.7.277. 主机启动haproxy服务
在node1服务器上运行以下命令
# pxc节点挂掉重启后先执行删除haproxy再执行create重启后之前的代理找不到服务
# docker service rm haproxy
docker service create --replicas 3 --hostname haproxy -p 3306:3306 -p 8888:8888 --mount typebind,source/home/pxc/haproxy/haproxy.cfg,destination/usr/local/etc/haproxy/haproxy.cfg --mount typebind,source/etc/localtime,destination/etc/localtime:ro --name haproxy --networkpxc_swarm haproxy:alpine
8.安装keepalive 3台都安装
安装依赖
cd /home/pxc/installKeepalived chmod x installKeepalived.sh ./installKeepalived.sh修改 keepalive配置
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbak cat /etc/keepalived/keepalived.conf EOF
global_defs {router_id LVS_2script_user root # 脚本执行用户enable_script_security # 开启脚本安全权限
}vrrp_script checkhaproxy
{script /home/pxc/installKeepalived/check-haproxy.sh # 这个地址写的事容器内脚本路径interval 2weight -30
}vrrp_instance VI_1 {state BACKUPinterface enp0s3virtual_router_id 51priority 100advert_int 1nopreemptvirtual_ipaddress {# 需要修改成对应的虚拟ip192.168.56.120}authentication {auth_type PASSauth_pass password}track_script {checkhaproxy}
}
EOF启动
service keepalived start设置开机自启
chkconfig keepalived on
systemctl list-unit-files | grep keepalived9. 连接数据库
对外
使用 虚拟ip 192.168.56.120 3306
访问 http://192.168.56.120:8888/dbs 进行监控
对内运维:
可以通过连接192.168.56.100 3306 192.168.56.101 3306 192.168.56.102 3306进行数据库操作了
访问 http://192.168.56.100:8888/dbs http://192.168.56.101:8888/dbs http://192.168.56.102:8888/dbs 分别进行监控
账号 admin
密码 admin 10.数据迁移
导出数据
mysqldump -u root -p mcp_manager --skip_add_locks --skip-lock-tables mcp_manager_20220118.sqlFAQ:
常用命令
Docker-Swarm集群管理
1、查看swarm集群节点情况
在manager节点查看
docker node ls2、查看网络情况
docker network ls3、退出swarm集群
在需要退出的节点执行
docker swarm leave -f在manager节点查看
docker node ls4、重新加入swarm集群
在manager节点查看加入命令
docker swarm join-token worker查看节点情况
docker node ls5、删除无用的节点
docker node rm 节点 【强制移除运行中的节点】
docker node rm xlpm9aemu7psw5j7mi7udpbqq查看节点情况
docker node ls6、查看keepalived日志
tail -f /var/log/messages常见错误
1、node1 pxc 出现错误日志 修改方法
修改配置文件edit the grastate.dat file manually and set safe_to_bootstrap to 1 . 修改后 再次重启node1 2、浏览监控页面查看节点情况
访问 http://192.168.56.120:8888/dbs 进行监控
账号密码都是admin
正常情况 异常情况 恢复流程
检查服务器是否启动–检查docker是否启动–检查docker服务是否启动–检查服务日志是否正常–查看监控界面是否恢复
1、检查服务器是否启动
开启服务器
2、检查docker是否启动 启动docker
systemctl restart docker
systemctl status docker3、检查docker服务是否启动
docker psdocker ps -a启动服务
docker start 179
docker start a79访问对应node3机器的监控界面
http://192.168.56.102:8888/dbs 其他节点的监控界面 重启对应的节点的haproxy
docker restart haproxy01
docker restart haproxy02集群恢复正常
3、 with pxc_strict_mode ENFORCING Percona-XtraDB-Cluster prohibits use of LOCK TABLE/FLUSH TABLE WITH READ LOCK/FOR EXPORT with pxc_strict_mode ENFORCING 导出sql的时候执行 mysqldump -u root -p database --skip_add_locks --skip-lock-tables mcp_manager_20220118.sql追加 --skip_add_locks --skip-lock-tables
4、unblock with ‘mysqladmin flush-hosts’
在haproxy日志中发现 Server mysql/s1 is DOWN, reason: Layer7 wrong status, code: 1129, info: “Host ‘10.0.0.28’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’”, check duration: 0ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue. 去pxc 节点都去执行
docker exec -it -u root node1 bash -c mysqladmin flush-hosts -uroot -phancloud1234!5、pxc_strict_mode ENFORCING or MASTER ERROR 1105 (HY000): Percona-XtraDB-Cluster prohibits use of DML command on a table (mcp_manager_3_7_6.scs_field_dict) without an explicit primary key with pxc_strict_mode ENFORCING or MASTER
执行
show global variables like %pxc_strict_mode%;
SET GLOBAL pxc_strict_modePERMISSIVE;
show global variables like %pxc_strict_mode%;6、Got an error reading communication packets 2022-01-18T08:07:02.521305Z 21053 [Note] Aborted connection 21053 to db: ‘mcp_manager_3_7_6’ user: ‘root’ host: ‘haproxy02.pxc_swarm’ (Got an error reading communication packets)
vi /home/pxc/package/my.cnf
# 修改
max_allowed_packet 1024M
innodb_buffer_pool_size2048M7、Variable ‘time_zone’ can’t be set to the value of ‘NULL’ 这个问题的原因是因为数据sql文件内部有注释去掉就可以了(也可以不用管)
/*!40000 ALTER TABLE t_error_identification ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONEOLD_TIME_ZONE */;
/*!40101 SET SQL_MODEOLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKSOLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKSOLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENTOLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTSOLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTIONOLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTESOLD_SQL_NOTES */;page_cleaner: 1000ms intended loop took 4087ms. The settings might not be optimal. (flushed897, during the time.)