什么是LVS集群?DR模式?
LVS采用的是合入内核模块,先把对于nginx来说要稳定很多,性能和稳定都在一定层度上占据优势,可以做四层负载均衡
LVS通过工作于内核的IPVS模块来实现,主要在netfilter的INPUT链上,此外,还包含了一个用户态工具,ipvdadm,用于用户负载集群定义和集群服务管理
流程图:
1、客户端发送访问请求,LVS调度器接受访问请求了以后;
2、报文则会在PREROUTING链中进行自我检查,检查并确认IP是本机,于是再将报文发送到INPUT链,ipvs内核模块确定请求的服务是我们这个线路配置的LVS集群服务,然后再根据自己设定的用户交互均匀策略,在进行选择后端后台RS,然后再将目标MAC地址修改RIP的MAC地址。
因为调度器和后端服务器RS在同一个网段,因此直接互通,将请求发送给选择的RS处理
3、响应完之后再发送给客户端
我这里准备了四个虚拟机,用第一个作为客户端,第二个作为lvs 第三个和第四个作为web服务端
环境准备:
1、在lvs中安装ipvsadm
[root@slave ~]# yum install -y ipvsadm
2、在两台web服务器中安装httpd
[root@coco ~]# yum install httpd -y
1、改变lvs主机的IP地址
[root@lvs ~]# ifconfig ens33:200 192.168.11.200/24
配置好了以后要用其他主机ping一下,看看是否联通,我这里用第一台主机ping过 是没问题的
问题1:如果ping通但是不可以curl通,就说明防火墙配置enforcing改为disabled,如果还是不行,就将四台虚拟机的防火墙关闭,这样一定就行,不要永久关闭,stop临时关闭一下就好了
2、配置web服务器
[root@web1 ~]# echo "hello web test ,ip is `hostname -I`." > /var/www/html/index.html
[root@web1 ~]# systemctl start httpd
[root@web2 ~]# echo "hello web test ,ip is `hostname -I`." > /var/www/html/index.html
[root@web2 ~]# systemctl start httpd
将echo代码写入html文档中,两台web服务器都一样的步骤
配置完以后,我们同样用客户端主机去ping
没问题的话,直接进行下一步!
3、给web服务器配置VIP
[root@web1 ~]# ifconfig lo:200 192.168.11.200 netmask 255.255.255.255 up
[root@web2 ~]# ifconfig lo:200 192.168.11.200 netmask 255.255.255.255 up
注意注意:①
这里一定一定要把掩码设置为32位,否则后面会出现curl不通的情况,
注意注意:②
这里会存在一个小问题,但是我不知道是不是我的Xshell问题,当你配置VIP的时候,Xshell会自动闪退,自动断开远程连接,这个时候,不要惊慌,直接在原本的虚拟机里面敲入代码,而且反应还很迅速。
4、配置web服务器的路由
[root@web1 ~]# route add -host 192.168.11.200 dev lo
5、配置ARP路由
[root@web1 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web1 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web1 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web1 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web2 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web2 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web2 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web2 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
注意
:这里的all可以等量换为你自己的接口,如果你是eth接口,就换成eth,如果你是ens33接口,就换成ens33,我这里添加了all,本质上来说是的
5、给lvs配置两台RS
[root@lvs~]#ipvsadm -A -t 192.168.79.110:80 -s rr
[root@lvs ~]#ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.130:80 -g
[root@lvs ~]#ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.131:80 -g
-A | 添加带有选项的虚拟服务 |
-t | 代表着服务地址为主机地址 |
-a | 添加服务 |
-g | 配置默认网关 |
6、curl步骤
[root@coco ~]# for ((i=1;i<=10;i++));
> do
> curl 192.168.11.200
> done
hello web test ,ip is 192.168.11.130 .
hello web test ,ip is 192.168.11.132 .
hello web test ,ip is 192.168.11.130 .
hello web test ,ip is 192.168.11.132 .
hello web test ,ip is 192.168.11.130 .
hello web test ,ip is 192.168.11.132 .
hello web test ,ip is 192.168.11.130 .
hello web test ,ip is 192.168.11.132 .
hello web test ,ip is 192.168.11.130 .
hello web test ,ip is 192.168.11.132 .
[root@coco ~]#
成功Curl通了!
例如,以上就是LVS DR模式的搭建,简单来说就等于是一个客户端通过lvs服务器访问web服务器的,那么这中间你要保证网段联通,保证curl通。中间断断续续的代码很少,但是暴露出的问题却有很多,大部分我都把我自己的问题写上去了,要是有其他小问题,可以评论区call我。
注意事项: 1、至少要保证有三台虚拟机,因为客户端,LVS服务器,web服务器都需要存在,所以至少一个一台;
2、为了防止中间出现,ping百度能通,ping其他不通,curl不通,ping得通的情况,上去第一步就可以把所有的虚拟机的防火墙临时关闭;
3、当出现子网掩码没设置对的时候,在设置一遍,就可以将原本的覆盖掉了。