一、LVS的基础知识
1、LVS出现的背景
Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来 讲,CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载 均衡技术才能满足大量并发访问的需要。
2、LVS的概念
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。使用集群技术和Linux操作系统实现一个高性能、高可用的服务器
3、LVS的包转发策略
- NAT (Network Address Translation)模式。LB收到用户请求包后,LB将请求包中虚拟服务器的IP地址转换为某个选定RS的IP地址,转发给RS;RS将应答包发给LB,LB将应答包中RS的IP转为虚拟服务器的IP地址,回送给用户。
- IP隧道 (IP Tunneling)模式。LB收到用户请求包后,根据IP隧道协议封装该包,然后传给某个选定的RS;RS解出请求信息,直接将应答内容传给用户。此时要求RS和LB都要支持IP隧道协议。
- DR(Direct Routing)模式。LB收到请求包后,将请求包中目标MAC地址转换为某个选定RS的MAC地址后将包转发出去,RS收到请求包后,可直接将应答内容传给用户。此时要求LB和所有RS都必须在一个物理段内,且LB与RS群共享一个虚拟IP。
二、DR模式的LVS
DR模式下调度器和服务器组都必须在物理上有一个网卡通过不分段的局域网相连,即通过交换机或者高速的HUB相连,中间没有隔有路由器。VIP地址为调度 器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上, 它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
二、IP虚拟机服务器软件IPVS
1、IPVS软件实现了三种IP负载均衡技术:
[1].VS/NAT
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
[2].VS/TUN
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
[3].VS/DR
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。
2、搭建DR模式的LVS
server2:调度器
1)配置高可用的yum源
查看完整的yum源 cd /var/www/html/rhel6.5
2)在server2上配置yum源
[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.7.250/source6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.7.250/source6.5/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.7.250/source6.5/LoadBalancer
enabled=1
gpgcheck=0
3)安装管理集群服务ipvsadm(调度器)
[root@server2 varnish]# yum install ipvsadm -y
4)添加IP
[root@server2 ~]# ip addr add 172.25.66.100/24 dev eth0
5)设置LVS的vip,vip添加RS地址,并设置为DR模式
[root@server2 ~]# ipvsadm -A -t 172.25.66.100:80 -s rr
-A 增加一台虚拟设备
-t --tcp-service service-address
-s scheduler
rr 轮询算法
6)添加后端实际服务器
[root@server2 ~]# ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.3:80 -g #将ip为172.25.66.3添加为调度器的服务器
[root@server2 ~]# ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.4:80 -g #将ip为172.25.66.4添加为调度器的服务器
查询ipvsadm状态
7)保存策略
[root@server2 ~]# /etc/init.d/ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
7)在真机中测试
完成以上步骤,在真机中测试只可能不能访问到网页。
第一步:查看ipvsadm主机是否接收到了请求,若是接收到了
第二步:查看服务虚拟机是否有回应(打开服务虚拟机的httpd服务,添加ip)
出现的错误可能有两个
1、服务虚拟机的httpd服务没有打开
2、服务虚拟机没有添加vip
3、若一切都准备好。会出现以下结果
如果绑定的MAC地址是sever2或sever3的,那么我们会发现,在测试端根本不会形成轮叫,而是直接去了MAC绑定的后端服务器
8)在server2和server3中下载yum install -y arptables_jf,防止在物理机中测试时直接访问server2和server3
[root@server3 ~]# yum install -y arptables_jf
9)设置arp抑制
##对input进行拒绝
[root@server2 ~]# arptables -A IN -d 172.25.7.100 -j DROP
##对output进行伪装
[root@server2 ~]# arptables -A OUT -s 172.25.7.100 -j mangle --mangle-ip-s 172.25.7.2
[root@server2 ~]# /etc/init.d/arptables_jf save
测试:
负载均衡:
总结:DR实现负载均衡的流程如下:
DR: client ->VS ->RS ->client
三、DR模式下LVS的健康检查
1)安装软件ldirectord-3.9.5-3.1.x86_64.rpm用来对后端服务器作健康检查
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
2)查看配置文件(rpm -ql ldirectord)
[root@server2 ~]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
[root@server2 ~]# cd /etc/ha.d/
[root@server2 ha.d]# ls
ldirectord.cf resource.d shellfuncs
[root@server2 ha.d]# vim ldirectord.cf
3)开启健康检查服务:
[root@server2 ha.d]# /etc/init.d/ldirectord start
4)清除之前的后端服务器策略 ipvsadm -C
5)编写本机的Apach默认发布文件
vim /var/www/html/index.html
<h1>网站正在维护...</h1>
6)关掉server3和server4的httpd,在物理主机则是curl 172.25.66.100
四、高可用集群(keepalived)管理
1)源码安装Keepalived(安装地址:http://www.keepalived.org/download.html)
[root@server2 ~]# /etc/init.d/ldirectord stop#由于ldirectord与Keepalived冲突,必须将ldirectord
[root@server2 ~]# chkconfig ldirectord off #由于ldirectord开机自启,所以也要将开机自启动关掉
[root@server1 ~]# yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm -y
[root@server1 ~]# tar zxf keepalived-2.0.6.tar.gz #对安装包进行解压
[root@server1 ~]# cd keepalived-2.0.6
源码安装三部曲:
[root@server2 keepalived-2.0.6]# ./configure --with-init=SYSV --prefix=/usr/local/keepalived
[root@server2 keepalived-2.0.6]# make
[root@server2 keepalived-2.0.6]# make install
生成软连接方便Keepalived的管理与设置,并给他的脚本加可执行权限
cd /usr/local/keepalived/etc/rc.d/init.d/
chmod +x keepalived
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
2)将server2中源码编译好的keepalived发送给server5,在server5中同样制作软连接:
scp -r /usr/local/keepalived/ server4:/usr/local/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
3)修改server2的keepalived配置文件:
[root@server2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { #全局定义块
notification_email { #邮件通知
root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#VRRPD配置
vrrp_instance VI_1 {
state MASTER # 指定该节点为主节点,备用节点设置为BACKUP
interface eth0 #绑定虚拟IP的网络接口
virtual_router_id 66 #设置验证信息,两个节点需一致
priority 100 # 主节点的优先级,数值在1~254,注意从节点必须比主节点的优先级别低
advert_int 1 #组播信息发送间隔,两个节点需一致
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.66.100 #指定虚拟IP,两个节点需设置一样
}
}
#虚拟服务配置
virtual_server 172.25.66.100 80 {
delay_loop 6 #指定检查间隔
lb_algo rr #指定lvs算法
lb_kind NAT #指定lvs模式为DR
#persistence_timeout 50 #持久连接设置,会话保持时间,在此处需要注释
protocol TCP #指定转发协议为TCP协议
real_server 172.25.66.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
real_server 172.25.66.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
4、开启keepalived
[root@server2 ~]# /etc/init.d/keepalived start
5、将配置好的keepalived文件发送给备机(server5),将MASTER改成BACKUP
[root@server2 local]# scp -r keepalived/ server5:/usr/local/
6、在server5上的操作
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
7、修改keepalived配置文件
[root@server5 keepalived]# vim keepalived.conf
vrrp_instance VI_1 {
state BACKUP ##状态为备用
interface eth0
virtual_router_id 7
priority 50 ##修改优先级50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.7.100
}
}
[root@server5 keepalived]# /etc/init.d/keepalived start
当server1挂掉之后