Linux 下部署Galera-Cluster-MySQL

禁用SELinux

您必须禁用SELinuxmysqld或对其进行配置,以允许mysqld其运行外部程序并在非特权端口上打开侦听套接字,即非特权用户可以执行的操作。

  1. 编辑 /etc/selinux/config,令SELINUX=disabled
  2. 保存后重启
  3. getenforce 命令查看状态

开启数据库端口和集群端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/upd --permanent
firewall-cmd --reload

写入hosts,非必要

echo 172.16.19.163 mysql.galera.test1 >> /etc/hosts
echo 172.16.19.164 mysql.galera.test2 >> /etc/hosts
echo 172.16.19.50  mysql.galera.test3 >> /etc/hosts
/etc/init.d/network restart

下载galera

cat > /etc/yum.repos.d/galera.repo <<EOF
[galera]
name=galera
baseurl= http://releases.galeracluster.com/galera-3/centos/7/x86_64/
gpgcheck=0


[mysql-wsrep]
name = mysql-wsrep
baseurl = http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
gpgcheck = 0
EOF

yum makecache
yum repolist
yum install -y  mysql-wsrep-5.7 galera-3
# 增量备份插件 innobackupex
yum localinstall -y https://mirrors.tuna.tsinghua.edu.cn/percona/centos/7/RPMS/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

编辑数据配置并进行调优

[mysqld]
user = mysql
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

## see more:https://galeracluster.com/library/training/tutorials/configuration.html
wsrep_on=ON
# 插件包so的位置
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
# 所有节点必须一致us
wsrep_cluster_name='galera'
# 添加所有可能的节点IP,第一个连接需要为初始化集群节点的IP
wsrep_cluster_address='gcomm://172.16.18.13,172.16.18.14,172.16.18.15'

# 节点名称
wsrep_node_name='galera3'
# 节点期望接收客户端连接的IP地址和端口号
wsrep_node_address='172.16.18.15'

# 复制时身份验证信息(即用户名:密码),除了逻辑复制mysqldump,其他方法不需要此参数
wsrep_sst_auth=galera:XXXXXXX123
# 定义节点在状态快照传输中使用的方法或脚本。
# mysqldump 除小数据集外,这速度很慢,但它是测试最多的选项
# rsync 默认值.最快,但只能在节点启动时使用,不能和运行中的InnoDB存储引擎一起使用
# rsync_wan 此选项与几乎相同rsync,但是使用delta-xfer算法来最大程度地减少网络流量
# xtrabackup此选项是基于Perconaxtrabackup工具的一种快速且几乎无阻塞的状态转移方法.需要参考官网额外配置
wsrep_sst_method=xtrabackup

# MIXED 优先STATEMENT,STATEMENT不能的就ROW记录
# galera只支持ROW
binlog_format=ROW

# galera只支持InnoDB
default_storage_engine=InnoDB
# MySQL打开的文件描述符限制,默认最小1024
open_files_limit = 65535
## see more: https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html
# InnoDB提供了一种可配置的锁定机制,可以显着提高将行添加到带有AUTO_INCREMENT列的表的SQL语句的可伸缩性和性能
# simple insert 可以预先确定要插入行数的语句(最初处理该语句时)
# bulk insert   事先不知道要插入行数(以及所需的自动增量值的数目)的语句
# mixed insert  这些是“simple insert”语句,用于指定某些(但不是全部)新行的自动增量值
# 0 traditional 传统锁定,兼容5.1之前,表级AUTO-INC锁定,主从复制时,自增列使用与master相同的值
# 1 consecutive 连续锁定,不同insert不同锁定。主从复制表现跟traditional模式下一样,但是性能会有所提高
# 2 interleaved 交错锁定,主从复制的同一张表下的同一行id有可能不一样
#
# 当innodb_autoinc_lock_mode设置为传统锁定模式(即的值0)或连续锁定模式(即的值1)时,
# 可能导致无法解决的死锁,并使系统在Galera Cluster中无响应
innodb_autoinc_lock_mode=2


# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
# 独立表空间优点:
# 1.每个表都有自已独立的表空间。
# 2.每个表的数据和索引都会存在自已的表空间中。
# 3.可以实现单表在不同的数据库中移动。
# 4.空间可以回收(除drop table操作处,表空不能自已回收)
# 缺点:
# 单表增加过大,如超过100G
# 结论:
# 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files
innodb_file_per_table=1

# InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
# 在一个独立使用的数据库服务器上,推荐设置这个变量到服务器物理内存大小的80%
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
# 为了补偿Galera Cluster在独立的MySQL数据库服务器上增加的内存使用量,您应该将通常值减少5%
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制.
# 这里是 16G*0.75 = 12G
innodb_buffer_pool_size = 12G


# redo日志(重做日志)文件的大小 = innodb_log_file_size * innodb_log_files_in_group(默认2),
# 配置的Redo空间越大,InnoDB就能更好的优化写操作.也意味着更长的恢复时间
# 每1GB的Redo log的恢复时间大约在5分钟
# 单文件恢复1min
# 后期依据此调整 https://blog.csdn.net/langkeziju/article/details/51094289
innodb_log_file_size = 256M

## 为了在InnoDB与事务一起使用的复制设置中具有持久性和一致性,请执行以下操作:
# innodb_flush_log_at_trx_commit = sync_binlog  =1
# 但是galera 采用写集复制,所以可以允许他=0 or 2,除非所有节点down,否则不丢失
# 0:每秒写入一次日志并将其刷新到磁盘。未刷新日志的事务可能会在崩溃中丢失
# 1:默认值。要完全符合ACID,必须使用1。每次事务提交时,日志都会写入并刷新到磁盘。
# 2:在每次事务提交后写入日志,并每秒刷新一次到磁盘。未刷新日志的事务可能会在崩溃中丢失
innodb_flush_log_at_trx_commit = 0
# 0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync),此时只是写入了操作系统缓冲
# 1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。
# N:每写N次操作系统缓冲就执行一次刷新操作。
sync_binlog =1

启动数据库

systemctl start mysqld
systemctl enable mysqld

初始密码

export passwd=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'` 
echo $passwd

修改密码

mysql -uroot -p$passwd 
mysql > set global validate_password_policy=0;
mysql > set global validate_password_length=6;
mysql > set password for root@localhost = password('XXXXXXX123');
mysql > update mysql.user set authentication_string=password('XXXXXXX123') where user='root';
mysql > GRANT all privileges ON *.* TO galera@'%' IDENTIFIED BY 'XXXXXXX123';
mysql > FLUSH PRIVILEGES;
mysql > exit

启动集群

# 第一个节点需要初始化
/usr/bin/mysqld_bootstrap
# 其他节点正常启动
systemctl restart mysqld

验证

# 端口
ss -tnlp | egrep '3306|4567'
# 进入mysql后验证
show status like 'wsrep_local_state_comment';
show status like 'wsrep_cluster%';

如果失败,查看错误日志

# wsrep_cluster_state_uuid  匹配不上的话
#  清理节点缓存
rm -rf /var/lib/mysql/grastate.dat
rm -rf /var/lib/mysql/galera.cache
rm -rf /var/lock/subsys/mysql
# 强制删除死线程 直接关闭可能无法关闭
killall -9 mysqld && systemctl stop mysqld
echo "" > /var/log/mysqld.log
systemctl start mysqld
# 查看日志
tail -n 300  /var/log/mysqld.log 

备份

https://galeracluster.com/library/training/tutorials/galera-backup.html

源文档:https://galeracluster.com/library/training/tutorials/index.html

原文地址:https://www.cnblogs.com/hyry/p/14620259.html