MySQL-Cluster集群部署实战

目录

  • 一、环境准备(安装前的准备)
    • 1.修改主机名
    • 2.关闭selinux和防火墙
    • 3.所有主机配置host解析
    • 4.所有主机配置时区
    • 5.查看并卸载系统原有的 mariadb和mysql
    • 6.更新 epel 源
  • 二、在线安装&&本地安装galera-cluster集群
    • 1.在线yum安装galera
    • 2.本地rpm文件离线安装galera集群
    • 3.拓展——使用yum缓存+ftp安装galera
  • 三、集群重启问题
    • 1.单独重启一台服务器
    • 2.集群重启

一、环境准备(安装前的准备)

主机名 主机IP 系统配置 操作系统和内核版本
mysql-galera1 192.168.221.131 2c4g/1c2g CentOS Linux release 7.9.2009 (Core)/3.10.0-1160.66.1.el7.x86_64
mysql-galera2 192.168.221.132 2c4g/1c2g CentOS Linux release 7.9.2009 (Core)/3.10.0-1160.66.1.el7.x86_64
mysql-galera3 192.168.221.133 2c4g/1c2g CentOS Linux release 7.9.2009 (Core)/3.10.0-1160.66.1.el7.x86_64

特别说明:以下操作所有服务器都要操作!

1.修改主机名

[root@mysql-galera1 ~]# hostnamectl set-hostname mysql-galera1
[root@mysql-galera2 ~]# hostnamectl set-hostname mysql-galera2
[root@mysql-galera3 ~]# hostnamectl set-hostname mysql-galera3

2.关闭selinux和防火墙

在所有主机上执行:

