Galera_Cluster_Mysql部署

前言

先来了解下它的身世,Galera Cluster是Codership公司开发的一套免费开源的高可用方案
官网为http://galeracluster.com。Galera Cluster即为安装了Galera的Mariadb集群(本文只介绍Mariadb Garela集群)
其本身具有multi-master特性,支持多点写入
Galera Cluster的三个(或多个)节点是对等关系,每个节点均支持写入,集群内部会保证写入数据的一致性与完整性

下面是这个架构的一些特性:

• 真正的多主集群,Active-Active架构;

• 同步复制,没有复制延迟;

• 多线程复制;

• 没有主从切换操作,无需使用虚IP;

• 热备份,单个节点故障期间不会影响数据库业务;

• 支持节点自动加入,无需手动拷贝数据;

• 支持InnoDB存储引擎;

• 对应用程序透明,原生MySQL接口;

• 无需做读写分离;

• 部署使用简单。

安装部署
环境说明
系统:centos7.7 galera1:192.168.191.128 galera2:192.168.191.129 galera3:192.168.191.130

安装操作
1)上传带有galera补丁的数据库包(下载地址,提取码:8888 )

##三台节点同时进行以下操作
[root@galera1 ~]# yum -y install lrzsz vim   #工具包
[root@galera1 ~]# mkdir galera
[root@galera1 ~]# cd galera

2)哦噢,对了要把系统默认关于数据库的一切全部卸载

#三台节点同时进行以下操作
[root@galera1 galera]# rpm -qa | grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@galera1 galera]# rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps  #强制卸载

3)关闭防火墙

##三台节点同时进行以下操作
[root@galera1 galera]# setenforce 0;systemctl stop firewalld

4)上才艺,要安装咯要安装咯!

##三台节点同时进行以下操作
[root@galera1 galera]# yum -y install mysql-wsrep-client-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-common-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-devel-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-libs-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-libs-compat-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-server-5.7-5.7.31-25.23.el7.x86_64.rpm mysql-wsrep-test-5.7-5.7.31-25.23.el7.x86_64.rpm   #先安依赖
 
[root@galera1 galera]# yum -y install galera-3-25.3.31-1.el7.x86_64.rpm mysql-wsrep-5.7-5.7.31-25.23.el7.x86_64.rpm   ##这是有galera补丁的数据库

5)先启动数据库,给节点三兄弟配个集群通信账号(重点哦~)

##三台节点同时进行以下操作
[root@galera1 galera]# systemctl start mysqld
[root@galera1 galera]# systemctl status mysqld    #状态running启动成功
[root@galera1 galera]# new=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'`;mysqladmin -p"$new" password "ghy@6666"    #设置数据库root的密码
[root@galera1 galera]# mysql -uroot -pghy@6666     #登录数据库
mysql> grant all on *.* to ghy@"%" identified by 'ghy@6666';    #授权创建数据库账户
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;                   ##刷新权限
Query OK, 0 rows affected (0.00 sec)

6)修改数据库配置文件,创建galera集群(这个是真的重点哦很容易出错)

###第一台节点先配置
[root@galera1 galera]# vim /etc/my.cnf    #最下面添加
server-id=1                    #三个节点id不能一样
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
 
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'             #集群名称
wsrep_cluster_address='gcomm://'        #第一个节点配置时暂时不加入ip,表示新创建集群的意思,一但加ip会报配置文件错误。需要在后续集群创建完成加入各个节点后在回来填写ip
wsrep_node_name='galera1'               #集群中这个节点的名称不不能与其他节点重复
wsrep_node_address='192.168.191.128'
wsrep_sst_auth=ghy:"ghy@6666"
wsrep_sst_method=rsync    #注意没有rsync需要yum下载
[root@galera1 galera]# systemctl restart mysqld   ##重启数据库
[root@galera1 galera]# mysql -uroot -pghy@6666
mysql>  show status like 'wsrep_incoming%';      #galera集群创建成功目前只有一个节点
+--------------------------+----------------------+
| Variable_name            | Value                |
+--------------------------+----------------------+
| wsrep_incoming_addresses | 192.168.191.128:3306 |
+--------------------------+----------------------+
1 row in set (0.01 sec)
 
###第二台节点配置如下
[root@galera2 galera]# vim /etc/my.cnf
server-id=2
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
 
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.191.128,192.168.191.130'  ##这里的ip要写第一台节点的ip,作用用于引导此节点加入galera集群。如果空着不写表示新创建集群
wsrep_node_name='galera2'
wsrep_node_address='192.168.191.129'
wsrep_sst_auth=ghy:"ghy@6666"
wsrep_sst_method=rsync
[root@galera2 galera]# systemctl restart mysqld  
[root@galera2 galera]# mysql -uroot -pghy@6666
mysql>  show status like 'wsrep_incoming%';   ##此时galera集群中已加入此节点
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306 |
+--------------------------+-------------------------------------------+
1 row in set (0.01 sec)
 
