1、DR模式的原理
在一台主机上搭建LVS服务器,设置LVS的工作模式是DR模式,LVS仅仅是一个调度器,他会把客户端的请求转发给后备服务器。DR模式直接由后备服务器把数据返回给客户端,不需要逆向发送数据包,此时LVS专注做调度就可,效率很高,DR模式高效的原因是RS服务器会直接响应客户端的请求,发送的请求一直往前发送数据包,不会再返回数据包给调度器。
2、搭建DR模式的LVS步骤
1、实验环境:
三台虚拟机做服务,一台真机做测试。
server1 172.25.30.1 调度器
server2 172.25.30.2 真实服务器RS1
server3 172.25.30.3 真实服务器RS
真机 172.25.30.250 客户端
对四台主机分别关闭火墙,关闭selinux,配置好yum源
步骤:
调度器server1模块
1、安装ipvsadm
[root@server1 ~]# yum install ipvsadm.x86_64 -y
2、ipvsadm -ln 查看策略,此时应该为空
3、对调度器进行配置
配置步骤
(1)设置客户端进入lvs调度器的入口地址
[root@server1 ~]# ipvsadm -A -t 172.25.30.100:80 -s rr
-A表示添加新虚拟服务 -t 协议为tcp协议 100指设置vip为100 端口为80
rr表示调度策略为轮询 -s表示调度算法(10)
(2)配置后端服务器的信息
[root@server1 ~]# ipvsadm -a -t 172.25.30.100:80 -r 172.25.30.2:80 -g
[root@server1 ~]# ipvsadm -a -t 172.25.30.100:80 -r 172.25.30.3:80 -g
dr模式需要给dr和sr都配置两个ip一个eth0,一个vip
-a表示在一个虚拟服务其中添加一个真实的服务器,-t 指tcp模式 vip为172.25.30.100 -g表示指定为dr模式,-r表示后端RS
(3)给调度器添加临时vip,让他可以对外提供服务
[root@server1 ~]# ip addr add 172.25.30.100/24 dev eth0
RS server2模块
真实后端的vip不是对外的,对客户端是隐藏的。
配置步骤:
(1)安装arptables程序
arptables是一段程序,用户管理内核空间的arp规则表,规定arp什么时候响应,什么时候不响应。
[root@server2 ~]# yum install arptables-0.0.4-8.el7.x86_64
(2)查看策略,添加策略
arptables -nL
(3)
[root@server2 ~]# arptables -A INPUT -d 172.25.30.100 -j DROP
来的ARP,如果目的ip是vip的,丢弃
[root@server2 ~]# arptables -A OUTPUT -s 172.25.30.100 -j mangle --mangle-ip-s 172.25.30.2
如果发出去的ARP包,如果源ip是vip的,改成RS的ip
(4)
arptable-save > /etc/sysconfig/arptables
(5)为rs添加vip
[root@server2 ~]# ip addr add 172.25.30.100/24 dev eth0
(6)安装并开启httpd服务
[root@server2 ~]# yum install httpd
[root@server2 ~]# systemctl start httpd
server3模块
配置过程:
(1)安装arptables程序
[root@server3 ~]# yum install arptables-0.0.4-8.el7.x86_64
(2)
[root@server3 ~]# arptables -A INPUT -d 172.25.30.100 -j DROP
(3)
arptables -A OUTPUT -s 172.25.30.100 -j mangle --mangle-ip-s 172.25.30.3
(4)
arptable-save > /etc/sysconfig/arptables
(5)为rs添加vip
[root@server1 ~]# ip addr add 172.25.30.100/24 dev eth0
(6)安装并开启httpd服务
[root@server3 ~]# yum install httpd
[root@server3 ~]# systemctl start httpd
结果测试
1、首先可以在server1中查看规则是否编写成功
2、在真实主机查看,轮询调度可以实现
3、keepalived实现LVS的健康检测
默认情况下,lvs对后端没有健康检查机制,如果出现了某台RS故障,是不会报错的,也没有提示。为了使得故障的RS能被及时检测到,可以做lvs的健康检测
1、在没有健康检测的情况下关闭一个虚拟机的httpd服务,则在真机的访问会报错
[root@server2 html]# systemctl stop httpd
2、在调度器上安装keepalived软件,使用该软件可以自动添加虚拟ip以及编写ipvsadm规则,实现健康检测,进入/etc/keepalived目录下,编辑keepalived.conf文件,内容如下
[root@server1 html]# yum install keepalived.x86_64
advert_int 1 ##表示主备之间的心跳为1 秒,负责高可用的
virtual_ipaddress {
172.25.30.100
} ## 修改vip为172.25.30.100
virtual_server 172.25.30.100 80 修改虚拟服务为80
delay_loop 3 每隔3秒对后台进行一次健康检查
lb_algo rr ##LVS的调度算法为rr(轮询)
lb_kind DR ##工作模式为DR模式
#persistence_timeout 50 ##持续调度时间为50s,在50s内调度器始终会把服务器调度给一个后端,50s后调度到另一个后端,由于我们需要持续的调度访问,同一个客户端的请求让同一个后端处理。所以要把它注释掉。
real_server 172.25.30.2 80 ##真实主机为172.25.30.2 80
weight 1 ##权重为1
3、删除之前添加的vip否则会造成冲突
[root@server1 keepalived]# ip addr del 172.25.30.100/24 dev eth0
4、将之前添加的策略刷掉
5、打开keepalived服务
查看日志可以看到keepalived处于master状态
此时用ipvsadm -ln 进行检测发现只有server3可以检测到因为server2的httpd被关掉了
此时就会进行健康检测,因为server2被关掉了所以直接访问server3,不会报错,这样就能保证前端访问都是正常的。
4、keepalive实现高可用
由于只有一台主机作为调度器,所以当server1宕机则整个lvs系统无法使用,所以可以设置另一台主机作为调度器,当server1宕机,server4作为调度器可以直接使用
1、添加一台主机server4
设置server4 ip为172.25.30.4
将server1中的/etc/keepalived/keepalived.conf 文件复制到server4 的/etc/keepalived/目录下
2、编辑server4中的keepalived.conf文件
state BACKUP ##修改server4为backup状态
priority 50 ##更改优先级为50,与server1加以区别,当server1正常时用server1
3、设置完成后安装并重启keepalived服务
重启服务
可以看到server4的keepalived服务为BACKUP状态
4、将server1中的keepalived服务关掉,此时LVS仍然可以正常使用,正是由于server4中的keepalived服务作为备用调度器在工作
LVS可以正常服务
此时server4的keepalived服务处于MASTER状态
当server1中的keepalived重启,由于优先级较低所以server4中的keepalived服务又变为BACKUP状态。