MHA概念介绍,群集搭建与测试

一, MHA介绍

1.概念:MHA master high availability,由日本DeNA公司开发,解决mysql故障切换可以做到0-30秒,而且在故障切换过程中,能最大限度保障数据的一致性,实现真正的高可用.

2.组成:管理节点(MHA manager),管理所有数据库服务器,可以部署于一台独立的主机,也可以与某台数据库服务器共用一台主机;数据节点(MHA node),运行在每台存储数据的服务器上.

3.原理:由manager探测集群中的master节点; 当master故障时,manager自动将拥有最新数据的从库提升为新的master.

二,搭建MHA群集

1.拓扑图

2.部署环境

- 准备3台数据库服务器4.51,4.52,4.53,配置为一主多从结构(4.51为主库,4.52和4.53为从库),并且相互之间可以用root无密码登录.

-实现无密码登录的方式:(3台服务器上都需要重复4.51的动作)

例,在主机4.51上操作:#ssh-keygen -f /root/.ssh_rsa -N ‘’   //生成秘钥

#for i in 51 52 53   //拷贝秘钥到其它主机

do

ssh-copy-id root@192.168.4.$i

done

- 准备2台虚拟机:主机4.57做管理节点manager,主机4.50做客户端client.

- 在主机4.50,4.51,4.52,4.53,4.57上安装系统自带的软件perl-*

- 管理节点4.57可以用root用户无密码登录3台数据库服务器4.51,4.52,4.53.

- 所有主机安装共享的perl软件包(从真机上scp文件夹mha-soft-student->cd进入文件夹->yum安装perl-* )

- rpm -qa|grep perl|wc -l //查看安装的perl软件包数量是否为382个

3.安装管理节点的软件

#cd mha-soft-student/  进入文件夹

cd mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm //安装连接服务器节点的软件

# tar -xvf mha4mysql-manager-0.56.tar.gz      //解压管理软件包

# cd mha4mysql-manager-0.56                //进入文件夹

mha4mysql-manager-0.56]# perl Makefile.PL  //指定目标文件,检查安装环境

mha4mysql-manager-0.56]# make           //编译源码

mha4mysql-manager-0.56]# make install    //编译并安装

#ls /root/perl5/bin/masterha_*              //查看安装的管理集群的命令

4.编写主配置文件app1.cnf

# mkdir /etc/mha  //创建新目录,以存储配置文件(不在系统默认配置文件的目录下操作)

#cd mha-soft-student   //进入文件夹

mha-soft-student]# cp mha4mysql-manager-0.56/samples/conf/app1.cnf  /etc/mha/                     //将系统配置文件拷贝到新建目录/etc/mha

mha-soft-student]# 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_user=root               //访问ssh服务的用户

ssh_port=22                 //ssh服务端口

repl_user=repluser           //主库同步到从库的授权用户

repl_password=123qqq...A   //主库同步到从库的授权密码

user=root                    //manager登录数据库服务器使用的用户

password=123qqq...A        //manager登录数据库服务器使用的密码

[server1]                   //指定第1台数据库服务器

hostname=192.168.4.51   //数据库服务器IP地址

port=3306                 //服务端口

candidate_master=1       //竞选主机,当主库故障时,其它的从库参入新主库的竞选

[server2]                  //指定第2台数据库服务器

hostname=192.168.4.52  //数据库服务器IP地址

port=3306                //服务端口

candidate_master=1

[server3]                  //指定第3台数据库服务器

hostname=192.168.4.53  //数据库服务器IP地址

port=3306                //服务端口

candidate_master=1      //竞选主机,当主库故障时,其它的从库参入新主库的竞选

5.在管理节点4.57上创建故障切换脚本master_ip_failover

#cp mha-soft-student/master_ip_failover  /etc/mha/

#vim /etc/mha/master_ip_failover

my $vip = '192.168.4.100/24';  #定义VIP

my $key = "1";   //定义地址编号

my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";   //绑定VIP地址

my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";  //释放VIP地址

