MariaDB Galera Cluster 部署
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 |
+--------------------+-------+
-------------------------------------------
个性签名:今天做了别人不想做的事,明天你就做得到别人做不到的事,尝试你都不敢,你拿什么赢!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!