MariaDB Galera集群搭建及维护

1. 搭建集群

参考 如何在ubuntu16.04上搭建mariadb galera集群

2. 启动主节点

如果使用 service mysql start --wsrep-new-cluster 启动主节点,可能会报错:

[ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():208: Failed to open backend connection: -110 (Connection timed out)

我们安装的版本应该在 10.2 以上了,需要用如下指令来启动:

galera_new_cluster

这时候可能还启动不了

如果这个节点之前以集群节点形式启动过,因为某些原因重启了数据库,那么启动过程会告诉你,由于这个节点不是集群中最后一个关闭的节点,所以无法以主节点形式启动。因为如果这个节点不是最后一个关闭的话,它的数据就不是最新的数据,如果以它为主节点,别的节点从它同步数据,就会造成数据损失

这时候如果一定要以该节点作为主节点启动,可以通过如下方法解决:

/var/lib/mysql/grastate.dat 文件中,把 safe_to_bootstrap 设置为1。

然后重新执行 galera_new_cluster

这样,主节点就启动了

注意,这是危险操作,慎用!

3. 启动从节点

使用 service mysql start 命令启动从节点,从节点会从主节点同步数据,但同步的过程中可能会花式报出各种形式的错误,最有可能的是超时错误

一些错误如下:

[ERROR] WSREP: Process was aborted.
[ERROR] WSREP: Process completed with error: wsrep_sst_rsync --role 'joiner' --address '192.168.0.179' --datadir '/
[ERROR] WSREP: Failed to read uuid:seqno and wsrep_gtid_domain_id from joiner script.
[ERROR] WSREP: SST failed: 2 (No such file or directory)
[ERROR] Aborting
[Warning] WSREP: 1.0 (compute1): State transfer to 0.0 (compute2) failed: -255 (Unknown error 255)
[ERROR] WSREP: gcs/src/gcs_group.cpp:gcs_group_handle_join_msg():737: Will never receive state. Need to abort.
WSREP: Member 2.0 (compute3) requested state transfer from '*any*', but it is impossible to select State
[ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():208: Failed to open backend connection: -110 (Connection timed out)
[ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1379: Failed to open channel ''galera_cluster’' at 'gcomm://192.168.0.177,192.168.0.179,192.168.0.205': -110 (Connection timed out)
[ERROR] WSREP: gcs connect failed: Connection timed out
[ERROR] WSREP: wsrep::connect(gcomm://192.168.0.177,192.168.0.179,192.168.0.205) failed: 7
[ERROR] Aborting

解决办法如下:

删除一些缓存文件:

在所有数据库节点的 /var/lib/mysql 目录下删除 galera.cachegvwstate.dat 文件,重新依次启动主节点和从节点。

如果从节点依旧不能正常启动,很可能是因为主节点数据过大,同步过程超时,所以可以在从节点的 /etc/systemd/system/mariadb.service.d 目录下,新建一个配置文件,把超时时间设置为永不超时,如下:

vim /etc/systemd/system/mariadb.service.d/timeout.conf
[Service] 
TimeoutSec=infinity

重启下该文件:

systemctl daemon-reload

然后重启从节点数据库 service mysql restart

这时候应该可以正常启动了

参考

https://www.claudiokuenzler.com/blog/494/galera-cluster-mysql-not-starting-failed-to-open-channel-reach-primary

https://serverfault.com/questions/812719/mysql-mariadb-not-starting

https://stackoverflow.com/questions/37212127/mariadb-gcomm-backend-connection-failed-110

https://www.atlantic.net/hipaa-compliant-cloud-storage/how-to-setup-rsync-daemon-linux-server/

http://blog.itpub.net/133735/viewspace-2140548/

数据库集群的学习还任重道远

你可能感兴趣的:(MariaDB Galera集群搭建及维护)