# chmod +x /etc/mha/master_ip_failover   //赋予权限 ,这一步很重要,漏掉会导致集群起不来.

6.在主库4.51上部署vip

# ifconfig eth0:1 192.168.4.100    //设置VIP

# ifconfig eth0:1     //查看VIP,谁是主库,谁就拥有VIP

client ~]# ping -c2 192.168.4.100  //客户端ping一下连接状态

7.在从库4.52,4.53上配置数据节点

[root@db51 mha-soft-student]# for i in 51 52 53  //安装连接节点的软件

> do

>ssh 192.168.4.$i "yum -y install /root/mha-soft-student/mha4mysql-node-0.56-0.el6.noarch.rpm"

> done

mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";  //在从库4.52,4.53上授权用户repluser及密码

mysql> grant all on *.* to root@"%" identified by "123qqq...A"; //在3台数据库4.57上授权管理节点监控数据库时使用的连接用户及密码

8.主库加载master,slave模块

[mysqld]

log-bin=db51    //启用log-bin日志

server_id=51

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"  //加载模块

rpl_semi_sync_master_enabled=1  //启用master模块

rpl_semi_sync_slave_enabled=1    //启用slave模块

relay_log_purge=0     //禁止软件自动删除中继日志文件

#systemctl restart mysqld   //重启,加载配置

9.从库4.52加载master,slave模块

[mysqld]

server_id=52

log-bin=master52    //启用log-bin日志

relay_log_purge=0   //禁止软件自动删除中继日志文件

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"   //加载模块

rpl_semi_sync_master_enabled=1    //启用master模块

rpl_semi_sync_slave_enabled=1     //启用slave模块

#systemctl restart mysqld    //重启,加载配置

10.从库4.53加载master,slave模块

[mysqld]

server_id=53

log_bin=master53    //启用log-bin日志

relay_log_purge=0   //禁止软件自动删除中继日志文件

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"   //加载模块

rpl_semi_sync_master_enabled=1   //启用master模块

rpl_semi_sync_slave_enabled=1    //启用slave模块

#systemctl restart mysqld

11.测试一下数据库主从是否同步

mysql-uroot -p123qqq...A -e ‘insert into db1.t1 values(6,”wangwu”,30)’ //在主库4.51上插入数据

[root@db51 ~]# for i in 52 53   //查看从库是否同步数据

> do

> ssh root@192.168.4.$i 'mysql -uroot -p123qqq...A -e "select * from db1.t1"'

> done

三,测试MHA群集

1.在管理节点上测试ssh配置

