MySQL_PXC集群_综合应用

article/2025/9/14 17:07:02

MySQL_PXC集群_综合应用

  • 简述
  • 部署
  • PXC集群和主从区别
  • 综合应用
    • 部署PXC集群
    • 部署主从复制集群
      • Master
      • Slave
    • 部署MyCat
      • 节点一
      • 节点二
    • 部署HAProxy

简述

Percona XtraDB Cluster(简称PXC)是针对MySQL用户的高可用性和扩展性解决方案,基于Percona Server 。其 包括了Write Set REPlication补丁,使用Galera 2.0库,这是一个针对事务性应用程序的同步多主机复制插件。

Percona Server是MySQL的改进版本,使用 XtraDB 存储引擎,在功能和性能上较 MySQL 有着很显著的提升,如提 升了在高负载情况下的 InnoDB 的性能,为 DBA 提供了一些非常有用的性能诊断工具,另外有更多的参数和命令来 控制服务器行为。

Percona XtraDB Cluster提供了:
同步复制,事务可以在所有节点上提交。 多主机复制,你可以写到任何节点。 从(slave)服务器上的并行应用事件,真正的“并行复制”。 自动节点配置。 数据一致性,不再有未同步的从服务器。
官网:https://www.percona.com/software/mysql-database/percona-xtradb-cluster

部署

在这里插入图片描述

#创建数据卷(存储路径:/var/lib/docker/volumes) 
docker volume create v1 
docker volume create v2 
docker volume create v3#拉取镜像 
docker pull percona/percona-xtradb-cluster:5.7#重命名 
docker tag percona/percona-xtradb-cluster:5.7 pxc#创建网络 
docker network create --subnet=172.30.0.0/24 pxc-network#创建容器 
#第一节点 
docker create -p 13306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node1 --net=pxc-network --ip=172.30.0.2 pxc#第二节点(增加了CLUSTER_JOIN参数) 
docker create -p 13307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node2 -e CLUSTER_JOIN=pxc_node1 --net=pxc-network -ip=172.30.0.3 pxc#第三节点(增加了CLUSTER_JOIN参数) 
docker create -p 13308:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node3 -e CLUSTER_JOIN=pxc_node1 --net=pxc-network -ip=172.30.0.4 pxc#查看集群节点 
show status like 'wsrep_cluster%';备注:先启动第一个节点,等到mysql客户端可以连接到服务后再启动其它节点。

说明

1、尽可能的控制PXC集群的规模,节点越多,数据同步速度越慢
2、所有PXC节点的硬件配置要一致,如果不一致,配置低的节点将拖慢数据同步速度
3、PXC集群只支持InnoDB引擎,不支持其他的存储引擎

PXC集群和主从区别

1、PXC集群方案所有节点都是可读可写的,Replication从节点不能写入,因为主从同步是单向的,无法从slave节 点向master点同步。
2、PXC同步机制是同步进行的,这也是它能保证数据强一致性的根本原因,Replication同步机制是异步进行的, 它如果从节点停止同步,依然可以向主节点插入数据,正确返回,造成数据主从数据的不一致性。
3、PXC是用牺牲性能保证数据的一致性,Replication在性能上是高于PXC的。所以两者用途也不一致。PXC是用于 重要信息的存储,例如:订单、用户信息等。Replication用于一般信息的存储,能够容忍数据丢失,例如:购 物车,用户行为日志等。

综合应用

主从架构、Mycat中间件、HAProxy负载均衡、PXC集群架构,在实际的项目中,往往不单单是一种架 构,更多的使用的混合架构,下面我们将好客租房项目采用混合架构的方式进行完善数据库集群。

在这里插入图片描述
1、HAProxy作为负载均衡器
2、部署了2个Mycat节点作为数据库中间件
3、部署了2个PXC集群节点,作为2个Mycat分片,每个PXC集群中有2个节点,作为数据的同步存储
4、部署了1个主从复制集群
5、房源数据保存到PXC分片中,其余数据保存到主从架构中

部署PXC集群

在这里插入图片描述

