这篇文章主要内容是MariaDB Galera Cluster集群搭建过程,至于这个集群的工作原理、优缺点比较,不在这里讨论。
环境信息:
- CentOS Linux release 7.9.2009 (Core);
- mariadb-10.6.8;
集群搭建,至少3台机器,假设信息如下:
IP地址 | 节点名称 |
---|---|
10.200.67.26 | MariaDB-Node1 |
10.200.67.27 | MariaDB-Node2 |
10.200.67.28 | MariaDB-Node3 |
需要安装的组件:MariaDB-server
、MariaDB-client
。从MariaDB版本10.1开始,MariaDB Server
和 MariaDB Galera Server
安装包已经合并了。安装MariaDB-server会自动安装Galera及其依赖。
接下来是正式的安装过程:
一、卸载已安装的MariaDB和依赖
#查看是否已安装
rpm -qa MariaDB*
rpm -qa galera*
#卸载
rpm -e `rpm -qa MariaDB*`
rpm -e `rpm -qa gelera*`
二、仓库配置
可以去官网自行选择你的系统版本和仓库镜像位置:https://mariadb.org/download/?t=repo-config,然后将生成的内容复制下来即可。
编辑仓库文件,并将内容粘贴进去:
sudo vi /etc/yum.repos.d/mariadb.repo
如下:
# MariaDB 10.6 CentOS repository list - created 2022-08-07 16:05 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64
gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
更新仓库:
sudo yum makecache --disablerepo='*' --enablerepo='mariadb'
如果更新出错,可以清空,重新缓存仓库文件,解决方式参考:yum install primary.sqlite.bz2错误:
sudo yum clean all
suod yum makecache
三、安装
执行安装命令,相关依赖也会同步安装:
sudo yum install MariaDB-server MariaDB-client
四、设置开机启动
启动MariaDB并设置为开机自启:
# 启动
sudo systemctl start mariadb
# 开机自启
sudo systemctl enable mariadb
五、修改密码
# 登录
sudo mysql -uroot
# 设置密码
set password = password("your_password");
六、安装同步工具
sudo yum install rsync policycoreutils-python
七、配置集群
开始之前,请确保上面的一、二、三、四、五、六步骤在各个节点上执行完毕。
7.1 MariaDB-Node1(10.200.67.26)节点配置
执行编辑命令:
vi /etc/my.cnf.d/galera.cnf
内容如下:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
max_connections=1000
thread_concurrency=1200
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="Galera_Cluster"
wsrep_cluster_address="gcomm://10.200.67.26,10.200.67.27,10.200.67.28"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="10.200.67.26"
wsrep_node_name="MariaDB-Node1"
7.2 MariaDB-Node2(10.200.67.27)节点配置
执行编辑命令:
vi /etc/my.cnf.d/galera.cnf
内容如下:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
max_connections=1000
thread_concurrency=1200
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="Galera_Cluster"
wsrep_cluster_address="gcomm://10.200.67.26,10.200.67.27,10.200.67.28"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="10.200.67.27"
wsrep_node_name="MariaDB-Node2"
7.3 MariaDB-Node3(10.200.67.28)节点配置
执行编辑命令:
vi /etc/my.cnf.d/galera.cnf
内容如下:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
max_connections=1000
thread_concurrency=1200
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="Galera_Cluster"
wsrep_cluster_address="gcomm://10.200.67.26,10.200.67.27,10.200.67.28"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="10.200.67.28"
wsrep_node_name="MariaDB-Node3"
八、配置防火墙
如果没有开启防火墙可以跳过此步骤。
需要开放的端口有四个:
- 3306: mariadb连接端口;
- 4567: Galera Cluster复制同步端口;
- 4568: 增量传输,其他节点状态检测端口;
- 4444: 其他节点加入状态检测等作用;
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --permanent --zone=public --add-port=4567/tcp
sudo firewall-cmd --permanent --zone=public --add-port=4568/tcp
sudo firewall-cmd --permanent --zone=public --add-port=4444/tcp
sudo firewall-cmd --permanent --zone=public --add-port=4567/udp
sudo firewall-cmd --permanent --zone=public --add-source=10.200.67.27/32
sudo firewall-cmd --permanent --zone=public --add-source=10.200.67.29/32
sudo firewall-cmd --permanent --zone=public --add-source=10.200.67.26/32
重启防火墙:
sudo firewall-cmd --reload
九、创建SELinux安全策略
如果你没有开启SELinux安全策略,可以略过这一步。
在三个服务器上,分别执行:
sudo semanage port -a -t mysqld_port_t -p tcp 4567
sudo semanage port -a -t mysqld_port_t -p udp 4567
sudo semanage port -a -t mysqld_port_t -p tcp 4568
sudo semanage port -a -t mysqld_port_t -p tcp 4444
接下来,在所有三台服务器上运行以下命令,将 MySQL SELinux 域临时设置为许可模式。
sudo semanage permissive -a mysqld_t
十、启动集群
依次在第三、第二、第一个服务器上执行如下命令,并使用systemctl status mariadb
确认服务已关闭:
sudo systemctl stop mariadb
10.1启动第一个节点
在第一个服务器节点执行:
sudo galera_new_cluster
查看注册节点状态:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
输出如下
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 1 |
+--------------------+-------+
10.2启动第二个节点
sudo systemctl start mariadb
查看注册节点:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
输出如下:
Output
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 2 |
+--------------------+-------+
10.3启动第三个节点
sudo systemctl start mariadb
查看集群大小:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
输出如下:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
十一、配置远程访问
MariaDB [(none)]> use mysql;
MariaDB [mysql]> grant all privileges on *.* to root@'localhost' identified by "your_password";
MariaDB [mysql]> grant all privileges on *.* to root@'%' identified by "your_password";
MariaDB [mysql]> FLUSH PRIVILEGES;
十二、集群测试
在某一个节点创建测试数据库,看是否能同步。
参考文章:
最新评论
网飞没问题, 迪士尼+有解决方案么?
pp助手是安卓手机用的,根本下载用不来苹果
已解决
这样的话数据库里的结构为{"attachment":{"content":"xxx"}}, 要怎么才能变成{"content":"xxx"},从而使结构保持一致?
赞! make test不过的坑都写到的,谢谢楼主~
谢谢你
用了root用户还是一直502是怎么回事呢
student id 是空的