加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MHA与MySQL实现高可用

发布时间:2023-02-27 11:29:25 所属栏目:MySql教程 来源:
导读:MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MysqL高可用性环境下故障切换和主从提升的高可用软件
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MysqL高可用性环境下故障切换和主从提升的高可用软件。在MysqL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

1. MHA的搭建概述
数据库架构:一主两从

master:192.168.142.48
slave1:192.168.142.49
slave2:192.168.142.50
mha架构:

manager:192.168.142.49
node:192.168.142.48,192.168.142.49,192.168.142.50
keepalived架构

VIP:192.168.142.235
节点:192.168.142.48,192.168.142.49
搭建环境版本

数据库版本:5.7.18,5.7.18-log MysqL Community Server (GPL)
MHA版本:v0.58,mha4MysqL-manager-0.58 + mha4MysqL-node-0.58
Keepalived:keepalived-1.4.3
Linux主机:centos7.2
主机和安装服务列表

主机IP    安装服务
192.168.142.48    MysqL master ; mha node ; keepalived
192.168.142.49    MysqL slave ; mha node && mha manager ; keepalived
192.168.142.50    MysqL slave ; mha node
搭建大体步骤

2. keepalived的搭建
这里使用rpm方式安装,分别在192.168.142.48和192.168.142.49上安装keepalived,也可使用源码编译

1、安装
yum install keepalived -y
2、配置文件修改
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
   root@localhost
}
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 55
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.142.235
    }
}
note:其中主MASTER优先级高(100),BACKUP优先级(90)低一些
3、启动、关闭、查看
systemctl start keepalived
systemctl stop keepalived
systemctl status keepalived
 
4. linux机器之间配置互信
服务器之间建立ssh互信的方式很多,这里介绍一种私以为比较便捷的创建方式

1、创建秘钥(回车连续三次即可)
[root@192-168-142-48]# ssh-keygen -t rsa
2、进入.ssh目录查看文件
[root@192-168-142-48]# cd /root/.ssh/ && ls
id_rsa
id_rsa.pub
3、修改id_rsa.pub名称
mv id_rsa.pub authorized_keys
4、将/root/.ssh文件夹拷贝到192.168.142.49和192.168.142.50即可建立三台机器之间的互信(如果端口不是默认22,需要额外指定参数 -P port)
scp -P 8822 -r /root/.ssh 192.168.142.49:/root/
scp -P 8822 -r /root/.ssh 192.168.142.50:/root/

5. MysqL主从环境的搭建
1、手动搭建或者自动化脚本分别在三台主机上配置MysqL实例,这里可参考MysqL单实例搭建的方法,不在赘述

2、每台主机数据库实例上配置复制用户l和监控用户

1、复制用户
GRANT SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.142.%' IDENTIFIED BY '123456';FLUSH PRIVILEGES;
2、监控用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.142.%' IDENTIFIED BY '123456';FLUSH PRIVILEGES;
3、配置从同步

1、master上执行
show master status;,记录对应File名称和Position列的数字,这里为 MysqL-bin.000001 154
2、slave1和slave2上分别执行
CHANGE MASTER TO MASTER_HOST='192.168.142.48',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=5700,MASTER_LOG_FILE='MysqL-bin.000001',MASTER_LOG_POS=154;
  
6. MHA的安装和配置
1、下载
选择对应的rpm包下载
2、安装依赖
yum install perl-dbd-mysql -y
3、安装node节点
rpm -ivh mha4MysqL-node-0.58-0.el7.centos.noarch.rpm

7. 配置文件测试
测试ssh连通性
[root@hz-192-168-142-49 scripts]# masterha_check_ssh --conf=/data/mha/app1.cnf 
Fri May 25 14:24:34 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Fri May 25 14:24:34 2018 - [info] Reading application default configuration from /data/mha/app1.cnf..
Fri May 25 14:24:34 2018 - [info] Reading server configuration from /data/mha/app1.cnf..
Fri May 25 14:24:34 2018 - [info] Starting SSH connection tests..
Fri May 25 14:24:37 2018 - [debug] 
Fri May 25 14:24:34 2018 - [debug]  Connecting via SSH from root@192.168.142.48(192.168.142.48:8822) to root@192.168.142.49(192.168.142.49:8822)..
Fri May 25 14:24:35 2018 - [debug]   ok.
Fri May 25 14:24:35 2018 - [debug]  Connecting via SSH from root@192.168.142.48(192.168.142.48:8822) to root@192.168.142.50(192.168.142.50:8822)..
Fri May 25 14:24:36 2018 - [debug]   ok.
Fri May 25 14:24:38 2018 - [debug] 
Fri May 25 14:24:35 2018 - [debug]  Connecting via SSH from root@192.168.142.49(192.168.142.49:8822) to root@192.168.142.48(192.168.142.48:8822)..
Fri May 25 14:24:35 2018 - [debug]   ok.
Fri May 25 14:24:35 2018 - [debug]  Connecting via SSH from root@192.168.142.49(192.168.142.49:8822) to root@192.168.142.50(192.168.142.50:8822)..
Fri May 25 14:24:37 2018 - [debug]   ok.
Fri May 25 14:24:39 2018 - [debug] 
Fri May 25 14:24:35 2018 - [debug]  Connecting via SSH from root@192.168.142.50(192.168.142.50:8822) to root@192.168.142.48(192.168.142.48:8822)..
Fri May 25 14:24:37 2018 - [debug]   ok.
Fri May 25 14:24:37 2018 - [debug]  Connecting via SSH from root@192.168.142.50(192.168.142.50:8822) to root@192.168.142.49(192.168.142.49:8822)..
Fri May 25 14:24:39 2018 - [debug]   ok.
Fri May 25 14:24:39 2018 - [info] All SSH connection tests passed successfully.
测试集群中的主从复制
[root@hz-192-168-142-49 scripts]# masterha_check_repl --conf=/data/mha/app1.cnf 
......
......
192.168.142.48(192.168.142.48:5700) (current master)
 +--192.168.142.49(192.168.142.49:5700)
 +--192.168.142.50(192.168.142.50:5700)
