主要功能:php
优点:
由于是多主,因此不存在Slavelag(延迟)
不存在丢失交易的状况
同时具备读和写的扩展能力
更小的客户端延迟
节点间数据是同步的,而Master/Slave模式是异步的,不一样slave上的binlog多是不一样的html
1.建立集群用户(全部节点)node
systemctl start mysqlmysql
mysql_secure_installationlinux
GRANT ALL ON *.* TO 'galera'@'192.168.8.%' IDENTIFIED BY 'mypassword';web
FLUSH PRIVILEGES;
说明:在选用的初始化节点上建立该用户便可,其它节点加入集群后会自动同步数据库
https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_onbootstrap
cat >/etc/my.cnf.d/galera_common.cnf <<HEREcentos
[mysqld]
wsrep-cluster-name = "test_cluster"
wsrep-provider =
wsrep-provider-options = "gcache.size=256M;gcache.page_size=128M"
wsrep-sst-auth = "galera:mypassword"
binlog-format = row
default-storage-engine = InnoDB
innodb-doublewrite = 1
innodb-autoinc-lock-mode = 2
innodb-flush-log-at-trx-commit = 2
innodb-locks-unsafe-for-binlog = 1
HERE
sed -i '1i
提示:配置集群的最简配置能够参看/opt/mariadb/support-files/wsrep.cnf,且有相关解释,很是人性化
# Options that need to be customized:
#
#
#
# The rest of defaults should work out of the box.
3.初始化集群(db00)
db00: 192.168.8.100
cat >/etc/my.cnf.d/galera_db00.cnf <<HERE
[mysqld]
wsrep-node-name = "db00"
wsrep-sst-receive-address = 192.168.8.100
wsrep-node-incoming-address = 192.168.8.100
bind-address = 192.168.8.100
wsrep_sst_method = rsync
wsrep-cluster-address =
HERE
yum -y install lsof rsync
/etc/init.d/mysql stop
/etc/init.d/mysql start
SHOW STATUS LIKE 'wsrep%';
[root@db00 ~]# /etc/init.d/mysql stop
Shutting down MySQL.. SUCCESS!
[root@db00 ~]# /etc/init.d/mysql start --wsrep-new-cluster
Starting MySQL.. SUCCESS!
说明:用哪一个节点来初始化无所谓,早期的版本mariadb-galera-10.0.x初始化,是用空值gcomm://来表示新的集群,mariadb-10.1.x版本已经废止了,由wsrep-new-cluster参数取代
wsrep_sst_method
wsrep_sst_
will then be called, so a custom script can be written for this purpose. See rsync
mysqldump
, xtrabackup
xtrabackup-v2
, which use those respective methods to perform the state snapshop transfer, or skip
. skip
rsync
mysqldump
xtrabackup-v2
and xtrabackup
xtrabackup-v2
rsync
rsync
, mysqldump
, xtrabackup
, xtrabackup-v2
提示:rsync(须要安装rsync,lsof), rsync,mysqldump都会有READ LOCK的状况,xtrabackup-v2没有,但也有若干限制,请根据实际业务来选定或调整同步方式
xtrabackup安装请参看MariaDB备份还原修复
实测,开始是以rsync方式同步的集群,后改成xtrabackup-v2,很是顺畅,能够无缝切换同步方式
4.配置并启动其他集群节点(db01,db02)
db01: 192.168.8.101
cat >/etc/my.cnf.d/galera_db01.cnf <<HERE
[mysqld]
wsrep-node-name = "db01"
wsrep-sst-receive-address = 192.168.8.101
wsrep-node-incoming-address = 192.168.8.101
bind-address = 192.168.8.101
wsrep-sst-method = rsync
wsrep-cluster-address =
HERE
yum -y install lsof rsync
/etc/init.d/mysql restart
[root@db01 ~]# /etc/init.d/mysql restart
Shutting down MySQL... SUCCESS!
Starting MySQL..SST in progress, setting sleep higher. SUCCESS!
db02: 192.168.8.102
cat >/etc/my.cnf.d/galera_db02.cnf <<HERE
[mysqld]
wsrep-node-name = "db02"
wsrep-sst-receive-address = 192.168.8.102
wsrep-node-incoming-address = 192.168.8.102
bind-address = 192.168.8.102
wsrep-sst-method = rsync
wsrep-cluster-address =
HERE
yum -y install lsof rsync
/etc/init.d/mysql restart
[root@db02 ~]# /etc/init.d/mysql restart
Shutting down MySQL... SUCCESS!
Starting MySQL..SST in progress, setting sleep higher. SUCCESS!
5.查看集群状态
[root@db00 ~]# netstat -tunlp|grep mysqld
tcp
tcp
3306负载数据存储,4567负载集群维护
SHOW STATUS LIKE 'wsrep%';
[root@db00 ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.
Your MariaDB connection id is 7
Server version: 10.0.24-MariaDB-wsrep MariaDB Server, wsrep_25.13.raf7f02e
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep%';
+------------------------------+----------------------------------------------------------+
| Variable_name
+------------------------------+----------------------------------------------------------+
| wsrep_local_state_uuid
| wsrep_protocol_version
| wsrep_last_committed
| wsrep_replicated
| wsrep_replicated_bytes
| wsrep_repl_keys
| wsrep_repl_keys_bytes
| wsrep_repl_data_bytes
| wsrep_repl_other_bytes
| wsrep_received
| wsrep_received_bytes
| wsrep_local_commits
| wsrep_local_cert_failures
| wsrep_local_replays
| wsrep_local_send_queue
| wsrep_local_send_queue_max
| wsrep_local_send_queue_min
| wsrep_local_send_queue_avg
| wsrep_local_recv_queue
| wsrep_local_recv_queue_max
| wsrep_local_recv_queue_min
| wsrep_local_recv_queue_avg
| wsrep_local_cached_downto
| wsrep_flow_control_paused_ns | 0
| wsrep_flow_control_paused
| wsrep_flow_control_sent
| wsrep_flow_control_recv
| wsrep_cert_deps_distance
| wsrep_apply_oooe
| wsrep_apply_oool
| wsrep_apply_window
| wsrep_commit_oooe
| wsrep_commit_oool
| wsrep_commit_window
| wsrep_local_state
| wsrep_local_state_comment
| wsrep_cert_index_size
| wsrep_causal_reads
| wsrep_cert_interval
| wsrep_incoming_addresses
| wsrep_evs_delayed
| wsrep_evs_evict_list
| wsrep_evs_repl_latency
| wsrep_evs_state
| wsrep_gcomm_uuid
| wsrep_cluster_conf_id
| wsrep_cluster_size
| wsrep_cluster_state_uuid
| wsrep_cluster_status
| wsrep_connected
| wsrep_local_bf_aborts
| wsrep_local_index
| wsrep_provider_name
| wsrep_provider_vendor
| wsrep_provider_version
| wsrep_ready
| wsrep_thread_count
+------------------------------+----------------------------------------------------------+
57 rows in set (0.00 sec)
wsrep_ready为ON,则说明MariaDB Galera 集群已经正确运行了。
wsrep_cluster_size 标明了组成集群的节点个数
如上,3个集群节点都己成功正常运行。
6.统一修改集群地址并重启
wsrep-cluster-address = gcomm://192.168.8.100,192.168.8.101,192.168.8.102
MariaDB [(none)]> SHOW VARIABLES LIKE 'wsrep%'\G
*************************** 1. row ***************************
Variable_name: wsrep_auto_increment_control
*************************** 2. row ***************************
Variable_name: wsrep_causal_reads
*************************** 3. row ***************************
Variable_name: wsrep_certify_nonpk
*************************** 4. row ***************************
Variable_name: wsrep_cluster_address
*************************** 5. row ***************************
Variable_name: wsrep_cluster_name
*************************** 6. row ***************************
Variable_name: wsrep_convert_lock_to_trx
*************************** 7. row ***************************
Variable_name: wsrep_data_home_dir
*************************** 8. row ***************************
Variable_name: wsrep_dbug_option
*************************** 9. row ***************************
Variable_name: wsrep_debug
*************************** 10. row ***************************
Variable_name: wsrep_desync
*************************** 11. row ***************************
Variable_name: wsrep_dirty_reads
*************************** 12. row ***************************
Variable_name: wsrep_drupal_282555_workaround
*************************** 13. row ***************************
Variable_name: wsrep_forced_binlog_format
*************************** 14. row ***************************
Variable_name: wsrep_load_data_splitting
*************************** 15. row ***************************
Variable_name: wsrep_log_conflicts
*************************** 16. row ***************************
Variable_name: wsrep_max_ws_rows
*************************** 17. row ***************************
Variable_name: wsrep_max_ws_size
*************************** 18. row ***************************
Variable_name: wsrep_mysql_replication_bundle
*************************** 19. row ***************************
Variable_name: wsrep_node_address
*************************** 20. row ***************************
Variable_name: wsrep_node_incoming_address
*************************** 21. row ***************************
Variable_name: wsrep_node_name
*************************** 22. row ***************************
Variable_name: wsrep_notify_cmd
*************************** 23. row ***************************
Variable_name: wsrep_on
*************************** 24. row ***************************
Variable_name: wsrep_osu_method
*************************** 25. row ***************************
Variable_name: wsrep_provider
*************************** 26. row ***************************
Variable_name: wsrep_provider_options
*************************** 27. row ***************************
Variable_name: wsrep_recover
*************************** 28. row ***************************
Variable_name: wsrep_replicate_myisam
*************************** 29. row ***************************
Variable_name: wsrep_restart_slave
*************************** 30. row ***************************
Variable_name: wsrep_retry_autocommit
*************************** 31. row ***************************
Variable_name: wsrep_slave_fk_checks
*************************** 32. row ***************************
Variable_name: wsrep_slave_threads
*************************** 33. row ***************************
Variable_name: wsrep_slave_uk_checks
*************************** 34. row ***************************
Variable_name: wsrep_sst_auth
*************************** 35. row ***************************
Variable_name: wsrep_sst_donor
*************************** 36. row ***************************
Variable_name: wsrep_sst_donor_rejects_queries
*************************** 37. row ***************************
Variable_name: wsrep_sst_method
*************************** 38. row ***************************
Variable_name: wsrep_sst_receive_address
*************************** 39. row ***************************
Variable_name: wsrep_start_position
*************************** 40. row ***************************
Variable_name: wsrep_sync_wait
40 rows in set (0.00 sec)
三.测试
A.任意节点读写
1.在节点db02上导入了一个zabbix.sql的库
[root@db02 ~]# mysql -uroot -p -e "CREATE DATABASE IF NOT EXISTS zabbix CHARACTER SET utf8"
Enter password:
[root@db02 ~]# mysql -uroot -p zabbix
Enter password:
2.在db01上查看
[root@db01 ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.
Your MariaDB connection id is 10
Server version: 10.0.24-MariaDB-wsrep MariaDB Server, wsrep_25.13.raf7f02e
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database
+--------------------+
| information_schema |
| mysql
| performance_schema |
| zabbix
+--------------------+
4 rows in set (0.01 sec)
MariaDB [(none)]> USE zabbix;
Database changed
MariaDB [zabbix]> SELECT alias,name,surname FROM users;
+-------+--------+---------------+
| alias | name
+-------+--------+---------------+
| Admin | Zabbix | Administrator |
| guest |
+-------+--------+---------------+
2 rows in set (0.00 sec)
B.节点宕机
[root@db02 ~]# mysql -uroot -p -e "SHOW STATUS LIKE 'wsrep_local_state_comment'"
Enter password:
+---------------------------+--------+
| Variable_name
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
[root@db02 ~]# service mysql stop
Shutting down MySQL..... SUCCESS!
[root@db00 ~]# mysql -uroot -p -e "SHOW STATUS LIKE 'wsrep_local_state_comment'"
Enter password:
+---------------------------+--------+
| Variable_name
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
当节点恢复后,会自动加入到集群,很是方便
四.关闭/启动整个集群
A.关闭
在全部集群节点上执行service mysql stop便可
注意:最后关闭的节点很是重要,由于它维护着集群最新的状态,因此在启动的时候必须最早启动,不然,在启动其它节点的会因找不到初始节点而报链接超时的错误
160415
160415
160415
} joined {
} left {
} partitioned {
})
160415
160415
160415
160415
160415
160415
160415
160415
160415
160415
160415
160415 01:21:00 mysqld_safe mysqld from pid file /opt/mariadb/mysqld.pid ended
B.启动
最早启动最后关闭的mysql节点,实测,仍然没法启动集群
若是忘记了哪一个最后关闭的,能够经过集群初始化的节点重启初始化下,如:
[root@db00 ~]# /etc/init.d/mysql start --wsrep-new-cluster
Starting MySQL.. SUCCESS!
[root@db00 ~]# mysql -uroot -p -e "SHOW STATUS LIKE 'wsrep_local_state_comment'"
Enter password:
+---------------------------+--------+
| Variable_name
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
[root@db01 ~]# service mysql start
Starting MySQL... SUCCESS!
[root@db02 ~]# service mysql start
Starting MySQL... SUCCESS!
五.Galera监控
示例脚本/opt/mariadb/support-files/wsrep_notify
查看MySQL版本: SHOW GLOBAL VARIABLES LIKE 'version';
查看wsrep版本: SHOW GLOBAL STATUS LIKE 'wsrep_provider_version';
查看wsrep有关的全部变量: SHOW VARIABLES LIKE 'wsrep%' \G
查看Galera集群状态: SHOW STATUS LIKE 'wsrep%';
监控状态参数说明
集群完整性检查:
wsrep_cluster_state_uuid:在集群全部节点的值应该是相同的,有不一样值的节点,说明其没有链接入集群
wsrep_cluster_conf_id:正常状况下全部节点上该值是同样的。若是值不一样,说明该节点被临时"分区"了。当节点之间网络链接恢复的时候应该会恢复同样的值
wsrep_cluster_size:若是这个值跟预期的节点数一致,则全部的集群节点已经链接。
wsrep_cluster_status:集群组成的状态。若是不为"Primary",说明出现"分区"或是"split-brain"情况
节点状态检查:
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,则能够从该项查看缘由
复制健康检查:
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这两个值最高。这两个值较低的话,相对更好
检测慢网络问题:
wsrep_local_send_queue_avg:网络瓶颈的预兆。若是这个值比较高的话,可能存在网络瓶冲突或死锁的数目
wsrep_last_committed:最后提交的事务数目
wsrep_local_cert_failures和wsrep_local_bf_aborts:回滚,检测到的冲突数目