MariaDB Galera Cluster 部署

发布时间 2023-06-06 15:32:59作者: ChAnAn

MariaDB Galera Cluster 部署介绍

MariaDB作为MySQL的一个分支,在开源项目中已经广泛使用,例如openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的。

1、MariaDB Galera Cluster 介绍

Galera Cluster是由第三方公司Codership所研发的一套免费开源的集群高可用方案,实现了数据零丢失,官网地址为http://galeracluster.com/。其在MySQLInnoDB存储引擎基础上打了wrep(虚拟全同步复制),Percona/MariaDB已捆绑在各自的发行版本中。 MariaDB Galera Cluster是MariaDB同步多主机集群。它仅支持XtraDB/InnoDB存储引擎(虽然有对MyISAM实验支持,具体看wsrep_replicate_myisam系统变量)。

2、MariaDB Galera Cluster主要功能

  • 同步复制

  • 真正的multi-master,即所有节点可以同时读写数据库 自动的节点成员控制,失效节点自动被清除

  • 新节点加入数据自动复制

  • 真正的并行复制,行级

  • 用户可以直接连接集群,使用感受上与MySQL完全一致

优势:

  • 因为是多主,所以不存在Slavelag(延迟)
  • 不存在丢失事务的情况
  • 同时具有读和写的扩展能力
  • 更小的客户端延迟
  • 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的

缺点:

  • 加入新节点时开销大,需要复制完整的数据
  • 不能有效地解决写扩展的问题,所有的写操作都发生在所有的节点
  • 有多少个节点,就有多少份重复的数据
  • 由于事务提交需要跨节点通信,即涉及分布式事务操作,因此写入会比主从复制慢很多,节点越多,写入越慢,死锁和回滚也会更加频繁
  • 对网络要求比较高,如果网络出现波动不稳定,则可能会造成两个节点失联,Galera Cluster集群会发生脑裂,服务将不可用

3、环境准备

名称 IP地址
node01 192.168.11.11
node02 192.168.11.12
node03 192.168.11.13

4、环境部署

1> 三台主机添加hosts

[root@node01 ~]# cat /etc/hosts
192.168.11.11 node01
192.168.11.12 node02
192.168.11.13 node03

2> 加大文件描述符

[root@node01 ~]# tail -3 /etc/security/limits.conf
* soft nofile 65536 
* hard nofile 65536

3>时间同步

[root@node03 ~]# tail -4 /etc/sysctl.conf
fs.file-max=655350
net.ipv4.ip_local_port_range = 1025 65000
net.ipv4.tcp_tw_recycle = 1

# 使其生效
[root@node01 ~]# sysctl -p
fs.file-max = 655350
net.ipv4.ip_local_port_range = 1025 65000
net.ipv4.tcp_tw_recycle = 1

4>安装MariaDB

方式一:yum安装

配置安装源:(所有节点)
[root@node01 ~]# vim /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.9.6/centos7-amd64/
gpgcheck=0

安装:(所有节点)
[root@node01 ~]# yum install -y mariadb-server

方式二:源码包安装

[root@node01 ~]# wget -c https://releases.galeracluster.com/galera-4.9/centos/7/x86_64/galera-4-26.4.9-1.el7.x86_64.rpm

安装依赖库

# yum install -y boost-devel.x86_64 libodb-boost-devel.x86_64  bzr scons

编译galera源码

# scons

安装galera库

 # cp  libgalera_smm.so /usr/lib64/galera/

5> 配置集群

1、修改配置文件/etc/my.cnf
[root@node01 ~]# vim /etc/my.cnf.d/server.conf
# 添加以下内容
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.11.11,192.168.11.12,192.168.11.13"
wsrep_sst_auth=tt:tt123
binlog_format=row
wsrep_node_name=db
wsrep_node_address=192.168.11.11
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=2G
#
# Allow server to accept connections on all interfaces.
bind-address=0.0.0.0

2、将配置复制到其他节点.
注意要把 wsrep_node_name 和 wsrep_node_address 改成相应节点的 hostname 和 ip

3、初始化Mariadb,设置root密码与安全设置 (在192.168.11.11节点上面操作)
mysql_install_db --defaults-file=/etc/my.cnf.d/server.cnf --user=mysql

#192.168.11.11 节点启动MariaDB。第一次启动一定要使用--wsrep-new-cluster,再次启动就不需要
mysqld_safe --defaults-file=/etc/my.cnf.d/server.cnf --user=mysql  --wsrep-new-cluster &

4、其它两个节点, 初始化MariaDB
mysql_install_db --defaults-file=/etc/my.cnf.d/server.cnf --user=mysql  
启动MariaDB
systemctl start mariadb

6> 验证集群

验证集群
1、连接mariadb,查看是否启用galera插件
MariaDB [(none)]>  show status like "wsrep_ready";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_ready   | ON    |
+---------------+-------+
1 row in set (0.00 sec)

2、查看目前集群机器数
MariaDB [(none)]>  show status like "wsrep_cluster_size";
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.00 sec)

3、查看连接的主机
MariaDB [(none)]>  show status like "wsrep_incoming_addresses";
+--------------------------+---------------------------------------+
| Variable_name            | Value                                                       
+--------------------------+---------------------------------------+
| wsrep_incoming_addresses | 192.168.11.13:3306,192.168.11.12:3306,192.168.11.11:3306 |
+--------------------------+---------------------------------------+
1 row in set (0.00 sec)

4、查看集群状态
MariaDB [(none)]>  show status like "wsrep%";

wsrep_cluster_status为Primary,表示节点为主节点,正常读写。
wsrep_ready为ON,表示集群正常运行。
wsrep_cluster_size为3,表示集群有三个节点。

5、测试集群mariad数据是否同步
MariaDB [(none)]> system hostname
db1
MariaDB [(none)]> create database it;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> system hostname
db2
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| it                 |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

6、模拟故障
停止节点1的mariadb
[root@db1 mysql]# mysqladmin shutdown
节点2登录查看
MariaDB [(none)]> show status like "wsrep_cluster_size";
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+
1 row in set (0.00 sec)
MariaDB [(none)]> show databases;

7、节点恢复正常测试

[root@db1 ~]# systemctl start mariadb
[root@db1 ~]# mysql -e "show databases;" | grep it
it
[root@db1 ~]# mysql -e "show status like 'wsrep_cluster_size';" 
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+