一、简介

PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galera cluster最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。本身galera cluster也是一种多主架构。galera cluster最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证MySQL集群的数据一致性;

对galera cluster的封装有两个,虽然名称不同,但实质都是一样的,使用的都是galera cluster。一个MySQL的创始人在自己全新的MariaDB上实现的MAriaDB cluster;一个是著名的MySQL服务和工具提供商percona实现的percona xtradb cluster,简称PXC

要搭建PXC架构至少需要3个mysql实例来组成一个集群,三个实例之间不是主从模式,而是各自为主,所以三者是对等关系,不分从属,这就叫multi-master架构。客户端写入和读取数据时,连接哪个实例都是一样的。读取到的数据时相同的,写入任意一个实例之后,集群自己会将新写入的数据同步到其他实例上,这种架构不共享任何数据,是一种高冗余架构。

PXC的操作流程:
        首先客户端先发起一个事务,该事务先在本地执行,执行完成之后就要发起对事务的提交操作了。在提交之前需要将产生的复制写集广播出去,然后获取到一个全局的事务ID号,一并传送到另一个节点上面。通过合并数据之后,发现没有冲突数据,执行apply_cd和commit_cb动作,否则就需要取消此次事务的操作。而当前server节点通过验证之后,执行提交操作,并返回OK,如果验证没通过,则执行回滚。当然在生产中至少要有3个节点的集群环境,如果其中一个节点没有验证通过,出现了数据冲突,那么此时采取的方式就是讲出现不一致的节点踢出集群环境,而且它自己会执行shutdown命令,自动关机。

PXC的优点:
        ①实现mysql数据库集群架构的高可用性和数据的 强一致性。
        ②完成了真正的多节点读写的集群方案。
        ③改善了传统意义上的主从复制延迟问题,基本上达到了实时同步。
        ④新加入的节点可以自动部署,无须提供手动备份,维护起来很方便。
        ⑤由于是多节点写入,所以数据库故障切换很容易。

PXC的缺点:
        ①新加入的节点开销大,需要复制完整的数据。采用SST传输开销太大。
        ②任何更新事务都需要全局验证通过,才会在每个节点库上执行。集群性能受限于性能最差的节点,也就是经常说的短板效应。
        ③因为需要保证数据的一致性,所以在多节点并发写时,锁冲突问题比较严重。
        ④存在写扩大问题,所有的节点上都会发生些操作。
        ⑤只支持innodb存储引擎的表。
        ⑥没有表级别的锁定,执行DDL语句操作会把整个集群锁住,而且也 kill 不了(建议使用Osc操作,即在线DDL)
        ⑦所有的表必须含有主键,不然操作数据时会报错。

二、环境配置

1、系统:centos7.3

2、docker版本:Docker version 1.13.1, build 07f3374/1.13.1

3、PXC镜像:percona/percona-xtradb-cluster

三、安装部署

1、拉取镜像

docker pull percona/percona-xtradb-cluster

成功拉取后的效果如图所示:

2、创建docker内部网络

docker network create --subnet=172.18.0.0/24 net1

成功创建的效果如图所示,使用docker network inspect net1命令查看:

创建网络时出现以下错误信息,莫慌,重启docker再次创建即可

3、创建docker卷

docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
docker volume create --name v4
docker volume create --name v5

4、查看docker卷信息

docker inspect v1
docker inspect v2
docker inspect v3
docker inspect v4
docker inspect v5

效果如图所示

PS:切记一定要先创建docker卷再创建容器,不能一起来或者会报权限异常,不能创建容器

5、创建容器,这里以创建5个容器为例

docker run -di -p 3306:3306 \
-v v1:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
--privileged=true --name=node1 --net=net1 --ip 172.18.0.2 \
docker.io/percona/percona-xtradb-clusterdocker run -di -p 3307:3306 \
-v v2:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node2 --net=net1 --ip 172.18.0.3 \
docker.io/percona/percona-xtradb-clusterdocker run -di -p 3308:3306 \
-v v3:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node3 --net=net1 --ip 172.18.0.4 \
docker.io/percona/percona-xtradb-clusterdocker run -di -p 3309:3306 \
-v v4:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node4 --net=net1 --ip 172.18.0.5 \
docker.io/percona/percona-xtradb-clusterdocker run -di -p 3310:3306 \
-v v5:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=123456 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node5 --net=net1 --ip 172.18.0.6 \
docker.io/percona/percona-xtradb-cluster

PS:切记因第一个节点初始化比较耗时一定要等第一个容器创建成功可以使用MySQL客户端连接了才能创建第二个,或者会报错创建不了下面的容器!!!

效果如图:

6、测试集群

1)在node1对应的数据库(pxc-mysql-1)创建数据库mytest

2) 在node5对应的数据库(pxc-mysql-5)查看有没有刚刚在node1所创建的数据库mytest

3) 在node5对应的数据库(pxc-mysql-5)创建一个表mytb,并插入一条数据

