高并发系列---【LVS+keepAlived+nginx】


准备四台服务器,系统centos7。
一、配置虚拟ip
1.在lvs和RS1和RS2上分别执行

systemctl stop NetworkManager
systemctl disable NetworkManager

2.在lvs上

cd /etc/sysconfig/network-scripts/

ll

cp ifcfg-ens33 ifcfg-ens33:1

vi ifcfg-ens33:1
#只保留
BOOTPROTO=static
DEVICE=ens33:1
ONBOOT=yes
IPADDR="192.168.26.101"
NETMASK=255.255.255.0

service network restart

二、安装ipvsadm

yum install -y ipvsadm

ipvsadm -Ln

RS1和RS2:
一、配置虚拟ip

cd /etc/sysconfig/network-scripts/

ll

cp ifcfg-lo ifcfg-lo:1

vi ifcfg-lo:1
#只保留
DEVICE=lo:1
IPADDR=192.168.26.101
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

service network restart

二、配置ARP

vi /etc/sysctl.conf

#添加
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

sysctl -p

三、配置虚拟ip路由

#把关于192.168.26.101vip的请求,交给lo:1来处理
route add -host 192.168.26.101 dev lo:1

#此时,vip加入了路由
route -n
#192.168.26.101 0.0.0.0 255.255.255.255 UH 0 0 0 lo

#重启不丢失
echo "route add -host 192.168.26.101 dev lo:1" >> /etc/rc.local

LVS:
一、配置vip集群规则(rr:轮询)

ipvsadm -A -t 192.168.26.101:80 -s rr

#查看集群规则
ipvsadm -Ln

#给vip添加真实服务器(-g:代表DR模式)
ipvsadm -a -t 192.168.26.101:80 -r 192.168.26.128:80 -g
ipvsadm -a -t 192.168.26.101:80 -r 192.168.26.129:80 -g

至此,单节点Lvs+nginx已完成配置。
打开浏览器:访问192.168.26.101:80,能访问通,即可。
注意:
你会发现,无论你怎么刷新,都只访问一台机器,明明配的轮询啊,这是
因为lvs默认同一个用户同一个请求300秒以内,都路由到同一台机器。
可以修改默认时间来验证:-p 0设置为0s
ipvsadm -E -t 192.168.26.101:80 -s rr -p 0

接下来查看ipvsadm默认超时时间

[root@DR1 keepalived]# ipvsadm -L --timeout

Timeout (tcp tcpfin udp): 900 120 300

900 120 300这三个数值分别是TCP TCPFINUDP的时间.也就是说一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟,就是因为这个时间过长,所以大部分人都会发现做好LVS DR之后轮询现象并没有发生,而且我也看到大部分的教程是没有说明这一点的,巨坑!!!!!!因为是实验性质,所以将此数值调整为非常小,使用以下命令调整:

[root@DR1 ~]# ipvsadm --set 1 2 1

调整之后查看调整效果

[root@DR1 ~]# ipvsadm -L --timeout

Timeout (tcp tcpfin udp): 1 2 1

设置完之后,每隔2秒刷新一下浏览器,发现轮询了。

给LVS配置keepAlived,实现高可用

LVS-master:
前置工作:

#清除手动新增的vip
rm -rf /etc/sysconfig/network-scripts/ifcfg-ens33:1
service network restart

一、安装keepalived

yum install -y keepalived

vi /etc/keepalived.conf
#保存************************************************
! Configuration File for keepalived

global_defs {
   router_id LVS_126
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 126
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.26.101
    }
}

#LVS的相关配置
virtual_server 192.168.26.101 80 {
    #健康检查时间,单位:s
    delay_loop 6

    #负载均衡算法,默认轮询rr
    lb_algo rr

    #LVS的工作模式  NAT|TUN|DR
    lb_kind DR
    #会话持久化时间
    persistence_timeout 0
    protocol TCP

    #负载均衡的真实服务器
    real_server 192.168.26.128 80 {
        weight 1

        #设置健康检查
        TCP_CHECK {
            #检查的端口,对应真实服务器的服务端口
             connect_port 80
            #超时时间3s
            connect_timeout 3
            #重试次数 3次
            nb_get_retry 3
            #间隔时间3s
            delay_before_retry 3
        }
    }
    real_server 192.168.26.129 80 {
        weight 1

        #设置健康检查
        TCP_CHECK {
            #检查的端口,对应真实服务器的服务端口
            connect_port 80
            #超时时间3s
            connect_timeout 3
            #重试次数 3次
            nb_get_retry 3
            #间隔时间3s
            delay_before_retry 3
        }
    }
}
#***********************************************

