如何在CentOS上设置MariaDB Galera Cluster 10.0

 原作者: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_addresswsrep_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在所有其他节点上成功复制了所有内容。

猜你喜欢

转载自blog.csdn.net/Aria_Miazzy/article/details/84981024