MariaDB系列之四:Galera Cluster集群搭建


title: MariaDB系列之四:Galera Cluster集群搭建
categories: Linux
tags:
- MariaDB
- MySQL
timezone: Asia/Shanghai
date: 2019-02-01

环境

[root@centos181002 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using  EditLine wrapper

Galera Cluster需要至少三个节点
节点1:11.11.11.61/centos181001
节点2:11.11.11.62/centos181002
节点3:11.11.11.63/centos181003

第零步:系统初始化设置(by all)

1.关闭系统默认防火墙

setenforce 0
sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
which systemctl && systemctl stop firewalld
which systemctl && systemctl disable firewalld
which systemctl && systemctl stop iptables || service iptables stop
which systemctl && systemctl disable iptables || chkconfig iptables off

2.写入hosts

cat <<EOF >>/etc/hosts
11.11.11.61 centos181001
11.11.11.62 centos181002
11.11.11.63 centos181003
EOF
cat /etc/hosts

3.移除mariadb冲突的软件包

yum remove -y mariadb-libs

4.配置本地YUM

mkdir -p /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

cat <<EOF >/etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
EOF

yum clean all       #清理本地缓存
yum clean plugins   #清理插件缓存
yum makecache       #构建缓存

第一步:安装MySql Galera并初始化数据库(by all)

因为涉及到依赖包安装,所以这里配置了YUM以后,使用yum方式来安装rpm自动解决依赖问题
1.安装提前下载好的MySql Galera离线包
yum install -y mysql-wsrep-5.7-5.7.24-25.16.el7.x86_64.rpm \
                mysql-wsrep-client-5.7-5.7.24-25.16.el7.x86_64.rpm \
                mysql-wsrep-common-5.7-5.7.24-25.16.el7.x86_64.rpm \
                mysql-wsrep-devel-5.7-5.7.24-25.16.el7.x86_64.rpm \
                mysql-wsrep-libs-5.7-5.7.24-25.16.el7.x86_64.rpm \
                mysql-wsrep-libs-compat-5.7-5.7.24-25.16.el7.x86_64.rpm \
                mysql-wsrep-server-5.7-5.7.24-25.16.el7.x86_64.rpm
2.安装依赖
yum install -y rsync

第二步:安装galera并配置(by all)

1.安装
yum install -y galera-3-25.3.25-2.el7.x86_64.rpm
2.修改配置文件my.cnf并在[mysqld]部分添加以下内容(请注意修改wsrep_node_name和wsrep_node_address)
vim /etc/my.cnf

wsrep_cluster_name=MyCluster
wsrep_provider = /usr/lib64/galera-3/libgalera_smm.so
# 这里也可以写成IP地址
wsrep_cluster_address = "gcomm://centos181001,centos181002,centos181003"
wsrep_node_name = centos181001
wsrep_node_address = 11.11.11.61


###################################以下设置参考自官方######################################

# http://galeracluster.com/documentation-webpages/configuration.html#configuring-swap-space
# 确保mysqld未绑定到127.0.0.1

# 确保将二进制日志格式设置为使用行级复制,而不是语句级复制。
# 请勿更改此值,因为它会影响性能和一致性。二进制日志只能使用行级复制。
binlog_format=ROW

# 确保默认存储引擎是InnoDB
# Galera Cluster不能与MyISAM或类似的非事务存储引擎一起使用
default_storage_engine=InnoDB

# 确保用于生成自动增量值的InnoDB锁定模式设置为交错锁定模式,该模式由2值指定。
# 不要更改此值。其他模式可能导致INSERT具有AUTO_INCREMENT列的表失败。
innodb_autoinc_lock_mode=2

# 确保将InnoDB日志缓冲区每秒写入文件一次,而不是每次提交,以提高性能。
# 注意 警告:在将innodb_flush_log_at_trx_commit设置为值0或2提高性能时,它还会引入某些危险。
# 操作系统崩溃或断电可能会消除最后一秒的交易。
# 虽然通常可以从另一个节点恢复此数据,但在群集同时关闭的情况下(例如,在数据中心停电的情况下),它仍然可能完全丢失。
innodb_flush_log_at_trx_commit = 0

# 配置InnoDB缓冲池(建议为系统内存大小的80%)(默认128MB)
#innodb_buffer_pool_size=122M
3.启动集群前,请确认是否准备好以下内容
1.安装了Galera Cluster的数据库主机,至少需要三台主机;
2.主机之间没有防火墙;
3.SELinux和AppArmor设置允许访问mysqld;
4.正确的路径,以libgalera_smm.so提供给wsrep_provider选项。
4.启动第一个群集节点

For systems that use systemd and Galera Cluser 5.7, use the dedicated mysqld_bootstrap script:

/usr/bin/mysqld_bootstrap

# 此状态变量告诉您​​连接到群集的节点数。由于您刚刚启动了第一个节点,因此值为1。
mysql -uroot -p"Xiaoliu123&*&*"
SHOW STATUS LIKE 'wsrep_cluster_size';
5.将其他节点添加到集群(另外两个节点正常启动即可)
systemctl start mysqld
6.查看生成的默认密码并修改
grep 'temporary password' /var/log/mysqld.log

mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Xiaoliu123&*&*';

第三步:测试集群

1.在数据库客户端上,验证所有节点是否已相互连接:
mysql -uroot -p"Xiaoliu123&*&*"
SHOW STATUS LIKE 'wsrep_%';

+---------------------------+------------+
| Variable_name             | Value      |
+---------------------------+------------+
...
| wsrep_local_state_comment | Synced (6) |
| wsrep_cluster_size        | 3          |
| wsrep_ready               | ON         |
+---------------------------+------------+

    wsrep_local_state_comment:该值Synced表示节点已连接到群集并且可以运行。
    wsrep_cluster_size:该值表示集群中的节点。
    wsrep_ready:该值ON表示此节点已连接到群集并能够处理事务。
2.在其中一个节点上建立测试数据
CREATE DATABASE galeratest;
USE galeratest;
CREATE TABLE test_table (
        id INT PRIMARY KEY AUTO_INCREMENT,
        msg TEXT ) ENGINE=InnoDB;
INSERT INTO test_table (msg)
        VALUES ("Hello my dear cluster.");
INSERT INTO test_table (msg)
        VALUES ("Hello, again, cluster dear.");
3.在另外两个节点上分别查看数据是否一致。
USE galeratest;
SELECT * FROM test_table;

 +----+-----------------------------+
 | id | msg                         |
 +----+-----------------------------+
 |  1 | Hello my dear cluster.      |
 |  2 | Hello, again, cluster dear. |
 +----+-----------------------------+

第四步:集群的重启

详细介绍:http://galeracluster.com/documentation-webpages/restartingcluster.html

# 1.分别在所有节点上查看以下文件,并找出seqno数字最大的即时之前最后重启服务器的
cat /var/lib/mysql/grastate.dat

# 2.将数字最大的他当主节点启动
/usr/bin/mysqld_bootstrap

# 此状态变量告诉您​​连接到群集的节点数。由于您刚刚启动了第一个节点,因此值为1。
mysql -uroot -p"Xiaoliu123&*&*"
SHOW STATUS LIKE 'wsrep_cluster_size';

# 3.其他节点这正常启动
systemctl start mysqld

附录:关于设置交换空间

Memory requirements for Galera Cluster are difficult to predict with any precision. The particular amount of memory it uses can vary significantly, depending upon the load the given node receives. In the event that Galera Cluster attempts to use more memory than the node has available, the mysqld instance crashes.

The way to protect your node from such crashing is to ensure that you have sufficient swap space available on the server, either in the form of a swap partition or swap files.

配置交换空间
Galera Cluster的内存要求难以准确预测。它使用的特定内存量可能会有很大差异,具体取决于给定节点接收的负载。如果Galera Cluster尝试使用的内存多于节点可用的内存,则mysqld实例会崩溃。

保护节点免受此类崩溃的方法是确保服务器上有足够的可用交换空间,可以采用交换分区或交换文件的形式。

附录:

本文用到RPM离线包下载:https://pan.baidu.com/s/1924_HLzzm-UjsuEm9VmdDA

http://galeracluster.com/downloads/

http://releases.galeracluster.com//galera-3/centos/7/x86_64/

http://releases.galeracluster.com//mysql-wsrep-5.7/centos/7/x86_64/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值