LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
结构
负载均衡模式
VS/NAT
VS/TUN
VS/DR
参考:
http://os.51cto.com/art/201407/446863.htm
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器
Nginx 是一个很强大的高性能Web服务器和反向代理服务器
lvs与nginx同样在单点瓶颈的问题,但是从这两者的读写流程来看,当使用nginx时,client发送请求到real server,要经过nginx服务器,real server处理完请求得到结果,也要经过nginx服务器返回给客户端。当使用lvs时,client发送请求到real server,经过lvs服务器,real server处理完请求,real server将结果直接返回给客户端,不经过lvs服务器,所以当real server达到一定的数量级,lvs的性能要优于nginx,最终使用lvs && keepalived的方案。
node1:ceph-mon && ceph-osd && keepalived(backup) && lvs
node2:ceph-mon && ceph-osd && keepalived(master) && lvs
node3:ceph-osd && rgw
node4:ceph-mon && ceph-osd && rgw
node5:cosbench
Cosbench
使用方式见附件文件
Cosbench压测工具使用
1 node1 && node2上配置keepalive && lvs
安装keepalived
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar xf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7/
./configure
make && make install
查看ip_vs支持
lsmod |grep ip_vs
ip_vs_rr 12600 0
ip_vs 136674 2 ip_vs_rr
libcrc32c 12644 1 ip_vs
nf_conntrack 101024 7 ip_vs,ipt_MASQUERADE,nf_nat,nf_nat_ipv4,xt_conntrack,iptable_nat,nf_conntrack_ipv4
出现以上结果代表内核模块已经支持ipvs
2 修改配置文件
node1 (keepalived master配置文件)
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface bond1
virtual_router_id 124
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.192.52.70
}
}
virtual_server 10.192.52.70 7480 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 1
protocol TCP
advert_int 1
real_server 10.192.52.62 7480 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 7480
}
}
real_server 10.192.52.63 7480 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 7480
}
}
}
node2 (keepalived backup配置文件)
与master不同的是
state MASTER à state BACKUP
priority 100 à priority 99
node1 && node2启动keepalived
systemctl start keepalived
3 配置real server
配置node3&& node4虚拟ip
vim set_real.sh
ifconfig $1:0 $2 netmask 255.255.255.0 up
route add -host $2 dev $1:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
chmod +x set_real.sh
./set_real.sh nic ip
kill掉其中的一个rgw
systemctl stop [email protected]
node2 (keepalive master)
可以看到lvs的映射表发生了变化
IO没有发生中断和较大的波动
恢复这个rgw
node2 (keepalive master)
可以看到lvs的映射表发生了变化
IO没有发生中断和较大的波动
kill掉Master keepalived
查看node1(keepalived backup)log
node1的keepalived有backup状态变为master
IO没有发生中断和较大的波动
恢复Master keepalived
systemctl start keepalived
查看node1(keepalived backup)log
node1的keepalived由master状态变为backup
IO没有发生中断和较大的波动