配置MySQL高可用集群MHA

配置MySQL高可用集群+++++++++++++++++++
主机角色 :
客户端 client50
数据库服务器 mysql51 到 mysql55
管理主机 mgm56
VIP地址 192.168.4.100
拓扑结构:

  client50 

     |
  mysql51主
     |  


| | | | |
mysql52 mysql53 mysql54 mysql55 mgm56
从 从 从 从 管理集群
备用主 备用主
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
配置MySQL主从同步结构:一主多从
配置主库51
配置备用从库52
配置备用从库53
配置纯从库54
配置纯从库55

51-55都要进行
安装mysql【yum -y install mysql-community-*】
mysql-5.7.17.tartar -xf
mysql-community-client-5.7.17-1.el7.x86_64.rpm
mysql-community-common-5.7.17-1.el7.x86_64.rpm
mysql-community-devel-5.7.17-1.el7.x86_64.rpm
mysql-community-embedded-5.7.17-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm
mysql-community-libs-5.7.17-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm
mysql-community-server-5.7.17-1.el7.x86_64.rpm
mysql-community-test-5.7.17-1.el7.x86_64.rpm
在所有服务器51-56上安装mha_node软件[mha4mysql-node-0.56-0.el6.noarch.rpm]
]#yum -y install perl-DBD-mysql
]#rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
一、配置所有数据库主机之间可以互相以ssh密钥对方式认证登陆[免密码]

二、配置manager56主机 无密码ssh登录 所有数据库主机【免密码】

三、配置主从同步,要求如下:
51 主库 开半同步复制
52 从库(备用主库) 开半同步复制
53 从库(备用主库) 开半同步复制
54 从库 不做备用主库所以不用开半同步复制
55 从库 不做备用主库所以不用开半同步复制
配置半同步复制模式

查看当前的数据库服务是否支持动态加载模块
mysql>show variables like ‘have_dynamic_loading‘;

+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+

使用命令安装模块
mysql>
mysql> INSTALL PLUGIN rpl_semi_sync_master
-> SONAME ‘semisync_master.so‘;

mysql> INSTALL PLUGIN rpl_semi_sync_slave
-> SONAME ‘semisync_slave.so‘;

查看模块状态
mysql>
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE ‘%semi%‘;
+----------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE |
| rpl_semi_sync_slave | ACTIVE |
+----------------------+---------------+
启用半同步复制
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

查看是否启用成功
mysql> show variables like ‘rpl_semisync%_enabled‘;
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_slave_enabled | ON |
+------------------------------+-------+
把配置写进配置文件,使其永久生效

3.1、master51配置:
vim /etc/my.cnf
[mysqld]
#开启插件加载半同步复制
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1

relay_log_purge=off; //不允许自动删除中继日志文件【mysql> set global relay_log_purge=off;】

server_id=51
log-bin=master51
binlog-format="mixed"
:wq
#systemctl restart mysqld
#mysql -uroot -p123abcxyz
mysql> grant replication slave on . to [email protected]"%" identified by "123abcxyz";
mysql> show master status;
注意:备用52-53上也要有repluser用户
3.2、备用master52的配置
vim /etc/my.cnf
[mysqld]
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1

relay_log_purge=off; //不允许自动删除中继日志文件【mysql> set global relay_log_purge=off;】

server_id=52
log-bin=master52
binlog-format="mixed"
:wq
#systemctl restart mysqld
]# ls /var/lib/mysql/master52.*
/var/lib/mysql/master52.000001 /var/lib/mysql/master52.index

#mysql -uroot -p123abcxyz
mysql> change master to
-> master_host="192.168.4.51",
-> master_user="repluser",
-> master_password="123abcxyz",
-> master_log_file="master51.000001",
-> master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.04 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

3.3、备用master53的配置
]# vim /etc/my.cnf
[mysqld]
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1

relay_log_purge=off; //不允许自动删除中继日志文件【mysql> set global relay_log_purge=off;】

server_id=53
log-bin=master53
binlog-format="mixed"
:wq

]# systemctl restart mysqld
]# ls /var/lib/mysql/master53.*

]# mysql -uroot -p123abcxyz
mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123abcxyz",master_log_file="master51.000001",master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.05 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

3.4、配置从服务器54

]# vim /etc/my.cnf
[mysqld]
server_id=54
:wq

]# systemctl restart mysqld
]# mysql -uroot -p123abcxyz
mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123abcxyz",master_log_file="master51.000001",master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.09 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

