mysql galera集群配置

锺威
2023-12-01

环境配置

我们在每个节点上都做如下配置:

关闭selinux

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

防火墙配置

测试环境可以直接关闭防火墙

systemctl disable firewalld
systemctl stop firewalld

环境我们建议添加对应的端口。galera集群需要3306、25、4567和4444端口:

for port in 3306 25 4567 4444;do firewall-cmd --zone=public --add-port=$port/tcp --permanent ;done
firewall-cmd --reload
firewall-cmd --list-ports

配置时区和

设置上海时区

timedatectl set-timezone Asia/Shanghai

配置NTP:

  • 安装软软件
yum install -y chrony
  • 配置同步服务器
  • 编辑/etc/chrony.conf,删除server 0.centos相关的其他配置,添加如下配置:
server ntp1.aliyun.com iburst
  • 启动服务
systemctl enable chronyd.service
systemctl start chronyd.service
  • 同步时间
chronyc sources

配置hosts

我们将节点hostname写到本地hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
116.202.176.98 releases.galeracluster.com
172.24.14.251 mysql01
172.24.14.250 mysql02
172.24.14.249 mysql03

更新依赖

yum update openssl

mysql galera集群由2部分组成:Galera Replication Library (galera-3)和mysql-wsrep。我们可以访问START SECURING YOUR DATA
NOW
获取对应版本的mysql galera。点击进去,我们会发现,其实就是galera的yum源。所以我们第一步就是配置yum源。

安装配置

配置yum源

如上描述,galera集群需要galera-3和对应版本的mysql-wsrep,所以对应的yum源也需要这两个:

[galera]
name = Galera
baseurl = https://releases.galeracluster.com/galera-3/centos/7/x86_64
gpgkey = https://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1 
[mysql-wsrep]
name = MySQL-wsrep
baseurl = https://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
gpgkey =  https://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

完成以后重建一下缓存:

yum clean all
yum makecache

安装软件包:

#很多教程中没有安装rsync,必须安装
yum -y install galera-3 mysql-wsrep-5.7 rsync

配置

节点初始化

配置my.conf。我们想为集群做如下修改:

  • 修改mysql数据位置
  • 关闭复杂密码验证

    所以我们的配置如下:
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/data/mysql/mysqld.pid
[mysqld]
validate_password_policy=0
validate_password_length=4
!includedir /etc/my.cnf.d/

注意:

validate_password_policy和validate_password_length两个配置是为了取消密码复杂策略。但是初始化数据库的时候,可能会有问题。初始化数据库的时候,可以先取消;等初始化完成以后,再添加该配置。

注意:

1、5.7的galera默认没有!includedir /etc/my.cnf.d/配置,如果我们想要开启额外配置,需要添加该配置项;

2、注意pid-file配置,改配置项和sytemd管理的服务配置有冲突。我们在下面需要修改

修改systemd服务配置文件。mysqld服务的systemd配置文件为/usr/lib/systemd/system/mysqld.service。默认情况下,该配置文件里有如下两项配置:

[Service]
......
PIDFile=/var/run/mysqld/mysqld.pid
......
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS $MYSQLD_RECOVER_START
......

我们需要删除PIDFile=/var/run/mysqld/mysqld.pid配置,并将ExecStart的–pid-file=/var/run/mysqld/mysqld.pid项去掉。这样my.conf中的pid-file配置才能生效。

注:如果不需要修改pid的位置,不需要做次操作。

最终配置如下:

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStartPre=/usr/bin/mysqld_pre_systemd --pre
ExecStart=/usr/sbin/mysqld --daemonize  $MYSQLD_OPTS $MYSQLD_RECOVER_START
ExecStartPost=/usr/bin/mysqld_pre_systemd --post
EnvironmentFile=-/etc/sysconfig/mysql
LimitNOFILE = 5000
Restart=on-failure
RestartSec=1
RestartPreventExitStatus=1
PrivateTmp=false

设置mysqld开机启动,并启动mysqld

systemctl enable mysqld
systemctl start mysqld

获取初始化密码:

[root@mysql03 ~]# cat /var/log/mysqld.log | grep password
2021-03-22T14:45:33.728361Z 1 [Note] A temporary password is generated for root@localhost: u0aq2>Y86+dL

初始化数据库:

#由于我,们修改了sock的位置,所以要-S指定sock
mysql_secure_installation -S /data/mysql/mysql.sock

注:我们将root密码设置成相同。

主节点配置

关闭所有节点mysqld服务

systemctl stop mysqld

配置主节点galera。我们建议将mysqld的额外配置都放到/etc/my.cnf.d/下。比如本实例中/etc/my.cnf.d/galera.cnf。最终配置如下:

[mysql]
#设置mysql client default character
default-character-set=utf8
no-auto-rehash

