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

posted @ 2019-05-13 00:24  雨中海  阅读(1651)  评论(0编辑  收藏  举报