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 一.为什么 ...
随机推荐
- iOS中 SDWebImage手动清除缓存的方法 技术分享
1.找到SDImageCache类 2.添加如下方法: - (float)checkTmpSize { float totalSize = 0; NSDirectoryEnumerator *file ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(七)
因为到目前为止我都是在iOS模拟器中测试,但即便如此,也觉得按住手臂旋转时,手臂转动起来比较费劲,很难停止在玩家期望的位置上.因为手臂完全通过物理引擎的计算来移动,它有自身的惯性影响,所以很难控制. ...
- Html.java 存储页面信息类
Html.java 存储页面信息类 package com.iteye.injavawetrust.miner; /** * 存储页面信息类 * @author InJavaWeTrust * */ ...
- (五十八)NSObject实现多线程、自动释放池的补充
模拟一个图片下载的场景,图片的下载需要2s,在这期间为了保证程序的流畅,应该把图片的下载放在子线程中进行. 使用NSObject的方法performSelectorInBackground方法即可实现 ...
- 100个iOS开发面试题汇总
100个iOS开发面试题汇总 关于iOS开发面试,不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的 ...
- 【Java编程】Eclipse快捷键
Alt+左箭头,右箭头 以在编辑窗口切换标签 Alt+上下箭头, 以自动选择鼠标所在行,并将其上下移动 Ctrl+f6 ...
- Android帧布局(Frame Layout)
Android帧布局(Frame Layout) FrameLayout是最简单的一个布局管理器.FrameLayout为每个加入其中的组件创建一个空白区域(一帧),这些组件根据layout_grav ...
- 网站开发进阶(二十二)HTML UI知识汇总(更新中...)
HTML知识汇总(更新中...) 1.<iframe> 标签 浏览器支持 所有浏览器都支持 <iframe> 标签. 定义和用法 iframe 元素会创建包含另外一个文档的内联 ...
- 【一天一道leetcode】 #2 Add Two Numbers
一天一道leetcode系列 (一)题目: You are given two linked lists representing two non-negative numbers. The digi ...
- TCP的核心系列 — ACK的处理(一)
TCP发送数据包后,会收到对端的ACK.通过处理ACK,TCP可以进行拥塞控制和流控制,所以 ACK的处理是TCP的一个重要内容.tcp_ack()用于处理接收到的ACK. 本文主要内容:TCP接收A ...