Fri May 25 14:25:57 2018 - [info] Checking replication health on 192.168.142.49..
Fri May 25 14:25:57 2018 - [info]  ok.
Fri May 25 14:25:57 2018 - [info] Checking replication health on 192.168.142.50..
Fri May 25 14:25:57 2018 - [info]  ok.
Fri May 25 14:25:57 2018 - [info] Checking master_ip_failover_script status:
Fri May 25 14:25:57 2018 - [info]   /data/mha/scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.142.48 --orig_master_ip=192.168.142.48 --orig_master_port=5700  --orig_master_ssh_port=8822
UnkNown option: orig_master_ssh_port
IN SCRIPT TEST====systemctl stop keepalived==systemctl start keepalived===
Checking the Status of the script.. OK 
Fri May 25 14:25:57 2018 - [info]  OK.
Fri May 25 14:25:57 2018 - [warning] shutdown_script is not defined.
Fri May 25 14:25:57 2018 - [info] Got exit code 0 (Not master dead).
MysqL Replication Health is OK.
 
8. 启动MHA管理节点
启动命令

nohup masterha_manager --conf=/data/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /data/mha/mha/app1/manager.log 2>&1 &
--remove_dead_master_conf,发生failover后,MHA会自动从配置文件里移除dead master的相关信息
--ignore_last_failover,默认情况下,之前如果存在failover,那么再次启动MHA是不成功的,必须删除对应目录下的failover error文件, (manager_workdir)/(app_name).failover.error;设置此参数,就可以忽略上次是否错误而可以继续进行failover
关闭命令

masterha_stop --conf=/data/mha/app1.cnf
查看状态

masterha_check_status --conf=/data/mha/app1.cnf
 
9. 在线手动切换过程
1、首先需要保证mha manager处于关闭状态

masterha_stop --conf=/data/mha/app1.cnf
2、手动切换主master

masterha_master_switch --conf=/data/mha/app1.cnf --master_state=alive --new_master_host=192.168.142.48 --new_master_port=5700 --orig_master_is_new_slave --running_updates_limit=10000 --interactive=0
参数解释:
new_master_host:指定哪台成为新的主库
new_master_port:指定对应的数据库端口
orig_master_is_new_slave:将原来的主库变为从库
running_updates_limit:指定复制延迟在10000s内的都可切换
interactive:表示不需要人工干预,自动执行
3、切换过程

1、检查当前的配置信息及主从服务器的信息
            包括读取MHA的配置文件以及检查当前slave的健康状态
2、阻止对当前master的更新
            主要通过如下步骤:
            1> 等待1.5s($time_until_kill_threads*100ms),等待当前连接断开
            2> 执行 read_only=1,阻止新的DML操作
            3> 等待0.5s,等待当前DML操作完成
            4> kill掉所有连接
            5> FLUSH NO_WRITE_TO_binlog TABLES
            6> FLUSH TABLES WITH READ LOCK
3、等待新master执行完所有的relay log,执行完之后记录下对应的日志位点
            Waiting to execute all relay logs on 192.168.142.49(192.168.142.49:5700)..
            Getting new master's binlog name and position..
            MysqL-bin.000001:2488
4、清理新master的相关信息
            192.168.142.49: Resetting slave info succeeded

10. 故障后的主机新加入资源组
vim /data/mha/app1.cnf 添加server1主机信息
[server1]
candidate_master=1
client_bindir=/usr/local/MysqL-5.7.18/bin/
client_libdir=/usr/local/MysqL-5.7.18/lib/
hostname=192.168.142.48
port=5700
2、将server1指向当前的master充当从的角色
CHANGE MASTER TO MASTER_HOST='192.168.142.49',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=5700,MASTER_LOG_FILE='MysqL-bin.000001',MASTER_LOG_POS=2488;
3、启动mha manager
nohup masterha_manager --conf=/data/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /data/mha/mha/app1/manager.log 2>&1 &
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章