Centos 7 下 Mysql 5.7 Galera Cluster 集群部署
一、介绍
传统架构的使用,一直被人们所诟病,因为MySQL的主从模式,天生的不能完全保证数据一致,很多大公司会花很大人力物力去解决这个问题,而效果却一般,可以说,只能是通过牺牲性能,来获得数据一致性,但也只是在降低数据不一致性的可能性而已。所以现在就急需一种新型架构,从根本上解决这样的问题,天生的摆脱掉主从复制模式这样的“美中不足”之处了。
Galera Cluster :集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,多节点都可以作为主节点,节点是对等的,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。相比传统架构,Galera Cluster解决的最核心问题是,在三个实例(节点)之间,它们的关系是对等的,multi-master架构的,在多节点同时写入的时候,能够保证整个集群数据的一致性,完整性与正确性。
本博客的部署始于本人openstack中 mysql 多主集群部署的一个小功能。第一次接触,记录下自己的心路历程。排除了很多坑点,记录下应该注意到的细节。
二、环境介绍
1、系统:
CentOS Linux release 7.4.1708 (Core)
2、节点(3台):
openstack1:10.6.32.51
openstack2:10.6.32.52
openstack3:10.6.32.53
3、关闭 firewall 、selinux
4、设置时间同步:chrony
5、部署工具安装(可选):
# yum -y install bash-completion.noarch bash-completion-extras.noarch vim net-tools
6、查看和卸载 系统原有的 mariadb、mysql (必须卸载,否则后期会有问题):
# rpm -qa | grep maria
# rpm -qa | grep mysql
# yum remove mariiadb
# yum remove mysql
7、更新 epel 源
# yum -y install epel-release
三、mysql 5.7 Galera Cluster 部署
1、下载 集成 galera 的mysql rpm包(所有节点)
2、安装mysql、galera(所有节点)
# yum -y install ./mysql*.rpm
# yum -y install galera
3、数据库启动 (openstack1上操作)
# systemctl start mysqld
# systemctl enable mysqld
4、添加Galera Cluster 数据同步用户(openstack1上操作)
a、mysql 5.7 默认有密码,密码查看方式:
# more /var/log/mysqld.log | grep password
A temporary password is generated for root@localhost:kqi6>roGB.lF 默认随机密码
b、修改mysql root 密码及添加 数据同步用户galera:
# mysql -uroot -p kqi6>roGB.lF
# SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
# GRANT ALL ON *.* TO 'galera'@'localhost' IDENTIFIED BY 'youpasswd'; (添加用户:galera,后期集群配置文件用到 )
c、停止数据库,开始配置同步集群文件。
# systemctl stop mysqld
5、配合集群文件(所有节点上操作)
# vim /etc/my.cnf
#openstack2 不同之处:
# vim /etc/mycnf
#openstack3 不同之处:
# vim /etc/mycnf
6、安装数据同步插件,本博客使用的是: xtrabackup-v2(注意:xtrabackup 2.3的版本不支持,mysql 5.7 需要安装 xtrabackup 2.4)(所有节点上操作)
# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
# yum search xtrabackup
# yum -y install percona-xtrabackup-24.x86_64 (mysql 5.7 一定要安装 percona-xtrabackup-24.x86_64,否则后续的报错会让你怀疑人生。)
7、集群启动
a、当集群中还没有节点启动时,确认所有节点上没有mysql进程,如果有请关闭。(所有节点操作)
# ps -aux | grep mysql
# kill -9 mysql-id
b、启动集群中第一个节点。(openstack1 上操作)
# /usr/sbin/mysqld --wsrep-new-cluster --user=root & (当且仅当 集群中没有任何节点开启,启动第一个节点时使用)
c、启动其他节点,逐台启动,然后查看集群状态
# systemctl start mysqld (集群中有节点后就可以正常启动。openstack2 和openstack3 上依次启动,启动一台查看依次集群状态)
集群状态查看,数据库中查看:
mysql> show status like 'wsrep_%';
我们可以关注几个关键的参数:
wsrep_connected = on链接已开启
wsrep_local_index = 1在集群中的索引值
wsrep_cluster_size =3集群中节点的数量 (每启动一台,如果加入到集群中,size 会+1)
wsrep_incoming_addresses =10.6.32.51:3306,10.6.32.53:3306,10.6.32.52:3306集群中节点的访问地址
d、重新启动第一个节点的数据库(opoenstsck1上操作)
# kill -i mysq-id (因为第一次为非正常启动,需要使用kill 杀掉进程来关闭mysql)
# systemctl restart mysqld
(如果重启失败,请查看/var/lib/mysql/mysql.sock.lock 是否存在,如果存在,删除后重新启动。)
e、在各节点使用 数据同步用户galera登录,如果可以正常启动并登录成功。到此,Galera Cluster 已经成功部署。
四、测试
1、在openstck1 节点上创建测试数据库test,其他节点查看是否可以看到测试库。
mysql> create database test;
2、其他节点查看:
数据库实时自动同步,再次证明 Galera Cluster 集群部署成功。
3、附加,查看数据库最大连接数
mysql> show variables like '%max_connections%';
如期,已经修改为2000,数据库最大连接太小,后期openstack 会报错:数据库连接数太小。
谢谢~~~
__EOF__

本文链接:https://www.cnblogs.com/weijie0717/p/8445167.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言