CentOS7使用社区YUM源安装Mariadb Galera集群

简介

  • 本文以MariaDB官方文档为基础,记录操作步骤

安装Mariadb数据库前的准备工作

准备虚拟机三台

IP地址主机名CPU内存
172.16.10.101db123G
172.16.10.102db223G
172.16.10.103db323G

添加Mariadb官方YUM源,下面以Mariadb 10.1为例

官方YUM源编辑器

使用以下命令快速添加YUM源

1
2
3
4
5
6
7
tee /etc/yum.repos.d/mariadb.repo <<-'EOF'
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.1/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

刷新YUM缓存

1
yum makecache

查看Mariadb相关的安装包,注意软件包版本和对应的YUM源名字

1
yum list MariaDB* galera

关闭firewalld防火墙

1
systemctl disable firewalld --now

设置主机名(设置三台虚拟机主机名分别为db1,db2,db3)

1
2
3
hostnamectl set-hostname db1
hostnamectl set-hostname db2
hostnamectl set-hostname db3

编辑/etc/hosts文件

1
2
3
4
5
cat /etc/hosts <<EOF
172.16.10.101 db1
172.16.10.102 db2
172.16.10.103 db3
EOF

关闭SELINUX

1
2
3
setenforce 0 

sed -i 's,^SELINUX=enforcing,SELINUX=disabled,g' /etc/selinux/config

部署MariaDB Galera集群

安装相关软件包

1
yum install MariaDB-server MariaDB-client MariaDB-client

启用xtrabackup-v2功能

  • 需要额外安装percona提供的软件包
1
yum install https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.10/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.10-1.el7.x86_64.rpm

启动MariaDB数据库

  • 在db1上启动MariaDB数据库,设置galera集群同步账号,进行安全初始化
1
2
3
4
systemctl start mariadb.service
mysql -uroot -e "grant all privileges on *.* to 'sst'@'localhost' identified by 'password';"
mysql_secure_installation
systemctl stop mariadb.service

编辑MariaDB配置文件

  • 在三个节点上编辑MariaDB配置文件,以开启galera集群功能
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
cat /etc/my.cnf.d/galera.cnf
[server]
[mysqld]
# 监听哪个地址,这里每个节点填对应的ip地址
bind-address=172.16.10.101
# 监听哪个端口
port = 3306
# 设置默认字符编码集
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
character-set-server = utf8
# 设置日志路径
log-error = /var/log/mariadb/mariadb.log
# 设置binlog
log-bin = mysql-bin
binlog_format=ROW
# 设置默认数据目录
datadir = /var/lib/mysql/
# 设置默认存储引擎
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
# galera集群名字
wsrep_cluster_name="galera_cluster"
# 本节点的主机名,这里每个节点填对应的ip地址
wsrep_node_name="db1"
wsrep_cluster_address = "gcomm://172.16.10.101:4567,172.16.10.102:4567,172.16.10.103:4567"
wsrep_provider_options = "gmcast.listen_addr=tcp://172.16.10.101:4567;ist.recv_addr=172.16.10.101:4568"
wsrep_node_address="172.16.10.101:4567"
# 设置galera集群同步的方法和用户名密码
wsrep_sst_auth=sst:password
wsrep_sst_method=xtrabackup-v2
max_connections = 10000
key_buffer_size = 64M
max_heap_table_size = 64M
tmp_table_size = 64M
innodb_buffer_pool_size = 128M
[embedded]
[mariadb]
[mariadb-10.1]

启动galera集群

创建集群

  • 在db1上运行galera_new_cluster命令
1
galera_new_cluster

查看集群状态

  • 在db1上查看集群状态
1
2
3
4
5
6
# mysql -uroot -p -e "show status like 'wsrep_cluster_size';"
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| wsrep_cluster_size | 1 |
+--------------------------+--------------------------------------+

监控MariaDB日志

  • 监控db1上的MariaDB日志
  • 在启动其他节点的时候,能看到其他节点加入到galera集群
1
tail -f /var/log/mariadb/mariadb.log

启动其他节点数据库

  • 在db2和db3上运行MariaDB数据库
1
systemctl start mariadb

检查集群状态

  • 在db1上检查集群状态
1
2
3
4
5
6
mysql -uroot -p -e "show status like 'wsrep_cluster_size';"
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| wsrep_cluster_size | 3 |
+--------------------------+--------------------------------------+

验证MariaDB galera集群的同步功能是否正常

在db1上创建用户、数据库

1
2
3
mysql -uroot -p -e "user add testuser;"
mysql -uroot -p -e "create database testdb;"
mysql -uroot -p -e "grant all privileges on testdb.* to 'testuser'@'localhost' identified by 'password';"

在db2上检查用户、数据库是否存在

1
2
mysql -uroot -p -e "select user,host from mysql.user;"
mysql -uroot -p -e "show databases;"

在db3上删除用户和数据库

1
2
mysql -uroot -p -e "delete user 'testuser'"
mysql -uroot -p -e "drop database testdb"

在db1上检查用户和数据库是否还在

1
2
mysql -uroot -p -e "select user,host from mysql.user;"
mysql -uroot -p -e "show databases;"

至此,MariaDB galera集群已经部署完成