Keepalived+LVS-DR 高可用集群

目录

一、.Keepalived

1.Keepalived介绍

2.VRRP协议

3.keepalived高可用是如何实现故障切换转移的

4. Keepalived工作原理

5.keepalived的功能和核心组件

1.keepalived服务的三个重要功能:

2.keepalived核心组件

6. keepalived官网

二、使用Keppalived构建LVS-DR模式

1.实验环境 

2.安装keepalived 

第一种安装方法:

第二中安装方法(源码安装)

了解keepalived的文件

配置Keepalived+LVS-DR模式

主节点ds02配置

配置文件详解

修改keepalived.conf配置文件

重启keepalived 服务

安装 ipvsadm

备用节点 ds01配置

修改 keepalived.conf配置文件

启动keepalived: 

安装ipvsadm 

测试主备切换 

keepalived脑裂现象

配置rs1

​编辑 安装httpd

测试VIP 

keepalivd常见的健康检查方式

TCP_CHECK检测:

HTTP_GET检测:

MISC_CHECK检测:


1.Keepalived介绍

keepalived用来管理并监控LVS集群系统中的各个服务器节点状态,主要用来提供故障切换和健康检查功能,还可以做为其他服务的高可用解决方案。如(nginx,mysql等应用)

keepailved软件通过 VRRP协议实现高可用功能,为了解决单点股故障问题

2.VRRP协议

解决网关单点故障的解决方案,VRRP是针对路由器的一种备份解决方案-----由多台路由器组成一个热备组,有master和多个backup(备份),master上面有一个对外提供服务的vip,通过vip地址对外提供服务,每台服务器同一时刻只有一台提供服务,其他服务器处理于冗余状态,当前的主服务器宕机,其他服务器会自动接替(优先级决定接替顺序),虚拟地址(VIP)会自动漂移到新的主

3.keepalived高可用是如何实现故障切换转移的

keepaliced高可用服务对(主备)之间故障切换,主master节点会不断的向备节点发送心跳消息,

告诉备backup 节点还活跃 ,当主节点发生故障vip会转移到新的主服务器上。

4. Keepalived工作原理

keepalived 有 3、4、5 层交换及健康检测功能,IP/TCP协议的 IP 层,TCP层,及应用层

Layer 3层检测:进行ICMP ping包检测,判断主机是否存活

Layer 4层检测:进行端口检测,主要以TCP端口的状态来绝对服务器工作是否正常

Layer 5层检测:做应用层检测,如http的返回状态码是否为200,确认主机是否正常

5.keepalived的功能和核心组件

1.keepalived服务的三个重要功能:

1)管理LVS

2)对LVS集群节点检查

3)作为其他网络服务的高可用功能

2.keepalived核心组件

keepalived也是模块化,不同模块负责不同的功能,主要有三个模块分别是 core、check、VRRP

core模块: 为keepalived核心组件,负责主进程的启动、维护以及全局配置文件加载和解析

check:负责健康检查

VRRP 模块:实现VRRP协议

system call 系统调用

watch dog 监控check和vrrp 进程的看管者

大致如下:

利用 vrrp 协议进行主备通信

利用vrrp协议进行主备竞选,产生VIP

利用 vrpp 协议主向备发送组播包,当备服务器接收不到主服务器的组播包,就会认为主出现故障,主动切换成组

当主恢复时,根据配置决定是否抢占备服务器资源(默认为抢占)

ipvs wrapper:为集群内的所有节点生成IPVS规则

keepalived和LVS是相互配合,各负其责

Keepalived启动后会有三个进程:

父进程:内存管理,子进程管理

子进程:vrrpd子进程

子进程:healthchecker子进程

6. keepalived官网

http://www.keepalived.org/

下载地址:http://www.keepalived.org/download.html

二、使用Keppalived构建LVS-DR模式

1.实验环境 

需要四台主机

vip(虚拟地址):192.168.30.200

角色主机名IP接口
从调度器ds01192.168.30.11ens33
主调度器ds02192.168.30.10ens33
rs节点1rs01192.168.30.12ens33
rs节点2rs02192.168.30.13ens33

