mysql cluster 和mha_基于MHA和Galera Cluster实现MySQL高可用

本文介绍了MHA和Galera Cluster两种实现MySQL高可用的方案。MHA通过自动化master节点故障切换确保数据一致性,而Galera Cluster采用wsrep协议实现多节点实时同步,提供无延迟复制。详细阐述了两者部署过程,包括配置、启动和故障恢复。
摘要由CSDN通过智能技术生成

MHA:Master HA;是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating  master  failover功能。MHA在监控到master节点故障时,会将拥有最新数据的slave节点升为新的master节点,在此期间,MHA会通过于slave节点获取额外信息来避免一致性方面的问题。MHA还提供了master节点在线切换功能,即按需切换master/slave节点

MHA服务有两种角色:管理节点(MHA Manager)和数据节点(MHA Node)

MHA Manager:通常单独部署在一台独立服务器上管理多个master/slave集群,每个master/slave集群称为一个application

MHA Node:运行在每台MySQL服务器上(master/slave/manager),他通过监控具备解析和清理logs功能的脚本来加快故障转移

Galera Cluster

基于wsrep协议在全局实现复制,任何一节点都可实现读写操作,无延迟复制,不会产生数据丢失,当某台服务器宕机后,备用服务器会自动接管。

一、基于Galera  Cluster实现MySQL高可用

准备环境:CentOS  7

节点1

IP:172.18.42.200

节点2

IP:172.18.42.201

节点3

IP:172.18.42.202

1、部署节点1

(1)安装Galera服务

[root@node0 ~]# yum install MariaDB-Galera-server -y

(2)编辑其配置文件

[root@node0 ~]# rpm -ql galera  ##查看相关文件

/usr/lib64/galera/libgalera_smm.so

[root@node0 ~]# vim /etc/my.cnf.d/server.cnf

[galera]

# Mandatory settings  ##强制设置

wsrep_provider=/usr/lib64/galera/libgalera_smm.so  ##wsrep的提供者,一般是一个插件,不同的安装版本有可能不一样

wsrep_cluster_address="gcomm://172.18.42.200, 172.18.42.201, 172.18.42.202"  ##指明Galera-Cluster的各个节点

binlog_format=row  ##二进制日志格式,默认是row格式,不建议更改

default_storage_engine=InnoDB  ##指明使用的引擎

innodb_autoinc_lock_mode=2    ##锁格式

bind-address=0.0.0.0  ##wsrep在工作时监听的地址

wsrep_cluster_name='mycluster'  ##指明Galera集群的名称

(3)首次启动时,需要初始化集群

[root@node0 ~]# /etc/rc.d/init.d/mysql start --wsrep-new-cluster  ##在某一个节点上启动mysql服务

2、部署节点2

(1)安装MariaDB-Galera-server服务

[root@node0 ~]# yum install MariaDB-Galera-server -y

(2)启动服务

[root@node2 ~]# service mysql start

Starting MySQL....SST in progress, setting sleep higher. SUCCESS!

3、部署节点3

(1)安装MariaDB-Galera-server服务

[root@node0 ~]# yum install MariaDB-Galera-server -y

(2)启动服务

[root@node2 ~]# service mysql start

Starting MySQL....SST in progress, setting sleep higher. SUCCESS!

4、三个节点都连接mysql服务,随后创建一个数据库,查看其它两个节点是否复制

[root@node0 ~]# mysql    ##节点1连接mysql服务

MariaDB [(none)]> create database MaGeRepo;  ##在节点1上创建数据库“MaGeRepo”,并查看

MariaDB [(none)]> show databases;

+--------------------+

| Database

+--------------------+

| information_schema

| MaGeRepo

| mysql

| performance_schema

| test

+--------------------+

[root@node1 ~]# mysql  ##节点2连接至mysql服务

MariaDB [(none)]> show databases;  ##查看数据库

+--------------------+

| Database

+--------------------+

| information_schema

| MaGeRepo

| mysql

| performance_schema

| test

+--------------------+

[root@node2 ~]# mysql  ##节点3连接至mysql服务

MariaDB [(none)]> show databases;  ##查看数据库

+--------------------+

| Database

+--------------------+

| information_schema

| MaGeRepo

| mysql

| performance_schema

| test

+--------------------+

##数据库实现了同步

5、把节点2宕机,随后在数据库“MaGeRepo”中创建表“MaGe“;

MariaDB [MaGeRepo]> create table MaGe (ID int unsigned auto_increment not null primary key,Name char(10));  ##在节点1上创建表“MaGe”

MariaDB [MaGeRepo]> insert into MaGe (Name) values ('MaGe'),('Lweim');    ##在节点1中插入数据“Lweim”、“MaGe”

MariaDB [MaGeRepo]> insert into MaGe (Name) values ('Wtc'),('Wzx');    ##在节点3中插入数据“Wtc”、“Wzx”

6、节点2开启mysql服务器,并查看其数据库

[root@node1 ~]# service mysql start  ##启动节点2

Starting MySQL.....SST in progress, setting sleep higher. SUCCESS!

[root@node1 ~]# mysql  ##连接至mysql服务

MariaDB [MaGeRepo]> select * from MaGe;  ##查看表中的数据

+----+-------+

| ID | Name

+----+-------+

|  1 | MaGe

|  3 | Lweim

|  4 | Wtc

|  6 | Wzx

+----+-------+

由此可见,当其中某一台服务器宕机后,即使数据发生改变,重新上线之后也可同步数据,但需要注意的是ID并不是按自动增长次序增长的,解决办法如下:

a:设定一个全局分配ID生成器,解决数据插入时ID顺序不一致问题

b:手动指定ID号,不让其自动生成

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值