LinuxVirtualServer
client --> cdn(varnish/squid) --> F5/LVS(四层)(router) (VIP)HA/LB(nginx/haproxy(七层负载均衡))--> server(后端服务器) (-->web --> app --> DB )
4层,转发(流量的分发) 主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
lvs的官网
网址:linuxvirtualserver.org/whatis.html
这里采用DR模式
1、原理:
client --> vs(vip)(调度器) --> rs --> client2、实现:
VertualServer IP 172.25.68.1
Vip 172.25.68.100
RealServer IP 172.25.68.2 172.25.68.3
下载ipvsadm套件(企业6之前的版本没有ipvsadm)
配置VirtualServer
yum源
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.68.250/rhel6.5/HighAvailability/
enabled=1
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.68.250/rhel6.5/ResilientStorage
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.68.250/rhel6.5/LoadBalancer
enabled=1
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.68.250/rhel6.5/ScalableFileSystem
enabled=1
gpgcheck=0
安装并配置ipvsadm
yum install ipvsadm -y
添加策略
ipvsadm -A -t 172.25.68.100:80 -s rr
ipvsadm -a -t 172.25.68.100:80 -r 172.25.68.2:80 -g
ipvsadm -a -t 172.25.68.100:80 -r 172.25.68.3:80 -g
/etc/init.d/ipvsadm save
所写的策略都在/etc/sysconfig/ipvsadm文件中
ipvsadm 常用命令
ipvsadm -C 清除策略
ipvsadm -ln 显示策略
RealServer
(注:vs也要添加vip)
打开httpd
echo "
echo "
测试:
client访问调度器(vs)
curl 172.25.68.100
Question:
目前所有节点都处在同一个vlan中,并且client的ip地址和rs的ip地址在同一网段,所以当我们以VIP访问的时候,可能不经过调度器(vs),而访问的是rs,这样就不能达到负载均衡的效果
解决方案(熟悉arp协议):
real server:
在所有rs上使用arptables_jf 插件
将来自外界的对vip的访问全都DROP
且在 rs 上 不对外宣称 vip
arptables -A IN -d 172.25.68.100 -j DROP
arptables -A OUT -s 172.25.68.100 -j mangle --mangle-ip-s 172.25.68.3
/etc/init.d/arptables_jf save
重新测试:
curl 172.25.68.100
问题:
我们会遇到这种情况,当rs上的http挂掉的时候,之前的调度策略依然生效,所以当调度器将请求发送到挂掉的rs时,会有连接失败的显示(如下)
[root@foundation68 Desktop]# curl 172.25.68.100
curl: (7) Failed connect to 172.25.68.2:80; Connection refused
[root@foundation68 Desktop]# curl 172.25.68.100
[root@foundation68 Desktop]# curl 172.25.68.100
curl: (7) Failed connect to 172.25.68.2:80; Connection refused
[root@foundation68 Desktop]# curl 172.25.68.100
解决方案:
加入将康检查机制,即对宕掉的rs进行处理,重新修改调度器上ipvsadm策略
调度器上安装 ldirectord
配置文件
vim /etc/ha.d/ldirectord.cf
virtual=172.25.68.100:80
real=172.25.68.2:80 gate
real=172.25.68.3:80 gate
fallback=127.0.0.1:80 gate 这里是说当所有的rs都宕掉后,调度器充当rs的角色
service=http
scheduler=rr
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
#receive="Test Page"
#virtualhost=www.x.y.z
清除ipvsadm中的策略
/etc/init.d/ldirectord start
测试:当挂掉一台 rs(172.25.68.2)的http服务
问题:那万一调度器挂掉了怎么办?
企业中一般会有多台调度器工作,挂掉一台之后调度器之间会如何接管?
解决方案:使用keepalived做高可用
keepalived是集群管理中保证集群高可用的一个服务软件,是以VRRP(虚拟路由冗余协议)协议为实现基础的。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
这里我使用两个调度器(ipvs),他俩为主备关系,即主vs挂掉,备用vs接管;主vs修复后重新接管。
172.25.68.1(master) & 172.25.68.4(backup)
源码安装keepalived
目前最新版本:keepalived-1.4.3
tar zxf keepalived-1.4.3.tar.gz
cd keepalived-1.4.3
yum install openssl-devel libn13-devel ipset-devel iptables-devel libnfnetlink-devel -y
./configure --prefix=/usr/local/keepalived --with-init=SYSV
make && make install
scp /usr/local/keepalived [email protected]:/usr/local ##把装好的keepalived发送给备用调度器
做个软连接,方便配置keepalived:
ln -s /usr/local/keepalived/etc/keepalived/ /etc
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
chmod +x /etc/init.d/keepalived
配置文件
172.25.68.1(master)
vim /etc/keepalived/keepalived.conf
vrrp_strict 注释掉这一行
##该配置会在iptable中添加如下策略:
DROP all -- anywhere 172.25.68.100
##vrrp 高可用配置区
vrrp_instance VI_1 {
state MASTER
interface eth2 ##在哪个接口添加vip,就写哪个接口
virtual_router_id 68
priority 100 ##优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.68.100/24
}
}
virtual_server 172.25.68.100 80 {
delay_loop 3
lb_algo rr ##调度算法
lb_kind DR ##DR模式
#persistence_timeout 50
protocol TCP
real_server 172.25.68.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.68.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
172.25.68.4(backup)
vim /etc/keepalived/keepalived.conf
state BACKUP
priority 50 作为备用机,优先级要小于master的优先级
ip addr del 172.25.68.100/24 dev eth1
/etc/init.d/ipvsadm stop
/etc/init.d/ldirectord stop
/etc/init.d/keepalived start
宕掉master,vip和ipvsadm的策略都会转移到server4(backup),实现高可用