注:关闭防火墙和selinux

Keepalived构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用来做双机热备。

Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效点节,恢复后再重新加入

2.安装keepalived 

第一种安装方法:

rpm安装

yum -y install keepalived

查看安装路径:

 rpm -ql keepalived-1.3.5-1.el7.x86_64

第二中安装方法(源码安装)

采用第二中方式安装

在主节点上安装keepalived

解决依赖

yum -y install gcc openssl-devel pcre-devel libnl-devel

tar zxf keepalived-2.0.18.tar.gz 

cd keepalived-2.0.18

 ./configure --prefix=/usr/local/keepalived

 make && make install

了解keepalived的文件

cd /usr/local/keepalived/

 etc下有配置文件etc/keepalived/keepalived.conf

配置Keepalived+LVS-DR模式

虚拟 IP 在某时刻只能属于某一个节点,另一个节点作为备用节点,当主节点不可用时,备用节点接管虚拟 IP,提供正常服务。

主节点ds02配置

keepalived配置文件keepalived.conf,主要包括以下几个配置区域:global_defs、vrrp_instance和virtual_server

global_defs:主要是配置故障发生时的通知对象以及机器标识

vrrp_instance:用来定义对外提供服务的VIP区域及其相关属性

virtual_server:虚拟服务器定义

配置文件详解

! Configuration File for keepalived   #!表示注释

global_defs {                                  #全局定义部分

   router_id ds02                           #表示运行keepalived服务器的一个标识名字可以随便取

}

vrrp_instance lvs-ds02 {
    state MASTER                                 #指定keepalived的角色,此服务为master
    interface ens33                                #指定监测网络的接口
    virtual_router_id 51                          #虚拟路由的标识
    priority 100                                       #定义优先级,数字越大优先级越高,1-255之间
    advert_int 1                                      #设置同步检查的时间间隔,单位是秒
    authentication {                                 #设置验证类型
        auth_type PASS                            #验证类型为PASS
        auth_pass 1111                             #验证的密码                      
    }
    virtual_ipaddress {                             
        192.168.30.200                             #设置虚拟IP
    }
}

virtual_server 192.168.30.200 80 {        #定义虚拟服务器,需指定虚拟ip和端口
    delay_loop 6
    lb_algo rr                                              #设置健康检查时间,单位为秒
    lb_kind DR                                            #设置负载调度算法
    persistence_timeout 50                        #设置会话持续时间
    protocol TCP                                         #设置转发协议的类型

    real_server 192.168.20.12 80 {             #定义realserver,需指定ip和端口
        weight 1                                              #指定权重  
        TCP_CHECK {                                #设置检测后端realserver的方式为获取tcp协议报文      
                 connect_timeout 3                #设置超时时间
                nb_get_retry 3                        #设置超时时候重试几次
                connect_port 80

                delay_before_retry  3               #在重试的时候的时间间隔
        }
    }
real_server 192.168.30.13 80  {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            connect_port 80

            delay_before_retry 3
        }
 }
}

修改keepalived.conf配置文件

ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

! Configuration File for keepalived

global_defs {
   router_id ds02
}

vrrp_instance lvs-ds02 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.30.200
    }
}

virtual_server 192.168.30.200 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 192.168.20.12 80 {
        weight 1
        TCP_CHECK {
                 connect_timeout 3
                nb_get_retry 3
                connect_port 80
        }
    }
real_server 192.168.30.13 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            connect_port 80
        }
 }
}

重启keepalived 服务

systemctl restart keepalived

systemctl enable keepalived

systemctl status keepalived

安装 ipvsadm

安装完不需要做任何配置,启动方式由keepalived 控制

yum -y install ipvsadm

备用节点 ds01配置

安装keepalived 和主节点相同

修改 keepalived.conf配置文件

备用节点的keepalived.conf文件配置与主节点基本相同,只是router_idstatepriority三处不同

把主的配置文件复制到备上做修改: 

scp  /etc/keepalived/keepalived.conf root@192.168.30.11:/etc/keepalived/

修改以下内容: 

 vim /etc/keepalived/keepalived.conf 

