美文网首页Linux系统运维
【实战演练】Linux操作系统16-keepalived实现LV

【实战演练】Linux操作系统16-keepalived实现LV

作者: 工程师Waiting | 来源:发表于2020-05-24 18:46 被阅读0次

本文欢迎转载,转载请注明出处和作者。

理论部分,在之前的文章已经说明过了,详见《【理论研究】业务系统高可用及负载均衡》。

上一篇已经讲述通过增加1台LVS服务器,对2台Nginx服务器做负载均衡,但是LVS服务器存在单点隐患,所以需要对LVS服务器通过Keepalived做HA。

但是Keepalived本身是内嵌了lvs的模块的,因此其实LVS01、02两台服务器,是可以直接安装Keepalivde,而不做上一篇的ipvsadm安装与lvsdr配置的。

手动增加安装一台LVS02,并且将LVS01、02的lvsdr服务停止,避免上一篇的VIP配置影响本篇实验。(nginx01、02的lvsdrf服务不需要停止)

service lvsdr stop

1、安装Keepalived

1.1 安装keepalived

yum install keepalived -y

1.2 修改配置文件

cd /etc/keepalived
rm keepalived.conf
#原有的配置文件
vi keepalived.conf
#创建新的配置文件

注意配置文件只有一些关键参数必须修改,其他都是默认的。

Master(主)服务器配置

! Configuration File for keepalived
global_defs {
   notification_email {
    #xxxx@xxx.com                                   # 发生故障时发送的邮箱
   }
   #notification_email_from xxxx@xxx.com             # 使用哪个邮箱发送
   #smtp_server xxx.com                                  # 发件服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER             # 标示为主lvs
    interface eth1           # HA检测端口,按照实际网卡填写
    virtual_router_id 51     # 主备的virtual_router_id 必须相同
    priority 100             # 优先级,备lvs要比主lvs稍小
    advert_int 1             # VRRP Multicast 广播周期秒数
    authentication {         # 定义认证
        auth_type PASS       # 认证方式为口令认证
        auth_pass 1111       # 定义口令
    }
    virtual_ipaddress {      # 定义vip
        10.1.30.31        # 多个vip可换行添加
    }
}

virtual_server 10.1.30.31 80 {
    delay_loop 6       # 每隔6秒查看realserver状态
    lb_algo wlc        # 调度算法为加权最小连接数
    lb_kind DR         # lvs工作模式为DR(直接路由)模式
    nat_mask 255.255.255.0
    persistence_timeout 0  # 同一IP 的连接50秒内被分配到同一台realserver(测试时建议改为0)
    protocol TCP            # 用TCP监测realserver的状态

    real_server 10.1.30.26 80 {       # 定义realserver
        weight 3                       # 定义权重
        TCP_CHECK {  # 注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver
            connect_timeout 3          # 三秒无响应超时
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 10.1.30.27 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

Slave(从)服务器配置

! Configuration File for keepalived

global_defs {
   notification_email {
    #xxxx@xxx.com                                   # 发生故障时发送的邮箱
   }
   #notification_email_from xxxx@xxx.com             # 使用哪个邮箱发送
   #smtp_server xxx.com                                  # 发件服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP             # 标示为主lvs
    interface eth1           # HA检测端口
    virtual_router_id 51     # 主备的virtual_router_id 必须相同
    priority 99             # 优先级,备lvs要比主lvs稍小
    advert_int 1             # VRRP Multicast 广播周期秒数
    authentication {         # 定义认证
        auth_type PASS       # 认证方式为口令认证
        auth_pass 1111       # 定义口令
    }
    virtual_ipaddress {      # 定义vip
        10.1.30.31        # 多个vip可换行添加
    }
}

virtual_server 10.1.30.31 80 {
    delay_loop 6       # 每隔6秒查看realserver状态
    lb_algo wlc        # 调度算法为加权最小连接数
    lb_kind DR         # lvs工作模式为DR(直接路由)模式
    nat_mask 255.255.255.0
    persistence_timeout 0  # 同一IP 的连接50秒内被分配到同一台realserver(测试时建议改为0)
    protocol TCP            # 用TCP监测realserver的状态

    real_server 10.1.30.26 80 {       # 定义realserver
        weight 3                       # 定义权重
        TCP_CHECK {  # 注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver
            connect_timeout 3          # 三秒无响应超时
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 10.1.30.27 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

1.3 启动服务

service keepalived start

2、Realserver配置(2台Nginx服务器)

2.1 脚本自动配置

vi /etc/init.d/lvsdr

内容如下:

#!/bin/sh
VIP=10.1.30.31 #虚拟ip,根据需求修改
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "lo:0 port starting"
        # 为了相应lvs调度器转发过来的包,需在本地lo接口上绑定vip
        ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        # 限制arp请求
        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
        stop)
        echo "lo:0 port closing"
        ifconfig lo:0 down
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
        *)
        echo "Usage: $0 {start ¦ stop}"
        exit 1
esac

增加执行权限

chmod 777 /etc/init.d/lvsdr

然后可以直接使用service lvsdr start/stop进行启停。

service lvsdr start

3、测试

测试业务前,ip a s 先查看VIP在LVS01还是LVS02上面。

确认VIP在LVS01上面,通过VIP访问业务,并且不断刷新,发现业务能够正常分发。

手动将LVS01关机或者停止keepalived服务。

service keepalived stop

查看VIP是否成功切换到LVS02,

然后再次通过VIP测试业务,发现分发正常,证明LVS的HA功能也设置成功。

相关文章

网友评论

    本文标题:【实战演练】Linux操作系统16-keepalived实现LV

    本文链接:https://www.haomeiwen.com/subject/xalnohtx.html