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的安装与配置 记录一下我的部署过程,也方便 ...
随机推荐
- facl
file access control lists 文件的额外赋权机制,针对性的对某用户对文件的权限进行处理 setfacl 指定空权限
- 洛谷P1560 蜗牛的旅行
题目 搜索,注意判断特殊情况,并且区分开什么时候转弯什么时候停止.然后转弯的时候更是要注意是否会进入障碍. #include <bits/stdc++.h> using namespace ...
- 基于Linux(中标麒麟)上QT的环境搭建——解决cannot find lGL的问题
接上一篇,QT在中标麒麟环境安装完成后遇到运行报错的问题 一.问题描述: 在中标麒麟上配置好QT的环境后,新建一个工程,不做其他的任何操作,直接运行都会报cannot find lGL的错误.如图所示 ...
- rust控制流
fn main() { let number = 6; if number % 4 == 0 { println!("number is divisible by 4"); } e ...
- JavaWeb项目启动过程与ServletContext
ServletContext的官方名称叫Servlet上下文,服务器会为每一个工程创建一个对象,这个对象就是ServletContext.一个项目只有一个ServletContext对象,工程内的所有 ...
- Spring Boot 项目 application.properties配置说明
#======================================================================================# ★☆★☆★☆★☆★☆ ...
- 爬虫urllib2库的基本使用
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. 在Python中有很多库可以用来抓取网页,urllib2库基本使用. urllib2 是 Python2.7 自带的模块 ...
- C# redis客户端帮助类
需要在NuGet里面引用ServiceStack.Redis using ServiceStack.Redis; using ServiceStack.Redis.Generic; using Sys ...
- ISO/IEC 9899:2011 摘要
本国际标准指定了C编程语言的形式并建立了对用它所表达的程序的解释.其目的在于促进在多种计算机系统上的C语言程序的可移植性.可靠性.可维护性以及高效的执行. 为了详细地说明C语言本身以及C语言执行库,包 ...
- 简易商城 [ html + css ] 练习
1. 前言 通过使用 HTML + CSS 编写一个简易商城首页. 如图: 2. 布局思路 通过页面分析,大致可以决定页面的布局分为 5 大板块. 接下来,可以先定义页面的布局: <!DOCTY ...