mysql 高性能搭建2-1: Centos7离线按照keepalived

本文介绍Keepalived的基本概念,包括其作用、工作模式及组件,并详细指导如何安装依赖及配置Keepalived来实现高可用性服务。通过具体实例展示了如何通过脚本检测MySQL服务的状态。

一 Keepalived概述

1.1 keepalived概述

 keepalived是vrrp协议的实现,原生设计目的是为了高可用ipvs服务,keepalived能够配置文件中定义生成ipvs规则,并能够对各RS的健康状态进行检测;通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器宕机,其虚拟IP地址将会被其他服务器接替(优先级决定接替顺序),实现高可用为后端主机提供服务。

1.2 vrrp概述

VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的VRRP路由器中的一台。

控制虚拟路由器IP地址的VRRP路由器称为主路由器,它负责转发数据包到这些虚拟IP地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的IP地址可以作为终端主机的默认第一跳路由器

1.3 keepalived的模式

keepalive通过组播,单播等方式(自定义),实现keepalive主备推选。工作模式分为抢占和非抢占(通过参数nopreempt来控制)

1)抢占模式:

主服务正常工作时,虚拟IP会在主上,备不提供服务,当主服务优先级低于备的时候,备会自动抢占虚拟IP,这时,主不提供服务,备提供服务。

也就是说,工作在抢占模式下,不分主备,只管优先级。

如上配置,不管keepalived.conf里的state配置成master还是backup,只看谁的priority优先级高(一般而言,state为MASTER的优先级要高于BACKUP)。priority优先级高的那一个在故障恢复后,会自动将VIP资源再次抢占回来!!

2)非抢占模式:

这种方式通过参数nopreempt(一般设置在advert_int的那一行下面)来控制。不管priority优先级,只要MASTER机器发生故障,VIP资源就会被切换到BACKUP上。并且当MASTER机器恢复后,也不会去将VIP资源抢占回来,直至BACKUP机器发生故障时,才能自动切换回来。

千万注意:

nopreempt这个参数只能用于state为backup的情况,所以在配置的时候要把master和backup的state都设置成backup,这样才会实现keepalived的非抢占模式!

也就是说:

A)当state状态一个为master,一个为backup的时候,加不加nopreempt这个参数都是一样的效果。即都是根据priority优先级来决定谁抢占vip资源的,是抢占模式!

B)当state状态都设置成backup,如果不配置nopreempt参数,那么也是看priority优先级决定谁抢占vip资源,即也是抢占模式。

C)当state状态都设置成backup,如果配置nopreempt参数,那么就不会去考虑priority优先级了,是非抢占模式!即只有vip当前所在机器发生故障,另一台机器才能接管vip。即使优先级高的那一台机器恢复后也不会主动抢回vip,只能等到对方发生故障,才会将vip切回来。

1.4 keepalived的组件

core:keepalived核心组件,主进程的启动和维护,全局配置等。

vrrp stack:keepalived是基于vrrp协议实现高可用vps服务,vrrp则为相关子进程为其提供服务 

check:检测keepalived的健康状态相关进程 

system call:系统调用

watch dog:监控check和vrrp进程的看管者,check负责检测器子进程的健康状态,当其检测到master上的服务不可用时则通告vrrp将其转移至backup服务器上。

二  安装keepalived的依赖

2.1 安装keepalived的依赖软件包

https://blog.youkuaiyun.com/Loiterer_Y/article/details/104468964/

软件包位置:见百度网盘中软件包

离线安装keepalived的所有依赖如下图所示:

 下载所有依赖之后,将其上传到服务器,然后在依赖所在文件夹内执行

rpm -Uvh --force *.rpm即可。

2.2 安装keepalived

2.2.1 安装keepalived的版本

2.2.2 进行安装

进入到/usr/local/src目录下:

[root@bogon src]# pwd

/usr/local/src

[root@bogon src]# tar -zxvf /root/bigdata-software/keepalived-1.4.0.tar.gz  -C .

keepalived-1.4.0/

keepalived-1.4.0/install-sh

keepalived-1.4.0/missing

keepalived-1.4.0/compile

[root@bogon src]# cd   keepalived-1.4.0

[root@bogon keepalived-1.4.0]# ls

aclocal.m4  AUTHOR       ChangeLog  configure     CONTRIBUTORS  depcomp  genhash  install-sh  keepalived.spec.in  Makefile.am  missing    snap

ar-lib      bin_install  compile    configure.ac  COPYING       doc      INSTALL  keepalived  lib                 Makefile.in  README.md  TODO

[root@bogon keepalived-1.4.0]# ./configure --prefix=/usr/local/keepalived

checking for a BSD-compatible install... /usr/bin/install -c

[root@bogon keepalived-1.4.0]# make && make install

Making all in lib

