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.cache
和 gvwstate.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://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/
数据库集群的学习还任重道远
网友评论