3.5、配置从服务器55
]# vim /etc/my.cnf
[mysqld]
server_id=55
:wq
]# systemctl restart mysqld

]# mysql -uroot -p123abcxyz
mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123abcxyz",master_log_file="master51.000001",master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.09 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
[配置51-55主从同步完成]
阿保存在所有数据库服务器51-55上授权监控用户
mysql>
grant all on . to [email protected]‘%‘ identified by ‘123abcxyz‘;
++++++++++++++++++++++++++++++++++
准备集群环境:
1 在所有主机上安装共享目录里的perl软件包 (51-56)
公共配置:在所有主机上安装软件软件包
perl-Config-Tiny-2.14-7.el7.noarch.rpm
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm
perl-Mail-Sendmail-0.79-21.el7.art.noarch.rpm
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
perl-MIME-Lite-3.030-1.el7.noarch.rpm

]# yum -y install perl-.rpm
2 在所有服务器51-56上安装mha_node软件包
]#cd mha-soft-student/
]#yum -y install perl-DBD-mysql
]#rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
4 在管理主机56上安装mha_manager软件包
]# yum -y install perl-ExtUtils-
perl-CPAN-*

]# tar -zxf mha4mysql-manager-0.56.tar.gz

]# cd mha4mysql-manager-0.56

]# perl Makefile.pl //[需要的依赖包可通过yum list | grep -i 关键字 获取yum -y install perl-ExtUtils- perl-CPAN-]

]# make

]# make install

配置MHA:
在管理主机56上创建管理命令
]# mkdir /root/bin
]#cd mha4mysql-manager-0.56/bin
]#cp * /root/bin/
创建主配置 并编辑
]# mkdir /etc/mha
]#cp mha4mysql-manager-0.56/samples/conf/app1.cnf /etc/mha/
]#vim /etc/mha/app1.cnf
[server default] #服务默认配置
manager_workdir=/etc/mha #工作目录
manager_log=/etc/mha/manager.log #日志文件

master_ip_failover_script=/etc/mha/master_ip_failover #故障切换脚本

#ssh服务用户名及端口
ssh_user=root
ssh_port=22

#主从复制时,从库连接主库的用户名及密码
repl_user=repluser
repl_password=123abcxyz

#监控数据库时,连接服务器的用户及密码
user=root
password=123abcxyz

#指定数据库服务器ip及角色
[server1]
hostname=192.168.4.51
candidate_master=1
port=3306
[server2]
hostname=192.168.4.52
candidate_master=1
port=3306
[server3]
hostname=192.168.4.53
candidate_master=1
port=3306
[server4]
hostname=192.168.4.54
no_master=1
port=3306
[server5]
hostname=192.168.4.55
no_master=1
port=3306
:wq

创建故障切换脚本并编辑[正常在mha4mysql-manager-0.56目录下]
]# cd mha-soft-student
]# cp master_ip_failover /etc/mha/
]# chmod +x /etc/mha/master_ip_failover

]# vim /etc/mha/master_ip_failover
35 my $vip = ‘192.168.4.100/24‘; # Virtual IP
36 my $key = "1";
37 my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
38 my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
:wq

把脚本中指定的ip地址手动部署在当前主库51 上。
mysql51]# ifconfig eth0:1 192.168.4.100/24
mysql51]# ifconfig eth0:1

启动服务
1 检查ssh连接
mgm56]# masterha_check_ssh --conf=/etc/mha/app1.cnf

2检查主从同步配置
mgm56]# masterha_check_repl --conf=/etc/mha/app1.cnf
3 启动管理服务
mgm56]#
masterha_manager --conf=/etc/mha/app1.cnf \
--remove_dead_master_conf --ignore_last_failover
4查看状态
]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:9541) is running(0:PING_OK), master:192.168.4.51

测试配置
在客户端50主机上连接vip 192.168.4.100 访问数据库服务
1主库做用户授权
mysql51>create database db3;create table db3.a(id int);
mysql51>grant select,insert on db3. to [email protected]"%" identified
by "123abcxyz";
2客户端使用授权用户连接
client50]# mysql -h192.168.4.100 -utest -p123abcxyz db3
mysql>
mysql> insert into db3.a values(100);
Query OK, 1 row affected (0.07 sec)
mysql> select
from db3.a;

测试高可用配置
把主库51的数据库服务停止
客户端仍然可以连接VIP地址192.168.4.100 访问数据库服务
mysql51]# systemctl stop mysqld

client50]# ping -c 2 192.168.4.100

client50]# mysql -h192.168.4.100 -uplj -p123abcxyz db3
mysql> select @@hostname;
mysql> select * from db3.a;
mysql> insert into db3.a values(101);

在/etc/mha/app1.cnf文件没有了主库51的配置
数据库53 - 55 把 主库地址指向 新选举出的主库ip地址

把坏掉的数据库服务器51 再添加到集群里。
MySQL51]# systemctl start mysqld
MySQL51]# mysql -uroot -p123abcxyz

mysql> change master to master_host="192.168.4.52",
-> master_user="repluser",
-> master_password="123abcxyz",
-> master_log_file="master52.000002", 当前主库日志
-> master_log_pos=1237; 对应的pos点
mysql> start slave;
mysql> show slave status\G; IO 和SQL 进程都是Yes 主机ip 52

mgm56]# vim /etc/mha/app1.cnf
[server1]
candidate_master=1
hostname=192.168.4.51
:wq

mgm56]#
masterha_manager --conf=/etc/mha/app1.cnf \
--remove_dead_master_conf --ignore_last_failover

