埃森哲

导航

 
  • keepalived简介

keepalived起初为LVS设计的,用来监控集群系统中各个服务点的状态,解决单点故障。如果某个服务节点出现异常,或工作中出现故障,keepalived将检测到,并将出现故障的服务节点剔除,而在故障节点恢复正常后,又将该节点重新添加到服务器集群中,这些工作全部是自动完成,不需要人工干涉,人工干涉的部分是修复出现故障的节点。

后来,keepalived引入了VRRP的功能,VRRP(虚拟路由器冗余协议)的出现解决了静态路由的单点故障问题。

  • VRRP协议与工作原理

VRRP可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过一个虚拟IP对外提供服务。在虚拟路由器的内部是多个物理路由器协同工作,且在同一时间只有一个物理路由器在工作,这台工作的物理路由器称为主路由器(处于MASTER状态),其他路由器为备份路由器(处于BACKUP状态)。当主路由器失效时,备份路由器由选举算法重新选举,产生新的主路由器,整个切换过程对用户来说是透明的,几乎不影响用户体验。

  • VRRP的工作过程

(1)虚拟路由器中的路由器根据优先级选举出Master。Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;

(2)Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况;

(3) 如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;

(4)虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。

(5)Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。

  • keepalived工作原理

keepalived工作在TCP/IP参考模型的第三、第四和第五层,也就是网络层、传输层和应用层。其运行机制为:

(1)网络层

在网络层中,keepalived通过ICMP协议向服务器集群中的每个节点发送ICMP包,若是某个节点没有返回响应数据包,那么认为该节点发生了故障,keepalived便认为该节点为无效节点,从服务器集群中剔除。第三层的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。

(2)传输层

在传输层中,keepalived利用TCP协议的端口连接和扫描技术判断集群节点是否正常。如,对常见的WEB服务默认的80端口和SSH服务默认的22端口等,keepalived一旦在传输层没有检测到这些端口有响应数据传回,就默认这些端口发生了异常,将这些端口对应的节点强制从服务器集群中删除。

(3)应用层

在应用层中,keepalived的运行方式更加全面化和复杂化,用户可以自定义keepalived的工作方式。

  • Nginx+keepalived 主从配置(双机主从热备)

 

用途 IP
MASTER 192.168.85.133
BACKUP 192.168.85.132

这种方案,需要2台机器:一台主,一台备,但只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于闲置。其拓扑图(网上找来)如图所示。

nginx安装部署

1.安装依赖环境

yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

2.下载安装包

官网下载地址:https://nginx.org/en/download.html

3.解压

tar xzvf nginx-1.21.0.tar.gz

4.配置

cd nginx-1.21.0  #进入该目录下
./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_ssl_module

5.编译安装

make && make install

6.服务起停

cd /usr/local/nginx/sbin
启动:./nginx
停止:./nginx –s stop
重新加载:./nginx –s reload

7.防火墙关闭

查看防火墙状态:iptables -L
关闭防火墙:systemctl stop firewalld
开启防火墙:systemctl start firewalld
  • keepalived安装部署

1.下载安装包

官网下载地址:https://www.keepalived.org/download.html

2.解压

tar zxvf keepalived-1.2.19.tar.gz

3.配置

cd keepalived-1.2.19
./configure

4.编译

make && make install

5.拷贝系统配置文件至系统etc文件

cp init.d/keepalived  /etc/init.d/
cp sysconfig/keepalived  /etc/sysconfig/
#注意:找到文件路径,进入该路径下复制文件

6.修改配置

主服务器(MASTER)配置

cat /etc/keepalived/keepalived.conf
... ! Configuration File for keepalived global_defs { router_id LVS_DEVEL script_user root enable_script_security } vrrp_script check_haproxy { script "/etc/keepalived/check_nginx.sh" # 检测脚本路径 interval 3 weight -2 fall 10 rise 2 } vrrp_instance VI_1 { state MASTER # 第一台是MASTER,其他几台master是BACKUP interface ens33 # 本机网卡名 virtual_router_id 51 priority 100 # 权重后一台要比前一台小100,99,98 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.85.113 # 虚拟IP,修改为自己网段中的IP } track_script { check_nginx
# 模块 } } 
...

vim /etc/keepalived/check_nginx.sh
...
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/etc/init.d/keepalived stop
fi
fi
...

启动主服务器keepalived

cd /usr/sbin
./keepalived

查看keepalived的状态

ip addr

 

 

 

备服务器(BACKUP)配置

cat /etc/keepalived/keepalived.conf
...
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
   script_user root
   enable_script_security
}
vrrp_script check_haproxy {
    script "/etc/keepalived/check_nginx.sh"         # 检测脚本路径
    interval 3
    weight -2 
    fall 10
    rise 2
}
vrrp_instance VI_1 {
    state BACKUP           # 备服务器
    interface ens33         # 本机网卡名
    virtual_router_id 51
    priority 51           # 备服务器要比主服务器小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.85.113     # 虚拟IP,修改为自己网段中的IP
    }
    track_script {
        check_nginx
# 模块 } } 
...

vim /etc/keepalived/check_nginx.sh
...
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/etc/init.d/keepalived stop
fi
fi
...

启动备服务器keepalived

cd /usr/sbin
./keepalived

查看keepalived的状态

ip addr

 
posted on 2021-09-13 17:44  埃森哲  阅读(256)  评论(0)    收藏  举报