[mysqld]
bind-address=0.0.0.0
character-set-server=utf8
default-storage-engine=INNODB
default-time-zone='+8:00'
skip-name-resolve

#slow query
slow_query_log=on
log_output=FILE
slow_query_log_file=/var/log/mysql_slow.log
long_query_time=1

max_connections=5000
table_open_cache=2048
sort_buffer_size=8M
thread_cache_size=16


#MyISAM
key_buffer_size=512M
read_buffer_size=8M
read_rnd_buffer_size=8M

#InnoDB
# You can set .._buffer_pool_size up to 50 - 80 % of RAM but beware of setting memory usage too high
innodb_buffer_pool_size=20G

#galera innodb参数
binlog_format=ROW
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
transaction-isolation=READ-COMMITTED

#galera cluster参数
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_provider_options="gcache.size=300M; gcache.page_size=1G"
wsrep_sst_method=rsync
wsrep_sst_auth=galera-user:galera-user-password

wsrep_cluster_name=cloud_database_cluster
#wsrep_cluster_address="gcomm://mysql01,mysql02,mysql03"
wsrep_cluster_address="gcomm://"
wsrep_node_name=mysql01
wsrep_node_address="172.24.14.251"

注意:
1、主节点在配置的时候wsrep_cluster_address不用设置。
2、galera-user:galera-user-password可以单独设置同步用户,而不适用root密码。
3、wsrep_node_name和wsrep_node_address为本节点信息,其他节点要修改。

初始化集群:

mysqld_bootstrap

该命令会启动本机的 mysqld 服务。注意mysqld_bootstrap 命令只在集群第一个节点启动时使用,因为该脚本中带有一个参数:–wsrep-new-cluster,代表新建集群。

执行完成以后,我们可以查看一下mysqld的服务状态确认mysqld是否正常运行。如果正常运行,我们登录到mmysql数据库执行如下命令:

mysql>SHOW STATUS LIKE 'wsrep%';

如果出现如下两个状态,说明正常:

......
| wsrep_cluster_size           | 1                                                        |
......
| wsrep_ready                  | ON                                                       |
+------------------------------+----------------------------------------------------------+

从节点配置

从节点的/etc/my.cnf.d/galera.cnf和主节点的基本一致,区别在于如下三个:

wsrep_cluster_address="gcomm://mysql01"
wsrep_node_name=mysql02
wsrep_node_address="172.24.14.250"

注意:
1、从节点初始化的时候,wsrep_cluster_address只设置已经正常的节点,为了方便,我们可以统一设置为wsrep_cluster_address=“gcomm://mysql01”。
2、wsrep_node_name和wsrep_node_address为本节点信息。

启动数据库

从节点数据库启动只需要正常的start就行

systemctl start mysqld

集群调整

集群初始化完成以后,我们可以将wsrep_cluster_address的配置统一调整为如下:

wsrep_cluster_address="gcomm://mysql01,mysql02,mysql03"

这样三个节点间就可以相互同步。

疑问:该步骤不知道是否必须或者是否适合?

错误处理

mysqld_bootstrap无法启动,报错ersion libssl.so.10 not defined in file libssl.so.10

2021-03-22T15:42:54.222885Z 0 [ERROR] WSREP: wsrep_load(): dlopen(): /usr/lib64/galera-3/libgalera_smm.so: symbol SSL_COMP_free_compression_methods, version libssl.so.10 not defined in file libssl.so.10 with link time reference
2021-03-22T15:42:54.222903Z 0 [ERROR] WSREP: wsrep_load(/usr/lib64/galera-3/libgalera_smm.so) failed: Invalid argument (22). Reverting to no provider.

升级openssl

yum update openssl

缺少rsync包

2021-03-22T16:33:29.791371Z 0 [Note] WSREP: Running: 'wsrep_sst_rsync --role 'joiner' --address '172.24.14.249' --datadir '/data/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' --parent '7628'  '' '
which: no rsync in (/usr/sbin:/sbin:/usr//bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
2021-03-22T16:33:29.806339Z 0 [ERROR] WSREP: Failed to read 'ready <addr>' from: wsrep_sst_rsync --role 'joiner' --address '172.24.14.249' --datadir '/data/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' --parent '7628'  ''
        Read: ''rsync' not found in PATH'
2021-03-22T16:33:29.806450Z 0 [ERROR] WSREP: Process completed with error: wsrep_sst_rsync --role 'joiner' --address '172.24.14.249' --datadir '/data/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' --parent '7628'  '' : 2 (No such file or directory)
2021-03-22T16:33:29.806493Z 2 [ERROR] WSREP: Failed to prepare for 'rsync' SST. Unrecoverable.
2021-03-22T16:33:29.806506Z 2 [ERROR] Aborting
 类似资料: