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 & (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |