lvs+keepalive实现主从效果,以及RS健康监测和tcp,udp实现非web的负载均衡
前面文章讲到了tcp和udp负载均衡,但是没有健康监测,这几天我优化了一下上次的操作。当然,我也是用的跨网段的通讯,因为线上业务主要是海外业务,所以做了iptables流量转发
IP:
lvs-master:10.60.196.184 vip10.60.196.186
lvs-buckup:10.60.196.183 vip10.60.196.186
rs1:10.60.196.164
rs2:10.60.196.165
rs3:10.60.196.168
route:42.123.110.48 内网ip:10.60.196.180 (主要做内外网转发)
lvs配置:
vim lvs.sh:
#!/bin/bash
GW=10.60.196.254
# website director vip.
SNS_VIP=10.60.196.186
SNS_RIP1=10.60.196.165
SNS_RIP2=10.60.196.168
SNS_RIP3=10.60.196.164
logger $0 called with $1
case "$1" in
start)
# set squid vip
/sbin/ipvsadm -C
/sbin/ipvsadm --set 30 5 30
ipvsadm -A -t $SNS_VIP:60000 -s rr
ipvsadm -a -t $SNS_VIP:60000 -r $SNS_RIP1:60000 -g -w 1
ipvsadm -a -t $SNS_VIP:60000 -r $SNS_RIP2:60000 -g -w 1
ipvsadm -a -t $SNS_VIP:60000 -r $SNS_RIP3:60000 -g -w 1
ipvsadm -A -u $SNS_VIP:60000 -s rr
ipvsadm -a -u $SNS_VIP:60000 -r $SNS_RIP1:60000 -g -w 1
ipvsadm -a -u $SNS_VIP:60000 -r $SNS_RIP2:60000 -g -w 1
ipvsadm -a -u $SNS_VIP:60000 -r $SNS_RIP3:60000 -g -w 1
touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
;;
stop)
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
# ifconfig eth3:0 down
# route del $SNS_VIP
# route del $SNS_VIP
rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "ipvsadm stoped"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped"
exit 1
else
echo "ipvsadm OK"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
因为lvs规则这次我是直接写到ipvsadm里面,所以没有健康监测机制,因此需要写脚本来实现:
vim rs_health.sh
#!/bin/bash
#real health monitor
SNS_VIP=10.60.196.186
SNS_RIP1=10.60.196.165
SNS_RIP2=10.60.196.168
SNS_RIP3=10.60.196.164
/usr/bin/nc -v -w 1 $SNS_RIP1 -n 60000 > /dev/null
if [[ $? -ne 0 ]]; then
/sbin/ipvsadm -d -t $SNS_VIP -r $SNS_RIP1
/sbin/ipvsadm -d -u $SNS_VIP -r $SNS_RIP1
sed -i '19s/^ /#/' /root/lvs.sh (这里是编辑lvs脚本,如果端口通不了就注释对应的rs条目,由于线上需求我的lvs脚本需要死循环运行,所以这里不适合用for循环写)
sed -i '26s/^ /#/' /root/lvs.sh
else
sed -i '19s/#/ /' /root/lvs.sh
sed -i '26s/#/ /' /root/lvs.sh
fi
/usr/bin/nc -v -w 1 $SNS_RIP2 -n 60000 > /dev/null
if [[ $? -ne 0 ]]; then
/sbin/ipvsadm -d -t $SNS_VIP -r $SNS_RIP2
/sbin/ipvsadm -d -u $SNS_VIP -r $SNS_RIP2
sed -i '20s/^ /#/' /root/lvs.sh
sed -i '27s/^ /#/' /root/lvs.sh
else
sed -i '20s/#/ /' /root/lvs.sh
sed -i '27s/#/ /' /root/lvs.sh
fi
/usr/bin/nc -v -w 1 $SNS_RIP3 -n 60000 > /dev/null
if [[ $? -ne 0 ]]; then
/sbin/ipvsadm -d -t $SNS_VIP -r $SNS_RIP3
/sbin/ipvsadm -d -u $SNS_VIP -r $SNS_RIP3
sed -i '21s/^ /#/' /root/lvs.sh
sed -i '28s/^ /#/' /root/lvs.sh
else
sed -i '21s/#/ /' /root/lvs.sh
sed -i '28s/#/ /' /root/lvs.sh
fi
lvs上面keepalive的配置:
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from admin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER (备机主要修改为buckup)
interface eth0
virtual_router_id 51
priority 100 (备机改98)
advert_int 1
authentication {
auth_type PASS
auth_pass 11112222
}
virtual_ipaddress {
10.60.196.186/32 label eth0:0
}
}
由于lvs的dr模式用的是内网做的vip,所以不需要开启ip转发功能
以上关于lvs主备配置
-------------------------------------------------------------------------- 主从配置一样注意修改一下彼此的master,backup和优先级
rs配置:
#!/bin/bash
#chkconfig: 2345 79 20
#description:realserver
SNS_VIP2=10.60.196.186
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP1 netmask 255.255.255.255 broadcast $SNS_VIP1
/sbin/route add -host $SNS_VIP1 dev lo:0
ifconfig lo:1 $SNS_VIP2 netmask 255.255.255.255 broadcast $SNS_VIP2
/sbin/route add -host $SNS_VIP2 dev lo:1
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP1 >/dev/null 2>&1
ifconfig lo:1 down
route del $SNS_VIP2 >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
route上面配置iptables转发:
-A PREROUTING -d 42.123.110.48/32 -p tcp -m tcp --dport 60000 -j DNAT --to-destination 10.60.196.186:60000
-A PREROUTING -d 42.123.110.48/32 -p udp -m udp --dport 60000 -j DNAT --to-destination 10.60.196.186:60000
-A POSTROUTING -d 10.60.196.186/32 -p tcp -m tcp --dport 60000 -j SNAT --to-source 10.60.196.180
-A POSTROUTING -d 10.60.196.186/32 -p udp -m udp --dport 60000 -j SNAT --to-source 10.60.196.180
lvs+keepalive实现主从效果,以及RS健康监测和tcp,udp实现非web的负载均衡的更多相关文章
- Keepalived & LVS: 实现web的负载均衡和高可用
目录 1. 环境介绍2. LVS DR模型中Realserver上的准备3. ha上的准备4. 配置keepalived5. 测试Realserver的切换6. failback页面测试7. keep ...
- octavia的实现与分析(一)·openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
- openstack octavia的实现与分析(一)openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
- 高并发负载均衡——nginx与lvs
一.企业级web项目架构 一.企业级web项目架构图 二.架构分析 客户端通过企业防火墙发送请求 在App服务器如tomcat接收客户端请求前,面对高并发大数据量访问的企业架构,会通过加入负载均衡主备 ...
- Linux下"负载均衡+高可用"集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)
当下Linux运维技术越来越受到企业的关注和追捧, 在某些企业, 尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案.那么如何实施Llinux集群架构,才能既有效 ...
- lvs+keepalived+nginx实现高性能负载均衡集群
一.为什么要使用负载均衡技术? 1.系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...
- LVS 单独完成--负载均衡
原文地址:http://blog.sina.com.cn/s/blog_5f54f0be0101eyiu.html LVS 是通过 IPVS 模块来实现的.IPVS是LVS集群的核心,主要用于完成用户 ...
- 应用负载均衡之LVS(一):基本概念和三种模式
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- lvs+keepalived+nginx实现高性能负载均衡集群【转】
转自 lvs+keepalived+nginx实现高性能负载均衡集群 - 青衫lys - 博客园http://www.cnblogs.com/liuyisai/p/5990645.html 一.为什么 ...
随机推荐
- 【翻译】Sencha Cmd中脚本压缩方法之比较
概述 为什么要修改默认设置 YUI压缩 Google Closure编译器 UglifyJS 案例研究Ext JS 6示例应用程序 注意事项 自定义JS压缩 小结 概述 这么多年来,Web开发人员都被 ...
- Java解析XML与生成XML文件
XML是eXtensible Markup Language(可扩展标记语言)的简写形式,它是一种元标记语言(meta-markup language),也就是说它没有一套能够适用于各个领域中所有用户 ...
- mysql进阶(二)索引简易教程
Mysql索引简易教程 基本概念 索引是指把你设置为索引的字段A的内容储存在一个独立区间S里,里面只有这个字段的内容.在找查这个与这个字段A的内容时会直接从这个独立区间里查找,而不是去到数据表里查找. ...
- Get/POST方法提交的长度限制
1. Get方法长度限制 Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制.这个限制是特定的浏览器及服务器对它的限制. 如:IE对URL长度的限制 ...
- 用C语言实现Ping程序功能
本文转载自:http://www.ibm.com/developerworks/cn/linux/network/ping/ ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具.p ...
- Google性能工程师Ilya Grigorik谈HTTP/2
via:http://www.infoq.com/cn/news/2014/11/http2-develop HTTP/2,也就是超文本传输协议第2版,是下一代HTTP协议.该版本是自1999年HTM ...
- 仿百度壁纸客户端(一)——主框架搭建,自定义Tab+ViewPager+Fragment
仿百度壁纸客户端(一)--主框架搭建,自定义Tab+ViewPager+Fragment 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment ...
- droid invalidate和postinvalidate的区别
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中 ...
- 网站开发进阶(十一)如何将一个jsp页面嵌套在另一个页面中
如何将一个jsp页面嵌套在另一个页面中 这个在做网页中常要用到,有些通用的内容可集中放在一个页面文件中,其它要用到这些内容的页面只需要包含(引用)这个通用文件即可.这样便于维护,如果有很多网页,当通用 ...
- Android ROM开发(一)——Windows下Cygwin和Android_Kitchen厨房的安装
Android ROM开发(一)--Windows下Cygwin和Android_Kitchen厨房的安装 很久没有碰到ROM开发了,在很久很久以前也是从ROM起步的,无奈还是一脚踏上了Android ...