[root@mysql-galera1 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@mysql-galera1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
​
//SELINUX配置需要重启服务器生效,若要立马生效,执行如下命令
[root@mysql-galera1 ~]# setenforce 0

3.所有主机配置host解析

[root@mysql-galera1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
​
192.168.221.131 mysql-galera1
192.168.221.132 mysql-galera2
192.168.221.133 mysql-galera3

4.所有主机配置时区

//修改时区:(时间必须一致)
[root@mysql-galera1 ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@mysql-galera1 ~]# timedatectl set-timezone Asia/Shanghai

5.查看并卸载系统原有的 mariadb和mysql

(必须卸载,否则后期会有问题)

[root@mysql-galera1 ~]# yum erase `rpm -qa | grep mysql` -y ; yum erase `rpm -qa | grep mariadb` -y

6.更新 epel 源

[root@mysql-galera1 ~]# yum -y install epel-release

二、在线安装&&本地安装galera-cluster集群

以下步骤所有主机都要操作!

1.在线yum安装galera

(1)所有主机配置yum源
添加yum配置文件并使用yum安装配置yum源

[root@mysql-galera1 ~]# vim /etc/yum.repos.d/galera.repo
[galera]
name=galera
baseurl=http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
enabled=1
gpgcheck=0

(2)清除旧的缓存,生成新的缓存

[root@mysql-galera1 ~]# yum clean all && yum makecache

(3)搜索galera相关的安装包

[root@mysql-galera1 ~]# yum list | grep 'galera'
Repository cr is listed more than once in the configuration
Repository fasttrack is listed more than once in the configuration
galera.x86_64                            25.3.12-2.el7                 epel
mysql-wsrep-5.7.x86_64                   5.7.43-25.35.el7              galera
mysql-wsrep-client-5.7.x86_64            5.7.43-25.35.el7              galera
mysql-wsrep-common-5.7.x86_64            5.7.43-25.35.el7              galera
mysql-wsrep-devel-5.7.x86_64             5.7.43-25.35.el7              galera
mysql-wsrep-libs-5.7.x86_64              5.7.43-25.35.el7              galera
mysql-wsrep-libs-compat-5.7.x86_64       5.7.43-25.35.el7              galera
mysql-wsrep-server-5.7.x86_64            5.7.43-25.35.el7              galera
mysql-wsrep-test-5.7.x86_64              5.7.43-25.35.el7              galera

(4)yum在线安装galera

[root@mysql-galera1 ~]# yum install mysql-wsrep-5.7.x86_64 galera rsync -y
//在线安装的速度较慢

(5)安装完成后,查看已安装的mysql

[root@mysql-galera1 ~]# rpm -qa|egrep 'galera|rsync|mysql'
galera-25.3.12-2.el7.x86_64
mysql-wsrep-client-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-server-5.7-5.7.43-25.35.el7.x86_64
rsync-3.1.2-12.el7_9.x86_64
mysql-wsrep-libs-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-libs-compat-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-common-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-5.7-5.7.43-25.35.el7.x86_64

(6)安装报错
/var/lib/mysql下3个文件:grastate.dat gvwstate.dat galera.cache
如果出了错,把他们统统干掉
(7)所有主机启动mysqld并修改密码

[root@mysql-galera1 ~]# systemctl start mysqld
//启动mysqld并设置开机自启//获取mysqld的初始密码
[root@mysql-galera1 ~]# mysql_pass=`grep 'password is generated' /var/log/mysqld.log |awk '{print $NF}' |awk 'END{print}'` && echo $mysql_pass
Lf*C!p1w!V(w
​
[root@galera1 ~]# mysqladmin -u root -p${mysql_pass} password 'JiannLT@123'
[root@galera1 ~]# mysql -u root -p'JiannLT@123'

(8)所有主机创建用于数据同步的用户

#每台机器都要创建用于数据同步的用户:
mysql> grant all on *.* to 'syncuser'@'%' identified by 'JiannLT@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
​
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

(9)所有主机配置galera集群

  • mysql-galera1配置:主配置文件my.cnf中[mysqld]标签内,【追加】如下内容
[root@mysql-galera1 ~]# cp /etc/my.cnf{,.bak}
[root@mysql-galera1 ~]# vim /etc/my.cnf    //[mysqld]以下为追加内容
server-id=1
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://'
wsrep_node_name='galera1'
wsrep_node_address='192.168.221.131'
wsrep_sst_auth=syncuser:'JiannLT@123'
wsrep_sst_method=rsync

//重启mysql服务:
[root@mysql-galera1 ~]# systemctl  restart mysqld
  • mysql-galera2配置:主配置文件my.cnf中[mysqld]标签内,【追加】如下内容
[root@mysql-galera2 ~]# cp /etc/my.cnf{,.bak}
[root@mysql-galera2 ~]# vim /etc/my.cnf    //[mysqld]追加内容如下:
server-id=2
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.221.131,192.168.221.132,192.168.221.133'
wsrep_node_name='galera2'
wsrep_node_address='192.168.221.132'
wsrep_sst_auth=syncuser:'JiannLT@123'
wsrep_sst_method=rsync
//重启服务:
[root@galera2 ~]# systemctl  restart mysqld
  • mysql-galera3配置:主配置文件my.cnf中[mysqld]标签内,【追加】如下内容
[root@mysql-galera3 ~]# cp /etc/my.cnf{,.bak}
[root@mysql-galera3 ~]# vim /etc/my.cnf    //[mysqld]追加内容如下:
server-id=3
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.221.131,192.168.221.132,192.168.221.133'
wsrep_node_name='galera3'
wsrep_node_address='192.168.221.133'
wsrep_sst_auth=syncuser:'JiannLT@123'
wsrep_sst_method=rsync
//重启服务:
[root@mysql-galera3 ~]# systemctl  restart mysqld

​参数解释
server-id=1:设置MySQL服务器的唯一标识符,用于复制和集群环境中的节点识别。
binlog_format=row:设置二进制日志的格式为行级别复制。这种格式记录了每个修改数据的具体行级别操作,以便在复制和恢复过程中更准确地重放和应用更改。
innodb_file_per_table=1:设置InnoDB存储引擎为每个表创建独立的表空间文件。这样每个表将有自己的数据文件,提供更好的性能和管理灵活性。
innodb_autoinc_lock_mode=2:设置InnoDB自增锁定模式为连续锁定模式。在这种模式下,自增列的锁定级别更低,可以提高并发性能。
wsrep_on=ON:启用Galera集群的插件,用于支持多主同步复制。
wsrep_provider=/usr/lib64/galera/libgalera_smm.so:指定Galera集群插件的位置。
wsrep_cluster_name=‘galera’:设置Galera集群的名称,用于识别相同集群中的节点。
wsrep_cluster_address=‘gcomm://’:设置Galera集群的地址。在这个示例中,使用了空的集群地址,表示将通过其他配置文件或命令行参数来指定集群中的节点。第一个节点使用了空的集群地址,是因为 Galera 集群底层使用了一种叫做 “组播(multicast)” 的方式让节点互相发现和通信。
wsrep_node_name=‘galera1’:设置Galera集群节点的名称,用于在集群中唯一标识节点。
wsrep_node_address=‘192.168.221.131’:设置Galera集群节点的网络地址,用于节点间的通信。
wsrep_sst_auth=syncuser:‘JiannLT@123’:指定用于执行状态快照传输(State Snapshot Transfer,SST)的身份验证信息。用户名是"syncuser",密码是"JiannLT@123。
wsrep_sst_method=rsync:设置状态快照传输(SST)的方法为rsync,即使用rsync工具来传输数据。

配置文件特别说明:

  • 特别说明:”gcomm://” 是特殊的地址,第一个galera节点的wsrep_cluster_address 初始值要配置为 ‘gcomm://’ ,因为初始配置的时候是没有集群存在的
  • 当mysql-galera1节点启动以后才有集群。启动其他节点就可以添加到mysql-galera1所在的 galera cluster 集群了;其他节点要配置为所有节点的IP地址:wsrep_cluster_address=’gcomm://192.168.221.131,192.168.221.132,192.168.221.133’。
  • 当 mysql-galera1 节点需要重启的时候,我们需要把配置信息修改为:wsrep_cluster_address=’gcomm://192.168.221.131,192.168.221.132,192.168.221.133’。

(10)所有主机查看集群状态
所有节点都配置完集群信息后,需要将mysql-galera1节点的 gcomm://修改一下,然后重启mysqld;不然后续重启galera1节点的mysql,会发现它在另外一个集群中!

[root@mysql-galera1 ~]# vim /etc/my.cnf
wsrep_cluster_address='gcomm://192.168.221.131,192.168.221.132,192.168.221.133'
[root@mysql-galera1 ~]# systemctl restart mysqld
#查看mysql版本
mysql> SHOW GLOBAL VARIABLES LIKE 'version';

#查看wsrep版本
mysql> SHOW GLOBAL STATUS LIKE 'wsrep_provider_version';
 
#查看集群地址
mysql> SHOW VARIABLES LIKE 'wsrep_cluster_address';
+-----------------------+------------------------------------------------------+
| Variable_name         | Value                                                |
+-----------------------+------------------------------------------------------+
| wsrep_cluster_address | gcomm://192.168.221.131,192.168.221.132,192.168.221.133 |
+-----------------------+------------------------------------------------------+
1 row in set (0.00 sec)#查看Galera集群状态
mysql> show status like 'wsrep%';
+------------------------------+-------------------------------------------------------------+
| Variable_name                | Value                                                       |
+------------------------------+-------------------------------------------------------------+
| wsrep_local_state_uuid       | ea1a308f-425f-11ee-87ac-5fe2ff4351a2                        |
| wsrep_protocol_version       | 7                                                           |
| wsrep_last_committed         | 5                                                           |
| wsrep_replicated             | 2                                                           |
| wsrep_replicated_bytes       | 392                                                         |
| wsrep_repl_keys              | 2                                                           |
| wsrep_repl_keys_bytes        | 62                                                          |
| wsrep_repl_data_bytes        | 202                                                         |
| wsrep_repl_other_bytes       | 0                                                           |
| wsrep_received               | 13                                                          |
| wsrep_received_bytes         | 2456                                                        |
| wsrep_local_commits          | 0                                                           |
| wsrep_local_cert_failures    | 0                                                           |
| wsrep_local_replays          | 0                                                           |
| wsrep_local_send_queue       | 0                                                           |
| wsrep_local_send_queue_max   | 2                                                           |
| wsrep_local_send_queue_min   | 0                                                           |
| wsrep_local_send_queue_avg   | 0.250000                                                    |
| wsrep_local_recv_queue       | 0                                                           |
| wsrep_local_recv_queue_max   | 2                                                           |
| wsrep_local_recv_queue_min   | 0                                                           |
| wsrep_local_recv_queue_avg   | 0.230769                                                    |
| wsrep_local_cached_downto    | 2                                                           |
| wsrep_flow_control_paused_ns | 0                                                           |
| wsrep_flow_control_paused    | 0.000000                                                    |
| wsrep_flow_control_sent      | 0                                                           |
| wsrep_flow_control_recv      | 0                                                           |
| wsrep_cert_deps_distance     | 1.000000                                                    |
| wsrep_apply_oooe             | 0.000000                                                    |
| wsrep_apply_oool             | 0.000000                                                    |
| wsrep_apply_window           | 1.000000                                                    |
| wsrep_commit_oooe            | 0.000000                                                    |
| wsrep_commit_oool            | 0.000000                                                    |
| wsrep_commit_window          | 1.000000                                                    |
| wsrep_local_state            | 4                                                           |
| wsrep_local_state_comment    | Synced                                                      |
| wsrep_cert_index_size        | 3                                                           |
| wsrep_causal_reads           | 0                                                           |
| wsrep_cert_interval          | 0.000000                                                    |
| wsrep_incoming_addresses     | 192.168.221.131:3306,192.168.221.132:3306,192.168.221.133:3306 |
| wsrep_evs_delayed            |                                                             |
| wsrep_evs_evict_list         |                                                             |
| wsrep_evs_repl_latency       | 0/0/0/0/0                                                   |
| wsrep_evs_state              | OPERATIONAL                                                 |
| wsrep_gcomm_uuid             | 0291c744-4264-11ee-bd79-feb3b518c4ad                        |
| wsrep_cluster_conf_id        | 8                                                           |
| wsrep_cluster_size           | 3                                                           |
| wsrep_cluster_state_uuid     | ea1a308f-425f-11ee-87ac-5fe2ff4351a2                        |
| wsrep_cluster_status         | Primary                                                     |
| wsrep_connected              | ON                                                          |
| wsrep_local_bf_aborts        | 0                                                           |
| wsrep_local_index            | 0                                                           |
| wsrep_provider_name          | Galera                                                      |
| wsrep_provider_vendor        | Codership Oy <info@codership.com>                           |
| wsrep_provider_version       | 3.12(r9921e73)                                              |
| wsrep_ready                  | ON                                                          |
+------------------------------+-------------------------------------------------------------+
56 rows in set (0.00 sec)

参数解释
wsrep_local_state_uuid: 当前节点的Galera集群状态UUID。
wsrep_protocol_version: Galera集群使用的通信协议版本。
wsrep_last_committed: 最后一次提交的事务序号。
wsrep_replicated: 已复制的事务数。
wsrep_replicated_bytes: 已复制的字节数。
wsrep_repl_keys: 复制的键数。
wsrep_repl_keys_bytes: 复制的键字节数。
wsrep_repl_data_bytes: 复制的数据字节数。
wsrep_received: 接收到的事务数。
wsrep_received_bytes: 接收到的字节数。
wsrep_local_commits: 本地提交的事务数。
wsrep_local_cert_failures: 本地认证失败的次数。
wsrep_local_replays: 本地重放的事务数。
wsrep_local_send_queue: 本地发送队列中待发送的事务数。
wsrep_local_send_queue_max: 本地发送队列的最大大小。
wsrep_local_send_queue_min: 本地发送队列的最小大小。
wsrep_local_send_queue_avg: 本地发送队列的平均大小。
wsrep_local_recv_queue: 本地接收队列中待处理的事务数。
wsrep_local_recv_queue_max: 本地接收队列的最大大小。
wsrep_local_recv_queue_min: 本地接收队列的最小大小。
wsrep_local_recv_queue_avg: 本地接收队列的平均大小。
wsrep_local_cached_downto: 本地缓存的最低已应用事务序号。
wsrep_flow_control_paused_ns: 由于流控而暂停的时间(纳秒)。
wsrep_flow_control_paused: 由于流控而暂停的时间(秒)。
wsrep_flow_control_sent: 发送的流控消息数。
wsrep_flow_control_recv: 接收的流控消息数。
wsrep_cert_deps_distance: 当前事务的依赖关系距离。
wsrep_apply_oooe: 超出顺序执行的应用事务数。
wsrep_apply_oool: 超出限制的顺序执行的应用事务数。
wsrep_apply_window: 应用事务窗口大小。
wsrep_commit_oooe: 超出顺序提交的事务数。
wsrep_commit_oool: 超出限制的顺序提交的事务数。
wsrep_commit_window: 提交事务窗口大小。
wsrep_local_state: 本地节点的Galera状态。
wsrep_local_state_comment: 本地节点的Galera状态说明。
wsrep_cert_index_size: 事务认证索引的大小。
wsrep_causal_reads: 执行的因果一致性读取数。
wsrep_cert_interval: 事务认证间隔。
wsrep_incoming_addresses: 集群中接收到的节点地址列表。
wsrep_evs_state: EVS(Endpoint Visibility State)状态。
wsrep_gcomm_uuid: 当前节点的GCOMM(Group Communication)UUID。
wsrep_cluster_conf_id:表示 Galera 集群配置的标识符。每当你更改 Galera 集群的配置时,这个标识符都会增加,以便节点能够识别出配置更改。
wsrep_cluster_size: Galera集群中的节点数。
wsrep_cluster_state_uuid: Galera集群的状态UUID。
wsrep_cluster_status: Galera集群的状态。
wsrep_connected: 是否与Galera集群连接。
wsrep_local_bf_aborts: 本地节点的BF(BF-LRU Bloom Filter)中的中止数。
wsrep_local_index: 本地节点的索引。
wsrep_provider_name: 使用的Galera提供程序的名称。
wsrep_provider_vendor: Galera提供程序的供应商。
wsrep_provider_version: Galera提供程序的版本。
wsrep_ready: 是否准备就绪。

监控状态说明
集群完整性检查

  • wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,如果有不同值的节点,说明其没有连接入集群。
  • wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的。如果值不同,说明该节点被临时”分区”了。当节点之间网络连接恢复的时候应该会恢复一样的值。
  • wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接。
  • wsrep_cluster_status:集群组成的状态。如果不为”Primary”,说明出现”分区”或是”split-brain脑裂”状况。

节点状态检查

  • wsrep_ready: 该值为ON,则说明可以接受SQL负载。如果为Off,则需要检查wsrep_connected。
  • wsrep_connected: 如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群。(可能是)
  • wsrep_cluster_address或wsrep_cluster_name等配置错造成的。具体错误需要查看错误日志
  • wsrep_local_state_comment:如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因。

复制健康检查

  • wsrep_flow_control_paused:表示复制停止了多长时间。即表明集群因为Slave延迟而慢的程度。值为0~1,越靠近0越好,值为1表示复制完全停止。可优化wsrep_slave_threads的值来改善。
  • wsrep_cert_deps_distance:有多少事务可以并行应用处理。wsrep_slave_threads设置的值不应该高出该值太多。
  • wsrep_flow_control_sent:表示该节点已经停止复制了多少次。
  • wsrep_local_recv_queue_avg:表示slave事务队列的平均长度。slave瓶颈的预兆。

最慢的节点的wsrep_flow_control_sent和wsrep_local_recv_queue_avg这两个值最高。这两个值较低的话,相对更好。

检测慢网络问题:wsrep_local_send_queue_avg:网络瓶颈的预兆,如果这个值比较高的话,可能存在网络瓶颈

冲突或死锁的数目

  • wsrep_last_committed:最后提交的事务数目
  • wsrep_local_cert_failures和wsrep_local_bf_aborts:回滚,检测到的冲突数

(11)创建数据库、数据表,插入数据,测试数据同步情况
在mysql-galera1服务器中创建数据库,在mysql-galera2中创建数据表,在mysql-galera3中插入数据,观察是否同步

1.galera1上操作
[root@mysql-galera1 ~]# hostname -I
192.168.221.131 
[root@mysql-galera1 ~]# mysql -uroot -p'JiannLT@123' 
mysql> create database test;
Query OK, 1 row affected (0.01 sec)2.galera2上操作
[root@mysql-galera2 ~]# hostname -I
192.168.221.132
[root@mysql-galera2 ~]# mysql -uroot -p'JiannLT@123'
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |      //有test这个库了
+--------------------+
5 rows in set (0.00 sec)//在test库中创建表格
mysql> create table test.t1(id int);
Query OK, 0 rows affected (0.02 sec)
​
​3.galera3上操作
[root@mysql-galera3 ~]# hostname -I
192.168.221.133
[root@mysql-galera3 ~]# mysql -uroot -p'JiannLT@123'
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)
​
mysql> show tables from test;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)
​
mysql> select * from test.t1;
Empty set (0.05 sec)//插入数据
mysql> insert into test.t1 values(1);
Query OK, 1 row affected (0.01 sec)
​
mysql> select * from test.t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)//再到galera1中查看test库的t1表是否有数据
[root@mysql-galera1 ~]# hostname -I
192.168.221.131 
[root@mysql-galera1 ~]# mysql -uroot -p'JiannLT@123'
mysql> select * from test.t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)
数据同步成功!!!

