smtp虚拟服务器_【实战演练】Linux操作系统17-keepalived实现Nginx服务器负载均衡

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

理论部分,在之前的文章已经说明过了,详见:

繁星亮与鲍包包:【理论研究】业务系统高可用及负载均衡​zhuanlan.zhihu.com
4a708639f8cfe3354247bfb6c3dcf330.png

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

繁星亮与鲍包包:​zhuanlan.zhihu.com

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

ad987550b1d32a98a1c2e92256f6f1a1.png

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上。

7c855b3da203e991a5ade7a0e6d855e3.png

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

3b83d92398b21691474ad23dbfe399e0.png

8d043c4ad72df0700c691f6cf58e6572.png

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

service keepalived stop

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

e3734a59917be32ba33a015c40ffa794.png

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

3b83d92398b21691474ad23dbfe399e0.png

8d043c4ad72df0700c691f6cf58e6572.png

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

繁星亮与鲍包包:【实战演练】Linux操作系统13-Nginx实现WEB服务器负载均衡​zhuanlan.zhihu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值