mysql pxc高可用离线部署(三)

pxc学习流程

mysql pxc高可用 单主机 多主机部署(一)
mysql pxc 高可用多主机离线部署(二)
mysql pxc高可用离线部署(三)

mysql pxc高可用

在这里插入图片描述

跨主机部署pxc

本文使用docker进行安装,主机间通过docker swarm网络进行通讯。不了解Docker的请自行先网上看以下教程入门一下。这里没有深入的Docker知识,只要跟着命令做就可以了。

三台主机都安装好了docker:

虚拟ip主机IP
node1192.168.56.100
192.168.56.120node2192.168.56.101
node3192.168.56.102

node1 开放防火墙

1)TCP端口2377
该端口用于Docker集群或集群中各节点之间的通信。

它只需要在管理器节点上打开。

2)TCP和UDP端口7946
该端口用于节点之间的通信(容器网络发现)。

3)UDP端口4789
此端口用于覆盖网络流量(集装箱接入网络)。

在node1 开放防火墙:

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.102" accept"
firewall-cmd --reload
firewall-cmd --list-all

在node2 开放防火墙:

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.102" accept"firewall-cmd --reload
firewall-cmd --list-all

在node3 开放防火墙:

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"firewall-cmd --reload
firewall-cmd --list-all

1. 在3台主机上配置swarm

  • 创建 /home/pxc
mkdir -p /home/pxc && cd /home/pxc
  • pxcPackage.zip下载地址

  • 链接:https://pan.baidu.com/s/1pbzlkx5U3BhnoWiuxqJGOg?pwd=r1dx

  • 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:2377

2. 创建swarm网络

在node1上执行以下命令:

docker network create -d overlay --attachable pxc_swarm

3. 3台主机导入PXC镜像

cd /home/pxc/images && bash images-load.sh

4. 创建文件

在3台服务器上分别执行以下命令:

chmod +777 /home/pxc/data

5. 安装第一个节点

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_NAME=scsdm_pxc -e MYSQL_ROOT_PASSWORD=hancloud1234! -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always 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.104535+08:00 1 [Note] WSREP: Setting wsrep_ready to true
2023-12-05T09:03:29.104539+08:00 1 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
2023-12-05T09:03:29.185599+08: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_NAME=scsdm_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=hancloud1234! -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always percona/percona-xtradb-cluster:5.7.27

