lvs+keepalived+nginx实现四层负载+七层负载
目录
| 主机 | IP | 
| lvs01-33 | 11.0.1.33 | 
| lvs02-34 | 11.0.1.34 | 
| nginx01 | 11.0.1.31 | 
| nginx02 | 11.0.1.32 | 
| VIP | 11.0.1.30 | 
4台主机主机添加host?
[root@nginx01 sbin]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
11.0.1.31 nginx01
11.0.1.32 nginx02
11.0.1.33 lvs01-33
11.0.1.34 lvs02-34
?
一、lvs配置
以下两台lvs都要配置,除了配置文件不一样以外
lvs一定要搭配keepalived使用,配置上更简单,并且能实现主备高可用
yum install -y ipvsadm keepalived
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vi /etc/keepalived/keepalived.conf主机master
lb_algo字段表示负载调度算法,采用权重算法,nginx01权重为5,nginx02权重为3
需要更改的字段router_id、ens33、priority 100、VIP+端口、真实IP+端口
global_defs {  
    router_id lvs01-33  # 设置lvs的id,在一个网络内应该是唯一的,一般用主机名
}  
vrrp_instance VI_1 {  
    state MASTER   #指定Keepalived的角色,MASTER为主,BACKUP为备          
    interface ens33  #指定Keepalived的角色,MASTER为主,BACKUP为备
    virtual_router_id 51  #虚拟路由编号,主备要一致
    priority 100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR    
    advert_int 1  #检查间隔,默认为1s
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    virtual_ipaddress {  
        11.0.1.30  #定义虚拟IP(VIP)为11.0.1.30,可多设,每行一个
    }  
}  
# 定义对外提供服务的LVS的VIP以及port
virtual_server 11.0.1.30 80 {  
    delay_loop 6 # 设置健康检查时间,单位是秒                    
    lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法                  
    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   
    nat_mask 255.255.255.0                
   #persistence_timeout 0 会话保持时间    
    protocol TCP                  
    real_server 11.0.1.31 80 {  # 指定real server1的IP地址
        weight 5   # 配置节点权值,数字越大权重越高              
        TCP_CHECK {  
        connect_timeout 10         
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
    }  
    real_server 11.0.1.32 80 {  # 指定real server2的IP地址
        weight 3  # 配置节点权值,数字越大权重越高  
        TCP_CHECK {  
        connect_timeout 10  
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
     }  
}
备机backup
global_defs {  
    router_id lvs01-34  # 设置lvs的id,在一个网络内应该是唯一的
}  
vrrp_instance VI_1 {  
    state BACKUP   #指定Keepalived的角色,MASTER为主,BACKUP为备          
    interface ens33  #指定Keepalived的角色,MASTER为主,BACKUP为备
    virtual_router_id 51  #虚拟路由编号,主备要一致
    priority 90  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR    
    advert_int 1  #检查间隔,默认为1s
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    virtual_ipaddress {  
        11.0.1.30  #定义虚拟IP(VIP)为11.0.1.30,可多设,每行一个
    }  
}  
# 定义对外提供服务的LVS的VIP以及port
virtual_server 11.0.1.30 80 {  
    delay_loop 6 # 设置健康检查时间,单位是秒                    
    lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法                  
    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   
    nat_mask 255.255.255.0                
   #persistence_timeout 0 会话保持时间    
    protocol TCP                  
    real_server 11.0.1.31 80 {  # 指定real server1的IP地址
        weight 5   # 配置节点权值,数字越大权重越高              
        TCP_CHECK {  
        connect_timeout 10         
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
    }  
    real_server 11.0.1.32 80 {  # 指定real server2的IP地址
        weight 3  # 配置节点权值,数字越大权重越高  
        TCP_CHECK {  
        connect_timeout 10  
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
     }  
}
二、nginx配置
安装nginx,并更改html页面内容为当前IP
nginx安装:Nginx、keepalived安装详细步骤_keepalive 安装-CSDN博客
两台nginx都要配置
以下命令是临时的,重启后失效,命令内容:在lo网卡上虚拟出一个lo:0接口,添加路由,抑制两台nginx主机的ARP响应。注意掩码是32,目前没找到永久配置的方法,只能以自定义服务设置为开机自启动。
ifconfig lo:0 11.0.1.30 netmask 255.255.255.255 broadcast 11.0.1.30 
route add -host 11.0.1.30 dev lo:0
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检测虚拟网卡接口lo:0,且IP为VIP
[root@nginx01 init.d]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.0.1.31  netmask 255.255.255.0  broadcast 11.0.1.255
        inet6 fe80::4ae3:fc87:6344:7062  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:60:05:0e  txqueuelen 1000  (Ethernet)
        RX packets 35532  bytes 2276489 (2.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22319  bytes 1530060 (1.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 11.0.1.30  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

?
三、测试
nginx01、nginx02访问正常

3.1 keepalived负载均衡
两台lvs开启keepalived,访问VIP,访问正常,由于我设定nginx01的权重高于nginx02,所以是nginx01返回页面,系统工具优先级选出最佳节点
[root@lvs01-33 ~]# systemctl start keepalived
[root@lvs01-34 ~]# systemctl start keepalived

如果你想知道当前是哪个lvs在工作,只需要通过查看VIP当前在哪台lvs即可

3.2 lvs+keepalived高可用
将lvs01的keepalived进程关闭
[root@lvs01-33 ~]# systemctl stop keepalived
VIP访问仍然正常,说明lvs工作正常
?
?3.3 nginx高可用
将nginx01的nginx进程杀死?
[root@nginx01 sbin]# ./nginx -s stop再次访问
?
?将nginx01的nginx进程重启,那么nginx01重新接管

?
参考文档:
https://www.cnblogs.com/tangyanbo/p/4305589.html
https://www.cnblogs.com/xiaocheche/p/7689432.html
lvs详细文档:(原理、模式(NAT、TUN、DR)、调度算法)
LVS负载均衡(LVS简介、三种工作模式、十种调度算法)-CSDN博客
https://www.cnblogs.com/anay/p/9260306.html#_label7
DR模式详细:
LVS | LVS 的三种工作方式(DR原理)(二)_lvs dr 为什么局域网-CSDN博客
ipvsadm常用命令:?
ipvsadm命令 – 管理Linux虚拟服务器 – Linux命令大全(手册)
arp冲突解释:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!