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

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服务

[[email protected] ~]# yum install MariaDB-Galera-server -y

(2)编辑其配置文件

[[email protected] ~]# rpm -ql galera  ##查看相关文件
/usr/lib64/galera/libgalera_smm.so    
[[email protected] ~]# 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)首次启动时,需要初始化集群

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

2、部署节点2

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

[[email protected] ~]# yum install MariaDB-Galera-server -y

(2)启动服务

[[email protected] ~]# service mysql start
Starting MySQL....SST in progress, setting sleep higher. SUCCESS!

3、部署节点3

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

[[email protected] ~]# yum install MariaDB-Galera-server -y

(2)启动服务

[[email protected] ~]# service mysql start
Starting MySQL....SST in progress, setting sleep higher. SUCCESS!

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

[[email protected] ~]# mysql    ##节点1连接mysql服务
MariaDB [(none)]> create database MaGeRepo;   ##在节点1上创建数据库“MaGeRepo”,并查看
MariaDB [(none)]> show databases;
+--------------------+
| Database           
+--------------------+
| information_schema 
| MaGeRepo           
| mysql              
| performance_schema 
| test               
+--------------------+
[[email protected] ~]# mysql   ##节点2连接至mysql服务
MariaDB [(none)]> show databases;   ##查看数据库
+--------------------+
| Database           
+--------------------+
| information_schema 
| MaGeRepo           
| mysql              
| performance_schema 
| test               
+--------------------+
[[email protected] ~]# 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服务器,并查看其数据库

[[email protected] ~]# service mysql start   ##启动节点2
Starting MySQL.....SST in progress, setting sleep higher. SUCCESS!
[[email protected] ~]# mysql   ##连接至mysql服务
MariaDB [MaGeRepo]> select * from MaGe;   ##查看表中的数据
+----+-------+
| ID | Name  
+----+-------+
|  1 | MaGe  
|  3 | Lweim
|  4 | Wtc   
|  6 | Wzx   
+----+-------+

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

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

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

二、基于MHA实现MySQL的高可用

准备环境:CentOS 7

MHA Manager节点 IP:172.18.42.200
MHA Node Master节点 IP:172.18.42.201
MHA Node Slave1节点 IP:172.18.42.202
MHA Node Slave2节点 IP:172.18.42.203

前提:基于MHA实现MySQL高可用时,各节点之间需要基于ssh秘钥进行通信

[[email protected] ~]# ssh-keygen -t rsa -P ‘‘  ##在Manager节点上基于rsa算法生成秘钥,密码为空
[[email protected] ~]# cat .shh/id_rsa.pub &>> .shh/authorized_keys   ##先要确认能与本地进行通信
[[email protected] ~]# chmod  600 .ssh/id_rsa .ssh/authorized_keys   ##更改秘钥权限
[[email protected]  ~]#  scp -p .ssh/id_rsa .ssh/authorized_keys [email protected]:/root/.ssh/   ##Manager节点把秘钥、公钥发送给每个节点,使各个节点可以进行秘钥通信(第一此通信需要秘钥,后续不需要)
[[email protected]  ~]#  scp -p .ssh/id_rsa .ssh/authorized_keys [email protected]:/root/.ssh/
[[email protected]  ~]#  scp -p .ssh/id_rsa .ssh/authorized_keys [email protected]:/root/.ssh/
[[email protected] ~]# ssh 172.18.42.201 ‘ifconfig‘  ##可基于此命令让各个节点之间进行测试是否建立连接
Are you sure you want to continue connecting (yes/no)? yes   ##第一次建立连接需要认证
[email protected]‘s password:

1、部署MHA Manager节点

(1)安装mha4mysql-manager、mha4mysql-node

