mariadb-galera-cluster-10.3

在centos7.4.1708部署mariadb-10.3.5 galera cluster集群

本人在阿里云ECS云主机上配置,cpu核数2 内存2G 带宽1M,3台阿里云主机所在的安全组要开放全部协议的所有端口(针对mariadb-galera-cluster集群中同步用到的端口来开放比较麻烦,涉及端口TCP 3306 4567 4568,4444,由于一些端口用的是tcp协议,一些端口用的UDP协议,所以建议这后面三个端口把tcp,udp都开放,如果你嫌麻烦,就索性开放所有协议所有端口)。

1.ssh链接到三台云主机后,关闭SELinux(阿里云主机默认是已经关闭的),通过配置文件来关闭,关闭防火墙,默认开启不启用。

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
systemctl stop firewalld.service
systemctl disable firewalld.service
yum clean all

2.对三台云主机的/etc/hosts文件进行修改

cat >/etc/hosts <<EOF
47.75.71.94     node1
47.75.73.200    node2
47.75.74.157    node3
EOF

在node1节点上测试ping

ping -c 3 node2
ping -c 3 node3

3.三节点都配置mariadb的yum源仓库,并安装软件包.

cat >/etc/yum.repos.d/mariadb.repos <<EOF
name = MariaDB
baseurl = http://yum.mariadb.org/10.3.5/centos74-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

安装软件包:

yum install -y MariaDB-server MariaDB-client galera

4.mariadb初始化三台节点(通过mysql-secure_installation命令配置密码)

systemctl start mariadb
mysql_secure_installation(设置root密码为cntsp)

mysql -uroot -pcntsp
grant all privileges on *.* to root@"%" identified by "cntsp";
#grant all privileges on *.* to sst_user@"%" identified by "cntsp";
flush privileges;
quit

systemctl stop mariadb  (三台节点都stop)

5.配置galera

node1节点配置在/etc/my.cnf.d/service.cnf中的galera块添加如下配置

[galera]
wsrep_on=ON 
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://47.75.71.94,47.75.73.200,47.75.74.157"
wsrep_node_name= node1
wsrep_node_address=47.75.71.94
binlog_format=row
default_storage_engine=InnoDB
wsrep_slave_threads=1
wsrep_sst_method=rsync
#wsrep_sst_auth=sst_user:cntsp

node2节点配置在/etc/my.cnf.d/service.cnf中的galera块添加如下配置

wsrep_on=ON 
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://47.75.71.94,47.75.73.200,47.75.74.157"
wsrep_node_name= node2
wsrep_node_address=47.75.73.200
binlog_format=row
default_storage_engine=InnoDB
wsrep_slave_threads=1
wsrep_sst_method=rsync
#wsrep_sst_auth=sst_user:cntsp

node3节点配置在/etc/my.cnf.d/service.cnf中的galera块添加如下配置

wsrep_on=ON 
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://47.75.71.94,47.75.73.200,47.75.74.157"
wsrep_node_name= node3
wsrep_node_address=47.75.74.157
binlog_format=row
default_storage_engine=InnoDB
wsrep_slave_threads=1
wsrep_sst_method=rsync
#wsrep_sst_auth=sst_user:cntsp

6.启动集群服务

在node1节点上执行:galera_new_cluster
在node2、node3上依次执行:service mysql start
初次启动要等大概15分钟,(我理解的是因为要做SST全量备份)

(20分钟后查看3306端口和4567端口是否起来)
netstat -lntp

7.验证集群状态

进入node1

mysql -uroot -pcntsp
show status like 'wsrep_ready';
show status like 'wsrep_cluster_size';
show status like 'wsrep%';
在node1上创建数据库,看看node2 node3是否同步(已经验证过了)
create database test1;

8.模拟脑裂后的处理

下面模拟在网络抖动发生丢包的情况下,两个节点失联导致脑裂。在node2和node3两个节点上分别执行:(这个centos7是用的firewalld防火墙)

iptables -A INPUT -p tcp --sport 4567 -j DROP
iptables -A INPUT -p tcp --dport 4567 -j DROP

以上命令用来禁止wsrep全同步复制4567端口通信

9.因故障需要对集群的两个节点进行停机检查,重启服务后是否能同步数据(已经验证过了)

10.异常处理:当机房突然停电,所有galera主机都非正常关机,来电后开机,回导致galera集群服务无法正常启动。如果处理?(未验证)

第1步:开启galera集群的群主主机的mariadb服务。
第2步:开启galera集群的成员主机的mariadb服务。
异常处理:galera集群的群主主机和成员主机的mysql服务无法启动,如何处理?
解决方法一:第1步、删除garlera群主主机的/var/lib/mysql/grastate.dat状态文件
/bin/galera_new_cluster启动服务。启动正常。登录并查看wsrep状态。
第2步:删除galera成员主机中的/var/lib/mysql/grastate.dat状态文件
systemctl restart mariadb重启服务。启动正常。登录并查看wsrep状态。
解决方法二:第1步、修改garlera群主主机的/var/lib/mysql/grastate.dat状态文件中的0为1
/bin/galera_new_cluster启动服务。启动正常。登录并查看wsrep状态。
第2步:修改galera成员主机中的/var/lib/mysql/grastate.dat状态文件中的0为1
systemctl restart mariadb重启服务。启动正常。登录并查看wsrep状态。

文章作者: 阿培
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 阿培 !
  目录