#创建数据卷(存储路径:/var/lib/docker/volumes) 
docker volume create haoke-v1 
docker volume create haoke-v2 
docker volume create haoke-v3 
docker volume create haoke-v4#拉取镜像 
docker pull percona/percona-xtradb-cluster:5.7#创建网络 
docker network create --subnet=172.30.0.0/24 pxc-network#创建容器 
#集群1,第一节点 
docker create -p 13306:3306 -v haoke-v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node1 --net=pxc-network --ip=172.30.0.2 pxc#第二节点(增加了CLUSTER_JOIN参数) 
docker create -p 13307:3306 -v haoke-v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node2 -e CLUSTER_JOIN=pxc_node1 --net=pxc-network -ip=172.30.0.3 pxc#集群2 
#第一节点 
docker create -p 13308:3306 -v haoke-v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node3 --net=pxc-network --ip=172.30.0.4 pxc#第二节点(增加了CLUSTER_JOIN参数) 
docker create -p 13309:3306 -v haoke-v4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node4 -e CLUSTER_JOIN=pxc_node3 --net=pxc-network -ip=172.30.0.5 pxc#启动 
docker start pxc_node1 && docker logs -f pxc_node1 
docker start pxc_node2 && docker logs -f pxc_node2
docker start pxc_node3 && docker logs -f pxc_node3 
docker start pxc_node4 && docker logs -f pxc_node4#查看集群节点 show status like 'wsrep_cluster%';说明:
2个集群,4个节点,均启动成功。
分别在2个集群中创建数据库以及相关数据表tb_house_resources。

部署主从复制集群

Master

#创建目录 
mkdir /data/mysql/haoke/master01 -p 
cd /data/mysql/haoke/master01 
mkdir conf data 
chmod 777 * -R#创建配置文件 
cd /data/mysql/haoke/master01/conf 
vim my.cnf#输入如下内容 
[mysqld] 
log-bin=mysql-bin  #开启二进制日志 
server-id=1  #服务id,不可重复 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'#创建容器 
docker create --name percona-haoke-master01 -v /data/mysql/haoke/master01/data:/var/lib/mysql -v /data/mysql/haoke/master01/conf:/etc/my.cnf.d -p 23306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23#启动 
docker start percona-haoke-master01 && docker logs -f percona-haoke-master01#创建同步账户以及授权 
create user 'itcast'@'%' identified by 'itcast'; 
grant replication slave on *.* to 'itcast'@'%'; 
flush privileges;#查看master状态 
show master status;

Slave

#创建目录 
mkdir /data/mysql/haoke/slave01 -p 
cd /data/mysql/haoke/slave01 
mkdir conf data 
chmod 777 * -R#创建配置文件 
cd /data/mysql/haoke/slave01/conf 
vim my.cnf#输入如下内容 
[mysqld] 
server-id=2  #服务id,不可重复 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'#创建容器 
docker create --name percona-haoke-slave01 -v /data/mysql/haoke/slave01/data:/var/lib/mysql -v /data/mysql/haoke/slave01/conf:/etc/my.cnf.d -p 23307:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23#启动 
docker start percona-haoke-slave01 && docker logs -f percona-haoke-slave01#设置master相关信息 
CHANGE MASTER TO 
master_host='192.168.1.18', 
master_user='itcast', 
master_password='itcast', 
master_port=23306, 
master_log_file='mysql-bin.000002', 
master_log_pos=648;#启动同步 
start slave;#查看master状态 
show slave status;

在这里插入图片描述
创建数据库以及创建广告表tb_ad

部署MyCat

节点一

cd /data/ 
mkdir mycat 
cp /haoke/mycat . -R 
mv mycat/mycat-node1

配置server.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mycat:server SYSTEM "server.dtd"> 
<mycat:server xmlns:mycat="http://io.mycat/">    <system><property name="nonePasswordLogin">0</property><property name="useHandshakeV10">1</property><property name="useSqlStat">0</property><property name="useGlobleTableCheck">0</property>        <property name="sequnceHandlerType">2</property>        <property name="subqueryRelationshipCheck">false</property>        <property name="processorBufferPoolType">0</property>        <property name="handleDistributedTransactions">0</property>        <property name="useOffHeapForMerge">1</property>        <property name="memoryPageSize">64k</property>        <property name="spillsFileBufferSize">1k</property>        <property name="useStreamOutput">0</property>        <property name="systemReserveMemorySize">384m</property>        <property name="useZKSwitch">false</property>    </system>    <!--这里是设置的itcast用户和虚拟逻辑库-->    <user name="itcast" defaultAccount="true">        <property name="password">itcast123</property>        <property name="schemas">haoke</property>    </user> 
</mycat:server>

