PXC安装部署
安装依赖与注意事项:
1. rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
1.yum install socat
2.yum install -y perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Time-HiRes.x86_64 socat
3.安装xtrabackup 下载地址:http://www.percona.com/downloads/XtraBackup/
4.注意iptables 4567是wsrep使用的默认端口
5.如果是对现有环境做galera集群,需要对mysql现有表做检查,包括表,表引擎,是否无主键,是否有全文索引,是否有空间索引:
SELECT DISTINCT
CONCAT(t.table_schema,'.',t.table_name) AS tbl,
t.engine,
IF(ISNULL(c.constraint_name),'NOPK','') AS nopk,
IF(s.index_type = 'FULLTEXT','FULLTEXT','') AS ftidx,
IF(s.index_type = 'SPATIAL','SPATIAL','') AS gisidx
FROM information_schema.tables AS t
LEFT JOIN information_schema.key_column_usage AS c
ON (t.table_schema = c.constraint_schema AND t.table_name = c.table_name
AND c.constraint_name = 'PRIMARY')
LEFT JOIN information_schema.statistics AS s
ON (t.table_schema = s.table_schema AND t.table_name = s.table_name
AND s.index_type IN ('FULLTEXT','SPATIAL'))
WHERE t.table_schema NOT IN ('information_schema','performance_schema','mysql')
AND t.table_type = 'BASE TABLE'
AND (t.engine <> 'InnoDB' OR c.constraint_name IS NULL OR s.index_type IN ('FULLTEXT','SPATIAL'))
ORDER BY t.table_schema,t.table_name;
6.pxc 下载地址
https://www.percona.com/downloads/Percona-XtraDB-Cluster-56/Percona-XtraDB-Cluster-5.6.21-25.8/binary/tarball/Percona-XtraDB-Cluster-5.6.21-rel70.1-25.8.938.Linux.x86_64.tar.gz
安装步骤:
1. 和普通mysql安装步骤一样安装并初始化
2. 安装innobackupex并且添加到环境变量
3. 添加sst账号
DELETE FROM mysql.user WHERE user='';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost' IDENTIFIED BY 'sstuser';;
FLUSH PRIVILEGES;
4.修改my.cnf配置文件(添加如下参数)
###pxc
##Path to Galera library
#指定Galera库文件,PXC自带该库文件,mariadb galera需要安装galera
wsrep_provider = /usr/local/Percona-XtraDB-Cluster-5.6.24-rel72.2-25.11..Linux.x86_64/lib/libgalera_smm.so
# Cluster connection URL contains the IPs of node#1, node#2 and node#3
#指定集群每个节点的连接地址
wsrep_cluster_address = gcomm://10.1.1.121:4567,10. 1.1.122:4567,10. 1.1.123:4567
#本机ip
wsrep_provider_options = gmcast.listen_addr=tcp://10.1.1.121:4567;gcache.size=8G;gcs.fc_limit=512;gcs.fc_factor=0.9;
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode = 2
# Node #1 address
#本机ip
wsrep_node_address = 10. 1.1.122
#指定SST方式,支持rsync(最快,需要锁表),mysqldump和xtrabackup,从5.5.33-23.7.6起支持xtrabackup-v2
# SST method
wsrep_sst_method = xtrabackup-v2
#wsrep_sst_method = rsync
# Cluster name
wsrep_cluster_name = my_centos_cluster
wsrep_slave_threads = 16
# Authentication for SST method
#SST的认证方式(账号密码)
wsrep_sst_auth = "sstuser:sstuser"
5.先启动主节点
/usr/local/Percona-XtraDB-Cluster-5.6.24-rel72.2-25.11..Linux.x86_64/bin/mysqld_safe --defaults-file=/etc/my.cnf --wsrep-cluster-address="gcomm://" &
或者
service mysqld_3306 bootstrap-pxc
其他节点正常启动
service mysqld_3306 start
或者
/etc/init.d/mysqld_3306 start --wsrep_sst_donor=指定主ip
6.查看pxc状态
show status like 'wsrep%';
ps aux | grep mysql | grep wsrep_start_position
绕开SST通过IST方式添加节点需要创建的文件
在源mysql 用innobackupex 加 --galera-info 参数做完整备份
在目标mysql还原并且创建grastate.dat文件
sudo cat xtrabackup_galera_info
b0b66f5c-6254-11e3-b7c8-d2d41d32ec17: 433411
sudo vim grastate.dat
# GALERA saved state
version: 2.1
uuid: b0b66f5c-6254-11e3-b7c8-d2d41d32ec17
seqno: 433411
cert_index:
sudo chown mysql:mysql -R *
/etc/init.d/mysqld_3306
start --wsrep_sst_donor=源mysql
名词:
WS:write set 写数据集
IST: Incremental State
Transfer 增量同步
SST:State Snapshot Transfer 全量同步
UUID:节点状态改变及顺序的唯一标识。
GTID:Global Transaction ID ,由UUID和偏移量组成。wsrep api 中定义的集群内全局事务id。
状态机变化阶段:
1.OPEN: 节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群
2.PRIMARY: 节点处于集群PC中,尝试从集群中选取donor进行数据同步
3.JOINER: 节点处于等待接收/接收数据文件状态,数据传输完成后在本地加载数据
4.JOINED: 节点完成数据同步工作,尝试保持和集群进度一致
5.SYNCED:节点正常提供服务:数据的读写,集群数据的同步,新加入节点的sst请求
6.DONOR:节点处于为新节点准备或传输集群全量数据状态,对客户端不可用。
原生的Mysql也可使用galera
https://launchpad.net/codership-mysql/+download
局限性
1.目前的复制仅仅支持InnoDB存储引擎。任何写入其他引擎的表,包括mysql.*表将不会复制。但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的。
2.DELETE操作不支持没有主键的表。没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集。
3.在多主环境下LOCK/UNLOCK
TABLES不支持。以及锁函数GET_LOCK(), RELEASE_LOCK()…
4.查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
5.允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
6.由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001
(ER_LOCK_DEADLOCK)).
7.XA事务不支持,由于在提交上可能回滚。
8.整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
9.集群节点建议最少3个。2个也可以运行,但是官方不推荐这么做,因为3个节点是为了预防脑裂。
10.如果DDL语句有问题将破坏集群。建议使用pt-online-schema-change操作DDL。
Galera监控
1、常用查询指令
查看wsrep版本:
mysql> SHOW GLOBAL STATUS LIKE 'wsrep_provider_version';
查看wsrep有关的所有变量:
mysql> SHOW VARIABLES LIKE 'wsrep%' \G
查看Galera集群状态: mysql>
show status like 'wsrep%';
2、参数说明
1)集群完整性检查:
wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群.
wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值.
wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接.
wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况.
2)节点状态检查:
wsrep_ready: 该值为ON,则说明可以接受SQL负载.如果为Off,则需要检查wsrep_connected.
wsrep_connected: 如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群.(可能是wsrep_cluster_address或wsrep_cluster_name等配置错造成的.具体错误需要查看错误日志)
wsrep_local_state_comment:如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因.
3)复制健康检查:
wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止.可优化wsrep_slave_threads的值来改善.
wsrep_cert_deps_distance:有多少事务可以并行应用处理.wsrep_slave_threads设置的值不应该高出该值太多.
wsrep_flow_control_sent:表示该节点已经停止复制了多少次.
wsrep_local_recv_queue_avg:表示slave事务队列的平均长度.slave瓶颈的预兆.
最慢的节点的wsrep_flow_control_sent和wsrep_local_recv_queue_avg这两个值最高.这两个值较低的话,相对更好.
4)检测慢网络问题:
wsrep_local_send_queue_avg:网络瓶颈的预兆.如果这个值比较高的话,可能存在网络瓶颈
5)冲突或死锁的数目:
wsrep_last_committed:最后提交的事务数目
wsrep_local_cert_failures和wsrep_local_bf_aborts:回滚,检测到的冲突数目
--设置节点不参与流量控制
set global
wsrep_desync=ON;
--需注意的参数修改gcs.fc_limit=1024 触发流控大小设置
wsrep_provider_options
= "evs.keepalive_period=PT1S; evs.inactive_check_period=PT0.5S; evs.suspect_timeout=PT5S; evs.inactive_timeout=PT15S; gcs.fc_factor=1.0; gcs.fc_limit=1024; gcs.fc_master_slave=yes; gcache.size=8G; "
--在线调整方法
SET GLOBAL
wsrep_provider_options="gcs.fc_limit=512;gcs.fc_factor=1.0;evs.send_window=256;evs.user_send_window=128; ";
--如果脑裂导致所有节点不可用
SET GLOBAL wsrep_provider_options='pc.bootstrap=true';
当网络状况不好时考虑调整的参数设置:
1 wsrep_provider_options = "evs.keepalive_period = PT3S;
evs.inactive_check_period = PT10S; evs.suspect_timeout = PT30S;
evs.inactive_timeout = PT1M; evs.consensus_timeout = PT1M"
2 evs.keepalive_period
参数控制多久发送一次keepalive请求信号
3 evs.inactive_check_period 参数控制多久检测一次节点活动/静止状态
4 evs.suspect_timeout 参数控制某个节点是否被标识为suspected状态的时 间间隔
5 evs.inactive_timeout 参数控制节点不活动时检测周期
6 evs.consensus_timeout 参数控制多久检测一次节点一致性 通过上面的设 置,可以使节点超时时间为30秒
7 evs.inactive_timeout参数必须不小于evs.suspect_timeout, evs.consensus_timeout必须不小于evs.inactive_timeout
PXC安装部署的更多相关文章
- MySQL高可用之PXC安装部署(续)
Preface Yesterday I implemented a three-nodes PXC,but there were some errors when proceeding ...
- MySQL高可用之PXC安装部署
Preface Today,I'm gonna implement a PXC,Let's see the procedure. Framework Hostname IP P ...
- PXC 5.7.14 安装部署
http://www.dbhelp.net/2017/01/06/pxc-5-7-14-%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2-pxc-install.html PX ...
- Oracle安装部署,版本升级,应用补丁快速参考
一.Oracle安装部署 1.1 单机环境 1.2 Oracle RAC环境 1.3 Oracle DataGuard环境 1.4 主机双机 1.5 客户端部署 二.Oracle版本升级 2.1 单机 ...
- KVM安装部署
KVM安装部署 公司开始部署KVM,KVM的全称是kernel base virtual machine,对KVM虚拟化技术研究了一段时间, KVM是基于硬件的完全虚拟化,跟vmware.xen.hy ...
- Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考
操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...
- 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署
少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...
- C# winform安装部署(转载)
c# winform 程序打包部署 核心总结: 1.建议在完成的要打包的项目外,另建解决方案建立安装部署项目(而不是在同一个解决方案内新建),在解决方案上右击-〉添加-〉现有项目-〉选择你要打包的项目 ...
- Ubuntu14.04 Django Mysql安装部署全过程
Ubuntu14.04 Django Mysql安装部署全过程 一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...
随机推荐
- REdis之maxmemory解读
redis.conf中的maxmemory定义REdis可用最大物理内存,有多种书写方式,以下均为合法: maxmemory 1048576 maxmemory 1048576B maxmemory ...
- GoCN每日新闻(2019-10-16)
GoCN每日新闻(2019-10-16) GoCN每日新闻(2019-10-16) 1. 持续的性能分析与优化 https://medium.com/@tvii/continuous-profilin ...
- 【04NOIP普及组】火星人(信息学奥赛一本通 1929)(洛谷 1088)
[题目描述] 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法.这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类 ...
- Java-根据经纬度计算距离(百度地图距离)
最近碰到一个需求,需要根据两个点的经纬度查询两点的距离.感觉以后还会用到,所以小记一波. 第一步:添加Maven依赖. <dependency> <groupId>org.ga ...
- css文字两行或者几行显示省略号
做这个省略的问题,突然发现显示省略号是有中英文区分的 我做两行的时候用的是以下代码,在是中文的情况下是么得问题,到了英文下发现不起作用了 width: 250px; overflow: hidden; ...
- 牛顿插值法(c++)【转载】
摘自<c++和面向对象数值计算>,代码简洁明快,采用模板函数,通用性增强,牛顿差分合理利用存储空间,采用Horner算法(又称秦九韶算法)提高精度,减少时间复杂度,高!确实是高!对其中代码 ...
- 2019SDN第7次上机作业
2019SDN第7次上机作业 1.作业要求: 作业博客链接:https://edu.cnblogs.com/campus/fzu/fzusdn2019/homework/10165 2.具体操作步骤与 ...
- 20189220 余超《Linux内核原理与分析》第八周作业
Linux内核如何装载和启动一个可执行程序 本章知识点 ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files) ...
- android -------- Base64 加密解密算法
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. Ba ...
- matlab中可用于进行轮廓提取的函数
本文主要总结一下在matlab中可用于进行轮廓提取的函数. 1 bwperim 根据参考资料[2]的提示,可以使用bwperim()函数进行轮廓提取,具体代码如下: %读取原图im = imread( ...