MySQL_PXC集群_综合应用

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

部署

MySQL_PXC集群_综合应用_第1张图片

#创建数据卷(存储路径:/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集群架构,在实际的项目中,往往不单单是一种架 构,更多的使用的混合架构,下面我们将好客租房项目采用混合架构的方式进行完善数据库集群。

MySQL_PXC集群_综合应用_第2张图片
1、HAProxy作为负载均衡器
2、部署了2个Mycat节点作为数据库中间件
3、部署了2个PXC集群节点,作为2个Mycat分片,每个PXC集群中有2个节点,作为数据的同步存储
4、部署了1个主从复制集群
5、房源数据保存到PXC分片中,其余数据保存到主从架构中

部署PXC集群

MySQL_PXC集群_综合应用_第3张图片

#创建数据卷(存储路径:/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;

MySQL_PXC集群_综合应用_第4张图片
创建数据库以及创建广告表tb_ad

部署MyCat

节点一

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

配置server.xml:

 
 
    
	
	0
        1
        0
        0        
        2        
        false        
        0        
        0        
        1        
        64k        
        1k        
        0        
        384m        
        false    
	        
	        
		itcast123        
		haoke    
	 

配置schema.xml:

 
 
    
	    
	     
		       
		
select user() select user() select user()

配置rule.xml:

    
    2 

设置端口以及启动:

vim wrapper.conf 
#设置jmx端口 
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=11985

vim server.xml 
#设置服务端口以及管理端口 
18067 
19067

./startup_nowrap.sh && tail -f ../logs/mycat.log

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

节点二

cp mycat-node1/ mycat-node2 -R

vim wrapper.conf 
#设置jmx端口 
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=11986
vim server.xml 

#设置服务端口以及管理端口 
18068 
19068

./startup_nowrap.sh && tail -f ../logs/mycat.log

部署HAProxy

#修改文件 
vim /haoke/haproxy/haproxy.cfg

#输入如下内容 global
    log         127.0.0.1 local2    
    maxconn     4000    
    daemon
    
defaults
    mode                    http    
    log                        global    
    option                   httplog    
    option                   dontlognull    
    option http-server-close    
    option forwardfor       except 127.0.0.0/8
    option                  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                 3000

listen   admin_stats
    bind    0.0.0.0:4001    
    mode  http    
    stats uri       /dbs    
    stats realm  Global\ statistics    
    stats auth    admin:admin123

listen   proxy-mysql
    bind    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集群_综合应用_第5张图片
MySQL_PXC集群_综合应用_第6张图片

你可能感兴趣的:(数据库)