make[1]: Entering directory `/usr/local/src/keepalived-1.4.0/lib'

[root@bogon keepalived-1.4.0]# cp /usr/local/src/keepalived-1.4.0/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/

cp: overwrite ‘/etc/rc.d/init.d/keepalived’? y

[root@bogon keepalived-1.4.0]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

cp: overwrite ‘/etc/sysconfig/keepalived’? y

[root@bogon keepalived-1.4.0]# mkdir /etc/keepalived/

[root@bogon keepalived-1.4.0]#  cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

[root@bogon keepalived-1.4.0]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

[root@bogon keepalived-1.4.0]# echo "/etc/init.d/keepalived start" >> /etc/rc.local

2.2.3 修改配置文件

[root@bogon keepalived-1.4.0]# cd /etc/keepalived

[root@bogon keepalived]# ls

keepalived.conf

[root@bogon keepalived]#  cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

[root@bogon keepalived]# ls

keepalived.conf  keepalived.conf.bak

[root@bogon keepalived]# vim /etc/keepalived/keepalived.conf

修改内容:

! Configuration File for keepalived

global_defs {

notification_email {

ops@wangshibo.cn

tech@wangshibo.cn

}

notification_email_from ops@wangshibo.cn

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MASTER-HA

}

vrrp_script chk_mysql_port {     #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等

    script "/opt/chk_mysql.sh"   #这里通过脚本监测

    interval 2                   #脚本执行间隔,每2s检测一次

    weight -5                    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5

    fall 2                    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)

    rise 1                    #检测1次成功就算成功。但不修改优先级

}

vrrp_instance VI_1 {

    state MASTER

    interface eth0      #指定虚拟ip的网卡接口

    mcast_src_ip 192.168.152.136

    virtual_router_id 51    #路由器标识,MASTER和BACKUP必须是一致的

    priority 101            #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.152.130

    }

track_script {

   chk_mysql_port

}

}

需要注意的地方:

2.2.4 脚本配置

[root@bogon keepalived]# vim /opt/chk_mysql.sh

修改内容:

#!/bin/bash

port=`netstat -lntup |grep 3306|wc -l`

echo $port

if [ $port -ne 1 ]

then

 /etc/init.d/keepalived stop

else

 echo "Mysql is running"

fi

赋予执行权限

[root@bogon keepalived]# chmod 755 /opt/chk_mysql.sh

2.2.5 启动keeepalived

[root@bogon keepalived]#  /etc/init.d/keepalived start

Starting keepalived (via systemctl):                       [  OK  ]

[root@bogon keepalived]#  /etc/init.d/keepalived status

● keepalived.service - LVS and VRRP High Availability Monitor

   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)

   Active: active (running) since Mon 2022-07-25 08:27:09 CST; 4s ago

  Process: 24336 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)

 Main PID: 24337 (keepalived)

    Tasks: 1

   CGroup: /system.slice/keepalived.service

           └─24337 /usr/local/keepalived/sbin/keepalived -D

Jul 25 08:27:09 bogon Keepalived_vrrp[24339]: Registering Kernel netlink reflector

Jul 25 08:27:09 bogon Keepalived_vrrp[24339]: Registering Kernel netlink command channel

Jul 25 08:27:09 bogon Keepalived_vrrp[24339]: Registering gratuitous ARP shared channel

Jul 25 08:27:09 bogon Keepalived_vrrp[24339]: Opening file '/etc/keepalived/keepalived.conf'.

Jul 25 08:27:09 bogon Keepalived_vrrp[24339]: WARNING - default user 'keepalived_script' for script execution does not exist - please create.

Jul 25 08:27:09 bogon Keepalived_vrrp[24339]: Cant find interface eth0 for vrrp_instance VI_1 !!!

Jul 25 08:27:09 bogon Keepalived_vrrp[24339]: Default interface eth0 does not exist and no interface specified. Skipping static address 192.168.152.130.

Jul 25 08:27:09 bogon Keepalived_vrrp[24339]: VRRP_Instance(VI_1) Unknown interface !

Jul 25 08:27:10 bogon Keepalived[24337]: Keepalived_vrrp exited with permanent error CONFIG. Terminating

Jul 25 08:27:10 bogon Keepalived[24337]: Stopping

效果截图:

2.2.6 另一种mysql检测脚本


#!/bin/bash  
set -x
MYSQL=/usr/bin/mysql
MYSQL_HOST=localhost 
MYSQL_USER='check_mysql'
MYSQL_PASSWORD=''
CHECK_TIME=3
#mysql  is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0  
MYSQL_OK=1 
function check_mysql_health (){  
	running_bak=`ps -AF | grep "single-transaction --all-databases --triggers --routines --flush-logs" | grep -v "grep" | wc -l`;
        if [ $running_bak -ne 0 ]; then
		return $MYSQL_OK;
        fi
 
	$MYSQL -h$MYSQL_HOST -u$MYSQL_USER -e"show status;" >/dev/null 2>&1  
	if [ $? = 0 ] ;then  
		 MYSQL_OK=1 
	else  
		 MYSQL_OK=0 
	fi  
		 return $MYSQL_OK  
}  
 
while [ $CHECK_TIME -ne 0 ]  
do  
     let "CHECK_TIME -= 1"  
     check_mysql_health  
     if [ $MYSQL_OK = 1 ] ; then  
          CHECK_TIME=0 
          exit 0  
     fi  
 
     if [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]  
     then  
        /etc/init.d/keepalived stop  
     	exit 1   
     fi  
     sleep 1  
done

 check_mysql.sh_疯飙的蜗牛的博客-优快云博客

三  在线安装keepalived的依赖(了解)

yum   install    keepalived   -y

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值