[root@db57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf

Thu Jun 20 15:30:08 2019 - [info] All SSH connection tests passed successfully.

2.在管理节点上测试主从同步

[root@db57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

MySQL Replication Health is OK

3.启动masterha_manager服务

[root@db57 ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf  --ignore_last_failover

--remove_dead_master_conf //主库故障时,删除管理节点配置文件中的server主机

--ignore_last_failover //软件默认故障发生时,有一个切换时间.加载该选项可以实现时间点无缝切换.

4.在主库4.51添加访问数据的连接用户及密码,并同步到4.52和4.53

mysql> create database db9;

mysql> create table db9.a(id int,name char(10));

mysql> grant select,insert on db9.* to yaya55@"%" identified by '123qqq...A';

# mysql -uroot -p123qqq...A -e 'select host,user from mysql.user where user="yaya55";'  //分别在4.52和4.53查看授权的用户yaya55

5.客户端登录插入数据

[root@client ~]# mysql -h192.168.4.100 -uroot -p123qqq...A

mysql> insert into db9.a values(1,"lisi");

mysql> insert into db9.a values(2,"wangwu");

mysql> select * from db9.a;

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

| id   | name   |

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

|    1 | lisi   |

|    2 | wangwu |

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

2 rows in set (0.00 sec)

# mysql -uroot -p123qqq...A -e ‘select * from db9.a’ //分别在4.52和4.53上查看插入的数据

6.测试高可用

思路:停止4.51的mysql服务->管理节点4.57会监控到master4.51发生故障,并停止监控服务,触发故障脚本master_ip_failover在2台从库中竞选出新的master主机,数据库服务不会停止->客户端连接到vip,依然可以访问数据库,做读写操作.

6.1停止主库4.51的mysql服务

[root@db51 ~]# systemctl stop mysqld

6.2客户端再次登录vip

[root@client ~]# mysql -h192.168.4.100 -uroot -p123qqq...A

6.3插入数据,并查看

mysql> insert into db9.a values(3,"jack");

mysql> select * from db9.a;  //在主机4.52和4.53上查看插入的数据

6.4 配置文件/etc /mha/aqq1.cnf中的[server1]容器被删除,即主机4.51被踢出了服务序列,具体见下图:

7.将down机的4.51重新添加入集群服务序列

7.1启动数据库4.51

#systemctl start mysqld

7.2把4.51配置为当前集群的从服务器

7.2.1把新主库4.52的数据备份,并在4.51上恢复,以确保与主服务器数据保持一致.

[root@db52 ~]# mysqldump -uroot -p123qqq...A --master-data db9 > db9.sql //主库备份数据

[root@db52 ~]# scp db9.sql root@192.168.4.51:/root/  //上传数据给4.51

[root@db51 ~]# mysql -uroot -p123qqq...A db9 < /root/db9.sql  //在主机4.51上恢复数据

7.2.2定义从库信息,启动slave进程,查看状态

mysql> change master to

->master_host="192.168.4.52",master_user="repluser",master_password="123qqq...A",

-> master_log_file="master52.000002",master_log_pos=154;

//定义从库信息

mysql> start slave;

[root@db51 ~]# mysql -uroot -p123qqq...A -e "show slave status\G"|head -13

//查看已经定义的从库信息

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.4.52

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master52.000002

Read_Master_Log_Pos: 154

Relay_Log_File: db51-relay-bin.000002

Relay_Log_Pos: 319

Relay_Master_Log_File: master52.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

7.3 将主机4.51添加到集群配置文件中

7.3.1停止管理节点4.57的监控服务

[root@db57 ~]# masterha_stop --conf=/etc/mha/app1.cnf

7.3.2添加主机4.51的server到集群配置文件/etc/mha/app1.cnf

[server1]

candidate_master=1

hostname=192.168.4.51

port=3306

7.3.3管理节点做启动前的ssh和repl检测

[root@db57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf

[info] All SSH connection tests passed successfully.

[root@db57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

MySQL Replication Health is OK.

7.3.4启动管理节点,监控数据库服务器

[root@db57 ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover

[root@db57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf

app1 (pid:1991) is running(0:PING_OK), master:192.168.4.52

四,总结

必须配置实现ssh无密码登录(数据库服务器之间,管理节点与数据库服务器之间)

必须配置主从同步结构

必须设置VIP地址

down机的服务器需要人为配置为集群从服务器,才能重新添加到集群服务序列.

down机的服务器不能自动同步down机期间的数据(缺点)

在主从同步结构中,没有从服务器时,不能实现故障切换.

结束.

数据库_MHA群集搭建的更多相关文章

  1. 数据库_PXC群集与存储引擎

    1. PXC介绍与群集搭建; 2.数据存储引擎. 一, PXC介绍 1.介绍 PXC(Percona XtraDB Cluster)基于Galara的一台开源软件,应用于解决mysql的高可用集群问题 ...

  2. Mongodb数据库学习系列————(一)Mongodb数据库主从复制的搭建

    Mongodb数据库主从复制的搭建 Writeby:lipeng                                    date:2014-10-22 最近项目上用到了位置查询,在网上 ...

  3. pxc群集搭建

    pxc群集搭建 1.环境 Percona-XtraDB 5.7.22-22-29.26-log percona-xtrabackup-24-2.4.12 192.168.99.210:3101(第一节 ...

  4. dockerfile_nginx+PHP+mongo数据库_完美搭建

      基于dockerfile创建nginx+PHP+mongo数据库_完美搭建     第一步:   从git上:git clone http://git.oursdata.com/wangyue/d ...

  5. 基于Ubuntu Hadoop的群集搭建Hive

    Hive是Hadoop生态中的一个重要组成部分,主要用于数据仓库.前面的文章中我们已经搭建好了Hadoop的群集,下面我们在这个群集上再搭建Hive的群集. 1.安装MySQL 1.1安装MySQL ...

  6. 【Data Cluster】真机环境下MySQL数据库集群搭建

    真机环境下MySQL-Cluster搭建文档  摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建.购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建.起初笔 ...

  7. 数据库--PHP环境搭建

    一: 1.PHP的架构 LAMP :Linux  阿帕奇  MySQL  PHP WAMP:Linux 阿帕奇  Mysql  PHP (集成的环境搭建软件),一键搭建PHP开发环境工具 2.修改数据 ...

  8. 清清楚楚地搭建MongoDB数据库(以搭建4.0.4版本的副本集为例)

    数据的目录文件层次设计 我们一般采用多实例的方式,而不是将所有的数据库尽可能地放在一个实例中. 主要基于以下考虑: 1:不同业务线对应的数据库放在不同的实例上,部分操作的运维时间容易协调等到. 2:相 ...

  9. VS2017离线安装与Oracle数据库开发环境搭建

    记得之前使用VS2015打开老的MVC4项目,不能右键创建控制器和添加视图,让我非常不习惯!找遍了网络无果,最后只能回到VS2013,但我就是不喜欢用旧的VS,这是不是病... 1.将VS2017离线 ...

随机推荐

  1. flask之模板之继承

    一:继承 基类模板base.html  中在进行挖坑 {% block 坑的名字%}{% endblock %} 子类模板test.html 中 通过 {% extends "base.ht ...

  2. 【leetcode】41. First Missing Positive

    题目如下: 解题思路:这题看起来和[leetcode]448. Find All Numbers Disappeared in an Array很相似,但是有几点不同:一是本题的输入存在负数,二是没有 ...

  3. web前端 在react中使用移动端事件,学习笔记

    一  移动端事件的使用:           onTouchStartCapture        onTouchStart           onTouchMoveCapture       on ...

  4. php中substr_compare()区分大小写吗

    PHP substr_compare() 函数 定义和用法 substr_compare() 函数从指定的开始位置比较两个字符串. 提示:该函数是二进制安全且选择性地对大小写敏感(区分大小写). 语法 ...

  5. JAVA WEB怎么实现大文件上传

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 改进后的代码不需要form标签,直 ...

  6. POJ 3660 Cow Contest ( 最短路松弛思想应用 && Floyd求传递闭包 )

    题意 : 给出 N 头奶牛在比赛的结果,问你最多的能根据给出结果确定其名次的奶牛头数.结果给出的形式为 A  B 代表在比赛当中 A 战胜了 B 分析 : 对于一头奶牛来说,如果我们能确定其他 N - ...

  7. 【Java架构:进阶技术】——一篇文章搞掂:JVM调优

    Sun官方定义的Java技术体系: Java程序设计语言 各种硬件平台上的Java虚拟机 Class文件格式 Java API类库 来自商业机构和开源社区的第三方Java类库 JDK(Java Dev ...

  8. 修改mac下homebrew的源 加快下载速度

    把源改为清华的镜像 # HOMEBREW_BOTTLE_DOMAIN就是目标源 修改这个路径就可以里 echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirro ...

  9. Aliyun mysql配置 远程访问 10038

    环境 centos7.2    mysql5.7 网上搜了好多的文章,有的说在/etc/my.cnf 注释掉bind-address = 127.0.0.1 ,也开启了3306端口的防火墙,也添加了远 ...

  10. Eclipse如何汉化[完美版]

    当前版本:Eclipse 4.5.1 1.如何查看eclipse的版本呢 找到关于Eclipse,点击 . 2.打开浏览器连接http://www.eclipse.org/babel/download ...