Centos7 LVS+Keepalived+Nginx基于DR模式构建高可用方案

一二三5年前 (2020-11-28)Centos578

1、准备机器

名称网卡0网卡1VIP
lvsmaster192.218.92.185(网关:192.218.92.1)10.88.1.20(无网关)内网通信使用192.218.92.187
lvsbackup192.218.92.186(网关:192.218.92.1)10.88.1.21(无网关)内网通信使用192.218.92.187
lvsnginx1192.218.92.180(网关:192.218.92.1)10.88.1.22(无网关)内网通信使用192.218.92.187
lvsnginx2192.218.92.181(网关:192.218.92.1)10.88.1.23(无网关)内网通信使用192.218.92.187

2、lvsmaster和lvsbackup安装ipvsadm

     yum install ipvsadm

3、lvsmaster和lvsbackup安装Keepalived

    yum install keepalived

    systemctl status keepalived

    systemctl start keepalived

    systemctl enable keepalived 加入开机启动

4、lvsnginx1和lvsnginx2安装nginx

     yum install yum-utils

    vim /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

yum clean all     

yum install nginx


   安装完后,rpm -qa | grep nginx 查看

   加入开机启动:systemctl enable nginx

   启动nginx:systemctl start nginx

   查看nginx的状态:systemctl status nginx

   重启nginx服务:systemctl restart nginx

   停止nginx服务:systemctl stop nginx

5、lvsnginx1和lvsnginx2 配置网卡规则和路由

修改10.88.1.22中

cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:v1

vim /etc/sysconfig/network-scripts/ifcfg-lo:v1

DEVICE=lo:v1
IPADDR=192.218.92.187
NETMASK=255.255.255.255

配置网卡规则(抑制ARP)

继续在两台RS(Real Server)上进行配置

配置arp抑制规则

vim /etc/sysctl.conf

net.ipv4.conf.all.arp_notify = 1
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

写入开机启动

echo "route add -host 192.218.92.187 dev lo:v1" >>/etc/rc.local


修改10.88.1.23中

cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:v1

vim /etc/sysconfig/network-scripts/ifcfg-lo:v1

DEVICE=lo:v1
IPADDR=192.218.92.187
NETMASK=255.255.255.255

配置网卡规则(抑制ARP)

继续在两台RS(Real Server)上进行配置

配置arp抑制规则

vim /etc/sysctl.conf

net.ipv4.conf.all.arp_notify = 1
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

写入开机启动

echo "route add -host 192.218.92.187 dev lo:v1" >>/etc/rc.local

6、配置lvsmaster(192.218.92.185)和lvsbackup(192.218.92.186)

vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
       zhanghuan@youxiang.com
   }
   notification_email_from lvsadmin@youxiang.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_Server_1
}

vrrp_instance VI_1 {
    state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
    interface eth0 #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查
    virtual_router_id 101  #虚拟路由编号,主备要一致
    priority 100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
    advert_int 1  #检查间隔,默认为1s
    authentication { #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
        auth_type PASS
        auth_pass E2CSLVS20
    }
    virtual_ipaddress {
       192.218.92.187 #定义虚拟IP(VIP)为192.218.92.187,可多设,每行一个
    }
}

virtual_server 192.218.92.187 80 {
    delay_loop 3 # 设置健康检查时间,单位是秒
    lb_algo sh   # 设置负载调度的算法为wlc 加权最小连接调度(wlc) rr轮询算法 sh  session lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR    # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
    protocol TCP
    real_server 192.218.92.180 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
        }
    }

    real_server 192.218.92.181 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
        }
    }
}

lvsbackup只是state、priority、router_id不同

此部署方法 lb_kind 必须为 DR

8、lvsmaster、lvsbackup重启  keepalived  查看 是否配置成功 

systemctl restart keepalived 

ip a


QQ截图20201128131239.png

QQ截图20201128131319.png

标签: KeepalivedNginx