Mysql5.7.31 Galera3.25 Cluster部署
主机清单:
主机hostname | IP | 操作系统 | 集群节点 |
cen34 | 192.168.1.34 | CentOS-7.6_1810_x86_64 | 第一主节点(个人起的名字) |
cen35 | 192.168.1.35 | CentOS-7.6_1810_x86_64 | 主节点 |
cen36 | 192.168.1.36 | CentOS-7.6_1810_x86_64 | 主节点 |
一、安装文件准备:
mysql及Galera安装文件下载:
官网地址:https://galeracluster.com/downloads/
Galera3对应的mysql版本主要是5.5~5.7,Galera4对应的版本是mysql8
Mysql和Galera其他版本下载地址:http://releases.galeracluster.com/
将下载好的文件传给各主机,我放在/mnt/mysql_cluster
二、安装环境准备(各主机需要操作):
2.1 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2.2 关闭selinux(这一步不知道是否是必须的,我的各主机是关闭的)
vi /etc/selinux/config
设置主要参数及值:
SELINUX=disabled
2.3 卸载mysql或者自带的Mariadb
查询已安装的mysql文件
rpm -qa | grep mysql
卸载安装的mysql(如果查询到系统中有mysql就卸载,查不到直接跳过)
rpm -e --nodeps mysql.xxx
查询已安装的MariaDB文件(CentOS7 默认带MariaDB数据库,需要卸载)
rpm -qa | grep mariadb
卸载安装的MariaDB
rpm -e --nodeps mariadb.xxx
2.4 安装依赖
yum -y install lsof net-tools perl socat openssl openssl-devel boost-devel rsync
三、操作步骤(各主机操作)
各主机安装过程一样,先装mysql(安装mysql-wsrep-test-5.7-5.7.31-25.23.el7.x86_64.rpm的时候会提示perl(json)依赖,此前已经装过估计出现冲突或者其他原因可以忽略,mysql-test这个包可以不装):
3.1 安装mysql
cd /mnt/mysql_cluster
rpm -ivh --nodeps mysql-wsrep*.rpm
3.2 安装Galera3.25
rpm -ivh galera-3-25.3.31-1.el7.x86_64.rpm
安装完成后进行mysql配置如下。
四、数据库集群配置
4.1 启动mysql,并设置开机启动
systemctl start mysqld
systemctl enable mysqld
4.2 设置root密码,同时创建同步用户
查看mysql安装的默认密码并复制:less /var/log/mysqld.log | grep password
登录mysql(输入刚才复制的密码):
mysql -u root -p
set global validate_password_policy=0;
set global validate_password_length=0;
修改root密码
alter user 'root'@'localhost' identified by 'password';
set password=password('password');
创建同步用户
grant all on *.* to 'syncuser'@'192.168.1.%' identified by 'password';
flush privileges;
4.3 配置Galera集群第一主节点(第一主节点的配置内容和其他主节点的配置内容略有不同)
vi /etc/my.cnf 在最后加入下边内容(第一主节点):
#集群配置
server_id=34
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='mygalera'
wsrep_cluster_address='gcomm://'
wsrep_node_name='cen34'
wsrep_node_address='192.168.1.34'
wsrep_sst_auth=syncuser:admin
wsrep_sst_method=rsync
说明:
server_id=34 :节点id,确保各主机mysql的此ID在集群中唯一
wsrep_cluster_name='mygalera' :集群名称(确保各节点一致)
wsrep_cluster_address='gcomm://' : 第一主节点就是这么配,原因是什么不清楚。其他节点此值为非本节点IP列表(以逗号分隔)
wsrep_node_name :本节点主机名
wsrep_node_address :本节点ip
wsrep_sst_auth :同步用户名及密码
wsrep_sst_method=rsync :同步方式,网上看过其他同步方式,在此使用rsync。不管用哪种同步方式都需要安装相应的工具
4.4 配置Galera集群其他节点
操作方式和4.2一样,只是配置不同
cen35配置:
#集群配置
server_id=35
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='mygalera'
wsrep_cluster_address='gcomm://192.168.1.34,192.168.1.36'
wsrep_node_name='cen35'
wsrep_node_address='192.168.1.35'
wsrep_sst_auth=syncuser:admin
wsrep_sst_method=rsync
cen36配置:
#集群配置
server_id=36
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='mygalera'
wsrep_cluster_address='gcomm://192.168.1.34,92.168.1.35'
wsrep_node_name='cen36'
wsrep_node_address='192.168.1.36'
wsrep_sst_auth=syncuser:admin
wsrep_sst_method=rsync
4.5 启动集群各节点服务(启动顺序有要求)
先启动第一主节点cen34,再启动其他节点,关闭的时候先关闭其他节点,最后关闭第一主节点,否则集群启动不了,需要处理(具体怎么处理后面会说)。
systemctl restart mysqld
依次启动各节点后查看同步状态信息
4.6 查看集群信息
可登陆各节点mysql查询(登陆后执行如下查询命令)
show status like 'wsrep%';
4.7 测试同步功能(简单测试)
在数据库访问客户端登陆各节点(cen34,cen35,cen36),
在cen36创建测试库testdb,创建测试表test_tb
在cen34,cen35刷新后可看到cen36上创建的库表
五 启动失败处理
启动失败原因有很多,其他情况不清楚怎么解决,这里只介绍没有按照启动顺序和关闭顺序启动的这种情况:
当没有按照节点关闭顺序停止服务的时候,再次启动集群将导致各节点无法启动
正确启动顺序:先起第一主节点,再启动后面各节点
正确关闭顺序:先关闭非第一主节点,最后关闭第一主节点
处理办法:
在各节点编辑文件(/var/lib/mysql/grastate.dat):vi /var/lib/mysql/grastate.dat
确保各节点该文件中safe_to_bootstrap: 0,这个参数的值都为0,或者只有第一主节点的此值为1,其他节点此值为0
ps:说是多主集群,感觉这种配置方式第一主节点挂掉后,想再启动集群肯定是启动不了的。网上还有其他配置方式,暂时还没有尝试。有空了尝试一下其他配置方式再更新。
上述信息主要参考如下文章,感谢他们分享:
https://www.pianshen.com/article/27451587419/
博主:wzy0623 https://blog.csdn.net/wzy0623/article/details/102607193