配置schema.xml:

<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/">    <!--配置数据表-->    <schema name="haoke" checkSQLschema="false" sqlMaxLimit="100">     <!-- tb_house_resources表位于dn1和dn2并分片存数据 -->       <table name="tb_house_resources" dataNode="dn1,dn2" rule="mod-long" /><!-- tb_ad表位于dn3 -->        <table name="tb_ad" dataNode="dn3"/>    </schema>    <!--配置分片关系-->    <dataNode name="dn1" dataHost="cluster1" database="haoke" />    <dataNode name="dn2" dataHost="cluster2" database="haoke" />    <dataNode name="dn3" dataHost="cluster3" database="haoke" />    <!--配置连接信息-->    <dataHost name="cluster1" maxCon="1000" minCon="10" balance="2"                 writeType="1" dbType="mysql" dbDriver="native" switchType="1"                  slaveThreshold="100">        <heartbeat>select user()</heartbeat>        <writeHost host="W1" url="192.168.1.18:13306" user="root"                      password="root">            <readHost host="W1R1" url="192.168.1.18:13307" user="root"                         password="root" />      </writeHost>    </dataHost>    <dataHost name="cluster2" maxCon="1000" minCon="10" balance="2"                 writeType="1" dbType="mysql" dbDriver="native" switchType="1"                  slaveThreshold="100">        <heartbeat>select user()</heartbeat>        <writeHost host="W2" url="192.168.1.18:13308" user="root"                      password="root"><readHost host="W2R1" url="192.168.1.18:13309" user="root"                         password="root" />         </writeHost>    </dataHost><!--  balance=3 为读写分离-->    <dataHost name="cluster3" maxCon="1000" minCon="10" balance="3"                 writeType="1" dbType="mysql" dbDriver="native" switchType="1"                  slaveThreshold="100">        <heartbeat>select user()</heartbeat>        <writeHost host="W3" url="192.168.1.18:23306" user="root"                      password="root">            <readHost host="W3R1" url="192.168.1.18:23307" user="root"                         password="root" />        </writeHost>    </dataHost> 
</mycat:schema>

配置rule.xml:

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">    <property name="count">2</property> 
</function>

设置端口以及启动:

vim wrapper.conf 
#设置jmx端口 
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=11985vim server.xml 
#设置服务端口以及管理端口 
<property name="serverPort">18067</property> 
<property name="managerPort">19067</property>./startup_nowrap.sh && tail -f ../logs/mycat.log

测试插入数据
tb_house_resources表插入两条数据,node1/node2和node3/node4分片接受数据

节点二

cp mycat-node1/ mycat-node2 -Rvim wrapper.conf 
#设置jmx端口 
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=11986
vim server.xml #设置服务端口以及管理端口 
<property name="serverPort">18068</property> 
<property name="managerPort">19068</property>./startup_nowrap.sh && tail -f ../logs/mycat.log

部署HAProxy

#修改文件 
vim /haoke/haproxy/haproxy.cfg#输入如下内容 globallog         127.0.0.1 local2    maxconn     4000    daemondefaultsmode                    http    log                        global    option                   httplog    option                   dontlognull    option http-server-close    option forwardfor       except 127.0.0.0/8option                  redispatch    retries                 3    timeout http-request    10s    timeout queue           1m    timeout connect         10s    timeout client          1m    timeout server          1m    timeout http-keep-alive 10s    timeout check           10s    maxconn                 3000listen   admin_statsbind    0.0.0.0:4001    mode  http    stats uri       /dbs    stats realm  Global\ statistics    stats auth    admin:admin123listen   proxy-mysqlbind    0.0.0.0:4002    mode  tcp    balance  roundrobin    option   tcplog    #代理mycat服务    server   mycat_1  192.168.1.18:18067  check  port  18067  maxconn  2000    server   mycat_2  192.168.1.18:18068  check  port  18068  maxconn  2000#启动容器 
docker start haproxy && docker logs -f haproxy

