keepalived+MySQL双主实现高可用

本文讲述了如何在数据库主库宕机后,通过VIP让从库接管服务并确保数据一致性,以及使用keepalived实现双主架构的高可用性,包括配置keepalived、脚本监控MySQL服务状态和VIP漂移的过程。
摘要由CSDN通过智能技术生成

应用场景:当数据库主库所在主机宕机之后,通过VIP使从库接管服务,实现高可用,并在数据库主库宕机重启之后,可以使用脚本使VIP从从库所在服务器上重新移至主机数据库所在的服务器上。(注意:重新移至主机数据库之前,需要检查主从数据需要保持一致)
操作步骤:
需要提前准备两台服务器,默认使用数据库MySQL8.0,搭建双主架构(我这边的架构目前是双主架构,可自行参考)
需要系统可以使用yum源,或配置过本地yum源

1.下载keepalived
yum -y install keepalived

2.查询keepalived版本信息
keepalived -v

3.查看keepalived配置文件(默认安装后,在/etc/keepalived/路劲下)
cat /etc/keepalived/keepalived.conf



! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server xxx.xx.xx.x
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        12.16.123.6(此处已对ip进行修改,显示可能存在不一致)
        12.16.123.7(此处已对ip进行修改,显示可能存在不一致)
        12.16.123.8(此处已对ip进行修改,显示可能存在不一致)
    }
}

virtual_server xxx.xx.xx.x(ip地址) 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server xxx.xx.xx.x(ip地址) 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server xxx.xx.xx.x(ip地址) 1358 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server xxx.xx.xx.x(ip地址) 1358

    real_server xxx.xx.xx.x(ip地址) 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            url {
              path /testurl2/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            url {
              path /testurl3/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server xxx.xx.xx.x(ip地址)  1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            url {
              path /testurl2/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server xxx.xx.xx.x(ip地址) 1358 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server xxx.xx.xx.x(ip地址) 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            url {
              path /testurl2/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            url {
              path /testurl3/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server xxx.xx.xx.x(ip地址) 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            url {
              path /testurl2/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            url {
              path /testurl3/test.jsp
              digest xxxxxxxxxxxxxxxxxxxxxx
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

4.可以先备份此配置
cp /etc/keepalived/keepalived.cnf  /etc/keepalived/keepalived.cnfbak

5.修改keepalived的配置文件
vim /etc/keepalived/keepalived.cnf

! Configuration File for keepalived
global_defs {
  script_user root #执行脚本用户为root
  # enable_script_security
}

# 声明自定义脚本路径
vrrp_script CheckMySQL {
	script "/etc/keepalived/CheckMySQL.sh"
    interval 1 #指定进行健康检查的时间间隔,即每隔一段时间检查一次服务的状态。该参数的值通常以秒为单位。较小的间隔可以提供更频繁的检查,但可能增加系统资源的负担。
    fall 2 #连续检测失败的次数,当服务连续失败的次数达到指定的值时,认为服务不可用。换句话说,如果连续指定次数(fall)的健康检查失败,则 keepalived 认为服务已经故障。
}

vrrp_instance VI_1 {
    state BACKUP 
    nopreempt #不抢占模式,在优先级高的机器上设置即可,优先级低的机器可不设置
    interface eth0 #指定虚拟网卡接口
    virtual_router_id 151 # 路由器标识,MASTER和BACKUP必须是一致的
    priority 80 #权重,权重用于抢夺VIP时使用,建议将主库服务器设置权重比从库服务器大于30左右
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass ShinDB
    }
    virtual_ipaddress {
        192.168.6.224 #vip
    }
    track_script { 
        CheckMySQL8960 #调用脚本模块
    }
}

6.放至/etc/keepalived/下CheckMySQL.sh脚本
vim /etc/keepalived/CheckMySQL.sh

#!/bin/bash
COUNT=`ps -C mysqld --no-header | wc -l` #检查mysql服务是否存在
NUM=0

for i in `seq 3`  #执行三次检测,避免异常检测引起VIP漂移
do 
	if [ $COUNT -gt 0 ];then
		exit 0
	else
		NUM=${NUM}+1
	fi

	if [ $NUM -eq 3 ];then
		kill `cat /etc/keepalived/KeepalivedCheckDmp.pid`
		exit 1
	fi
done

7.赋予CheckMySQL.sh操作权限
chmod +x /etc/keepalived/CheckMySQL.sh

可以将keepalived服务的启停也整理为脚本

服务启动:
/usr/sbin/keepalived -f /etc/keepalived/keepalived.conf -p /etc/keepalived/KeepalivedCheckDmp.pid

服务关闭:
kill `cat /etc/keepalived/KeepalivedCheckDmp.pid`

配置完毕,可以先检查VIP所在服务器

ip a #查看eth0网卡端口是否有VIP

可以看到VIP在主库服务器,然后就可以停止主库查看VIP是否进行了漂移,查看从库服务器,查看到VIP,即可证明已经完成了漂移。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值