IBM Cloud MariaDB + Galera Cluster + Keepalived 高可用自建

由于IBM Cloud Database一直未供应mysql或mariadb服务(PostgreSQL是其主推的关系型),出于业务需求,评估下自建费用以单机单实例+高可用为例,成本和性能上较PaaS托管也相差不多。 数据库自建方案未尝不是一种选择。

高可用从两个维度看,成熟方案有很多:一是集群管理包括数据同步,主从切换,副本备份等, 比如DRBD,MHA,MMM,Galera等(当然DRBD这种块级别主从复制提供高水准的数据一致性,略硬核暂不考虑);另一个访问高可用比如haproxy,keepalived,pxc(percona已收购) ,综合开源、集群控制以及后期维护等因素,Galera + Keepalived 看起来上手更加容易,当然坑也不少。

这里我们拿IBM Cloud Dallas的经典物理机做一个实验,看看方案的可行性
在这里插入图片描述
a. 利用Galera Cluster构建多主环境,三节点通过WriteSets Replication达到数据虚拟实时同步(复制机制选择默认的rsync,但上生产强烈建议xtrabackup)
在这里插入图片描述

b. 上述集群中,初始节点BM1 VIP优先级最低,可充当数据同步备份节点,可定时上传备份DB dumps至COS(增加数据库灾备能力),也可通过在其他dc部署vsi来做副本备份,推荐COS,省钱省事 !

c. Keepalived实现VIP漂移,这个场景中未做读写分离,一个时间点只有其中的一台(BM2和BM3优先)服务应用的请求,所以可以理解为单机单实例,和标准的standalone模式体验感觉一致

测试环境:在这里插入图片描述

1. 集群节点系统设置

(三个节点依次执行)

[root@mha-test01 ~]# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
52.118.9.145 mha-test01.ibm-poc-longtech-paas.cloud mha-test01
10.38.112.xx  mariadb-BM1 # Galera cluster initialization node 
10.38.112.xx  mariadb-BM2 
10.38.112.xx  mariadb-BM3

[root@mha-test01 ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
fs.file-max=655350
net.ipv4.ip_local_port_range = 1025 65000
net.ipv4.tcp_tw_recycle = 1

[root@mha-test01 ~]# cat  /etc/security/limits.conf |grep "*"
#        - the wildcard *, for default entry
#*               soft    core            0
#*               hard    rss             10000
* soft nofile 65536
* hard nofile 65536

[root@mha-test02 ~]# sysctl -p
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
fs.file-max = 655350
net.ipv4.ip_local_port_range = 1025 65000
net.ipv4.tcp_tw_recycle = 1

# firewalld规则和selinux策略

3306, MariaDB/MySQL服务端口
4567,Galera做数据复制的通讯和数据传输端口,防火墙放开TCP和UDP
4568,Galera做增量数据传输使用的端口(Incremental State Transfer, IST),放开TCP
4444,Galera做快照状态传输使用的端口(State Snapshot Transfer, SST),放开TCP

# 放行上述端口
[root@mha-test01 opt]# firewall-cmd --permanent --zone=public --add-port=3306/tcp
[root@mha-test01 opt]# firewall-cmd --permanent --zone=public --add-port=4567/tcp
[root@mha-test01 opt]# firewall-cmd --permanent --zone=public --add-port=4568/tcp
[root@mha-test01 opt]# firewall-cmd --permanent --zone=public --add-port=4444/tcp
[root@mha-test01 opt]# firewall-cmd --permanent --zone=public --add-port=4567/udp

# 放行内网10端源IP访问(Prod可更加严格)
[root@mha-test01 opt]# firewall-cmd --permanent --zone=public --add-source=10.*.*.*/8

------

# SELinux放行相关端口 (默认下selinux系统安全策略,会限制MariaDB守护程序执行很多操作)
[root@mha-test01 opt]# semanage port -a -t mysqld_port_t -p tcp 4567
[root@mha-test01 opt]# semanage port -a -t mysqld_port_t -p udp 4567
[root@mha-test01 opt]# semanage port -a -t mysqld_port_t -p tcp 4568
[root@mha-test01 opt]# semanage port -a -t mysqld_port_t -p tcp 4444

# 暂时设置为许可模式
[root@mha-test01 opt]# semanage permissive -a mysqld_t

# 启动集群以生成节点间通信事件,将该事件添加到SELinux策略中
[root@mha-test01 opt]# galera_new_cluster

[root@mha-test01 opt]# mysql -u root -p xxxxx -e 'CREATE DATABASE selinux; CREATE TABLE selinux.selinux_policy (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id)); INSERT INTO selinux.selinux_policy VALUES ();'

# 启动另外两个节点 systemctl start mariadb,
# 生成IST文件
[root@mha-test01 opt]# mysql -u root -p xxxxx -e 'INSERT INTO selinux.selinux_policy VALUES ();'

# 生成SELinux策略
[root@mha-test01 opt]# grep mysql /var/log/audit/audit.log | audit2allow -M Galera
Output
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i Galera.pp

[root@mha-test01 opt]# semodule -i Galera.pp

# 现在该策略处于活动状态,禁用MariaDB服务的许可模式
[root@mha-test01 opt]# semanage permissive -d mysqld_t

2. Keepalived配置

(三节点依次操作)

[root@mha-test01 ~]# cat /etc/keep
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值