4) 在node1对应的数据库(pxc-mysql-1)、node2对应的数据库(pxc-mysql-2)查看是否有刚刚新建的表和数据

恭喜你创建成功!

OK,TKS!

欢迎大家关注小编(IT蓝)的微信公众平台:我的好帮手(MyGoodHelper),是您出行、生活、学习和娱乐的得力助手,值得拥有。我们一起进步。OK,TKS!

Docker搭建MySQL的PXC集群相关推荐

  1. MySQL之PXC集群搭建

    一.PXC 介绍 1.1 PXC 简介 PXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实 ...

  2. CentOS7 下 MySQL 之 PXC 集群部署【Docker+多机多节点】

    背景 最近在进行 MySQL 集群搭建测试的研究中 对于业界主流方案自然不能跳过 在此,整理成完整的文章,希望道友能得到参考价值 - 对于 docker 不熟悉的小伙伴,个人建议移步文章 -- [Ce ...

  3. mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导

    背景 最近在进行 MySQL 的 PXC 集群搭建使用和研究 前期已完成了一篇记录文章 : [CentOS7 下 MySQL 之 PXC 集群部署[Docker+多机多节点]] 但是,毕竟不是所有人都 ...

  4. MySQL Percona PXC集群实现MySQL主从复制强一致性

    简介 不同于MySQL的主从复制只能在主节点写入数据的是,PXC可以在任何一个节点写入数据.基于MySQL Percona版本. 架构 部署安装PXC 需要注意的是:要先启动第一个节点(PXC初始化) ...

  5. MySQL 部署PXC集群

    目录 MySQL 部署PXC集群 PXC集群概述 PXC介绍 PXC特点 相应端口 主机角色 配置主机名及映射关系 部署PXC 安装软件 配置服务 启动服务 测试配置 测试集群高可用 常见错误 MyS ...

  6. docker搭建redis高可用集群

    目标:docker搭建redis高可用集群 1.架构:六个redis容器,三主三从,主从复制,主机宕机从机自动替代 2.网络架构设计:设计一个专属redis的docker网络 docker netwo ...

  7. Docker搭建MongoRocks副本分片集群(Docker Mongodb Rocksdb Replication Sharding)

    Docker搭建MongoRocks副本分片集群 准备 依赖 安装 下载镜像 基本单实例 带配置的单实例 权限配置 docker参数解释 启动命令 rocksdb配置解释 查看启动日志 连接测试 ov ...

  8. mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】

    背景 [注意]: 鄙人认为本篇适合做入门测试/学习之用,选择的 "单机多节点配置",后面再整理 "多机配置"文章. 近期正突击学习数据库知识 想着对 PXC 集 ...

  9. mysql从节点报错_CentOS7.9 下 MySQL 之 PXC 集群部署【Docker+多机多节点】

    背景 最近在进行 MySQL 集群搭建测试的研究中 对于业界主流方案自然不能跳过 在此,整理成完整的文章,希望道友能得到参考价值 - [注]:Percona XtraDB Cluster(简称 PXC ...

最新文章

  1. 25条实用的Python一行代码,你用过哪些?
  2. 吴恩达亲自撰文!黄仁勋入选《时代》100人,马斯克,库克均上榜
  3. NodeJS基础2---2 Promise详解
  4. PAT甲级1150 Travelling Salesman Problem:[C++题解]旅行商问题、图论
  5. 用c实现跨平台异常捕获机制 1
  6. cfree运行程序错误_C/C++程序调试和内存检测
  7. 嵌入式工程师开发工作主要做些什么,以后收入怎样
  8. CMS GC 垃圾回收
  9. 强悍的 Linux —— grep 与 egrep
  10. 树莓派之安装dlna服务
  11. openssl在arm下的交叉编译
  12. 腾讯云 cos计费说明
  13. Content Delivery Network (CDN)
  14. 基于主从博弈的电热综合能源系统动态定价与能量管理 主要做的是电热综合能源系统的动态定价问题,采用是主从博弈方法
  15. java——15位身份证号码升级到18位
  16. 【多线程与高并发】这可能是最全的多线程面试题了
  17. recv函数linux,linux 下调用recv函数,死循环在recv函数里面,什么原因?
  18. [ISA]部署ISA防火墙策略的十六条守则
  19. mac os 录屏快捷键_MAC上有哪些优秀的日常软件 入门级Mac OS 用户必备软件
  20. C++之enum与switch

热门文章

  1. 为什么有实力的公司都不要培训学校出来的程序员!
  2. 宽带加速方法!网速提高30%-200%
  3. ES6代码转为ES5代码babel在线转换
  4. 关于Synaptics.exe感染型病毒
  5. 网络协议-DNS与Hosts
  6. Linux下C/C++实现(网络流量分析-NTA)
  7. python解码gbk_Python的url编码问题(ansi,utf8,gbk) | C/C++程序员之家
  8. JavaWeb-RequestResponse
  9. 给ACCESS2003加密码和去掉密码
  10. docker-compose设置redis密码