要使得 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
修改操作系统服务