centos7 yum在线部署galera集群完成!

2.本地rpm文件离线安装galera集群

(1)安装前的准备请参考上面
(2)下载集群软件包并安装
需要以下rpm包,可以提前下载。(本地终端上传也可以,更快一点)
官网下载地址:https://galeracluster.com/downloads/
可在这个网址下载:http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/ http://releases.galeracluster.com/galera-3.37/centos/7/x86_64/galera-3-25.3.37-1.el7.x86_64.rpm

  • galera-3-25.3.37-1.el7.x86_64.rpm
  • mysql-wsrep-5.7-5.7.43-25.35.el7.x86_64.rpm
  • mysql-wsrep-client-5.7-5.7.43-25.35.el7.x86_64.rpm
  • mysql-wsrep-common-5.7-5.7.43-25.35.el7.x86_64.rpm
  • mysql-wsrep-devel-5.7-5.7.43-25.35.el7.x86_64.rpm
  • mysql-wsrep-libs-5.7-5.7.43-25.35.el7.x86_64.rpm
  • mysql-wsrep-libs-compat-5.7-5.7.43-25.35.el7.x8…>
  • mysql-wsrep-server-5.7-5.7.43-25.35.el7.x86_64.rpm
  • mysql-wsrep-test-5.7-5.7.43-25.35.el7.x86_64.rpm
    共计9个文件

