MHA集群搭建

一 、相关概念

二 、准备集群环境

三 、配置管理主机

四 、配置数据库服务器

五 、测试配置并启动管理服务

六 、测试高可用

一· 相关概念

MHA 软件介绍(Master High Availability)

由日本DeNA公司youshimaton开发

是一套优秀的实现MySQL高可用的解决方案

数据库的自动故障切换操作能做到在0~30秒之内完成

MHA能确保在故障切换过程中最大限度保证数据的一致性,以达到真正意义上的高可用

软件由2部分组成

1 管理端软件(管理节点) : 安装管理集群主机上

2 数据端软件(数据节点) : 安装在数据库服务器上

拓扑结构

Ip规划与角色

IP地址

主从同步角色

集群角色

主机名

192.168.88.50

客户端

client50

 192.168.88.60

管理主机

  mgm60

 192.168.88.66

主库

主服务器

  host66

 192.168.88.67

从库

第一台备用服务器

  host67

 192.168.88.68

从库

第二台备用服务器

  host68

 192.168.88.100

VIP地址

MHA集群的工作过程:

由Manager定时探测集群中的master节点

当master故障时,Manager自动将拥有最新数据的slave提升为新的master

(如果有多个从的话,剩下的从会自动更新为新主服务器的从主机)

二、集群环境准备 (在3台数据库服务器都要做的配置)

1)公共配置(3台数据库服务器都要配置)

#启用binlog日志  

#开启半同步复制模式

#禁止删除本机的中继日志文件

#重启数据库服务

#添加从服务器拷贝sql命令时连接使用的用户

#配置数据库器host66

[root@host66 ~]# 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=0  禁止自动删除中继日志文件

server_id=66

log_bin=master66

:wq

[root@host66 ~]# systemctl  restart mysqld

[root@host66 ~]# mysql -uroot -p123qqq...A

mysql> grant replication slave on *.* to repluser@"%" Identified by "123qqq...A";

mysql> exit;

#配置数据库器host67

[root@host67 ~]# 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=0

server_id=67

log_bin=master67

:wq

[root@host67 ~]# systemctl  restart mysqld

[root@host67 ~]# mysql -uroot -p123qqq...A

mysql> grant replication slave on *.* to repluser@"%" Identified by "123qqq...A";

mysql> exit;

#配置数据库器host68

[root@host68 ~]# 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=0

server_id=68

log_bin=master68

:wq

[root@host68 ~]# systemctl  restart mysqld

[root@host68 ~]# mysql -uroot -p123qqq...A

mysql> grant replication slave on *.* to repluser@"%" Identified by "123qqq...A";

mysql> exit;

2)配置ssh免密登录

 2.1 所有数据库服务器之间可以彼此免密登录

        第1步: 配置host66 免密登录host67和host68

[root@host66 ~]# ssh-keygen  遇到提示就回车

[root@host66 ~]# ssh-copy-id root@192.168.4.67

[root@host66 ~]# ssh-copy-id root@192.168.4.68

第2步: 配置host67 免密登录host66和host68

[root@host67 ~]# ssh-keygen  遇到提示就回车

[root@host67 ~]# ssh-copy-id root@192.168.4.66

[root@host67 ~]# ssh-copy-id root@192.168.4.68

第3步: 配置host68 免密登录host66和host67

[root@host68 ~]# ssh-keygen  遇到提示就回车

[root@host68 ~]# ssh-copy-id root@192.168.4.66

[root@host68 ~]# ssh-copy-id root@192.168.4.67

    第4步: 测试免密登录

[root@host66 ~]# ssh 192.168.4.67

[root@host66 ~]# ssh 192.168.4.68

[root@host67 ~]# ssh 192.168.4.66

[root@host67 ~]# ssh 192.168.4.68

[root@host68 ~]# ssh 192.168.4.66

[root@host68 ~]# ssh 192.168.4.67

                2.2 管理主机可以免密登录所有数据库服务器(数据库服务器不需要免密登录管理主机)

[root@mgm60 ~]# ssh-keygen

