Mysql高可用架构之MHA

xiaoxiao2021-02-28  79

一.MHA(Master High Availability):在mysql高可用方面一个相对成熟的解决方案,作为mysql高可用性环境故障切换和主从提升的高可用软件。在mysql故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,在切换过程中,MHA能在最大程度上保证数据的一致性 二.MHA的组成:管理节点(MHA Manager)和数据节点(MHA Node) MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台Mysql服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master

三.MHA架构

四.部署MHA 环境要求:四台虚拟机server1是master,server2是备选master,server3和server4是slave 在所有节点安装MHA Node所需的perl模块,需要软件包perl-DBD-Mysql  然后yum install 在所有节点安装mha node,需要软件包mha4mysql-node-0.53.tar.gz tar xf mha4mysql-node-0.53.tar.gz cd mha4mysql-node-0.53  Perl Makefile.PL make  &&  make  install 安装MHA Manager 首先安装MHA Manager依赖和perl模块 yum install perl-DBD-Mysql perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y 需要软件包mha4mysql-manager-0.53.tar.gz tar xf mha4mysql-manager-0.53.tar.gz cd mha4mysql-manager-0.53 Perl Makefile.PL make && make install 安装完成后在/usr/local/bin下生成脚本文件 进入  cd  /root/mha4mysql-manager-0.53/samples/scripts下 将master_ip_failover    master_ip_online_change复制到/usr/local/bin下,与之前生成的脚本合在一起 配置SSH登录无密码验证 搭建主从复制环境 在server2上执行备份:mysqldump  --master-data=2  --sigle-transaction  -R  --triggers  -A  >  all.sql --master-data=2      ##备份时刻记录master的binlog的位置和position --single-transaction    ##获取一致性快照 -R                  ##备份存储过程和函数 --tiggers              ##备份触发器 -A                    ##备份所有的库 在server2上创建复制用户:grant  replication  slave  on  *.*  to  ‘repl’@‘172.25.15.%’ identified  by  ‘westos’; flush  privileges 查看主库备份时的binlog名称和位置,MASTER_LOG_FILE和MASTER_LOG_POS: Head  -n  30  all.sql | grep ‘CHANGE MASTER TO’ 把备份复制到server3和server4 Scp  all.sql  server3:/data Scp  all.sql  server4:/data 导入备份到server3,执行复制相关命令 mysql  <  /data/all.sql  CHANGE  MASTER  TO  MASTER—HOST=‘172.2515.3’,MASTER_USER=‘repl’,MASTER_PASSWORD=‘westos’,MASTER_LOG_FILE=‘mysql-bin.000010’,MASTER_LOG_POS=112; start slave 在server4上也搭建复制环境 mysql  <  /data/all.sql  CHANGE  MASTER  TO  MASTER—HOST=‘172.2515.3’,MASTER_USER=‘repl’,MASTER_PASSWORD=‘westos’,MASTER_LOG_FILE=‘mysql-bin.000010’,MASTER_LOG_POS=112; start slave 两台slave服务器server3和server4设置read_only Mysql -e ‘set global read_only=1’ 在master上创建监控用户 Grant all privileges on *.* to  ‘root’@‘172.25.15.%’identified by ‘westos’; flush  privileges 集群环境搭建完毕 五.配置MHA 创建MHA工作目录,并且创建相关配置文件 mkdir  -p  /etc/mastermha cp  mha4mysql-manager-0.53/samples/conf/appl.cnf   /etc/mastermha 修改app1.cnf配置文件 manager_workdir=/var/log/mastermha/app1.log    ##设置manager的工作目录 manager_log=/var/log/mastermha/app1.log        ##设置manager的日志 master_binlog_dir=/data/mysql                 ##设置master保存binlog的位置 master_ip_failover_script=/usr/local/bin/master_ip_failover  ##设置自动failover时候的切换脚本 master_ip_online_change_script=/usr/local/bin/master_ip_online_change  ##设置手动切换时候的切换脚本 password=westos         ##设置mysql中root用户的密码 user=root               ##设置监控用户root ping_interval=1          ##设置监控主库,发送ping包的时间间隔默认是3秒,尝试3次没有回应的时候自动进行railover remote_workdir=/tmp      ##设置远端mysql在发生切换时binlog的保存位置 repl_password=westos     ##设置复制用户的密码 repl_user=repl           ##设置复制环境中的复制用户名 report_script=/usr/local/send_report     ##设置发生切换后发送的报警的脚本  secondary_check_script=/usr/local/bin/mastermha_secondary_check -s server3 -s server2    shutdown_script=“”                ##设置故障发生后关闭故障主机脚本 ssh_user=root                       ##设置ssh的登录用户名 [server1] hostname=172.25.15.1 port=3306 [server2] hostname=172.25.15.2 port=3306 candidate_master=1          ##设置为候选master。如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中最新的slave check_repl_delay=0          ##默认情况下如果一个slave落后master100M的relay logs的话 [server3] hostname=172.25.15.3 port=3306 修改完成 检查ssh配置 mastermaha_check_ssh  --conf=/etc/mastermha/app1.cnf 检查整个复制环境状况 mastermaha_check_repl  --conf=/etc/mastermha/app1.cnf 检查MHA Manager的状态 mastermaha_check_status  --conf=/etc/mastermha/app1.cnf 开启MHA Manager监控 nohup mastermha_manager  --conf=/etc/mastermha/app1.cnf  --remove_dead_master_conf   --ignore_last_failover  <  /dev/null  >  /var/log/mastermha/app1/manager.log 2>&1 & --remove_dead_master_conf       ##该参数表示当发生主从切换后,老的主库的ip将会从配置文件中移除 --manager.log                  ##日志存放位置 --ignore_last_failover            ##缺省情况下,MHA监测到连续宕机,且两次间隔不足8小时,则不会进行failover 六.配置vip 配置vip可以采用两种方式,一种通过keepalived的方式,另一种通过脚本方式启动虚拟ip 需要软件包keepalived-1.2.12.tar.gz tar  xf  keepalived-1.2.12.tar.gz cd  keepalived-1.2.12 ./configure  --prefix=/usr/local/keepalived make  &&  make  install cp  /usr/local/keepalived/etc/rc.d/init.d/keepalived    /etc/init.d cp  /usr/local/keepalived/etc/sysconfig/keepalived    /etc/sysconfig  mkdir   /etc/keepalived cp  /usr/local/keepalived/etc/keepalived/keepalived.conf    /etc/keepalived cp  /usr/local/keepalived/sbin/keepalived   /usr/sbin   在master配置keepalived的配置文件 Vim  /etc/keepalived/keepalived.conf Global_defs {  notification_email {  root@localhost  }  notification_email_from  dba@dbaserver.com  smtp_server 127.0.0.1  Smtp_connect_timeout  30  router_id   Mysql-HA } vrrp_instance VI_1 {  state  BACKUP  interface  eth1  virtual_router_id  51  priority  150  advert_int  1  nopreempt  authentication { auth_type  PASS auth_pass  1111 } Virtual_ipaddress {   172.25.15.100 router_id   Mysql-HA     ##设定keepalived组的名称 172.25.15.100这个虚拟IP绑定到该主机的eth1网卡上,并且设置为backup状态 在候选master上也如此配置,但优先级更低 启动keepalived服务   /etc/init.d/keepalived  start 七.MHA引入keepalived 在主库上编辑脚本/usr/local/bin/master_ip_failover #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my (     $command,          $ssh_user,        $orig_master_host, $orig_master_ip,     $orig_master_port, $new_master_host, $new_master_ip,    $new_master_port ); my $vip = '172.25.0.100/24'; my $key = '1'; my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; GetOptions(     'command=s'          => \$command,     'ssh_user=s'         => \$ssh_user,     'orig_master_host=s' => \$orig_master_host,     'orig_master_ip=s'   => \$orig_master_ip,     'orig_master_port=i' => \$orig_master_port,     'new_master_host=s'  => \$new_master_host,     'new_master_ip=s'    => \$new_master_ip,     'new_master_port=i'  => \$new_master_port, ); exit &main(); sub main {     print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";     if ( $command eq "stop" || $command eq "stopssh" ) {         my $exit_code = 1;         eval {             print "Disabling the VIP on old master: $orig_master_host \n";             &stop_vip();             $exit_code = 0;         };         if ($@) {             warn "Got Error: $@\n";             exit $exit_code;         }         exit $exit_code;     }     elsif ( $command eq "start" ) {         my $exit_code = 10;         eval {             print "Enabling the VIP - $vip on the new master - $new_master_host \n";             &start_vip();             $exit_code = 0;         };         if ($@) {             warn $@;             exit $exit_code;         }         exit $exit_code;     }     elsif ( $command eq "status" ) {         print "Checking the Status of the script.. OK \n";         exit 0;     }     else {         &usage();         exit 1;     } } sub start_vip() {     `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`; } sub stop_vip() {      return 0  unless  ($ssh_user);     `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`; } sub usage { Print 检查集群状态    master_check_repl  --conf=/etc/mastermha/app1.cnf 八.MHA的工作情况 1.自动failover 开启slave上的IO线程   start  slave  io_thread 杀掉主库mysql进程,进行自动failover   kill  -9  mysqld 2.手动failover 手动切换命令  mastermha_master_switch  --master_state=dead  --conf=/etc/mastermha/app1.cnf   --dead_master_host=172.25.15.1   --dead_master_port=3306   --new_master_host=172.25.15..2    --new_master_port=3306 --ignore_last_failover 3.在线切换 停掉MHA监控   master_stop  --conf=/etc/mastermha/app1.cnf 在线切换操作    mastermha_master_switch  --conf=/etc/mastermha/app1.cnf   --master_state=alive  --new_master_host=172.25.15.2  --new_master_port=3306   --orig_master_is_new_slave   --running_update_limit=10000 --orig_master_is_new_slave        ##将原master变为slave --running_update_limit=10000     ##故障切换时,延迟在此时间范围内都可切换

转载请注明原文地址: https://www.6miu.com/read-34071.html

最新回复(0)