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

访问:

MySQL_PXC集群_综合应用相关推荐

  1. python集群_使用Python集群文档

    python集群 Natural Language Processing has made huge advancements in the last years. Currently, variou ...

  2. docker集群_使用Docker,Chef和Amazon OpsWorks进行集群范围的Java / Scala应用程序部署...

    docker集群 Docker非常适合在单个节点上运行隔离的容器. 但是,大多数软件系统都在多个节点上运行,因此,除了Docker之外,我们还需要某种方法来指定哪些容器应在哪些节点上运行. 我要解决的 ...

  3. 机器学习集群_机器学习中的多合一集群技术在无监督学习中应该了解

    机器学习集群 Clustering algorithms are a powerful technique for machine learning on unsupervised data. The ...

  4. csrediscore访问redis集群_搭建文档 | centos7.6环境下redis5.0.8集群搭建

    " 本文作者:墨篱弦 " 一.做基础配置 a) 首先创建3个空文件 mkdir -p /server/redis_cluster/7001/datamkdir -p /server ...

  5. hbase1.1.1 连接集群_除了HAProxy,RabbitMQ集群还可以这样用

    全网最简单的安装手册 // 安装erlang wget https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm. ...

  6. down redis集群_硬核干货!Redis 分布式集群部署实战

    原理: Redis集群采用一致性哈希槽的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储. 集群使用公式(CRC16 key)& 16384计算键key ...

  7. 二进制安装mysql集群_基于二进制安装Cloudera Manager集群

    一.环境准备 参考链接:https://www.cnblogs.com/zhangzhide/p/11108472.html 二.安装jdk(三台主机都要做) 下载jdk安装包并解压:tar xvf ...

  8. k8s redis集群_基于K8S部署redis哨兵集群

    本 文 主 要 内 容 什么是Kubernetes分布式容器管理平台 PaaS平台redis-sentinel集群架构简介 PaaS平台部署redis哨兵集群 redis-sentinel容器测试及验 ...

  9. postgresql 集群_谁说postgresql 没有靠谱的高可用(2)

    接上期说,(没看上期的,还是先看上期,要不从这看是看不懂的) 那到底这个手动转换的过程是如何的,这个要搞一搞清楚 repmgr -f /etc/repmgr.conf standby switchov ...

最新文章

  1. 服务器磁盘阵列做win7系统,Raid0可以安装winxp-x86,但不能安装win7-x64,是怎么回事呢?!...
  2. python编程print语法_Python 第一节 安装及 print 输出语句—教案
  3. stm32怎么查看什么原因引起的nmi_为什么会有口臭,口臭是什么原因引起的,口臭是怎么回事...
  4. 静静守候属于我们的幸福。坚守我们的约定
  5. QT的QWinTaskbarButton类的使用
  6. 青春可长可短, 就看自己如何度过(亦或者如白驹过隙, 稍纵即逝 正所谓且行且珍惜)...
  7. Apache Ignite,Hazelcast,Cassandra和Tarantool之间的主要区别
  8. 【转】用BibTeX 写 Reference
  9. 3dm游戏运行包_动作游戏ACT 逃离丧尸镇 Shadows of Kurgansk 电脑游戏资源
  10. jsp操作mysql
  11. PYTHON读取EXCEL内容再转变成HTML添加到OUTLOOK中
  12. 23andme、gsa、wegene各染色体位点统计
  13. 读《论证是一门学问》
  14. FME抓取遥感影像瓦片地图服务
  15. 网游之古剑太初最新章节
  16. 制造业质量管理四大病因
  17. 使用 spark sql extensions 实现 skew join
  18. 怎么区分zh和ch_如何区分汉语拼音“z,c,s”与“zh,ch,sh”的发音?
  19. 【深度】大变局!标准化资产的在线理财时代来临
  20. 软碟通安装linux系统,使用U盘作为载体使用UltraISO软碟通安装Centos6.4

热门文章

  1. 武汉大学武汉校友会测绘分会成立!大势智慧成为会长单位
  2. 期末考试+竞赛班选拔考试
  3. 简单的js制作轮播图
  4. 瑞云霸气福利,包场观影《赤道》归来
  5. python可视化----pyqtgraph
  6. Matlab fmincon函数实例 及 其句柄形式之参数传递
  7. 基于i.MX6UL的wifi音响设计
  8. 陀螺解读 | 一文读懂《泉州市人民政府办公室关于印发加快区块链技术应用发展的若干措施的通知》...
  9. watch监听不到变化?
  10. 安卓状态栏美化相关教程