如何在RHEL8部署MariaDB Galera集群?
- By : Will
- Category : Load balancing, MySQL & MariaDB
- Tags: Galera, Load balancing, MariaDB, MySQL & MariaDB Tags: cluster, Red Hat Enterprise Linux 8, RHEL8, 集群, 高可用
1 基础知识
1.1 技术简介
– MariaDB Galera集群是一个同步多主集群
1.2 技术局限性
– MariaDB Galera集群仅在Linux上可用
– MariaDB Galera集群仅支持XtraDB/InnoDB存储引擎
– MariaDB Galera集群对支持MyISAM存储引擎实验性支持
1.3 集群的功能特点
– 同步复制
– Active-active的multi-master(多主)拓扑结构
– 可读取和写入任何群集节点
– 自动成员资格控制,故障节点自动从集群中删除
– 自动节点加入
– 实现数据行级别的并行复制
– 客户端连接到集群跟单机版连接无异
1.4 集群的优点
– 没有从节点滞后问题
– 没有丢失的数据传输
– 读写服务器扩展容易
– 客户端连接延迟较小
1.5 基本概念
1.5.1 wsrep接口
1.5.1.1 什么是wsrep API
– wsrep API中文称写集合复制接口
– 接口基于认证多主复制,亦适用于异步和同步主从复制
– 实现事务数据库和类似应用程序的一组应用程序回调和复制库调用(同步写集合)
– 从应用程序细节中抽象和隔离复制实现
1.5.1.2 写集合管理
– 在发送端填充写集合
– 在接收端应用写集合
注:接收到的写集合应用由高优先级别的事务先完成
1.5.1.3 SQL的隔离处理
– 提供SQL语句“完全隔离”的命令处理
– 确保群集中的每个数据库服务器以相同的顺序处理SQL语句并且不中断
– DDL语句都需要隔离处理,以保持群集中的数据一致性
1.5.1.4 支持wsrep API的版本
– 从MariaDB 10.1开始,缺省包含Galera群集wsrep API
– MariaDB 10.0和MariaDB 5.5需要单独下载
1.5.2 DBMS
– Database Management System的简称(数据库管理系统)
– 一种操纵和管理数据库的大型软件
– 用于建立、使用和维护数据库
1.6 Galera复制
1.6.1 运行机制
– Galera复制发生在事务提交时
– Galera将事务写入写集合中
– Galera将写集合广播到集群的其他可用节点
– 其他集群节点通过应用写集合保持群集节点间的数据一致性
1.6.2 同步复制与异步复制
1.6.2.1 基本概念
– 同步即群集中一个节点有数据更改,其他节点也会发生更改(或同时发生)
– 异步即节点间的数据同步变更是允许延迟的(主节点崩溃可能会丢失数据)
1.6.2.2 同步与异步复制的比较
– 同步复制其中一个节点崩溃,无数据丢失,数据副本始终保持一致
– 同步复制的事务会在所有节点上并行执行
– 同步复制的事务总会有效果,即使在另一个节点执行
1.6.3.3 实践经验
– 同步复制实施的低性能和复杂性导致异步复制仍是数据库伸缩和高可用的主要手段
– MySQL或PostgreSQL仅提供异步复制解决方案
1.6.3 基于认证的复制方法
1.6.3.1 基本概念
– 使用群组通讯和事务排序技术进行同步数据复制
– Galera复制时高度透明且可扩展的同步复制解决方案
1.6.3.2 Galera复制的特点
– 高度可用
– 高度透明
– 高度可扩展
1.6.4 泛型复制库
– Galera复制功能是作为共享库实现的
– Galera可以与任何实现wsrep API挂钩的事务处理系统链接
– Galera复制库是一个协议栈,提供用于准备,复制和应用事务写集合功能
2 实践部分
2.1 环境配置
2.1.1 群集环境信息
OS = RHEL 8.x x86_64
IP Address = 10.168.0.7[1-3]
hostname = node[1-3].cmdschool.org
2.1.2 部署单机版MariaDB
请按如下链接部署MariaDB(请使用service,不推荐使用systemd方式启动),
https://www.cmdschool.org/archives/5841
2.1.3 安装依赖的工具包
In node[1-3].cmdschool.org
yum install -y rsync lsof
2.1.4 SELinux配置
In node[1-3].cmdschool.org
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0
2.1.5 开启防火墙端口
In node[1-3].cmdschool.org
firewall-cmd --permanent --add-service mysql firewall-cmd --permanent --add-port 4567-4568/tcp firewall-cmd --permanent --add-port 4444/tcp firewall-cmd --permanent --add-port 4567/udp firewall-cmd --reload firewall-cmd --list-all
2.1.6 配置名称解析
In node[1-3].cmdschool.org
echo '10.168.0.71 node1 node1.cmdschool.org' >> /etc/hosts echo '10.168.0.72 node2 node2.cmdschool.org' >> /etc/hosts echo '10.168.0.73 node3 node3.cmdschool.org' >> /etc/hosts
2.1.7 配置公钥认证(可选)
In node1.cmdschool.org
2.1.7.1 生成公钥和私钥
ssh-keygen
注:以上一路回车,不需要设置任何参数
2.1.7.2 复制公钥到群集中的其他机器
ssh-copy-id -i ~/.ssh/id_rsa.pub node2 ssh-copy-id -i ~/.ssh/id_rsa.pub node3
2.1.7.3 测试公钥认证
ssh root@node2 ssh root@node3
2.2 准备集群配置
In node[1-3].cmdschool.org
2.2.1 配置同步用户
mysql -uroot -p grant all privileges on *.* to sst@'%' identified by 'abc123'; flush privileges; quit;
2.2.2 确认wsrep模块位置
find /usr/local/mysql/ -name libgalera_smm.so
命令显示如下:
/usr/local/mysql/lib/galera/libgalera_smm.so /usr/local/mysql/lib/libgalera_smm.so
2.2.3 增加wsrep配置文件
cp /usr/local/mysql/support-files/wsrep.cnf /etc/my.cnf.d/
2.3 配置集群首个节点
In node1.cmdschool.org
2.3.1 修改wsrep配置
vim /etc/my.cnf.d/wsrep.cnf
修改如下参数
wsrep_provider=/usr/local/mysql/lib/galera/libgalera_smm.so wsrep_cluster_address="gcomm://" wsrep_sst_auth=sst:abc123
另外,官方建议配置的参数如下,
wsrep_provider — Path to the Galera library wsrep_cluster_address — see cluster connection URL binlog_format=ROW — see Binary Log Formats default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 innodb_doublewrite=1 (the default) when using Galera provider of version >= 2.0. query_cache_size=0 (only for versions prior to 5.5.40-galera, 10.0.14-galera and 10.1.2) wsrep_on=ON — Enable wsrep replication (starting 10.1.1)
2.3.2 重启服务使配置生效
/etc/init.d/mysqld restart
重启后我们建议按如下方法检查日志,
egrep -i "error|failed" /var/log/mysqld/mysqld.log
如果发现如下错误提示,
2019-06-17 22:53:35 0 [ERROR] WSREP: wsrep_load(): dlopen(): libssl.so.10: cannot open shared object file: No such file or directory 2019-06-17 22:53:35 0 [ERROR] WSREP: wsrep_load(/usr/local/mysql/lib/galera/libgalera_smm.so) failed: Invalid argument (22). Reverting to no provider. 2019-06-17 23:27:18 0 [ERROR] WSREP: wsrep_load(): dlopen(): libcrypto.so.10: cannot open shared object file: No such file or directory 2019-06-17 23:27:18 0 [ERROR] WSREP: wsrep_load(/usr/local/mysql/lib/galera/libgalera_smm.so) failed: Invalid argument (22). Reverting to no provider.
你可能需要手动编译部署openssl的1.0.1e版的so文件(RHEL8适用),
cd ~ wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.1e.tar.gz tar -xf openssl-1.0.1e.tar.gz cd openssl-1.0.1e/ ./config --prefix=/usr/local/openssl-1.0.1e --openssldir=/usr/local/openssl-1.0.1e shared zlib-dynamic make make install cp /usr/local/openssl-1.0.1e/lib/libssl.so /usr/lib64/libssl.so.10 cp /usr/local/openssl-1.0.1e/lib/libcrypto.so /usr/lib64/libcrypto.so.10
如果以上编译提示如下错误,
c_zlib.c:25:10: fatal error: zlib.h: No such file or directory
则需要安装如下包解决依赖关系,
yum install -y zlib-devel
如果以上编译安装提示如下错误,
POD document had syntax errors at /usr/bin/pod2man line 69. make: *** [Makefile:640: install_docs] Error 255
则需要按如下命令处理,
mv /usr/bin/pod2man /usr/bin/pod2manSave
2.3.3 确认新集群创建成功
mysql -uroot -p -e "show status like 'wsrep_cluster_size';"
显示如下则成功,
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
2.3.4 确认启动的端口
netstat -antp | grep mysqld
显示如下则成功,
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 18211/mysqld tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 18211/mysqld
2.4 将其他节点加入集群
2.4.1 修改配置文件
In node[2-3].cmdschool.org
vim /etc/my.cnf.d/wsrep.cnf
修改如下参数
wsrep_provider=/usr/local/mysql/lib/galera/libgalera_smm.so wsrep_cluster_address="gcomm://node1" wsrep_sst_auth=sst:abc123
住:留意“wsrep_cluster_address”参数的配置方法
另外,官方建议配置的参数如下,
wsrep_provider — Path to the Galera library wsrep_cluster_address — see cluster connection URL binlog_format=ROW — see Binary Log Formats default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 innodb_doublewrite=1 (the default) when using Galera provider of version >= 2.0. query_cache_size=0 (only for versions prior to 5.5.40-galera, 10.0.14-galera and 10.1.2) wsrep_on=ON — Enable wsrep replication (starting 10.1.1)
2.4.2 重启服务使配置生效
/etc/init.d/mysqld restart
2.4.3 确认新集群创建成功
In node[2-3].cmdschool.org
mysql -uroot -p -e "show status like 'wsrep_cluster_size';"
当所有节点配置完,显示如下则成功,
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
2.5 测试集群
In node3.cmdschool.org
2.5.1 节点3创建数据库
mysql -uroot -p create database test1;
In node[1-3].cmdschool.org
2.5.2 检查所有节点的数据库创建结果
mysql -uroot -p show databases;
每个节点显示如下则配置有效,
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test1 | +--------------------+ 4 rows in set (0.00 sec)
In node3.cmdschool.org
2.5.3 节点1删除数据库
mysql -uroot -p drop database test1;
In node[1-3].cmdschool.org
2.5.4 检查所有节点的数据库删除结果
mysql -uroot -p show databases;
每个节点显示如下则配置有效,
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec)
参阅文档:
==============
配置MariaDB Galera集群的防火墙
—————————–
http://galeracluster.com/documentation-webpages/firewallsettings.html
配置MariaDB Galera集群
————————
https://mariadb.com/kb/en/library/getting-started-with-mariadb-galera-cluster/
http://galeracluster.com/documentation-webpages/
配置MariaDB Galera集群的SELinux
———————————
http://galeracluster.com/library/documentation/selinux.html?highlight=selinux
如何确定集群最先进的节点
———————–
https://mariadb.com/kb/en/library/getting-started-with-mariadb-galera-cluster/
Galera Cluster
————————
http://galeracluster.com/products/
MariaDB Galera Cluster
———————–
https://mariadb.com/kb/en/library/galera-cluster/
wsrep API
———————–
https://launchpad.net/wsrep
MariaDB Documentation
———————–
https://mariadb.com/kb/en/library/documentation/
如何手动安装openssl
———————–
https://www.cmdschool.org/archives/5740
没有评论