查看状态
mgm56]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:9541) is running(0:PING_OK), master:192.168.4.52
把主库52的数据库服务停止后,客户端仍然可以连接
vip地址192.168.4.100 访问MySQL数据库服务.
在/etc/mha/app1.cnf文件没有了主库52的配置
数据库53 - 55 把 主库地址指向 新选举出的主库ip地址[日志最新的51/53]

原文地址:http://blog.51cto.com/13999764/2318455

时间: 2024-11-05 13:41:17

配置MySQL高可用集群MHA的相关文章

mysql高可用集群——MHA架构

目录 1.下载 2.搭建mha 2.1 系统配置 2.2 架构 2.3 添加ssh公钥信任 2.4 安装mha节点 2.5 manager配置文件 2.6 检查 2.7 启动manager进程 2.8 碰到的问题 3.测试切换 3.1 正常切换测试 3.2 回切测试 3.3 雪崩测试 3.4 主从不一致切换测试 下载 mha链接地址:http://pan.baidu.com/s/1pJkDGX9#dir/path=%2Fmysql%2FHA%2Fmha 或者:https://code.googl

Mysql 高可用集群 ------ MHA

文章目录 一.MHA 简介 二.部署 MHA 第一步:三台主从服务器安装 mysql 第二步:修改 mysql 的主配置文件:/etc/my.cnf ,注意三个服务器的 server-id 不能一样 第三步:三个服务器启动 mysql 服务 第四步:配置 Mysql 主从同步(一主两从) 第五步:安装 MHA 第六步:启动 MHA 一.MHA 简介: MHA(Master High Availability) (1)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司yous

配置drbd高可用集群

前期准备: 同步时间 (两个节点) 节点一(172.16.21.6) [[email protected] heartbeat2]# ntpdate 172.16.0.1 31 Dec 20:59:25 ntpdate[6950]: adjust time server 172.16.0.1 offset 0.379319 sec [[email protected] heartbeat2]# ? 最好几分钟同步一下 [[email protected] heartbeat2]# crontab

MySQL高可用集群之MHA

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

heartbeat v2配置高可用web集群和基于nfs搭建MySQL高可用集群

安装环境:Centos 6.4, httpd2.4,mysql5.5,heartbeat v2 提供两台机器node1和node2,在/etc/hosts文件中添加名称解析,并且主机名称要与节点名称要相同,即uname -n的名称要和hosts定义的名称必须一样. #   IP                         HOSTNAME             ALIAS 10.204.80.79     node1.mylinux.com     node1 10.204.80.80  

企业主流MySQL高可用集群架构三部曲之PXC

前段时间,老张给大家介绍了企业中主流MySQL高可用集群架构三部曲中的前两部,有不了解的同学可以去访问我之前的博客内容. 第一部曲直通车>> 企业中MySQL主流高可用架构实战三部曲之MHA 第二部曲直通车>>企业中MySQL高可用集群架构三部曲之MM+keepalived 独家新课程上线>>MySQL体系结构深入剖析及实战DBA视频课程 今儿给大家介绍最后一部曲,是percona公司的percona xtraDB cluster.简称PXC.它是基于GaLera协议的

通过MMM构建MYSQL高可用集群系统

本文为南非蚂蚁的书籍<循序渐进linux-第二版>-8.4的读笔记 MMM集群套件(MYSQL主主复制管理器) MMM套件主要的功能是通过下面三个脚本实现的 1)mmm_mond 这是一个监控进程,运行在管理节点上,主要负责都所有数据库的监控工作,同时决定和处理所有节点的角色切换 2)mmm_agentd 这是一个代理进程,运行在每个MYSQL服务器上,主要完成监控的测试工作以及执行简单的远端服务设置 3)mmm_control 简单的管理脚本,用来查看和管理集群运行状态,同事管理mmm_mo

基于Corosync + Pacemaker+DRBD实现MySQL高可用集群

前言 在众多的高可用集群解决方案中,除了Heartbeat之外,Corosync也能提供类似于Heartbeat一样的功能,而且目前RedHat官方提供的高可用集群解决方案的程序包都以Corosync为主,所以在未来的日子Corosync会逐渐取代Heartbeat.本文带来的是基于Corosync + Pacemaker+DRBD的MySQL高可用集群解决方案. 相关介绍 Corosync Corosync是从OpenAIS中分支出来的一个项目,它在传递信息的时候可以通过一个简单的配置文件来定

mysql高可用集群——heartbeat+drbd

heartbeat+drbd+mysql是一种早期的mysql高可用技术. 资料来源:http://www.drbd.org DRBD原理:DRBD是对磁盘块操作的复制,可看做网络raid1.不复制磁盘内容,只复制操作.原理可见下图 架构描述 服务器列表 192.168.1.82 192.168.1.1 3306 主 /dev/drbd0 192.168.1.82 192.168.1.2 3306 备 /dev/drbd0 架构图 安装配置: 配置drbd 1.检查机器名解析: 1.查看解析 s