Docker Swarm安装PXC高可用集群

news2024/10/6 20:37:55

docker安装PXC集群

    • 创建数据卷
    • 创建集群专用网络
    • 创建证书

主流mysql高可用的方式有以下几种

准备三台服务器

hostIP说明
node1192.168.31.130PXC集群1
node2192.168.31.131PXC集群2
node3192.168.31.132PXC集群3

创建docker swarm集群

主节点node1执行

#docker swarm init --advertise-addr "节点IP"
docker swarm init --advertise-addr "192.168.31.130"

这里由于我已经初始化过,所以使用

#查看加入主节点的token
docker swarm join-token worker

在这里插入图片描述
复制如上命令到node2,node3节点依次执行即可

查询当前swarm集群所有节点数量

docker node ls

在这里插入图片描述
不出意外应该是如图中效果,如果出现加入失败,需要检查2377端口是否放行

创建数据卷

新增pxc集群数据卷,因为最低三节点所以新建三个。

#pxc-node1
docker volume create pxc_cluster_node1

#pxc-node2
docker volume create pxc_cluster_node2

#pxc-node3
docker volume create pxc_cluster_node3

创建集群专用网络

创建pxc容器网络段(Docker Swarm多机)

#--driver overlay  --attachable 表示创建swarm集群网络且不是service的容器也能加入此网络
docker network create --driver overlay  --attachable --subnet=192.169.0.0/24 pxc_cluster_network

创建证书