[root@mgm60 ~]# ssh-copy-id  root@192.168.4.66

[root@mgm60 ~]# ssh-copy-id  root@192.168.4.67

[root@mgm60 ~]# ssh-copy-id  root@192.168.4.68

[root@mgm60 ~]# ssh  192.168.4.66

[root@mgm60 ~]# ssh  192.168.4.67

[root@mgm60 ~]# ssh  192.168.4.68

3)配置MySQL 一主多从 同步结构

                说明: 主机host68 和 host67 分别做host66 的从服务器

配置主数据库服务器 192.168.4.66

1 启用binlog日志  (公共配置已经配置了)

]# vim /etc/my.cnf

[mysqld]

Server_id=66

Log_bin=master66

:wq

2 用户授权(公共配置已经配置了)

]# mysql –uroot –p123qqq…A

Mysql>  grant replication slave on  *.*  to  repluser@”%” identified by “123qqq…A”;

3 查看日志信息

[root@host66 ~]# mysql -uroot -p123qqq...A -e 'show master status'

mysql: [Warning] Using a password on the command line interface can be insecure.

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

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| master66.000001 |      441 |              |                  |                   |

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

[root@host66 ~]#

配置从数据库服务器 192.168.4.67

1 指定server_id  并重启数据库服务 (公共配置已经做了)

2 确保数据一致(如果一样就不用做了)

3 指定主服务器信息

[root@host67 ~]# mysql -uroot -p123qqq...A

mysql> change master to  

master_host="192.168.4.66",

master_user="repluser",

master_password="123qqq...A",

master_log_file="master66.000001",    根据在66主机查看到的填写

master_log_pos=441;  根据在66主机查看到的填写

4 启动slave进程

 MySQL>start slave;

5 查看状态 (IO线程和 SQL线程都是yes状态)

mysql> show slave status \G

Slave_IO_Running: Yes

          Slave_SQL_Running: Yes

配置从数据库服务器 192.168.4.68

1 指定server_id  并重启数据库服务(公共配置已经做了)

2 确保数据一致(如果一样就不用做了)

3 指定主服务器信息

[root@host68 ~]# mysql -uroot -p123qqq...A

mysql> change master to  

master_host="192.168.4.66",

master_user="repluser",

master_password="123qqq...A",

master_log_file="master66.000001",   根据在66主机查看到的填写

master_log_pos=441;  根据在66主机查看到的填写

4 启动slave进程  

MySQL>start slave;

5 查看状态 (IO线程和 SQL线程都是yes状态)

mysql> show slave status \G

Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

第二步:配置管理主机 192.168.4.60

                

1) 安装软件

#安装依赖软件

cd mha

yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

yum -y install perl-*.rpm

yum -y install  perl-ExtUtils-*   perl-CPAN*

#安装提供管理命令软件

tar -xf mha4mysql-manager-0.56.tar.gz

cd mha4mysql-manager-0.56/

[root@mgm60 mha4mysql-manager-0.56]# perl Makefile.PL  

*** Module::AutoInstall version 1.03

*** Checking for Perl dependencies...

[Core Features]

- DBI                   ...loaded. (1.627)

- DBD::mysql            ...loaded. (4.023)

- Time::HiRes           ...loaded. (1.9725)

- Config::Tiny          ...loaded. (2.14)

- Log::Dispatch         ...loaded. (2.41)

- Parallel::ForkManager ...loaded. (1.18)

- MHA::NodeConst        ...loaded. (0.56)

*** Module::AutoInstall configuration finished.

Checking if your kit is complete...

Looks good

Writing Makefile for mha4mysql::manager

Writing MYMETA.yml and MYMETA.json

[root@mgm60 mha4mysql-manager-0.56]#  make   && make  install   

2) 了解相关管理命令

[root@mgm60 mha4mysql-manager-0.56]# masterha_ 按2次tab键列出所有命令

masterha_check_repl       masterha_conf_host        masterha_master_switch    

masterha_check_ssh        masterha_manager          masterha_secondary_check  

masterha_check_status     masterha_master_monitor   masterha_stop             

