MariaDB-Galera-Cluster 工具实现mariadb三主高可用(systemctl启动)

安装mariadb

### 安装包x86

https://blossom.master-jsx.top/pic/home/bl/img/U1/galera-25.3.12-2.el7.x86_64.rpm


yum -y install galera mariadb-server-galera

配置 mariadb配置文件

[mysqld]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so    #集群同步工具
wsrep_cluster_address="gcomm://1.1.1.1,2.2.2.2,3.3.3.3"   #三个集群的IP地址
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name="MyCluster"    #集群名称,三台需要一模一样
wsrep_node_address="1.1.1.1"   # 本机的IP地址
wsrep_node_name="node1"   #集群中的主机名称
wsrep_sst_method=rsync   #同步方式
wsrep_sst_auth=root:mysqlpasswd   #本地数据库的账号密码
systemctl  restart mariadb
systemctl  enable mariadb

启动其他节点

#这些节点会自动加入到通过 wsrep_cluster_address 配置的集群中

systemctl start mariadb
systemctl  enable mariadb

验证集群状态

mysql -u root -p -e "SHOW VARIABLES LIKE 'wsrep_cluster_address';"

同步的端口

tcp        0      0 0.0.0.0:4567            0.0.0.0:*               LISTEN      70806/mysqld

可能遇到的报错

160613  9:43:01 [ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():208: Failed to open backend connection: -110 (Connection timed out)
160613  9:43:01 [ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1379: Failed to open channel ''galera_cluster’' at 'gcomm://10.16.24.107,10.16.24.108,10.16.24.109': -110 (Connection timed out)
160613  9:43:01 [ERROR] WSREP: gcs connect failed: Connection timed out
160613  9:43:01 [ERROR] WSREP: wsrep::connect(gcomm://10.16.24.107,10.16.24.108,10.16.24.109) failed: 7


问题原因:
该节点不是最后一个离开集群的节点(最后停掉的节点),可能没有包含所有更新的数据.


方法1:
强制从该节点启动,需要手工编辑grastate.dat(/var/lib/docker/volumes/mariadb/_data/grastate.dat)文件,设置
safe_to_bootstrap=1,可以尝试使用find(find / -name grastate.dat)命令查找该文件;

方法2:
不强制从该节点启动,我们逐一排查每个节点下的grastate.dat文件(该文件在data目录下),找到safe_to_bootstrap=1的节点,然后在该节点上启动即可。