router_id ds01   修改id 标识

state BACKUP  修改状态

priority 99  修改优先级

启动keepalived: 

systemctl enable keepalived

systemctl start keepalived

安装ipvsadm 

yum -y install ipvsadm 

测试主备切换 

1.查看主备情况

当主调度器宕掉时vip(虚拟IP) 会漂移到从调度器上

2.测试主备vip地址漂移

 模拟keepalived

systemctl stop keepalived

VIP不在了

查看从调度器情况:

 VIP自动切换到从了

 把停掉的主调度器服务起来:

VIP又漂移回ds02上了,因为这是 keepalived抢占模式,keepalived默认是抢占模式优先级高于从,当主重新加入集群就会抢占回来

keepalived脑裂现象

脑裂可能产生的原因:

        1.在高可用集群之间心跳链路发生故障

                心跳老化,断掉

                IP配置冲突,网卡及驱动坏了

                心跳间连接设备故障(网卡交换机)

2.高可用服务器s防火墙阻挡了心跳消息传输

3.高可用服务器上心跳网卡地址等信息配置不一致

4.其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等

5.Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题

配置rs1

1.关闭ARP转发(在两台RS上都需要同样的操作)

 vim /etc/sysctl.conf

在尾部添加以下内容

net.ipv4.conf.ens33.arp_ignore = 1

net.ipv4.conf.ens33.arp_announce = 2

使内核参数修改生效:

sysctl -p

2.配置虚拟ip地址(VIP)

生成回环口配置文件:

cd /etc/sysconfig/network-scripts/

cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

DEVICE=lo:0
IPADDR=192.168.30.200
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback

重启network服务:

systemctl restart network

 安装httpd

 yum install -y httpd

 systemctl start httpd

echo "192.168.30.200" > /var/www/html/index.html

(为了测试负载均衡,各个服务器的页面不同)

rs2配置与rs1操作一样

测试VIP 

在主节点 (ds01)查看 lvs 状态

 web访问 VIP 地址:

刷新页面:

注意:要把keepalived配置文件中 #persistence_timeout  连接保持注释掉,要不调度器就会给同一个 web池服务里的主机发请求

keepalivd常见的健康检查方式

TCP_CHECK :tcp端口检测

HTTP_GET :http接口检测

MISC_CHECK: 自定义脚本检测

TCP_CHECK检测:

 real_server 172.16.16.177 80 {
            weight 100
            TCP_CHECK {
                connect_port 80  #检测端口,利用80端口检查
                connect_timeout 3  #连接超时时间
                nb_get_retry 3  #重连次数
                delay_before_retry 3  #重连间隔
            }
        }

HTTP_GET检测:

基于状态码的检测

real_server 192.168.30.12 80 {
      weight 1
      HTTP_GET {
          url {
          path /index.html
          status_code 200 #http://192.168.30.12/index.html的返回状态码
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
}

MISC_CHECK检测:

自定义shell 脚本监控

real_server 192.168.30.12 80 {
 weight 100
MISC_CHECK { 
   misc_path "/opt/mytools/check_web.sh 192.168.30.12"  #脚本名,需全路径
   misc_timeout 30   #脚本执行的超时时间
   misc_dynamic          #如果设置了misc_dynamic,healthchecker程序的退出状态码会用来动态调整服务器的权重(weight)。
}
}

脚本来检测,脚本如果带有参数,需将脚本和参数放入双引号内。

脚本的返回值为:

                返回0:健康检查OK,权重不被修改

                返回1:健康检查失败,权重设为0

                返回2-255:健康检查OK,权重设置为:退出状态码 -2,比如返回255,那么weight=255 - 2=253

keepalived检测脚本内容/opt/mytools/check_web.sh,返回0代表检查正常,返回1代表检查异常

vim /opt/mytools/check_web.sh

#!/bin/sh
serverip=$1
curl -s -m 2 http://$serverip
if [ $? -eq 0 ];then
    exit 0
else
    exit 1
fi

 注:curl命令中的-s选项表示静音模式,不输出任何东西。-m选项表示设置数据传输的最大时间。传输的最大允许时间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹黄堡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值