[[email protected] ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm -y

(2)创建配置文件,并编辑

[[email protected] ~]# vim /etc/masterha/app1.cnf
[server default]
user=wtc   ##能远程连接至各mysql节点的用户管理账号,需要mysql节点创建此用户
password=wtc   
manager_workdir=/data/masterha/app1   ##管理节点的工作目录    
manager_log=/data/masterha/app1/manager.log   ##管理节点的日志文件路径
remote_workdir=/data/masterha/app1  ##远程的每个mysql节点为Manager节点提供工作目录,会自动创建 
ssh_user=root   ##以root用户远程管理,,基于秘钥认证无需密码;如果不基于密码,需要指明密码
repl_user=repluser   ##复制权限用户账号
repl_password=replpass
ping_interval=1    ##每隔多长时间探测一次Master节点是否在线
 
[server1]    ##定义mysql节点
hostname=172.18.42.201
candidate_master=1    ##当主节点宕机以后,这个节点是否可以成为新的主节点
##no_master=1    ##当主节点宕机后,这个节点不会成为新的主节点

[server2]
hostname=172.18.42.202
candidate_master=1

[server3]
hostname=172.18.42.203
candidate_master=1

2、部署Master节点

(1)安装mariadb-server、mha4mysql-node服务

[[email protected] ~] yum install mariadb-server mha4mysql-node-0.56-0.el6.noarch.rpm -y

(2)编辑其配置文件

[[email protected] ~]# vim /etc/my.cnf
[mysqld]
innodb_file_per_table = ON
skip_name_resolve = ON
log_bin=mysql-bin  
relay-log=relay-log
server-id=1
[[email protected] ~]# systemctl start mariadb.service
MariaDB [(none)]> show master status;
mysql-bin.000003      245
MariaDB [(none)]> grant replication slave,replication client on *.* to ‘repluser‘@‘172.18.%.%‘ identified by ‘replpass‘;   ##创建具有复制权限的用户

3、部署Slave1

(1)安装mariadb-server、mha4mysql-node服务

[[email protected] ~] yum install mariadb-server mha4mysql-node-0.56-0.el6.noarch.rpm -y

(2)编辑其配置文件

[[email protected] ~]# vim /etc/my.cnf
[mysqld]
innodb_file_per_table = ON
skip_name_resolve = ON
log_bin=mysql-bin
relay-log=relay-log
server-id=2
read_only=1   ##MHA通过这个来判断那个是mysql主服务器    
relay_log_purge=0
[[email protected] ~]# systemctl start mariadb.service
MariaDB [(none)]> change master to master_host=‘172.18.42.201‘,master_user=‘repluser‘,master_password=‘replpass‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=245;  ##连接至Master节点
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

4、部署Slave2

(1)安装mariadb-server、mha4mysql-node服务

[[email protected] ~] yum install mariadb-server mha4mysql-node-0.56-0.el6.noarch.rpm -y

(2)编辑其配置文件

[[email protected] ~]# vim /etc/my.cnf
innodb_file_per_table = ON
skip_name_resolve = ON
log_bin=mysql-bin
relay-log=relay-log
server-id=3
read_only=1
relay_log_purge=0
[[email protected] ~]# systemctl start mariadb.service
MariaDB [(none)]> change master to master_host=‘172.18.42.201‘,master_user=‘repluser‘,master_password=‘replpass‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=245;  ##连接至Master节点
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

5、在Master节点创建管理用户账号,在Manager节点检测各检点之间的连接

MariaDB [(none)]> grant all on *.* to ‘wtc‘@‘172.18.%.%‘ identified by ‘wtc‘;  ##实现了主从复制,在Msater节点创建的同时,slave节点也会创建
[[email protected] ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf   ##测试各节点之间ssh互相通信是否ok
Wed Apr 20 10:17:40 2016 - [info] All SSH connection tests passed successfully.
[[email protected] ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf   ##检查各个节点之间主从复制是否ok
172.18.42.201(172.18.42.201:3306) (current master)   ##201是主节点,202、203是从节点
 +--172.18.42.202(172.18.42.202:3306)
 +--172.18.42.203(172.18.42.203:3306)
MySQL Replication Health is OK.

6、启动Manager节点服务,把Master节点宕机,查看是否转换

[[email protected] ~]# masterha_manager --conf=/etc/masterha/app1.cnf    ##启动Manager服务
Wed Apr 20 10:27:35 2016 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Wed Apr 20 10:27:35 2016 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Wed Apr 20 10:27:35 2016 - [info] Reading server configuration from /etc/masterha/app1.cnf..
[[email protected] ~]# systemctl stop mariadb.service    ##关掉节点2的mariadb服务
MariaDB [(none)]> show slave status\G;    ##查看Slave2节点的复制线程状态
 Master_Host: 172.18.42.202   ##Master节点转为Slave1节点了
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

7、现在我们开启Master节点,看其是否成为从节点

[[email protected] ~]# systemctl start mariadb.service   ##开启Master节点的mariadb服务
MariaDB [(none)]> change master to master_host=‘172.18.42.202‘,master_user=‘repluser‘,master_password=‘replpass‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=245;  
##此时“master_host”应该指向Slave1的IP
##使用的二进制日志文件、事件是事先备份好的(在实现主从复制之前,备份一份)
MariaDB [(none)]> start slave;  ##启动复制线程
MariaDB [(none)]> show slave status\G;
 Master_Host: 172.18.42.202   ##此时IP为Slave1的IP
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

[[email protected] ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf   ##在Manager节点上查看一次,主从复制是否ok
172.18.42.202(172.18.42.202:3306) (current master)   ##此时,主节点成为了Slave1
 +--172.18.42.201(172.18.42.201:3306)
 +--172.18.42.203(172.18.42.203:3306)
MySQL Replication Health is OK.

问题小结:

1、masterha_manager运行时是工作于前台的,而且不能断开,一旦进行主从切换后,就停止工作,我们需要手动把它开启,这时需要脚本来实现自行监控

2、在使用MHA方法时,启动Manager节点的服务有可能会失败,可以尝试一下先把Manager节点的日志文件路径创建好"/data/masterha/app1"

3、在配置mysql各节点的配置文件时,主从都需要开启中继日志、二进制日志

主节点开启中继日志和二进制日志,是因为主节点宕机以后启用时会变为从节点

从节点需要开启中继日志和二进制日志,是因为主节点宕机以后,任何一个从节点都有可能转移称为主节点

时间: 2024-11-07 06:19:10

基于MHA和Galera Cluster实现MySQL高可用的相关文章

MariaDB基于MHA和Galera Cluster实现高可用

MySQL高可用 MMM:MySQL主主复制管理器是一套灵活的脚本程序,基于perl实现,用来对mysqk replication进行监控和故障迁移,并能管理mysql master-master复制的配置(同一时间只有一个节点是可写的) MHA:对主节点进行监控,可实现自动故障转移至其他从节点,通过提升某一节点为新的主节点,基于主从复制实现,还需要客户端配合时间,目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群汇总最少有三台数据库服务器,一主二从,即一太充当master,一台充

CentOS6.4 高可用集群之基于heartbeat(crm)和nfs的mysql高可用

CentOS6.4 高可用集群之基于heartbeat和nfs的高可用mysql CentOS版本: CentOS release 6.4(Final) 2.6.32-358.el6.i686 效果演示: 使用ssh连接(nod-1.magedu.com)192.168.3.7 并执行以下命令: [[email protected] ha.d]# hb_gui & 说明:hb_gui是heartbeat为了方便管理集群资源而提供的一个图形用户接口 安装heartbeat默认会在系统中创建一个名为

http、mysql高可用 heartbeat v1

HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. HA集群架构: 整体的HA结构分为三层: 1,Messaging Layer: 基础事务层 在基础架构上实现心跳信息探测.双方节点可以随时探测到对方的心跳信息,以实现对对方主机工作状态的探测.三类控制信息:心跳(Heartbeats ),集群事务信息(Cluster Transition Messages),重传信息(Retransmissio

Galera Cluster 实现mysql的高可用 (Percona XtraDB Cluster)

Galera Cluster 实现mysql的高可用 (Percona XtraDB Cluster) # 基础搭建 # 设备:三台主机 192.168.47.101 192.168.47.102 192.168.47.103 # centos7 系统 关闭防火墙 selinux # 设置清华源用于下载 cat >/etc/yum.repos.d/pxe.repo <<eof [percona] name=percona baseurl=https://mirrors.tuna.tsin

基于 MHA 的MySQL高可用-CentOS7(理论)

MHA 简介 MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案, 它由日本 DeNA 公司的 youshimaton 员工(现就职于 Facebook 公司)开发,是一套优秀的作 为 MySQL 高可用性环境下故障切换和主从角色提升的高可用软件.在 MySQL 故障切换过程 中,MHA 能做到在 0~30 秒之内自动完成数据库的主从故障切换操作,并且在进行故障切换 的过程中,MHA 能在最大程度上保证数据的一致性,以达到真正意义上的

MySQL高可用之MHA的搭建

MySQL MHA架构介绍: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正的高可用. 该软件由两部分组成:MHA Manag

基于PXC的MySQL高可用环境简单部署

PXC简介 Percona XtraDB Cluster(简称PXC集群)提供了MySQL高可用的一种实现方法. 1.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. 2.每个节点都是普通的mysql/percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器. 3.每个节点都包含完整的数据副本. PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(使

Galera Cluster for MySQL

一.MySQL Galera介绍 1.galera特性 MySQL/Galera是MySQL/InnoDB的多主集群,有以下特性: 1)同步复制 2)Active-active的多主拓扑结构 3)集群任意节点可以读和写 4)自动身份控制,失败节点自动脱离集群 5)自动节点接入 6)真正的基于"行"级别和ID检查的并行复制 7)无单点故障,易扩展 2.架构图 二.Galera Cluster安装 1.安装前的准备 1)需要至少三台mysql服务器,如果只有两台做cluster的话,一旦出

MySQL高可用系列之MHA(二)

一.参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置.合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的. MHA包括如下配置参数,分别说明如下: hostname/ip/port (Local Only) hostname为MySQL Server的IP地址或主机名: ip为MySQL Server的IP地址,缺省从$hostname中获取:port为MySQL Server的端口号,缺省为3306 ssh_host/ssh_ip/ssh_por