利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 Mariadb Galera Cluster-2
 
- UID
- 1066743
|

利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 Mariadb Galera Cluster-2
开启 Cluster 节点的相互通信要使得 Mariadb Galera Cluster 的节点能够进行数据同步,各节点之间必须能够互相通信。这需要各节点能够解析彼此的域名并能访问相应的网络端口。因为 cluster 中节点的域名和 IP 地址是因具体环境而异的,因此将这些信息定义在 environment 文件里。
清单 5. environments/test.json,定义 cluster 成员1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| {
"name": "test",
"description": "",
"cookbook_versions": {
},
"json_class": "Chef::Environment",
"chef_type": "environment",
"default_attributes": {
"mariadb-galera-cluster": {
"cluster": {
"members": {
"nodeA": "10.0.0.11",
"nodeB": "10.0.0.12"
},
"master": "nodeA"
}
}
}
|
清单 6. recipes/default.rb,域名解析和开启端口1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| node['mariadbp4']['cluster']['members'].each_pair do |name, ip|
bash "Resolve #{name} to #{ip}." do
user "root"
group "root"
code <<-EOF
name=#{name}
echo "#{ip} ${name%%.*} $name" >> /etc/hosts
EOF
not_if "[ #{name} == `hostname -s` ]"
end
end
bash "Open ports on OS firewall"
user "root"
group "root"
code <<-EOF
firewall-cmd --zone=public --add-service=mariadb --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/udp --permanent
firewall-cmd --reload
EOF
end
|
配置 Mariadb Galera Cluster在 Mariadb 中开启 Galera Cluster 需要修改相应的配置文件,通常是/etc/my.cnf.d/server.cnf。这里将所需配置预先定义为 template,然后用它覆盖原来的配置文件,如清单 7、清单 8 所示。
清单 7. templates/default/server.cnf.erb,Mariadb 配置文件1
2
3
4
5
6
7
8
| [galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://<%= @node.mariadbp4.cluster.members.keys.join(',') %>
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
|
清单 8. recipes/default.rb,修改 Mariadb 配置文件1
2
3
4
5
6
7
| template "/etc/my.cnf.d/server.cnf" do
source "server.cnf.erb"
owner "root"
mode 0644
action :create
not_if "grep '^wsrep_on=ON' /etc/my.cnf.d/server.cnf"
end
|
修改操作系统服务在 RHEL7 的中,操作系统服务是通过 systemd 来管理的,因为 Mariadb Galera Cluster 需要修改启动 Mariadb 时的参数,因此需要对 systemd 启动 Mariadb 时所使用的命令进行修改。因为 Mariadb Galera Cluster 对第一个启动的节点(又称为 master 节点)需要采用特定的启动命令,因此这里准备两份 systemd 的配置文件,如清单 9、清单 10 所示。在 recipe 中,首先判断当前节点是否 master 节点,然后用相应的配置文件作为当前节点的 systemd 的 Mariadb 服务启动配置文件。最后重启 Mariadb 服务。
清单 9. templates/default/systemd.master.conf.erb,master 节点的配置文件1
2
3
| [Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --wsrep-new-cluster
|
清单 10. templates/default/systemd.master.conf.erb,slave 节点的配置文件1
2
3
| [Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --wsrep_cluster_address=gcomm://<%= node.mariadbp4.cluster.master =%>
|
清单 11. recipes/default.rb,修改 systemd 配置文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| master=node['mariadbp4']['cluster']['master']
bash "Add cluster conf for mariadb service in systemd and restart service..." do
cwd "/etc/systemd/system"
user "root"
code <<-EOF
if [ ! -d "$service_name.d" ]; then
mkdir "mariadb.service.d"
fi
if [ `hostname -s` == #{master} ]; then
mv /tmp/master.conf mariadb.service.d/cluster.conf
else
mv /tmp/slave.conf mariadb.service.d/cluster.conf
fi
systemctl daemon-reload
systemctl restart $service_name
EOF
not_if "[[ -f mysql.service.d/cluster.conf || -f mariadb.service.d/cluster.conf ]]"
end
|
安装首先将上面所定义部署流程上传到 Chef Server,包括 cookbook 和 environment。然后告诉 Chef Server 在目标机器上执行相应的部署流程,如清单 12 所示。这里 10.0.0.11 和 10.0.0.12 为组成 Cluster 的两台机器的 IP,注意执行命令时请确保当前目录为 mariadb-galera-cluster 的上级目录,
清单 12. 安装 Mariadb Galera Cluster 所需命令1
2
3
4
| knife cookbook upload -a -o .
knife environment from file environments/test.json
knife bootstrap 10.0.0.11 -x root -P password -r "recipe[mariadb-galera-cluster]" -E test
knife bootstrap 10.0.0.12 -x root -P password -r "recipe[mariadb-galera-cluster]" -E test
|
验证要验证 Mariadb Galera Cluster 的运行状况,可以通过执行如清单 13 所示的命令来实现。如果一切正常,可以看到如图 1 所示的结果。
清单 13. 查看 Mariadb Galera Cluster 的运行情况1
2
| mysql --user=root --password=xxx
show status like 'wsrep_%'
|
图 1. Mariadb Galera Cluster 的运行状态 小结在企业级的应用中,数据库的高可用性是不可或缺的,而 Mariadb Galera Cluster 作为 Mariadb 自带的 Cluster 功能,从功能上可以满足用户的这一要求。而本文所描述的自动化部署步骤,可以快速的帮助用户在多个节点上部署 Mariadb Galera Cluster,极大的节省了创建 Mariadb Galera Cluster 所需的时间。 |
|
|
|
|
|