实验环境:node
Node | Host | IP |
---|---|---|
Node1 | pxc1 | 192.168.70.61 |
Node2 | pxc2 | 192.168.70.62 |
Node3 | pxc3 | 192.168.70.63 |
yum源:mysql
[percona] name=percona_repo baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch enabled = 1 gpgcheck = 0
yum -y install Percona-XtraDB-Cluster-57
注意,装了Percona-XtraDB-Cluster就自带好了Percona-mysql,不要再装MySQL,不要再装MySQL,不要再装MySQL。不止一我的由于这个问题,PXC死活启动不了。典型错误提示:sql
unknown variable 'wsrep_provider=/usr/lib64/libgalera_smm.so'
第一个节点配置文件/etc/my.cnfbootstrap
[mysqld] server-id=100 # 各节点不一样 datadir=/data socket=/data/mysql.sock log-error=/data/error.log pid-file=/data/mysqld.pid log-bin=/data/master-bin log_slave_updates wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_name=pxc-cluster wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63 wsrep_node_name=pxc1 # 各节点不一样 wsrep_node_address=192.168.70.61 # 各节点不一样 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=sstuser:passw0rd pxc_strict_mode=ENFORCING binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2
第二个节点配置文件缓存
[mysqld] server-id=110 # 各节点不一样 datadir=/data socket=/data/mysql.sock log-error=/data/error.log pid-file=/data/mysqld.pid log-bin=/data/master-bin log_slave_updates wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_name=pxc-cluster wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63 wsrep_node_name=pxc2 # 各节点不一样 wsrep_node_address=192.168.70.62 # 各节点不一样 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=sstuser:passw0rd pxc_strict_mode=ENFORCING binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2
第三个节点配置文件socket
[mysqld] server-id=120 # 各节点不一样 datadir=/data socket=/data/mysql.sock log-error=/data/error.log pid-file=/data/mysqld.pid log-bin=/data/master-bin log_slave_updates wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_name=pxc-cluster wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63 wsrep_node_name=pxc3 # 各节点不一样 wsrep_node_address=192.168.70.63 # 各节点不一样 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=sstuser:passw0rd pxc_strict_mode=ENFORCING binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2
配置文件各项配置意义:ide
FLUSH TABLES WITH READ LOCK
),xtrabackup则不须要(它使用percona本身提供的backup lock)。强烈建议采用xtrabackup引导启动Galera集群。ui
/etc/init.d/mysql bootstrap-pxc # 或 systemctl start mysql@bootstrap.service
引导后,查看状态:url
mysql@pxc1> show status like 'wsrep%'; +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec | | ... | ... | | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | ... | ... | | wsrep_cluster_size | 1 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | ... | ... | | wsrep_ready | ON | +----------------------------+--------------------------------------+
上述状态表示,该Galera集群中只有一个节点,状态为Synced(4),表示数据已同步完成(由于是第一个引导节点,无数据须要同步)。角色为Primary,且已经彻底链接并准备好,connected和ready状态决定了该节点是不是Galera中的正式成员,正式成员才能向外提供MySQL服务。日志
正确引导了第一个节点后,须要在第一个节点(Galera的初始化引导节点)上建立SST的认证用户,注意这个用户名和密码须要和配置文件中的对应。
create user 'sstuser'@localhost identified by 'passw0rd'; grant reload,lock tables,process,replication client on *.* to 'sstuser'@localhost; flush privileges;
加入节点很是简单,只需正常启动MySQL服务便可,在启动时会读取配置文件,并根据配置自动加入到对应的Galera集群中。
#### 在第二个节点上执行 /etc/init.d/mysql start #### 在第三个节点上执行 /etc/init.d/mysql start
查看各节点状态:
mysql@pxc3> show status like 'wsrep%'; +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec | | ... | ... | | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | ... | ... | | wsrep_cluster_size | 3 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | ... | ... | | wsrep_ready | ON | +----------------------------+--------------------------------------+
可见这两个节点已经完成了数据同步,且已是Galera集群中的正式成员,能够向外提供MySQL服务。
注意,一个节点加入到Galera集群有两种状况:新节点加入集群、暂时离组的成员再次加入集群。
1.新节点加入Galera集群
新节点加入集群时,须要从当前集群中选择一个Donor节点来同步数据,也就是所谓的state_snapshot_tranfer(SST)过程。SST同步数据的方式由选项wsrep_sst_method决定,通常选择的是xtrabackup。
必须注意,新节点加入Galera时,会删除新节点上全部已有数据,再经过xtrabackup(假设使用的是该方式)从Donor处完整备份全部数据进行恢复。因此,若是数据量很大,新节点加入过程会很慢。并且,在一个新节点成为Synced状态以前,不要同时加入其它新节点,不然很容易将集群压垮。
若是是这种状况,能够考虑使用wsrep_sst_method=rsync来作增量同步,既然是增量同步,最好保证新节点上已经有一部分数据基础,不然和全量同步没什么区别,且这样会对Donor节点加上全局read only锁。
2.旧节点加入Galera集群
若是旧节点加入Galera集群,说明这个节点在以前已经在Galera集群中呆过,有一部分数据基础,缺乏的只是它离开集群时的数据。这时加入集群时,会采用IST(incremental snapshot transfer)传输机制,即便用增量传输。
但注意,这部分增量传输的数据源是Donor上缓存在GCache文件中的,这个文件有大小限制,若是缺失的数据范围超过已缓存的内容,则自动转为SST传输。若是旧节点上的数据和Donor上的数据不匹配(例如这个节点离组后人为修改了一点数据),则自动转为SST传输。
关于GCache以及Galera是如何判断数据状态的,本文不展开描述,可参见Understanding GCache in Galera
可在不一样节点上写入数据、不一样节点上查询数据,看看个节点上数据可否同步。