###第三台节点配置如下
[root@galera3 galera]# vim /etc/my.cnf
server-id=3
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
 
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://192.168.191.128,192.168.191.129'  ##引导地址写前两个节点的ip
wsrep_node_name='galera3'
wsrep_node_address='192.168.191.130'
wsrep_sst_auth=ghy:"ghy@6666"
wsrep_sst_method=rsync
[root@galera3 galera]# systemctl restart mysqld
[root@galera3 galera]# mysql -uroot -pghy@6666
mysql>  show status like 'wsrep_incoming%';   ##此时三台节点已加入
+--------------------------+----------------------------------------------------------------+
| Variable_name            | Value                                                          |
+--------------------------+----------------------------------------------------------------+
| wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306,192.168.191.130:3306 |
+--------------------------+----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show status like '%wsrep%';
+------------------------------+----------------------------------------------------------+
| Variable_name                | Value                                                    |
+------------------------------+----------------------------------------------------------+
| wsrep_local_state_uuid       | e142ca9d-497f-11eb-845a-ee955e84fe5b                     |
| wsrep_protocol_version       | 7                                                        |
| wsrep_last_committed         | 47297                                                    |
| wsrep_replicated             | 0                                                        |
| wsrep_replicated_bytes       | 0                                                        |
| wsrep_repl_keys              | 0                                                        |
| wsrep_repl_keys_bytes        | 0                                                        |
| wsrep_repl_data_bytes        | 0                                                        |
| wsrep_repl_other_bytes       | 0                                                        |
| wsrep_received               | 216                                                      |
| wsrep_received_bytes         | 786352                                                   |
| wsrep_local_commits          | 0                                                        |
| wsrep_local_cert_failures    | 0                                                        |
| wsrep_local_replays          | 0                                                        |
| wsrep_local_send_queue       | 0                                                        |
| wsrep_local_send_queue_max   | 1                                                        |
| wsrep_local_send_queue_min   | 0                                                        |
| wsrep_local_send_queue_avg   | 0.000000                                                 |
| wsrep_local_recv_queue       | 0                                                        |
| wsrep_local_recv_queue_max   | 61                                                       |
| wsrep_local_recv_queue_min   | 0                                                        |
| wsrep_local_recv_queue_avg   | 8.648148                                                 |
| wsrep_local_cached_downto    | 47086                                                    |
| wsrep_flow_control_paused_ns | 1012209                                                  |
| wsrep_flow_control_paused    | 0.000010                                                 |
| wsrep_flow_control_sent      | 0                                                        |
| wsrep_flow_control_recv      | 1                                                        |
| wsrep_cert_deps_distance     | 26.429245                                                |
| 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        | 148                                                      |
| wsrep_causal_reads           | 0                                                        |
| wsrep_cert_interval          | 2.580189                                                 |
| wsrep_incoming_addresses     | vm10-11-0-131:3306,vm10-11-0-133:3306,vm10-11-0-132:3306 |
| wsrep_evs_delayed            |                                                          |
| wsrep_evs_evict_list         |                                                          |
| wsrep_evs_repl_latency       | 0.000684446/0.000684446/0.000684446/0/1                  |
| wsrep_evs_state              | OPERATIONAL                                              |
| wsrep_gcomm_uuid             | 86abfa4d-49b8-11eb-a0d7-b7a96cc64b5d                     |
| wsrep_cluster_conf_id        | 3                                                        |
| wsrep_cluster_size           | 3                                                        |
| wsrep_cluster_state_uuid     | e142ca9d-497f-11eb-845a-ee955e84fe5b                     |
| wsrep_cluster_status         | Primary                                                  |
| wsrep_connected              | ON                                                       |
| wsrep_local_bf_aborts        | 0                                                        |
| wsrep_local_index            | 2                                                        |
| 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.01 sec)

监测状态说明 
1. 集群完整性检查: 
wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群. 
wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值. 
wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接. 
wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况. 
2. 节点状态检查: 
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,则可以从该项查看原因. 
3. 复制健康检查: 
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瓶颈的预兆.
 
########最后我们在把三个节点的引导地址配置完全
只改一行,三台节点依次修改,改一台节点需重启一次数据库服务,不能等全部改完一起重启,切记!
[root@galera1 galera]# vim /etc/my.cnf
wsrep_cluster_address='gcomm://192.168.191.129,192.168.191.130,192.168.191.128'
[root@galera1 galera]# systemctl restart mysqld
 
mysql>  show status like 'wsrep_incoming%';  #仍然为三节点
+--------------------------+----------------------------------------------------------------+
| Variable_name            | Value                                                          |
+--------------------------+----------------------------------------------------------------+
| wsrep_incoming_addresses | 192.168.191.129:3306,192.168.191.128:3306,192.168.191.130:3306 |
+--------------------------+----------------------------------------------------------------+
1 row in set (0.35 sec)

7)测试集群

###这里我简单的测试下,实际情况我已测试过多边。此处只做演示
[root@galera1 galera]# mysql -uroot -pghy@6666   #节点1
mysql> create database hya;
Query OK, 1 row affected (0.01 sec)
[root@galera2 galera]# mysql -uroot -pghy@6666   #节点2
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hya                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
 
[root@galera3 galera]# mysql -uroot -pghy@6666
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hya                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

备注:

--wsrep-new-cluster   在第一台只第一次启动需要加这个参数来启动集群或者拿service mysql start --wsrep-new-cluster命令启动
nohup /usr/sbin/mysqld --wsrep-new-cluster --defaults-file=/data/mysql/dragonclouddb/my.cnf --user=mysql &
pkill mysql
原文地址:https://www.cnblogs.com/gaohongyu/p/14208082.html