mysql galera cluster官网:http://galeracluster.com/documentation-webpages/
相关安装教程:(不一定管用)
http://blog.csdn.net/zhiaini06/article/details/52317606
https://www.howtoing.com/how-to-configure-a-galera-cluster-with-mysql-5-6-on-ubuntu-16-04/
配置环境:
(1)3个Ubuntu服务器,版本ubuntu16.04
服务器IP:
192.168.93.133(主节点)
192.168.93.132(从节点1)
192.168.93.134(从节点2)
(2)三台服务器上均安装mysql5.7
(3)
1.首先安装必要依赖
2.添加GunPG key
3.键入命令确认Ubuntu版本信息
lsb_release -a
4.配置Ubuntu下galera源。
在galera.list文件中添加url,命令为:nano -w galera.list
# Codership Repository (Galera Cluster for MySQL) deb http://releases.galeracluster.com/mysql-wsrep-VERSION/DIST RELEASE main deb http://releases.galeracluster.com/galera-3/DIST RELEASE main
注意:<>内字段需要自行替换与系统相应的版本。详解如下:
VERSION:mysql-wsrep 版本号。如: 5.7
DIST:通常为ubuntu
RELEASE:Ubuntu 发行版本。如: Ubuntu12.04 选择 precise ;Ubuntu 14.04 选择 trusty ; Ubuntu16.04 选择:xenial
如果不清楚,可通过命令lsb_release -a来查看上述信息。
5.继续配置源
在galera.pref 文件中添加如下配置:打开命令:nano -w galera.pref
更新源:
至此配置全部完成。
7.一旦在所有三个服务器上更新了存储库,我们就可以在三台服务器上运行以下命令安装MySQL5.7的修补程序与Galera
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql binlog_format=ROW bind-address=0.0.0.0
#bind-address=127.0.0.1 default_storage_engine=innodb innodb_autoinc_lock_mode=2 innodb_flush_log_at_trx_commit=0 innodb_buffer_pool_size=122M wsrep_provider=/usr/lib/libgalera_smm.so wsrep_provider_options="gcache.size=300M; gcache.page_size=300M" wsrep_cluster_name="mycluster" wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134" wsrep_sst_method=rsync [mysql_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
[mysql]
wsrep_cluster_name="mycluster" wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_node_name="mynode133"#是否加引号?
wsrep_node_address="192.168.93.133"#主节点IP
conf.d/
.
!includedir /etc/mysql/conf.d/
(2)确保二进制日志格式设置为使用行级复制,而不是语句级复制。
binlog_format=ROW
default_storage_engine=InnoDB
Galera集群不会使用MyISAM或类似nontransactional存储引擎。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
binlog_format=ROW
bind-address=0.0.0.0
#bind-address=127.0.0.1
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=122M
wsrep_provider=/usr/lib/libgalera_smm.so
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M"
wsrep_cluster_name="mycluster"
wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_sst_method=rsync
[mysql_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
wsrep_cluster_name="mycluster"
wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_node_name="mynode132"#是否加引号?
wsrep_node_address="192.168.93.132"#从节点1的IP
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
binlog_format=ROW
bind-address=0.0.0.0
#bind-address=127.0.0.1
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=122M
wsrep_provider=/usr/lib/libgalera_smm.so
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M"
wsrep_cluster_name="mycluster"
wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_sst_method=rsync
[mysql_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
wsrep_cluster_name="mycluster"
wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_node_name="mynode134"#是否加引号?
wsrep_node_address="192.168.93.134"#从节点2的IP
对所有系统使用SysV init
脚本,运行以下命令:
service mysql start --wsrep-new-cluster//常用该命令
系统使用 systemd
和Galera集群5.5或5.6,使用这个命令:
systemctl start mysql --wsrep-new-cluster
系统使用 systemd
和Galera集群5.7,使用专用的 mysqld_bootstrap
脚本:
/usr/bin/mysqld_bootstrap
一旦节点启动数据库服务器,通过检查wsrep_cluster_size来检查该启动是否成功。在数据库客户端,运行以下查询:
SHOW STATUS LIKE 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
这个状态变量告诉您连接到集群的节点的数量。因为您刚刚启动了第一个节点,所以值是1。
此时,不要重新启动mysqld。
(2)在集群中添加额外的节点
当您启动第一个节点时,您将初始化一个新的集群。完成此操作后,添加所有其他节点的过程是相同的。
要向现有的集群添加一个节点,可以像往常一样启动mysqld。如果您的系统使用init,运行以下命令:
service mysql start
对于使用systemd的系统,可以运行以下命令:
systemctl start mysql
当数据库服务器初始化为一个新节点时,它连接到由wsrep_cluster_address参数定义的集群成员。使用该参数,它将自动检索集群映射并连接到所有可用的节点。
您可以使用wsrep_cluster_size状态变量来测试节点连接是否成功。在数据库客户端,运行以下查询
SHOW STATUS LIKE 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+
这表明第二个节点现在连接到集群。重复这个过程,将剩下的节点添加到集群中。
当集群中的所有节点都同意成员状态时,就会启动状态交换。在状态交换中,新节点检查集群状态。如果节点状态与集群状态不同,(通常情况下是这样),新节点将请求从集群中传输状态快照,并将其安装到本地数据库中。
完成此操作之后,新节点就可以使用了。
10 测试集群
当您的集群启动并运行时,您可能想要测试某些特性,以确保它们正常工作,或者为可能出现的实际问题做好准备。
(1)复制测试
要测试Galera集群是否按照预期工作,请完成以下步骤:
1 在数据库客户机上,验证所有节点之间是否相互连接
SHOW STATUS LIKE 'wsrep_%'; +---------------------------+------------+ | Variable_name | Value | +---------------------------+------------+ ... | wsrep_local_state_comment | Synced (6) | | wsrep_cluster_size | 3 | | wsrep_ready | ON | +---------------------------+------------+
wsrep_local_state_comment:值同步表明该节点连接到集群和操作。
wsrep_cluster_size:该值表示集群中的节点。
wsrep_ready:该值表明该节点连接到集群并能够处理事务。
CREATE DATABASE galeratest; USE galeratest; CREATE TABLE test_table ( id INT PRIMARY KEY AUTO_INCREMENT, msg TEXT ) ENGINE=InnoDB; INSERT INTO test_table (msg) VALUES ("Hello my dear cluster."); INSERT INTO test_table (msg) VALUES ("Hello, again, cluster dear.");
3 在node2的数据库客户机上,检查数据是否被正确复制:
USE galeratest; SELECT * FROM test_table; +----+-----------------------------+ | id | msg | +----+-----------------------------+ | 1 | Hello my dear cluster. | | 2 | Hello, again, cluster dear. | +----+-----------------------------+
SELECT查询中给出的结果表明,您在node1中输入的数据已经复制到node2中。
(2) split - brain测试
为了在两个节点集群上测试Galera集群,请完成以下步骤:
(1)断开两个集群节点之间的网络连接。quorum丢失,节点不服务请求。
killall -9 mysqld
为了模拟网络断开,使用iptables或netem来阻止所有的ip流量到一个节点
要模拟整个服务器崩溃,在虚拟的来宾中运行每个mysqld,并彻底终止整个虚拟实例
# GALERA saved state version: 2.1 uuid: 5ee99582-bb8d-11e2-b8e3-23de375c1d30 seqno: 8204503945773 cert_index:
要找到最后一个提交事务的序列号,使用--wsrep-recover选项运行mysqld。这将把InnoDB表空间恢复到一致状态,将对应的全局事务ID值打印到错误日志中,然后退出。例如:
130514 18:39:13 [Note] WSREP: Recovered position: 5ee99582-bb8d-11e2-b8e3- 23de375c1d30:8204503945771
mysqld_safe
自动恢复,并在下一次启动时将值传递给数据库服务器。
# GALERA saved state version: 2.1 uuid: 5981f182-a4cc-11e6-98cc-77fabedd360d seqno: 1234 safe_to_bootstrap: 1
这样的节点可以用来引导集群。尝试使用任何其他节点的引导将导致以下错误消息:
2016-11-07 01:49:19 5572 [ERROR] WSREP: It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .
(6)GCACHE复苏
从提供者版本3.19开始,Galera提供了gcache。恢复参数。如果设置为yes,Galera将尝试在节点启动时恢复gcache。
如果gcache恢复成功,则该节点将处于向其他连接节点提供支持的位置,这将加快整个集群的总体重启时间。
Gcache恢复要求整个Gcache文件被读取两次。对于位于慢磁盘上的大型gcache文件,此操作可能需要一些时间。
Gcache恢复是“最好的努力”操作。如果恢复不成功,则节点将继续正常运行,但是其他节点在尝试连接时将返回到SST。