在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状态。