node3(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_NAME=scsdm_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=hancloud1234! -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always percona/percona-xtradb-cluster:5.7.27

7. 主机启动haproxy服务

在node1服务器上运行以下命令:

# pxc节点挂掉重启后,先执行删除haproxy,再执行create(重启后之前的代理找不到服务)
# docker service rm haproxy
docker service create --replicas 3 --hostname haproxy -p 3306:3306 -p 8888:8888 --mount type=bind,source=/home/pxc/haproxy/haproxy.cfg,destination=/usr/local/etc/haproxy/haproxy.cfg --mount type=bind,source=/etc/localtime,destination=/etc/localtime:ro --name haproxy --network=pxc_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 keepalived

9. 连接数据库

对外:

使用 虚拟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.sql

FAQ:

常用命令

Docker-Swarm集群管理

1、查看swarm集群节点情况

在manager节点查看

docker node ls

在这里插入图片描述

2、查看网络情况
docker network ls

在这里插入图片描述

3、退出swarm集群

在需要退出的节点执行

docker swarm leave -f

在这里插入图片描述

在manager节点查看

docker node ls

在这里插入图片描述

4、重新加入swarm集群

在manager节点查看加入命令

docker swarm join-token worker

在这里插入图片描述

查看节点情况

docker node ls

在这里插入图片描述

5、删除无用的节点
docker node rm 节点   【强制移除运行中的节点】
docker node rm xlpm9aemu7psw5j7mi7udpbqq

在这里插入图片描述

查看节点情况

docker node ls

在这里插入图片描述

6、查看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 docker

3、检查docker服务是否启动

docker ps

在这里插入图片描述

docker 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_mode=PERMISSIVE;
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_size=2048M
7、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_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

在这里插入图片描述

page_cleaner: 1000ms intended loop took 4087ms. The settings might not be optimal. (flushed=897, during the time.)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4-Tornado高并发原理

核心原理就是协程epoll事件循环&#xff0c;再使用协程之后&#xff0c;开销是特别的小&#xff0c;那具体如何提供高并发的呢&#xff1f; 异步非阻塞IO 这意味我们整套开发的模式不在与原来一样&#xff0c;正因为不再一样&#xff0c;所以有时我们在理解代码时就有可能会比…

网络安全威胁——中间人攻击

中间人攻击 1. 定义2. 中间人攻击如何工作3. 常见中间人攻击类型4. 如何防止中间人攻击 1. 定义 中间人攻击&#xff08;Man-in-the-Middle Attack&#xff0c;简称MITM&#xff09;&#xff0c;是一种会话劫持攻击。攻击者作为中间人&#xff0c;劫持通信双方会话并操纵通信过…

6、Broker消息处理流程(六)

前面分析完Broker启动会启动RemotingServer服务同时会注册Processor处理器&#xff0c;接着分析Producer进行消息的发送&#xff0c;当Producer发送完消息后就得到Broker去接收Producer发送的消息了。 Producer发送给Broker消息时候&#xff0c;发送的请求code为SEND_MESSAGE(这…

模板函数模板类入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 因为做牛客的题目…

(2)(2.4) TerraRanger Tower/Tower EVO(360度)

文章目录 前言 1 安装传感器并连接 2 通过地面站进行配置 3 参数说明 前言 TeraRanger Tower 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用距离约为 4.5m。 TeraRanger Tower EVO 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用…

Vue实现条件渲染

&#x1f4d1;前言 本文主要是【Vue】——Vue实现条件渲染的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…

2023-12-06 LeetCode每日一题(最小化旅行的价格总和)

2023-12-06每日一题 一、题目编号 2646. 最小化旅行的价格总和二、题目链接 点击跳转到题目位置 三、题目描述 现有一棵无向、无根的树&#xff0c;树中有 n 个节点&#xff0c;按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0…

dtaidistance 笔记:相似度压缩

1 相似度 相似度&#xff1a;1表示相等&#xff0c;0表示疏远 给定一组时间序列&#xff08;每一行是一个&#xff09;&#xff0c;计算基于DTW的逐对相似度 from dtaidistance import dtw, similarity s np.array([[0., 0, 1, 2, 1, 0, 1, 0, 0],[0., 1, 2, 0, 0, 0, 0, 0,…

word 目录生成

参考&#xff1a;百度安全验证 什么word生成的目录没有标题4&#xff1f;  我来答 分享 举报 1个回答 #热议# 海关有哪些禁运商品&#xff1f;查到后怎么办&#xff1f; 缘来是我LXZ 高粉答主 2023-09-28 缘来缘去终会散&#xff0c;花开花败总归尘。 关注 在word…

PyQt6 QTabWidget选项卡控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计37条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…

Unity - yield return相关用法

yield return null; // 下一帧再执行后续代码yield return 0; //下一帧再执行后续代码yield return 6;//(任意数字) 下一帧再执行后续代码yield break; //直接结束该协程的后续操作yield return asyncOperation;//等异步操作结束后再执行后续代码yield return StartCoroution(/…

测试岗外包干了3个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;21年通过校招进入成都某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试…

【Intel/Altera】 全系列FPGA最新汇总说明,持续更新中

前言 2023年11月14日英特尔 FPGA中国技术日&#xff0c;Intel刚发布了新的FPGA系列&#xff0c;官网信息太多&#xff0c;我这里结合以前的信息&#xff0c;简单汇总更新一下&#xff0c;方便大家快速了解Intel/Altera FPGA家族。 目录 前言 Altera和Intel 型号汇总 1. Agi…

Redis 命令全解析之 String类型

文章目录 ⛄String 介绍⛄命令⛄对应 RedisTemplate API⛄应用场景 ⛄String 介绍 String 类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类型。 其value是字符串&#xff0c;不过根据字符串的格式不同&#xff0c;又可以分为3类&#xff1a; ● string&…

使用 PyTorch 进行 K 折交叉验证

一、说明 中号机器学习模型在训练后必须使用测试集进行评估。我们这样做是为了确保模型不会过度拟合&#xff0c;并确保它们适用于现实生活中的数据集&#xff0c;与训练集相比&#xff0c;现实数据集的分布可能略有偏差。 但为了使您的模型真正稳健&#xff0c;仅仅通过训练/测…

mysql5.6密码忘记重置

在 MySQL 5.6 中&#xff0c;使用 ALTER USER 语句来修改用户密码是不支持的。可以使用以下步骤来重置 root 用户密码&#xff1a; 停止 MySQL 服务。 在终端中执行以下命令&#xff1a; systemctl stop mysql启动 MySQL 服务&#xff0c;并跳过权限验证。 在终端中执行以下命…

oracle 19c创建db_link名称带.com域名问题处理

文章目录 一、修改PDB的global_name二、重启数据库实例三、修改domain后重试 一、修改PDB的global_name SYSorcl1>sho pdbsCON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ----------2 PDB$SEED …

从遍历到A星寻路算法

在游戏当中&#xff0c;经常需要找一个点到其它点的路径。在之前的一篇博文(地图编辑器开发&#xff08;三&#xff09;)中也有使用到到A*寻路算法。我们期望能找到最短的路径&#xff0c;同时也需要考虑到查找路径的时间消耗。游戏中的地图可以图的数据结构来表示&#xff0c;…

ThreadPoolExecutor应用源码剖析(四)

3.3.8 ThreadPoolExecutor的关闭方法 首先查看shutdownNow方法&#xff0c;可以从RUNNING状态转变为STOP // shutDownNow方法&#xff0c;shutdownNow不会处理阻塞队列的任务&#xff0c;将任务全部给你返回了。 public List<Runnable> shutdownNow() { // 声明返回结果…

LeetCode双指针:第一个错误的版本

LeetCode双指针&#xff1a;第一个错误的版本 题目描述 你是产品经理&#xff0c;目前正在带领一个团队开发新的产品。不幸的是&#xff0c;你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的&#xff0c;所以错误的版本之后的所有版本都是错的。 …