Linux系统运维

【实战演练】Linux操作系统17-keepalived实现Ng

2020-05-24  本文已影响0人  工程师Waiting

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

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

上一篇已经讲述通过2台LVS服务器安装Keepalived软件对2台Nginx服务器做负载均衡。

但是其实既然2台Nginx服务器本身都需要安装keepalived来做高可用,而上一篇中的LVS服务器也是通过安装Keepalived来实现对Nginx服务的负载均衡的,那么是否能够直接让2台Nginx服务器的keepalived直接配置负载均衡,省去2台LVS服务器呢?答案是可以的。

当然这不是最标准的架构,最标准的还是应该按照上一篇,外层有硬件负载均衡/LVS做NAT&网络负载均衡,而内层不同业务/服务自建Nginx做应用负载均衡/反向代理。

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
        }
    }
}

注意上述的配置,没有了检测脚本的配置。但是除了VIP的配置,还配置了real_server(实际负载业务流量的服务器)

Slave(从)服务器配置

! Configuration File for keepalived

global_defs {
   notification_email {
    #xxxx@itcast.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

2、测试

测试业务前,ip a s 先查看VIP在Nginx01还是Nginx02上。

通过VIP访问业务,发现业务能够正常分发。

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

service keepalived stop

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

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

最后,可以将2台Nginx对2台Apache WEB服务器的负载均衡重新设置回去,方便后面开始做数据库的高可用。

上一篇 下一篇

猜你喜欢

热点阅读