访问:
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/olJAUMaY.shtml

相关文章

mysql pxc 使用_PXC使用介绍

用户发起Commit&#xff0c;在收到Ok之前 集群每次发起一个动作&#xff0c;都会有一个唯一的编号 PXC独有的Global Trx Id 动作发起者: commit_cb其它节点多了一个动作&#xff1a; apply_cb 上面的这些动作&#xff0c;是通过那个端号交互的&#xff1f;4567 4568端口 IST 只…

docker搭建pxc集群

因为公司需要搭建mysql集群&#xff0c;本来使用原生的mysql镜像搭建了一个简单的主从集群&#xff0c;后来发现使用pxc集群更加方便快捷&#xff0c;而且数据同步性能更强&#xff0c;所以尝试搭建一个pxc集群。 1.pxc介绍 Percona XtraDB Cluster&#xff08;PXC集群&#…

mysql gtid 还是pxc_PXC中的GTIDs

基本环境&#xff1a;PXC 5.7.19 RowGtid&#xff0c;3节点 一、Galera GTID vs MySQL GTID 1.1、Galera GTID vs MySQL GTID Both kinds of GTIDs are using the same format: . For Galera, is generated when the cluster is bootstrapped. This is shared by all nodes. Fo…

mysql pxc搭建_MySQL(PXC)集群搭建

前言 我这里使用三台CentOS Linux release 7.8.2003的虚拟机来作演示 [rootn1 ~]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core) 安装前准备 请确保服务器没有安装MySQL&#xff0c;如果已经安装了请先卸载(后面会起冲突) 删除 MariaDB 这里我的服务器版本为…

docker pxc mysql_docker安装pxc集群的详细教程

前言 现在mysql自建集群方案有多种&#xff0c;keepalived、MHA、PXC、MYSQL主备等&#xff0c;但是目前根据自身情况和条件&#xff0c;选择使用pxc的放来进行搭建&#xff0c;最大的好处就是&#xff0c;多主多备&#xff0c;即主从一体&#xff0c;没有同步延时问题&#xf…

mysql pxc gcache_MySQL高可用之PXC

PXC简介 PXC(Percona XtraDB Cluster)是一个开源的MySQL高可用解决方案。他将Percona Server和XtraBackup与Galera库集成&#xff0c;以实现同步多主复制。基于Galera的高可用方案主要有MariaDB Galera Cluster和Percona XtraDB Cluster&#xff0c;目前PXC架构在生产线上用的更…

PXC集群