安装本地的rpm包,建议使用yum安装,会自动安装依赖

[root@mysql-galera1 ~]# yum erase `rpm -qa | grep mysql` -y ; yum erase `rpm -qa | grep mariadb` -y
[root@mysql-galera1 ~]# yum -y install ./mysql-*
[root@mysql-galera1 ~]# yum -y install galera rsync
//安装完看看是否都已安装成功
[root@mysql-galera1 ~]# rpm -qa|egrep 'mysql|galera|rsync'
mysql-wsrep-libs-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-5.7-5.7.43-25.35.el7.x86_64
galera-3-25.3.37-1.el7.x86_64
mysql-wsrep-common-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-client-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-libs-compat-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-server-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-test-5.7-5.7.43-25.35.el7.x86_64
mysql-wsrep-devel-5.7-5.7.43-25.35.el7.x86_64
rsync-3.1.2-12.el7_9.x86_64

(3)所有主机启动mysqld并修改密码

[root@mysql-galera1 ~]# systemctl restart mysqld    //启动mysql//获取mysqld的初始密码
[root@mysql-galera1 ~]# mysql_pass=`grep 'password is generated' /var/log/mysqld.log |awk '{print $NF}' |awk 'END{print}'` && echo $mysql_pass
Lf*C!p1w!V(w
[root@mysql-galera1 ~]# mysqladmin -u root -p${mysql_pass} password 'JiannLT@123'
[root@mysql-galera1 ~]# mysql -u root -p'JiannLT@123'

(4)所有主机创建用于数据同步的用户

#每台机器都要创建用于数据同步的用户:
mysql> grant all on *.* to 'syncuser'@'%' identified by 'JiannLT@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
​
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

(5)所有主机配置galera集群
详细步骤参照上面的(9)

1.galera1配置文件如下
[root@mysql-galera1 ~]# cp /etc/my.cnf{,.bak}
[root@mysql-galera1 ~]# vim /etc/my.cnf    //[mysqld]追加内容如下:
server-id=1
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://'
wsrep_node_name='galera1'
wsrep_node_address='192.168.221.128'
wsrep_sst_auth=syncuser:'JiannLT@123'
wsrep_sst_method=rsync
//重启galera1的mysql
[root@mysql-galera1 ~]# systemctl restart mysqld
//查看端口
[root@mysql-galera1 ~]# netstat -ntlp|grep mysql
tcp        0      0 0.0.0.0:4567            0.0.0.0:*               LISTEN      3111/mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      3111/mysqld
​
2.galera2配置文件如下
[root@mysql-galera2 ~]# cp /etc/my.cnf{,.bak}
[root@mysql-galera2 ~]# vim /etc/my.cnf    //[mysqld]追加内容如下:
server-id=2
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.221.128,192.168.221.129,192.168.221.130'
wsrep_node_name='galera2'
wsrep_node_address='192.168.221.129'
wsrep_sst_auth=syncuser:'JiannLT@123'
wsrep_sst_method=rsync
//重启galera2的mysql
[root@mysql-galera1 ~]# systemctl restart mysqld
​//查看端口
[root@mysql-galera2 ~]# netstat -ntlp|grep mysql
tcp        0      0 0.0.0.0:4567            0.0.0.0:*               LISTEN      2385/mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      2385/mysqld
​
​3.galera3配置文件如下
[root@mysql-galera3 ~]# cp /etc/my.cnf{,.bak}
[root@mysql-galera3 ~]# vim /etc/my.cnf    //[mysqld]追加内容如下:
server-id=3
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.221.128,192.168.221.129,192.168.221.130'
wsrep_node_name='galera3'
wsrep_node_address='192.168.221.130'
wsrep_sst_auth=syncuser:'JiannLT@123'
wsrep_sst_method=rsync
//重启galera3的mysql
[root@mysql-galera1 ~]# systemctl restart mysqld
​//查看端口
[root@mysql-galera3 ~]# netstat -ntlp|grep mysql
tcp        0      0 0.0.0.0:4567            0.0.0.0:*               LISTEN      2497/mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      2497/mysqld
​
4.所有节点查看集群地址
mysql> SHOW VARIABLES LIKE 'wsrep_cluster_address';
+-----------------------+------------------------------------------------------+
| Variable_name         | Value                                                |
+-----------------------+------------------------------------------------------+
| wsrep_cluster_address | gcomm://192.168.221.128,192.168.221.129,192.168.221.130 |
+-----------------------+------------------------------------------------------+
1 row in set (0.00 sec)5.所有节点查看Galera集群状态,观察wsrep_cluster_size、wsrep_incoming_addresses、wsrep_ready是否都一致
mysql> show status like 'wsrep%';6.插入测试数据,参考5.4.3.1.12
mysql> create database qftest;
Query OK, 1 row affected (0.03 sec)

3.拓展——使用yum缓存+ftp安装galera

  • 原理:**下载rpm前,所有主机开启yum cache缓存,集群中一定有下载速度比较快的节点,速度快的节点先将所有的rpm包下载下来后,配置vsftp,其他节点直接从这个节点下载rpm包
  • 操作如下**
//修改Yum源
[root@mysql-galera1 ~]# cat /etc/yum.repos.d/galera.repo
[galera]
name=galera
baseurl=http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
enabled=1
gpgcheck=0
​
​//为了方便其他节点安装Galera、我们把Yum源下载的内容缓存下来做成本地Yum源加快安装速度
[root@mysql-galera1 ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever   //缓存目录,默认已经就存在的
keepcache=1    //开启缓存
......//galera Yum源包含的包
[root@mysql-galera1 ~]# yum clean all && yum makecache
[root@mysql-galera1 ~]# yum list | egrep 'wsrep|galera'
Repository cr is listed more than once in the configuration
Repository fasttrack is listed more than once in the configuration
galera.x86_64                            25.3.12-2.el7                 epel
mysql-wsrep-5.7.x86_64                   5.7.43-25.35.el7              galera
mysql-wsrep-client-5.7.x86_64            5.7.43-25.35.el7              galera
mysql-wsrep-common-5.7.x86_64            5.7.43-25.35.el7              galera
mysql-wsrep-devel-5.7.x86_64             5.7.43-25.35.el7              galera
mysql-wsrep-libs-5.7.x86_64              5.7.43-25.35.el7              galera
mysql-wsrep-libs-compat-5.7.x86_64       5.7.43-25.35.el7              galera
mysql-wsrep-server-5.7.x86_64            5.7.43-25.35.el7              galera
mysql-wsrep-test-5.7.x86_64              5.7.43-25.35.el7              galera
​
//执行安装命令
[root@mysql-galera1 ~]# yum install mysql-wsrep-5.7.x86_64 galera rsync -y
  • 注:这里galera如果安装不上可以添加一下epel源:yum install -y epel-release
  • 配置本地yum源
//把缓存下来的galera包拷贝到galera目录
[root@mysql-galera1 ~]# mkdir -p galera
[root@mysql-galera1 ~]# find /var/cache/yum/x86_64/7/ -iname "*.rpm" -exec cp -a {} galera \;
[root@mysql-galera1 ~]#  ls galera/
boost-program-options-1.53.0-28.el7.x86_64.rpm      mysql-wsrep-libs-5.7-5.7.43-25.35.el7.x86_64.rpm
galera-25.3.12-2.el7.x86_64.rpm                     mysql-wsrep-libs-compat-5.7-5.7.43-25.35.el7.x86_64.rpm
libpcap-1.5.3-13.el7_9.x86_64.rpm                   mysql-wsrep-server-5.7-5.7.43-25.35.el7.x86_64.rpm
lsof-4.87-6.el7.x86_64.rpm                          nmap-ncat-6.40-19.el7.x86_64.rpm
mysql-wsrep-5.7-5.7.43-25.35.el7.x86_64.rpm         rsync-3.1.2-12.el7_9.x86_64.rpm
mysql-wsrep-client-5.7-5.7.43-25.35.el7.x86_64.rpm  socat-1.7.3.2-2.el7.x86_64.rpm
mysql-wsrep-common-5.7-5.7.43-25.35.el7.x86_64.rpm  stunnel-4.56-6.el7.x86_64.rpm
​
​//安装vsftpd和createrepo
[root@mysql-galera1 ~]# yum install vsftpd createrepo -y
[root@mysql-galera1 ~]# cp -r galera /var/ftp
[root@mysql-galera1 ~]# ls /var/ftp/galera/
boost-program-options-1.53.0-28.el7.x86_64.rpm      mysql-wsrep-libs-compat-5.7-5.7.43-25.35.el7.x86_64.rpm
galera-25.3.12-2.el7.x86_64.rpm                     mysql-wsrep-server-5.7-5.7.43-25.35.el7.x86_64.rpm
libpcap-1.5.3-13.el7_9.x86_64.rpm                   nmap-ncat-6.40-19.el7.x86_64.rpm
lsof-4.87-6.el7.x86_64.rpm                          
mysql-wsrep-5.7-5.7.43-25.35.el7.x86_64.rpm         rsync-3.1.2-12.el7_9.x86_64.rpm
mysql-wsrep-client-5.7-5.7.43-25.35.el7.x86_64.rpm  socat-1.7.3.2-2.el7.x86_64.rpm
mysql-wsrep-common-5.7-5.7.43-25.35.el7.x86_64.rpm  stunnel-4.56-6.el7.x86_64.rpm
mysql-wsrep-libs-5.7-5.7.43-25.35.el7.x86_64.rpm
​
​//创建本地Yum仓库
[root@mysql-galera1 ~]# createrepo /var/ftp/galera/
Spawning worker 0 with 2 pkgs
Spawning worker 1 with 2 pkgs
Spawning worker 2 with 2 pkgs
Spawning worker 3 with 1 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

//启动vsftp、Yum源就已经做好了
[root@mysql-galera1 ~]# systemctl start vsftpd
[root@mysql-galera1 ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
  • 其他节点使用本地yum源
[root@mysql-galera2 ~]# yum erase `rpm -qa | grep mysql` -y ; yum erase `rpm -qa | grep mariadb` -y
​
#配置本地Yum源
[root@mysql-galera2 ~]# cat /etc/yum.repos.d/galera.repo 
[galera]
name=galera
baseurl=ftp://192.168.221.128/galera
gpgcheck=0//安装galera
[root@mysql-galera2 ~]# yum install mysql-wsrep-5.7.x86_64 galera rsync -y
[root@mysql-galera2 ~]# systemctl enable --now mysqld   //启动mysql并设置开机自启
[root@mysql-galera2 ~]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name          
tcp6       0      0 :::3306                 :::*                    LISTEN      2234/mysqld         
      
//修改默认密码
[root@mysql-galera2 ~]# mysql_pass=`grep 'password is generated' /var/log/mysqld.log |awk '{print $NF}' |awk 'END{print}'` && echo $mysql_pass
Lf*C!p1w!V(w
[root@mysql-galera2 ~]# mysqladmin -u root -p${mysql_pass} password 'JiannLT@123'
  • mysql-galera3节点也是跟galera2节点一样的操作
  • 剩下的所有节点需要添加用户、添加集群信息、创建库、表等操作,参考上面的步骤即可

三、集群重启问题

1.单独重启一台服务器

单独重启galera2和galera3节点的mysqld服务能正常加入到集群中,重启galera1节点会发现galera1单独在一个新的集群中,galera2和galera3在另一个集群中,这是由于galera1的配置文件中wsrep_cluster_address='gcomm://'会使galera1新建一个集群
如下,当galera启动后,查看集群信息是正常的,但是当重启galera1节点的mysqld后,查看集群信息就不是正常的了
因此在重启galera1前,应该修改配置文件

[root@mysql-galera1 ~]# vim /my.cnf
wsrep_cluster_address='gcomm://192.168.221.131,192.168.221.132,192.168.221.133'//此时重启galera的mysqld服务将会重新进入集群中

2.集群重启

当所有节点的mysqld都停止后或者服务器断电了需要重启galera集群,想要重启集群

  • 需要先把开机自启的myqld停止掉,保证当前系统没有mysqld进程,服务器重启后会有mysqld进程,有4567端口,但是没有3306端口,因为开机自启的mysqld启动不成功
  • 再将/var/lib/mysql中的galera.cache、grastate.dat两个文件删除
  • 再将galera1中的/etc/my.cnf配置文件中的wsrep_cluster_address改成wsrep_cluster_address='gcomm://'
  • 依次启动galera1、galera2、galera3的mysqld服务即可使集群恢复正常
  • 最后所有节点的galera服务都正常后,再将wsrep_cluster_address改成wsrep_cluster_address='gcomm://192.168.221.128,192.168.221.129,192.168.221.130',最后重启mysqld

否则,直接重启所有节点mysqld,会出现以下报错信息

[root@localhost ~]# tailf /var/log/mysqld.log
​
2023-08-24T07:19:31.990200Z 0 [ERROR] WSREP: failed to open gcomm backend connection: 110: failed to reach primary view: 110 (Connection timed out)
         at gcomm/src/pc.cpp:connect():162
2023-08-24T07:19:31.990222Z 0 [ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():206: Failed to open backend connection: -110 (Connection timed out)
2023-08-24T07:19:31.990282Z 0 [ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1379: Failed to open channel 'galera' at 'gcomm://192.168.221.128,192.168.221.129,192.168.221.130': -110 (Connection timed out)
2023-08-24T07:19:31.990295Z 0 [ERROR] WSREP: gcs connect failed: Connection timed out
2023-08-24T07:19:31.990299Z 0 [ERROR] WSREP: wsrep::connect(gcomm://192.168.221.128,192.168.221.129,192.168.221.130) failed: 7
2023-08-24T07:19:31.990301Z 0 [ERROR] Aborting

你可能感兴趣的:(MySQL数据库,mysql,adb,android,数据库,linux,centos)