[root@mgm60 mha4mysql-manager-0.56]#

3) 创建并编辑管理服务的主配置文件 (!!!重要!!!)

3.1 创建工作目录  

[root@mgm60 ~]# mkdir /etc/mha

3.2 拷贝模板文件创建主配置文件

[root@mgm60 mha-soft-student]# cd  mha4mysql-manager-0.56

[root@mgm60 mha4mysql-manager-0.56]# cp samples/conf/app1.cnf  /etc/mha/

3.3 编辑主配置文

说明:模版文件是个半成品 需要根据环境准备完善

[root@mgm60 ~]# vim /etc/mha/app1.cnf (没有第4台数据库服务器所有把[server4]删除)

[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   拷贝binlog日志内容连接用户

repl_password=123qqq...A   密码

user=plj  监控用户

password=123qqq...A 密码

#定义监视的数据库服务器

[server1]

hostname=192.168.4.66

port=3306

candidate_master=1  参加主服务器竞选

[server2]

hostname=192.168.4.67  参加主服务器竞选

port=3306

candidate_master=1

[server3]

hostname=192.168.4.68  参加主服务器竞选

port=3306

candidate_master=1

:wq

4) 创建故障切换脚本

创建脚本并指定vip地址部署在哪块网卡上

[root@mgm60 mha]# cp master_ip_failover  /etc/mha/

[root@mgm60 mha]# chmod +x /etc/mha/master_ip_failover

[root@mgm60 mha]# vim +35 /etc/mha/master_ip_failover

my $vip = '192.168.4.100/24';  # Virtual IP

my $key = "1";

my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";

my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

:wq

第三步:配置数据库服务器

说明:要保证3台数据库都有ifconfig 命令

]# which ifconfig  || yum -y install net-tools

/usr/sbin/ifconfig

1)把故障切换脚本里指定的vip地址

   配置在当前主从结构种的主数据库服务器Host66 主机上

[root@host66 ~]# ifconfig  eth0:1 192.168.4.100/24

[root@host66 ~]# ifconfig  eth0:1

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255

        ether 52:54:00:98:33:28  txqueuelen 1000  (Ethernet)

2)安装软件(3台数据库器软件都要安装)

#先安装依赖

[root@host66 ~]# cd mha

[root@host66 mha]# yum -y install perl-*.rpm  安装依赖

#在安装主软件

[root@host66 mha ~ ]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

[root@host67 ~]# cd mha

[root@host67 mha ~ ]# yum -y install perl-*.rpm

#在安装主软件

[root@host67 mha ~ ]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

#先安装依赖

[root@host68 ~]# cd mha

[root@host68 mha]# yum -y install perl-*.rpm  安装依赖

#在安装主软件

[root@host68 mha ~ ]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

3) 添加监控用户

只需在master服务器添加 在slave服务器查看

[root@host66 ~]# mysql -uroot -p123qqq...A

mysql> grant all on *.*  to plj@"%"  identified by "123qqq...A";

mysql> exit;

[root@host67 ~]# mysql -uroot -p123qqq...A -e 'select user from mysql.user where user="plj"'

mysql: [Warning] Using a password on the command line interface can be insecure.

+------+

| user |

+------+

| plj  |

+------+

[root@host68 ~]# mysql -uroot -p123qqq...A -e 'select user from mysql.user where user="plj"'

mysql: [Warning] Using a password on the command line interface can be insecure.

+------+

| user |

+------+

| plj  |

+------+

[root@host68 ~]#

第四步:测试配置,在管理主机mgm57 如下测试

1) 测试ssh免密登录配置

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

Sat Nov 20 16:31:08 2021 - [info] All SSH connection tests passed successfully.  #成功提示

2)测试主从同步配置

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

MySQL Replication Health is OK.   #成功提示

排错思路

ssh 测试失败 公共解决办法

     第一步 :在 67-58 、60删除错误的密码对和公钥   rm -rf /root/.ssh   

     第二步:然后把环境准备中的 ssh 免密登录重新配置一遍

     配置3台数据库服务器之间密码登录

     配置管理主机57 能够免密登录 3台数据库服务器