1.pxc集群 1.1 软件介绍 • Percona XtraDB Cluster(简称PXC) - 是基于Galera的mysql高可用集群解决方案 - Galera Cluster是Codership公司开发的一套免费开源的高可用方案 - PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(同步,多主复制…

mysql bootstrap pxc_Mysql高可用之PXC

一。PXC简介 Percona XtraDB Cluster简称PXC。是一套开源mysql高可用解决方案(XtraDb是mysql被oracle收购之前 开源一个分支 其他分支还有mariadb)&#xff0c;Percona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例(新名称 Percona Server)连接起来&am…

mysql pxc 安装_MYSQL PXC 集群安装

名词介绍&#xff1a; WS&#xff1a;write set写数据集 IST: Incremental State Transfer增量同步 SST&#xff1a;State Snapshot Transfer全量同步 1.准备环境 1.1 centos 7系统,三台主机 IP分别为&#xff1a;192.168.80.163&#xff1b;192.168.80.167&#xff1b;192.168…

kubernetes mysql pxc_PXC快速入门

C C语言开发 PXC快速入门 1.快速入门 实验环境&#xff1a; Node Host IPNode1 pxc1 192.168.70.61 Node2 pxc2 192.168.70.62 Node3 pxc3 192.168.70.63 1.1 安装Percona-XtraDb-Cluster yum源&#xff1a; [percona] namepercona_repo baseurl https://mirrors.tuna.tsinghu…

mysql pxc

一、PXC介绍 Percona Server由领先的MySQL咨询公司Percona发布。 Percona Server是一款独立的数据库产品,其可以完全与MySQL兼容,可以在不更改代码的情况了下将存储引擎更换成XtraDB 。XtraDB可以看做是InnoDB存储引擎的增强版本,它完全兼容InnoDB,且提供了很多InnoDB不具…

mysql pxc集群 原理 (图解+秒懂+史上最全)

文章很长&#xff0c;而且持续更新&#xff0c;建议收藏起来&#xff0c;慢慢读&#xff01; Java 高并发 发烧友社群&#xff1a;疯狂创客圈&#xff08;总入口&#xff09; 奉上以下珍贵的学习资源&#xff1a; 免费赠送 经典图书 &#xff1a; 极致经典 社群大片好评 《 …

什么是PXC?

目录 什么是PXC PXC的作用 PXC集群的注意事项 比较PXC模式和Replication(传统主从) 什么是PXC PXC是针对MySQL用户的高可用性和扩展性解决方案&#xff0c;基于Percona Server 。 Percona Server 是MySQL的改进版本&#xff0c;使用 XtraDB 存储引擎&#xff0c;在功能和性…

MySQL高可用之PXC详解

PXC 一、PXC相关简介二、部署PXC 一、PXC相关简介 1.pxc简介 PXC&#xff08;Percona XtraDB Cluster&#xff09;是一个开源的MySQL高可用解决方案。它将Percona server和XtraBackup与galera库集成&#xff0c;以实现同步多主复制。基于galera的高可用方案主要有MariaDB gale…

小马激活工具拒绝访问cannot open file c:\oemsf解决方法

第一步、激活本机的管理员帐号(administrator)&#xff0c;进入命令行窗口(WinKeyR 出现运行窗口&#xff0c;输入“cmd”&#xff0c;按确定)&#xff0c;输入以下命令&#xff1a;net user administrator /active:yes。 第二步、使用管理员帐号(administrator)登录系统&am…

小马激活工具对比暴风激活工具

提到win7激活工具&#xff0c;人气最旺的就是&#xff1a;小马激活工具和暴风激活工具。那么&#xff0c;这两款win7激活工具哪个好呢&#xff1f;在今天的教程中&#xff0c;小编就给大家分享一下win7激活工具&#xff1a;小马激活工具和暴风激活工具的使用过程对比&#xff0…

使用小马哥win10 激活工具激活后, 桌面上经常出现一个广告快捷方式的 解决方法...

【本文首发在 梦溪笔记 http://www.mengxi.me 】 小马哥的win10 激活工具 可以一键激活win10, 使用方便&#xff0c;还有效&#xff0c; 但是也存在个人很讨厌的打广告行为&#xff0c; 每次电脑启动时&#xff0c; 会在桌面上创建一个垃圾网站的快捷方式&#xff0c; 图标长的…

小马激活工具出现Cannot open file k:\OEMSF 的解决方法

遇到“此windows副本不是正版7601”&#xff0c;我们一般用小马激活软件激活一下就可以了。但是有时候可能不管用&#xff0c;会显示“Cannot open file OEMSF”的错误&#xff0c;那么我们该怎么解决呢&#xff1f;不用担心&#xff0c;下面就为大家介绍一下&#xff0c;一起来…

很抱歉 程序无法在非mbr引导的分区上激活

很抱歉 程序无法在非mbr引导的分区上激活 [Windows] 神器。完美解决非MBR引导下的WIN7激活问题。你会用的到的 才帮同事装了个系统&#xff0c;发现有100M的隐藏分区。 小马等其他激活工具都激活不了。提示非MBR引导无法激活。 找到了这个激活工具&#xff0c;完美解决。 链…

小马激活手动分配磁盘_不要成为“单把小马”手动测试仪

小马激活手动分配磁盘 我记得我父母带我去马戏团时见过小马。 它们是节目的重要组成部分&#xff0c;以敏捷&#xff0c;跳过障碍物和用两只脚走路给观众留下了深刻的印象。 小马的表演是如此多样&#xff0c;即使您连续几天参加演出&#xff0c;也很难对此感到无聊。 但是让…