原作者:Jijo 转载:https://www.unixmen.com/setup-mariadb-galera-cluster-10-0-centos/
如何在CentOS上设置MariaDB Galera Cluster 10.0
MariaDB 是一个关系数据库管理系统(RDBMS), MariaDB Galera Cluster 是MariaDB的同步多主集群。它仅在Linux上可用,并且仅支持XtraDB / InnoDB存储引擎。本文介绍如何在CentOS 6.5 x86_64上运行3个节点设置MariaDB Galera Cluster 10.0,从而生成HA(高可用性)数据库集群。
集群细节
我们使用3个新安装的VM运行CentOS 6.5 x86_64的最小安装。
群集节点1具有主机名db1和IP地址1.1.1.1
群集节点2具有主机名db2和IP地址1.1.1.2
群集节点3具有主机名db3和IP地址1.1.1.3
第1步:添加MariaDB存储库
使用系统中的以下内容创建mariadb存储库 /etc/yum.repos.d/mariadb.repo。
对于CentOS 6 - 64位:
[MariaDB的]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey = HTTPS://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1
对于CentOS 6 - 32位:
[MariaDB的]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-x86
gpgkey = HTTPS://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1
第2步 - 在许可模式下设置SELinux
在开始设置之前,将SELinux置于所有节点上的许可模式:
sudo setenforce0
第3步 - 安装MariaDB Galera Cluster 10.0软件
如果您进行了CentOS 6最小安装,那么请确保在继续安装MariaDB Galera Cluster 10.0软件之前从EPEL存储库安装socat软件包。
您可以使用以下命令直接从EPEL安装socat包(对于x86_64):
sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/socat-1.7.2.3-1.el6.x86_64.rpm
在CentOS 7上,您可以使用以下命令安装socat软件包。
sudo yum install socat
通过在所有节点上执行以下命令来安装MariaDB Galera Cluster 10.0软件:
sudo yum install MariaDB-Galera-server MariaDB-client rsync galera
第4步:设置MariaDB安全性
启动mysql(MariaDB 10.0中的init脚本仍称为mysql)
sudo service mysql start
运行mysql_secure_installation脚本,以便我们可以提高安全性。在所有节点上运行以下命令:
sudo /usr/bin/mysql_secure_installation
我选择密码为 'dbpass'并接受所有默认值(因此对所有问题都回答是)。
第5步 - 创建MariaDB Galera Cluster用户
现在,我们必须创建一些必须能够访问数据库的用户。该“sst_user”是一个数据库节点将使用用于认证在状态传输快照(SST)相另一个数据库节点的用户。在所有节点上运行以下命令:
mysql -u root -p
mysql> DELETE FROM mysql.user WHERE user=''; mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpass'; mysql> GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'dbpass'; mysql> GRANT ALL PRIVILEGES on *.* to sst_user@'%'; mysql> FLUSH PRIVILEGES; mysql> quit
建议您将'%'更改为主机名或IP地址,这些用户可以从中访问数据库。因为 '%' 表示 允许root 或 sst_user从任何主机访问数据库,所以安全性较低。
第6步 - 创建MariaDB Galera Cluster配置
首先停止所有节点上的mysql服务:
sudo service mysql stop
接下来,我们将在所有节点上通过以下命令创建MariaDB Galera Cluster配置(在配置之后执行重要注释并对db2和db3进行必要的更改):
sudo cat >> /etc/my.cnf.d/server.cnf << EOF
binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 innodb_locks_unsafe_for_binlog=1 query_cache_size=0 query_cache_type=0 bind-address=0.0.0.0 datadir=/var/lib/mysql innodb_log_file_size=100M innodb_file_per_table innodb_flush_log_at_trx_commit=2 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://1.1.1.1,1.1.1.2,1.1.1.3" wsrep_cluster_name='galera_cluster' wsrep_node_address='1.1.1.1' wsrep_node_name='db1' wsrep_sst_method=rsync wsrep_sst_auth=sst_user:dbpass EOF
重要说明:在db2和db3上执行此命令时,请不要忘记调整wsrep_node_address和wsrep_node_name变量。
在db2上:
wsrep_node_address=1.1.1.2 wsrep_node_name='db2'
在db3上:
wsrep_node_address='1.1.1.3' wsrep_node_name='db3'
步骤7-初始化第一个群集节点
使用特殊的' - wsrep-new-cluster'选项启动MariaDB,仅在节点db1上执行此操作,以便初始化集群的主节点:
sudo /etc/init.d/mysql start --wsrep-new-cluster
通过仅在节点db1上运行以下命令来检查状态:
mysql -uroot -p -e"show status like 'wsrep%'"
输出中的一些重要信息如下:
wsrep_local_state_comment | Synced <-- cluster is synced wsrep_incoming_addresses | 1.1.1.1:3306 <-- node db1 is a provider wsrep_cluster_size | 1 <-- cluster consists of 1 node wsrep_ready | ON <-- good :)
步骤8-添加其他群集节点
检查并确认节点db2和db3 在[mariadb-10.0]下的/etc/my.cnf.d/server.cnf中具有正确的配置, 如步骤6中所述。
使用正确的配置,使db2和db3成为集群成员所需的全部操作就像启动任何常规服务一样启动它们。在db2上发出以下命令:
sudo service mysql start
通过在db1或db2上执行以下命令来检查群集状态中的更改:
mysql -u root -p -e“show status like'wsrep%'”
您将看到节点db2现在称为簇大小为'2'并且列出了节点db2的IP地址:
| wsrep_local_state_comment | 同步|
| wsrep_incoming_addre sses | 1.1.1.1:3306,1.1.1.2:3306 |
| wsrep_cluster_size | 2 |
| wsrep_connected | ON |
| wsrep_ready | ON |
对节点db3重复相同的步骤。在节点db3上,仅执行以下命令
sudo service mysql start
通过执行以下命令(例如db1)来检查群集状态中的更改:
mysql -u root -p -e“show status like'wsrep%'”
您应该看到节点db3现在称为簇大小为'3'并且列出了节点db3的IP地址:
| wsrep_local_state_comment | 同步|
| wsrep_incoming_addresses | 1.1.1.3:3306,1.1.1.1:3306,1.1.1.2:3306 |
| wsrep_cluster_size | 3 |
| wsrep_connected | ON |
| wsrep_ready | ON |
第9步 - 验证复制
现在集群正在运行。我们来测试它是否正常工作。在db1上运行以下命令创建数据库'clustertest':
mysql -u root -p -e'CREATE DATABASE clustertest;'
mysql -u root -p -e'CREATE TABLE clustertest.mycluster(id INT NOT NULL AUTO_INCREMENT,name VARCHAR(50),ipaddress VARCHAR(20),PRIMARY KEY(id));'
mysql -u root -p -e'INSERT INTO clustertest.mycluster(name,ipaddress)VALUES(“db1”,“1.1.1.1”);'
检查数据库,表和数据是否存在:
mysql -u root -p -e'SELECT * FROM clustertest.mycluster;'
输入密码:
+ ---- + ------ + ----------- +
| id | name| ipaddress |
+ ---- + ------ + ----------- +
| 2 | db1 | 1.1.1.1 |
+ ---- + ------ + ----------- +
现在检查节点db2:
mysql -u root -p -e'SELECT * FROM clustertest.mycluster;'
输入密码:
+ ---- + ------ + ----------- +
| id | name | ipaddress |
+ ---- + ------ + ----------- +
| 2 | db1 | 1.1.1.1 |
+ ---- + ------ + ----------- +
现在对节点db3进行相同的检查:
mysql -u root -p -e'SELECT * FROM clustertest.mycluster;'
输入密码:
+ ---- + ------ + ----------- +
| id | 名字 | ipaddress |
+ ---- + ------ + ----------- +
| 2 | db1 | 1.1.1.1 |
+ ---- + ------ + ----------- +
从这些输出中,我们可以确认节点db1在所有其他节点上成功复制了所有内容。