主从同步配置失败的解决办法

  第一步: 在67 和 68本机查看 slave 进程的状态 如果io 和 sql 线程 不同时是yes  需要执行如下操作(2台都执行)

首先执行 stop slave; 停止有错误的 slave 进程

然后重新使用change master to  指定主服务器的信息;

然后执行 start slave;

查看状态 show slave  status \G

如果2个从服务器都是 io 和 sql 线程 yes  

66 主机查看是否有 slave 状态 show slave status \G

      然后执行stop slave;

如果以上都没有问题  检查 app1.cnf 编写

第五步: 启动管理服务(192.168.4.60)

 说明:2个测试都成功了  管理服务才能启动成功

[root@mgm60 ~]#

nohup  masterha_manager --conf=/etc/mha/app1.cnf   --remove_dead_master_conf --ignore_last_failover  2>  /dev/null  &

--remove_dead_master_conf   把宕机的master服务的配置在app1.cnf文件删除

--ignore_last_failover  默认只做1次故障切换,可以做多次故障切换

[root@mgm60 ~]# jobs

[1]+  运行中               nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &

[root@mgm57 ~]#

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

app1 (pid:1977) is running(0:PING_OK), master:192.168.4.66

[root@mgm57 ~]#

在主从结构中的master 服务器查看vip 地址

[root@host66 ~]# ifconfig  eth0:1

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255

        ether 52:54:00:98:33:28  txqueuelen 1000  (Ethernet)

测试集群高可用,具体操作如下

1) 客户端host50 连接VIP地址访问数据库服务

#主数据库服务器host66 添加客户端连接使用的用户 2台从服务器会自动同步用户

create database db1;

create table db1.a(id int);

grant select ,insert on db1.* to yaya@"%" identified by "123qqq...A";

#客户端使用用户连接服务

[root@host50 ~]# mysql -h192.168.4.100 -uyaya -p123qqq...A

insert into db1.a values (8888);

select  * from db1.a;

2)停止host66主机的数据库服务

[root@host66 ~]# systemctl  stop  mysqld

3)客户端host50 依然可以连接VIP地址访问数据库服务

[root@host50 ~]# mysql -h192.168.4.100 -uyaya -p123qqq...A

mysql> insert into db1.a values (9999);

Query OK, 1 row affected (0.07 sec)

mysql> select  * from  db1.a;

+------+

| id   |

+------+

| 8888 |

| 9999 |

+------+

2 rows in set (0.00 sec)

4)  在host67 或 host68 主机查看vip地址 (谁有vip 谁就是新的主数据库服务器)

[root@host67 ~]# ifconfig  eth0:1

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255

        ether 52:54:00:c9:96:10  txqueuelen 1000  (Ethernet)

5) 在剩下的另一台数据库服务器查看主服务器IP地址(自动做新主服务器的slave主机)

[root@host68 ~]# mysql -uroot -p123qqq...A -e 'show slave status\G' | grep -i yes

mysql: [Warning] Using a password on the command line interface can be insecure.

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

[root@host68 ~]# mysql -uroot -p123qqq...A -e 'show slave status\G' | grep -i "master_host"

mysql: [Warning] Using a password on the command line interface can be insecure.

                  Master_Host: 192.168.4.67

6) 查看app1.cnf配置文件 (发现没有[server1]的配置了 仅剩 [server2] 和  [server3] )

[root@mgm60 ~]# grep "server1" /etc/mha/app1.cnf

[root@mgm60 ~]# grep "server2" /etc/mha/app1.cnf

[server2]

[root@mgm60 ~]# grep "server3" /etc/mha/app1.cnf

[server3]

7) 查看管理服务的状态,并启动管理服务 再次查看状态 (会监视新的主数据库服务器)

[root@mgm60 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &

[1] 2527

[root@mgm60 ~]# jobs

[1]+  运行中               nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &

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

app1 (pid:2527) is running(0:PING_OK), master:192.168.4.67   #监视新的主数据库服务器67

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值