MySQL数据库高可用集群搭建-PXC集群部署
Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法。集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上。

PXC原理描述:
分布式系统的CAP理论:
C:一致性,所有的节点数据一致
A:可用性,一个或者多个节点失效,不影响服务请求
P:分区容忍性,节点间的连接失效,仍然可以处理请求
其实,任何一个分布式系统,需要满足这三个中的两个。
PXC的优点:
1)服务高可用;
2)数据同步复制(并发复制),几乎无延迟;
3)多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让galera解决数据冲突;
4)新节点可以自动部署,部署操作简单;
5)数据严格一致性,尤其适合电商类应用;
6)完全兼容MySQL;
一些名词介绍:
WS:write set写数据集,写/更新事务
IST:Incremental State Transfer 增量同步
SST:State Snapshot Transfe 全量同步。
SST支持的方法有:mysqldump,rsync ,xtrabackup 。
mysqldump,rsync同步需要READ LOCK, (SST applies FLUSH TABLES WITH READ LOCK command)
xtrabackup 在整个同步数据过程中不需要READ LOCK。
配置参数:wsrep_sst_method=xtrabackup-v2
UUID:节点状态改变及顺序的唯一标识
GTID:Global Transaction ID,由UUID和sequence number偏移量组成。wsrep api中定义的集群内部全局事务id,用于记录集群中发生状态改变的唯一标识以及队列中的偏移量。
WSRWP API:在DBMS库和wsrep provider之间提供接口
PXC环境所涉及的端口:
#mysql实例端口:3306
#PXC cluster相互通讯的端口:4567
#用于SST传送的端口:4444
#用于IST传送的端口:4568
1.有3个节点
pxc_node0 192.0.0.197
pxc_node1 192.0.0.198
pxc_node2 192.0.0.199
2.防火墙设置
01关闭防火墙
# systemctl stop firewalld.service
# systemctl disable firewalld.servie
02或开启防火墙对应的端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
开放完4个端口后,重新加载防火墙规则
firewall-cmd --reload
3.关闭SELINUX ,安全增强型 Linux(Security-Enhanced Linux)SELinux主要由美国国家安全局开发
01执行命令 永久关闭Selinux
vi /etc/selinux/config 把SELINUX属性值设置成disabled
02或者执行命令 Linux临时关闭Selinux
setenforce 0
4.下载安装,在pxc_node0,pxc_node2,pxc_node2分别进行如下安装
基础安装
[root@percona1 ~]# yum -y groupinstall Base Compatibility libraries Debugging Tools Dial-up Networking suppport Hardware monitoring utilities Performance Tools Development tools
组件安装
[root@percona1 ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm -y
[root@percona1 ~]# yum install Percona-XtraDB-Cluster-55 -y
5.停止mysql服务,选择一个node作为名义上的master,只需要修改mysql的配置文件/etc/my.cnf(需要分别配置)
#PXC集群中MySQL实例的唯一ID,不能重复,必须是数字
server-id=1
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
#PXC集群的名称
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.0.0.197,192.0.0.198,192.0.0.199
#当前节点的名称
wsrep_node_name=pxc1
#当前节点的IP
wsrep_node_address=192.0.0.197
#同步方法(mysqldump、rsync、xtrabackup)
wsrep_sst_method=xtrabackup-v2
#同步使用的帐户
wsrep_sst_auth= admin:Abc_123456
#同步严厉模式
pxc_strict_mode=ENFORCING
#基于ROW复制(安全可靠)
binlog_format=ROW
#默认引擎
default_storage_engine=InnoDB
#主键自增长不锁表
innodb_autoinc_lock_mode=2
6.启动第一个节点
/etc/init.d/mysql bootstrap-pxc
如果是centos7,则启动命令如下:
systemctl start mysql@bootstrap.service若是重启的话,就先kill,然后删除pid文件后再执行上面的启动命令
7.数据库用户名密码的设置
mysql> UPDATE mysql.user SET password=PASSWORD("Passw0rd") where user='root';
8.配置SST认证账号
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;
9.启动其他节点
/etc/init.d/mysql start
各个节点都采用第一个修改的root密码登录
10.常用命令
查看节点数:
show global status like 'wsrep_cluster_size';
查看集群状态:
show global status like 'wsrep_cluster_size';
查看当前节点状态:
show global status like 'wsrep_cluster_status';
通过查看4567 端口确认集群是否启动:
netstat -plantu | grep mysqld
集群关闭:所有节点都用
/etc/init.d/mysql stop
节点重启
第一个节点用:
/etc/init.d/mysql restart-bootstrap
其他节点用:
/etc/init.d/mysql restart
11.其他注意事项:
集群关闭之后,再启动,谁做第一个节点谁就执行/etc/init.d/mysql bootstrap-pxc
如果最后关闭的PXC节点是安全退出的,那么下次启动要最先启动这个节点,而且要以主节点启动 如果最后关闭的PXC节点不是安全退出的,
那么要先修改/var/lib/mysql/grastate.dat 文件, 把其中的safe_to_bootstrap属性值设置为1, 再安装主节点启动。
除了名义上的master之外,其它的node节点只需要启动mysql即可。
节点的数据库的登陆和master节点的用户名密码一致,自动同步。所以其它的节点数据库用户名密码无须重新设置。
只需要在名义上的master节点上设置权限,其它的节点配置好/etc/my.cnf后,只需要启动mysql就行,权限会自动同步过来。
MySQL数据库高可用集群搭建-PXC集群部署的更多相关文章
- 美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望. MMM ...
- (转)mysql数据库高可用高扩展性架构方案实施
http://shanhu.blog.51cto.com/1293405/1212605-----mysql数据库高可用高扩展性架构方案实施
- MYSQL数据库高可用方案探究
MySQL作为最关键的应用数据存储中心,如何保证MySQL服务的可靠性和持续性,是我们不得不细致考虑的一个问题.当master宕机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master ...
- MySQL数据库高可用方案
一.什么是高可用性: 高可用性=可靠性,它的本质就是通过技术和工具提高可靠性,尽可能长时间保持数据可用和系统运行,实现高可用性的原则,首先要消除单点故障,其次通过冗余机制实现快速恢复,还有就是实现容错 ...
- 数据库高可用架构(MySQL、Oracle、MongoDB、Redis)
一.MySQL MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换 服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失 ...
- [转]数据库高可用架构(MySQL、Oracle、MongoDB、Redis)
一.MySQL MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换 服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失 ...
- Centos7 Mysql 双机热备实现数据库高可用
mysql双主热备,也称主主互备,目的是mysql数据库高可用,只支持双机,原因是mysql的复制是一主多从,但一个从服务器只能有一个主服务器. 双机热备的条件是双机mysql版本必须一致. 服务器分 ...
- Mysql双机热备实现数据库高可用
mysql双主热备,也称主主互备,目的是mysql数据库高可用,只支持双机,原因是mysql的复制是一主多从,但一个从服务器只能有一个主服务器. 双机热备的条件是双机mysql版本必须一致. 服务器分 ...
- 基于keepalived搭建MySQL的高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...
随机推荐
- 二、在SAP中创建一个程序
一.我们来到SE38 二.添加一个程序的名字,需要以Y或者Z开头,点击创建就可以了 三.我们输入hello Sap,然后选择可执行程序,然后保存 四.创建对象目录时,可以选择把这个加入到包中,或者选择 ...
- SQL left join、rignt join、inner join区别
说真的一直对数据库没有研究以至于连这些基础都不会了,事实证明,业精于勤荒于嬉. 废话不多说,直接开始 有A.B两张表: 1.inner join inner join 和 join 是没有区别的(如有 ...
- PAT 2014 秋
A 1084 Broken Keyboard 注意大小写即可. #include <cstdio> #include <iostream> #include <algor ...
- BUUCTF-WEB-easy_tornado
知识点: Python Web 框架:Tornado python中的一个渲染函数:render: 渲染变量到模板中,即可以通过传递不同的参数形成不同的页面. 1. render方法的实质就是生成te ...
- zTree & ckeditor &ValidateCode.jar 使用个人心得总结
zTree:依靠 jQuery 实现的多功能 “树插件”. 使用时只需要将下载的压缩包接用,复制里边的css 和 js 到指定目录即可. 如图所示: 在zTree的官网可以找到各种类型树的示例: 地址 ...
- github访问过慢解决
为了更加愉快地使用全球最大同性交友网站上的优质资源,我们来做一些简单的本机上的调整. 通过查看下载链接,能够发现最终被指向到Amazon的服务器(http://github-cloud.s3.amaz ...
- Cobub无码埋点关键技术的实现
随着大数据时代的到来,数据采集也已经变的越来越重要.前端埋点作为一个比较成熟的数据接入手段被广泛应用着.目前埋点分为两种方式,有码与无码埋点.有码埋点比较容易理解,即调用SDK的API,在代码中插入埋 ...
- c++静态库和动态库的添加
# 声明要求的 cmake 最低版本cmake_minimum_required(VERSION 2.8)# 声明一个 cmake 工程project(helloSLAM) # 设置编译模式set( ...
- 增删改查(简单版&连接数据库)
这个博客也是补充之前的学习内容: 项目总述:这个增删改查我以,选课名称,选课教室,选课教师基本信息,作为主要的信息来源.主要对这些信息最基本的增删改查 详细的分析与说明: 1.首先在src文件里定义四 ...
- 使用MySQL传输表空间迁移数据
对于大表的迁移,如果使用mysqldump进行导出,然后重新导入到其它环境,速度是非常缓慢的.如果使用传输表空间,则可以解决这个问题. 测试使用传输表空间迁移表,基础环境如下: 源库 目标库 IP ...