创建 MySQL 证书(重要:pxc8.0默认开启了同步加密方式需要每个node节点配置一模一样的证书才能通过认证。参考加密PXC流量
创建一个 ~/pxc-docker-test/config 目录。

mkdir -p ~/pxc-docker-test/config

进入config目录新增一个custom.cnf文件并将以下内容填入

[mysqld]
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-key = /cert/server-key.pem

[client]
ssl-ca = /cert/ca.pem
ssl-cert = /cert/client-cert.pem
ssl-key = /cert/client-key.pem

[sst]
encrypt = 4
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-key = /cert/server-key.pem

创建一个 ~/pxc-docker-test/cert目录用来生成自签名SSL证书。

mkdir -m 777 -p ~/pxc-docker-test/cert

使用官方镜像生成证书到~/pxc-docker-test/cert目录中

docker run --name pxc-cert --rm -v ~/pxc-docker-test/cert:/cert percona/percona-xtradb-cluster:8.0 mysql_ssl_rsa_setup -d /cert

此时/root/pxc-docker-test/cert目录已经生成了证书。将/root/pxc-docker-test目录复制到所有node节点中。

开始创建pxc8.0集群

创建pxc-node1(又称为引导节点) 并加入pxc容器网络

docker run -d \
  --net=pxc_cluster_network \
  -e MYSQL_ROOT_PASSWORD=test1234# \
  -e CLUSTER_NAME=pxc-cluster01 \
  --name=pxc_node_1 \
  -v pxc_cluster_node1:/var/lib/mysql \
  -v ~/pxc-docker-test/cert:/cert \
  -v ~/pxc-docker-test/config:/etc/percona-xtradb-cluster.conf.d \
  # 端口映射出来
  -p 3306:3306 -p 4567:4567 -p 4444:4444 -p 4568:4568 \
  --privileged \
  percona/percona-xtradb-cluster:8.0

环境变量解释
CLUSTER_NAME:pxc集群名称,每个节点的集群名称要完全一致!!!

注意事项:需要确保node1节点已经完全创建成功,才能连接其他节点,因为其余节点需要加入node1进行同步,对于node2启动时就要开始同步node1的数据了。如果node1没起来就会因为报找不到node1也起不来。(需要确保所有Node节点都在同一个网络)

创建pxc-node2,并加入node1

docker run -d \
  --net=pxc_cluster_network \
  -e MYSQL_ROOT_PASSWORD=test1234# \
  #pxc集群名称,每个节点的集群名称要完全一致 \
  -e CLUSTER_NAME=pxc-cluster01 \
  # 表示加入上面那个第一个节点并开始同步node1节点的所有数据 \
  -e CLUSTER_JOIN=pxc_node_1 \
  --name=pxc_node_2 \
  #将pxc的mysql数据文件挂载到数据卷v1 \
  -v pxc_cluster_node2:/var/lib/mysql \
  #将创建好的mysql证书挂载到pxc中 \
  -v ~/pxc-docker-test/cert:/cert \
  #挂载mysql配置文件 \
  -v ~/pxc-docker-test/config:/etc/percona-xtradb-cluster.conf.d \
  # 端口映射出来 \
  -p 3307:3306 -p 5567:4567 -p 5444:4444 -p 5568:4568 \
  --privileged \
  percona/percona-xtradb-cluster:8.0

环境变量解释
CLUSTER_JOIN:表示加入上面那个第一个节点并开始同步node1节点的所有数据

创建pxc-node3,并加入node1

docker run -d \
  --net=pxc_cluster_network \
  -e MYSQL_ROOT_PASSWORD=test1234# \
  #pxc集群名称,每个节点的集群名称要完全一致
  -e CLUSTER_NAME=pxc-cluster01 \
  # 表示加入上面那个第一个节点并开始同步node1节点的所有数据
  -e CLUSTER_JOIN=pxc_node_1 \
  --name=pxc_node_3 \
  #将pxc的mysql数据文件挂载到数据卷v1
  -v pxc_cluster_node3:/var/lib/mysql \
  #将创建好的mysql证书挂载到pxc中
  -v ~/pxc-docker-test/cert:/cert \
  #挂载mysql配置文件
  -v ~/pxc-docker-test/config:/etc/percona-xtradb-cluster.conf.d \
  # 端口映射出来
  -p 3308:3306 -p 5577:4567 -p 5544:4444 -p 5668:4568 \
  --privileged \
  percona/percona-xtradb-cluster:8.0

验证创建完毕的三节点数据
在这里插入图片描述
在这里插入图片描述
随便在一个节点新增数据库后,都会实时同步
在这里插入图片描述
模拟一个节点直接死机

手动杀死node2节点
在这里插入图片描述
去node1节点查询集群数量
在这里插入图片描述
可以发现cluster_size变成了两个
从node3节点新增一个表(模拟一个节点宕机后,其他节点正常访问的情况)
在这里插入图片描述
可以看到正常同步,需要注意pxc集群的存活数量需要大于总节点数量的一半才可以正常工作。

恢复pxc-node2节点,看看丢失的数据会不会回来,这里我们回想一下由于我们的node2节点的数据存放在数据卷:pxc_cluster_node2 中 所以重新创建node2节点并把以前的数据卷挂载进来。

docker run -d \
  --net=pxc_cluster_network \
  -e MYSQL_ROOT_PASSWORD=test1234# \
  #pxc集群名称,每个节点的集群名称要完全一致
  -e CLUSTER_NAME=pxc-cluster01 \
  # 加入最新的节点名称
  -e CLUSTER_JOIN=pxc_node_1 \
  --name=pxc_node_222222222 \
  #将以前pxc的mysql数据文件挂载到数据卷v1
  -v pxc_cluster_node2:/var/lib/mysql \
  #将创建好的mysql证书挂载到pxc中
  -v ~/pxc-docker-test/cert:/cert \
  #挂载mysql配置文件
  -v ~/pxc-docker-test/config:/etc/percona-xtradb-cluster.conf.d \
  # 端口映射出来
  -p 3307:3306 -p 5567:4567 -p 5444:4444 -p 5568:4568 \
  --privileged \
  percona/percona-xtradb-cluster:8.0

这里注意恢复节点的CLUSTER_JOIN属性一定是最后挂掉的节点名称或当前在线上的节点名称任一,如果是原来的node1挂了,那这里就指定pxc_node_1或pxc_node_2加入,因为恢复的节点大概率与当前存活节点数据不一致,也就是数据算是旧版本的了,所以一启动就立马同步最新节点的全量数据。

在这里插入图片描述
容器启动不久后,可以看到恢复的node2节点也已经同步了宕机后所产生的新数据。
再次查询节点数量
在这里插入图片描述
可以看到已经恢复正常。

创建haproxy用于检测mysql心跳的用户

 CREATE USER 'haproxy'@'%' IDENTIFIED BY '';

安装haproxy容器

docker pull haproxy:1.9.6

新增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
    option redispatch        #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    option abortonclose      #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
    option dontlognull       #日志中不记录负载均衡的心跳检测记录
    #连接超时(毫秒)
    timeout connect 5000
    #客户端超时(毫秒)
    timeout client  50000
    #服务器超时(毫秒)
    timeout server  50000
    retries 2                #两次连接失败就认为是服务器不可用,也可以通过后面设置

#haproxy监控界面   
listen  admin_stats
    #监控界面的访问的IP和端口
    bind  0.0.0.0:7777
    #访问协议
    mode        http
    #URI相对地址
    stats uri   /dbs
    #统计报告格式
    stats realm     Global\ statistics
    #haproxy监控界面  登陆帐户信息
    stats auth  admin:admin123
	
#数据库负载均衡
listen  proxy-mysql
    #要提供给业务系统访问的IP和端口
    bind  0.0.0.0:33060  
    #网络协议
    mode  tcp
    #负载均衡算法(轮询算法)
    #轮询算法:roundrobin
    #权重算法:static-rr
    #最少连接算法:leastconn
    #请求源IP算法:source 
    balance  roundrobin
    #日志格式
    option  tcplog
    #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
    option  mysql-check user haproxy
    server  MySQL_1 192.168.31.130:3306 check weight 1 maxconn 2000  
    server  MySQL_2 192.168.31.130:3307 check weight 1 maxconn 2000  
    server  MySQL_3 192.168.31.130:3308 check weight 1 maxconn 2000 
    #使用keepalive检测死链
    option  tcpka  

运行haproxy容器

docker run -it -d -p 4001:7777 -p 4002:33060  \
 -v /root/haproxy:/usr/local/etc/haproxy \
 --name haproxy_test --privileged haproxy:1.9.6

访问haproxy页面即可看到监控情况
http://192.168.31.131:4001/dbs
在这里插入图片描述

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

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

相关文章

Camera API2 使用说明

CameraAPI1 使用说明 目录 一、 概览 1.1 Pipeline 1.2 Supported Hardware Level 1.3 Capture 1.4 CameraManager 1.5 CameraCharacteristics 1.6 CameraDevice 1.7 Surface 1.8 CameraCaptureSession 1.9 CaptureRequest 1.10 CaptureResult 1.11 一些只有 Came…

基于 Arduino 库实现 ESP32 TCP Server 应用例程

实现步骤&#xff1a; ESP32 开启 WiFi Station 模式连接路由器连上路由器后将获取到分配的 IP 地址基于分配的 IP 地址创建 TCP Server 测试代码如下&#xff1a; #include <WiFi.h> #include <WiFiClient.h>const char* ssid "cc2.4"; const char*…

《水经注地图服务》发布的影像数据在ArcMap中调用

当有用户需要发布一个省以上的海量卫星影像数据时&#xff0c;我们就会强烈建议他使用《水经注地图服务》&#xff08;WeServer&#xff09;进行发布。 因为&#xff0c;《水经注地图服务》在经过我们工程师的不断升级优化之后&#xff0c;现在发布全球100TB级卫星影像数据所需…

【用户调研】需求挖掘

文章目录 用户需求的定义为什么要挖掘用户需求需求挖掘方法用户访谈问卷调查可用性测试运营数据分析 用户访谈介绍实地研究用户观察用户访谈焦点小组 调查问卷介绍总结 用户需求的定义 为什么要挖掘用户需求 需求挖掘方法 用户访谈 问卷调查 可用性测试 运营数据分析 用户访谈介…

妙记多 Mojidoc PC端(Mac+Windows 端)内测体验官招募!

你们呼唤了无数呼唤的妙记多 Mojidoc 客户端来了&#xff01; 优先内测上线的是 桌面端&#xff01;包含 Mac端 和 Windows 端 为了更好的用户体验&#xff0c;小 Mojidoc 在上线前邀请大家一起加入内测体验&#xff01; 为了让你更好的成为内测体验官&#xff0c;有一点心里…

使用adb工具通过wifi连接安卓设备

一、下载adb包&#xff0c;并解压。网上很多地方可以下载资源或者从我的网盘下载 链接&#xff1a;https://pan.baidu.com/s/1hLf14wCCUMs2xdU5WkLY8g 提取码&#xff1a;8cbh 二、安卓设备打开开发者选项&#xff0c;打开USB调试开关 三、确保手机和wifi在同一个wifi网路下。…

SSM学习笔记-------SpringMVC(二)

SSM学习笔记-------SpringMVC&#xff08;二&#xff09; SpringMVC_day021、SSM整合1.1 流程分析1.2 整合配置步骤1&#xff1a;创建Maven的web项目步骤2:添加依赖步骤3:创建项目包结构步骤4:创建SpringConfig配置类步骤5:创建JdbcConfig配置类步骤6:创建MybatisConfig配置类步…

QT中LIBS的配置

QT中引用外部第3方库时&#xff0c;需要配置LIBS参数。 QT选择kit时有MSVC、MinGW两种方式&#xff0c;一般MSVC的静态库文件以.lib结尾&#xff0c;MinGW以.a结尾。什么是C的静态库、动态库我这里就不介绍了&#xff0c;其实这种库在几乎所有的语言中都有&#xff1a;比如jav…

用android studio 测试发行包

在google play 发行app&#xff0c;需要用bundle&#xff0c;而不是apk。 bundle 比apk 要小很多&#xff0c;比如我的app-release.aab 29,736 KB&#xff0c; 而app-release.apk 是62,305KB。这就是少了一半多。但是apk 直接复制就可以安装&#xff0c;bundle 需要上传google…

研究讯飞星火模型的时候,使用websocket的一个总结

接受数据 <?php header("Content-Type:text/html;charsetutf-8");//确保在连接客户端时不会超时set_time_limit(0);//设置IP和端口号$address "wss://tts-api.xfyun.cn/v2/tts?authorizationYXBpX2tleT0iNDE4ZjJjOTI2NTY0YTc1ZDNjMmE5NDliMTE0MzRkZTYiLCB…

回归预测 | MATLAB实现WOA-GCNN鲸鱼算法优化分组卷积神经网络的数据多输入单输出回归预测

回归预测 | MATLAB实现WOA-GCNN鲸鱼算法优化分组卷积神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-GCNN鲸鱼算法优化分组卷积神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 回归预测 | MATLAB实现WOA-GCNN鲸鱼…

三足鼎立的SIEM、SOAR和XDR

如今&#xff0c;变化的安全挑战、多态的IT架构、复杂的建设需求、严苛的合规审查……&#xff0c;甲方心力交瘁&#xff0c;乙方疲于奔命。传统安全产品交付模式&#xff0c;投入大、成本高、难维护、效果差&#xff0c;完全无法应对。 网络攻击的增长导致合规要求更加严格。…

经典目标检测算法模型总结汇总

这里主要是想要记录汇总一下平时有意无意查资料、学习等了解查阅的目标检测领域中各种模型的原理、优点缺点等内容&#xff0c;主要是方便温故知新&#xff0c;也希望能帮到需要的人。 目标检测任务涌现了很多经典的模型&#xff0c;下面是一个模型的总结记录。 (1)R-CNN&…

如何一次性修改文件扩展名

现代社会中&#xff0c;我们经常需要处理大量的文件&#xff0c;有时候需要批量修改文件的扩展名。在这种情况下&#xff0c;使用文件管理工具可以帮助我们快速完成这项任务。下面&#xff0c;我将介绍如何使用“固乔文件管家”这个文件管理工具来一次性修改文件扩展名。 首先&…

红外雨量计(光学雨量传感器)在智慧灌溉中的应用

红外雨量计&#xff08;光学雨量传感器&#xff09;在智慧灌溉中的应用 红外雨量计是一种利用红外线原理测量雨水量的传感器&#xff0c;可以用于智慧灌溉中实现精准测量和控制灌溉量&#xff0c;从而提高灌溉效率和节约水资源。 红外雨量计可以通过测量雨滴数量和大小&#x…

PaddleClas:训练技巧

训练技巧 1.优化器的选择 带momentum的SGD优化器有两个劣势&#xff0c;其一是收敛速度慢&#xff0c;其二是初始学习率的设置需要依靠大量的经验&#xff0c;然而如果初始学习率设置得当并且迭代轮数充足&#xff0c;该优化器也会在众多的优化器中脱颖而出&#xff0c;使得其…

基于springboot的教学助手后端管理系统设计与实现(源码+文档+开题+数据库+任务书)

教学助手系统是高校教学、教学管理的重要应用系统。随着教研教改的深入发展&#xff0c;信息技术的运用已经成为打造高效课堂必不可少的重要手段。教学助手软件集教材资源分享、课前导学、课堂互动、在线检测、课后作业等功能为一体&#xff0c;拓展教学时空&#xff0c;增强教…

python爬虫_requests获取bilibili锻刀村系列的字幕并用分词划分可视化词云图展示

文章目录 ⭐前言⭐获取字幕步骤&#x1f496; 查找heartbeat接口&#x1f496; 字幕api接口&#x1f496; 正则提取p标签的内容 ⭐分词⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享python的requests获取哔哩哔哩锻刀村的字幕并用分词划分可视化词云图展示。…

Linux MySQL数据迁移

背景&#xff1a;MySQL安装时如果数据文件存在系统盘&#xff0c;随着业务的增长&#xff0c;必定会占用越来越多的系统盘空间直至爆满。为了给系统盘腾出空间来维持服务器的正常运转&#xff0c;需要将MySQL数据文件转移到其他磁盘。 实现步骤&#xff1a;1.在其他磁盘上创建…

Redis集群环境搭建[CentOS7]

下载 cd /usr/local/src/ wget https://mirrors.huaweicloud.com/redis/redis-7.0.11.tar.gz编译安装 tar -xzvf /usr/local/src/redis-7.0.11.tar.gz -C /usr/local/src/ cd /usr/local/src/redis-7.0.11 make PREFIX/usr/local/redis-7.0.11 install制作集群配置模板 cat …