#清除lvs用命令配置的集群策略
ipvsadm -C

#重启keepalived
service keepalived restart

#查看keepalived的keepalived.conf是否生效,如果有策略列表,则证明keepalived配置成功,若没有策略列表,则说明配置文件有问题,检查ip或大括号是否正确。
ipvsadm -Ln

LVS-backup:
前置工作:

#清除手动新增的vip
rm -rf /etc/sysconfig/network-scripts/ifcfg-ens33:1
service network restart

一、安装keepalived

yum install -y keepalived

vi /etc/keepalived.conf
#保存************************************************
! Configuration File for keepalived

global_defs {
   #LVS127的id
   router_id LVS_127
}

vrrp_instance VI_1 {
    #备份
    state BACKUP
    #根据自己使用的网卡决定
    interface ens33
    #和master一样
    virtual_router_id 126
    #优先级,官方建议相差50
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.26.101
    }
}

#LVS的相关配置
virtual_server 192.168.26.101 80 {
    #健康检查时间,单位:s
    delay_loop 6

    #负载均衡算法,默认轮询rr
    lb_algo rr

    #LVS的工作模式  NAT|TUN|DR
    lb_kind DR
    #会话持久化时间
    persistence_timeout 0
    protocol TCP

    #负载均衡的真实服务器
    real_server 192.168.26.128 80 {
        weight 1

        #设置健康检查
        TCP_CHECK {
            #检查的端口,对应真实服务器的服务端口
             connect_port 80
            #超时时间3s
            connect_timeout 3
            #重试次数 3次
            nb_get_retry 3
            #间隔时间3s
            delay_before_retry 3
        }
    }
    real_server 192.168.26.129 80 {
        weight 1

        #设置健康检查
        TCP_CHECK {
            #检查的端口,对应真实服务器的服务端口
            connect_port 80
            #超时时间3s
            connect_timeout 3
            #重试次数 3次
            nb_get_retry 3
            #间隔时间3s
            delay_before_retry 3
        }
    }
}
#*********************************************

#清除lvs用命令配置的集群策略
ipvsadm -C

#重启keepalived
service keepalived restart

#查看keepalived的keepalived.conf是否生效,如果有策略列表,则证明keepalived配置成功,若没有策略列表,则说明配置文件有问题,检查ip或大括号是否正确。
ipvsadm -Ln

注意:两台lvs和两台RS服务都要关闭防火墙

LVS主备高可用测试

#1.在lvs-master上执行查看ip命令,你会发现,vip192.168.26.101绑定在ens33网卡上
ip addr
#2.在lvs-backup上执行查看ip命令,你会发现,vip192.168.26.101没有绑定在ens33网卡上
ip addr
#3.停止master的keepalived,此时继续访问http://192.168.26.101:80,仍然能访问通
systemctl stop keepalived
#4.在lvs-master上执行查看ip命令,你会发现,vip192.168.26.101没有了
ip addr
#5.在lvs-backup上执行查看ip命令,你会发现,vip192.168.26.101绑定在ens33网卡上,此时vip成功的从master漂移到了backup上
ip addr
#6.重新启动lvs-master上的keepalived,通过"ip addr"命令发现,此时vip成功的从backup又漂移到了master上
systemctl stop keepalived


Nginx健康检测 

#1."./nginx -s stop"停掉RS1的nginx服务,此时在lvs的master或backup上执行"ipvsadm -Ln"命令,会发现,列表中只剩RS2服务了。此时再访问vip,无论怎么访问,都只会访问到RS2服务。

#2."./nginx -s start"启动RS1的nginx服务,此时在lvs的master或backup上执行"ipvsadm -Ln"命令,会发现,列表中RS1服务又出现了,此时再访问vip,又开始了轮询。

至此已完成keepalived的配置。