准备四台服务器,系统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
systemctl restart keepalived
#设置开机自启动
systemctl enable keepalived
#查看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的配置。