###############################################

keepalived

keepalived+lvs实现高可用的负载均衡

测试

###############################################


keepalived

  • keepalived一款轻量级高可用软件,工作于layer3, 4 & 5,不同于前几篇博文中的Heartbeat、Corosync等软件的实现机制不同,它采用虚拟路由冗余协议(Virual Router Redundancy Protocal)来实现并且完美的与lvs结合,由于底层使用虚拟路由冗余协议,因此Keepalived具有切换速度快的特点,工作在layer3的keepalived定期向服务器群组中发送ICMP数据包宣告自己存活与否,工作在layer3的keepalived支持以检测TCP端口状态的方式来判定后台Realserver故障与否,自动并将那些判定为故障的后台Realserver从ipvs规则中踢出,工作在layer5可以支持用户自动以脚本来实现相应的智能操作。此lvs也可以结合ldirectord来实现对后台realserver的动态监测,相对于keepalived来说ldirectord属于重量级别的,部署和使用的灵活程度没有前者方便,本文将介绍keepalived。


keepalived+lvs实现高可用的负载均衡

架构图:

realserver端脚本

#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
.  /etc/rc.d/init.d/functions
VIP=192.168.1.33
host=`/bin/hostname`
case "$1" in
start)# Start LVS-DR real server on this machine./sbin/ifconfig lo down/sbin/ifconfig lo upecho 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announce/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev lo:0
;;
stop)# Stop LVS-DR real server loopback device(s)./sbin/ifconfig lo:0 downecho 0 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 0 > /proc/sys/net/ipv4/conf/lo/arp_announceecho 0 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
status)# Status of LVS-DR real server.islothere=`/sbin/ifconfig lo:0 | grep $VIP`isrothere=`netstat -rn | grep "lo:0" | grep $VIP`if [ ! "$islothere" -o ! "isrothere" ];then# Either the route or the lo:0 device# not found.echo "LVS-DR real server Stopped."elseecho "LVS-DR real server Running."fi
;;
*)# Invalid entry.echo "$0: Usage: $0 {start|status|stop}"exit 1
;;
esac

安装httpd并建立测试页面如下:

Director端配置

安装ipvsadm和keepalived

yum install ipvsadm
rpm -ivh  keepalived-1.2.7-5.el5.i386.rpm

director_master的配置vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {notification_email {root@localhost   #报警收件人地址}notification_email_from root@localhost  #报警发件人地址smtp_server 127.0.0.1                   #设置smtp服务地址smtp_connect_timeout 30                 #设置连接smtp服务的超时时间router_id LVS_DEVEL                     #发送邮件的主体信息
}
vrrp_script chk_schedown {                 #自定义脚本script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"interval 1    #重试时间间隔weight -5     #减权重fall 2rise 1
}
vrrp_instance VI_1 {state MASTER             #制定keepalived角色interface eth0           #制定检测网络接口virtual_router_id 54     #虚拟路由标示码priority 100             #权重,1-255之间advert_int 1             #设置同步检查的时间间隔,单位是秒authentication {auth_type PASS       #验证类型为PASSauth_pass soulboy    #验证密码}virtual_ipaddress {192.168.1.33/24 dev eth0 label eth0:0  #设置虚拟IP}track_script {chk_schedown}notify_master "/etc/keepalived/notify.sh -n master -a 192.168.1.33"notify_backup "/etc/keepalived/notify.sh -n backup -a 192.168.1.33"notify_fault "/etc/keepalived/notify.sh -n fault -a 192.168.1.33"}
virtual_server 192.168.1.33 80 {  #定义虚拟服务器delay_loop 6                  #设置健康检查时间lb_algo wrr                   #设置负载调度算法lb_kind DR                    #设置LVS工作模式nat_mask 255.255.255.0persistence_timeout 50  protocol TCP                  #设置转发协议的类型sorry_server 127.0.0.1 80     #设置紧急服务器real_server 192.168.1.10 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 2nb_get_retry 3delay_before_retry 1}
}real_server 192.168.1.20 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 2nb_get_retry 3delay_before_retry 1}}}
}

director_backup的配置vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {notification_email {root@localhost}notification_email_from root@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL
}
vrrp_script chk_schedown {script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"interval 1weight -5fall 2rise 1
}
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 54priority 99advert_int 1authentication {auth_type PASSauth_pass soulboy}virtual_ipaddress {192.168.1.33/24 dev eth0 label eth0:0}track_script {chk_schedown}notify_master "/etc/keepalived/notify.sh -n master -a 192.168.1.33"notify_backup "/etc/keepalived/notify.sh -n backup -a 192.168.1.33"notify_fault "/etc/keepalived/notify.sh -n fault -a 192.168.1.33"
}
virtual_server 192.168.1.33 80 {delay_loop 6lb_algo wrrlb_kind DRnat_mask 255.255.255.0persistence_timeout 50protocol TCPsorry_server 127.0.0.1 80real_server 192.168.1.10 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 2nb_get_retry 3delay_before_retry 1}
}real_server 192.168.1.20 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 2nb_get_retry 3delay_before_retry 1}}}
}

通知脚本vim /etc/keepalived/notify.sh

#!/bin/bash
#
ifalias=${2:-eth0:0}
interface=$(echo $ifalias | awk -F: '{print $1}')
vip=$(ip addr show $interface | grep $ifalias | awk '{print $2}')
contact='root@localhost'
workspace=$(dirname $0)
notify() {subject="$ip change to $1"body="$ip change to $1 $(date '+%F %H:%M:%S')"echo $body | mail -s "$1 transition" $contact
}
case "$1" inmaster)notify masterexit 0;;backup)notify backup/etc/rc.d/init.d/httpd restartexit 0;;fault)notify faultexit 0;;*)echo 'Usage: $(basename $0) {master|backup|fault}'exit 1;;
esac

测试

启动director_master的keepalive服务并查看ipvs规则

#####查看ipvs规则
[root@master ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.33:80 wrr-> 192.168.1.20:80              Route   1      0          0   -> 192.168.1.10:80              Route   1      0          0
#####查看网络信息
[root@master ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:C2:5E:01inet addr:192.168.1.61  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fec2:5e01/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:67996 errors:0 dropped:0 overruns:0 frame:0TX packets:116217 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:15418633 (14.7 MiB)  TX bytes:8387202 (7.9 MiB)Interrupt:67 Base address:0x2024
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:C2:5E:01inet addr:192.168.1.33  Bcast:0.0.0.0  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1Interrupt:67 Base address:0x2024

启动director_backup的keepalive服务并查看ipvs规则

#####查看ipvs规则
[root@backup ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.33:80 wrr-> 192.168.1.20:80              Route   1      0          0   -> 192.168.1.10:80              Route   1      0          0
#####查看网络信息
[root@backup ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:FA:52:D6inet addr:192.168.1.62  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fefa:52d6/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:115068 errors:0 dropped:0 overruns:0 frame:0TX packets:82940 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:19740061 (18.8 MiB)  TX bytes:6476242 (6.1 MiB)Interrupt:67 Base address:0x2024

使用客户端访问VIP

停止director_master的keepalived服务发现VIP消失

[root@master ~]# service keepalived stop
Stopping keepalived:                                       [  OK  ]
[root@master ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:C2:5E:01inet addr:192.168.1.61  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fec2:5e01/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:69371 errors:0 dropped:0 overruns:0 frame:0TX packets:118587 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:15609985 (14.8 MiB)  TX bytes:8588490 (8.1 MiB)Interrupt:67 Base address:0x2024

在director_backup查看网络信息,发现VIP已成功转移

[root@backup ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:FA:52:D6inet addr:192.168.1.62  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fefa:52d6/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:116816 errors:0 dropped:0 overruns:0 frame:0TX packets:84293 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:19932196 (19.0 MiB)  TX bytes:6597535 (6.2 MiB)Interrupt:67 Base address:0x2024
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:FA:52:D6inet addr:192.168.1.33  Bcast:0.0.0.0  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1Interrupt:67 Base address:0x2024

停止realserver_one的httpd服务

[root@realserver_one ~]# service httpd stop
Stopping httpd:                                            [  OK  ]

director_backup查看ipvs规则,发现realserver_one已经被踢出

[root@backup ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.33:80 wrr-> 192.168.1.20:80              Route   1      0          0

客户端访问VIP发现页面恒为node2

停止realserver_two的httpd服务

[root@realserver_two ~]# service httpd stop
Stopping httpd:                                            [  OK  ]

director_backup查看ipvs规则,发现紧急站点生效

[root@backup ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.33:80 wrr-> 127.0.0.1:80                 Local   1      0          0

客户端访问VIP发现页面为自定义警告页面

分别启动realserver_one和realserver_two的httpd服务

#####realserver_one
[root@realserver_one ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for realserver_one
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName[  OK  ]
#####realserver_two
[root@realserver_two ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for realserver_two
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName[  OK  ]

再次查看director_backup发现ipvs规则已经恢复

[root@backup ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.33:80 wrr-> 192.168.1.20:80              Route   1      0          0   -> 192.168.1.10:80              Route   1      0          0

客户端访问VIP发现负载正常

启动director_master的keepalived服务并查看网络信息发现VIP成功转移

[root@master ~]# service keepalived start
Starting keepalived:                                       [  OK  ]
[root@master ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:C2:5E:01inet addr:192.168.1.61  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fec2:5e01/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:70394 errors:0 dropped:0 overruns:0 frame:0TX packets:118644 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:15679204 (14.9 MiB)  TX bytes:8593207 (8.1 MiB)Interrupt:67 Base address:0x2024
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:C2:5E:01inet addr:192.168.1.33  Bcast:0.0.0.0  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1Interrupt:67 Base address:0x2024

在director_backup查看网络信息发现VIP消失

[root@backup ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:FA:52:D6inet addr:192.168.1.62  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fefa:52d6/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:118485 errors:0 dropped:0 overruns:0 frame:0TX packets:87004 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:20112822 (19.1 MiB)  TX bytes:6791097 (6.4 MiB)Interrupt:67 Base address:0x2024
lo        Link encap:Local Loopbackinet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:16436  Metric:1RX packets:6781 errors:0 dropped:0 overruns:0 frame:0TX packets:6781 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:2122280 (2.0 MiB)  TX bytes:2122280 (2.0 MiB)

转载于:https://blog.51cto.com/soulboy/1307009

keepalived+lvs实现高可用的负载均衡相关推荐

  1. RabbitMQ负载均衡(3)——Keepalived+HAProxy实现高可用的负载均衡

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  2. Keepalived + Nginx 实现高可用 Web 负载均衡

    在实际项目中,为了保证服务的高可用性,nginx单点是不行的,因为一旦nginx挂了,没有后备节点顶上去,web服务将会处于不可用状态,因此为了确保服务的高可用性,我们需要把nginx也做成类似于集群 ...

  3. LVS+keepalived 实现高可用与负载均衡实施方案

    LVS+keepalived 实现高可用与负载均衡实施方案 <Alvin-zeng:孤独0-1> 目录 一.安装LVS1 1.1.环境IP描述:1 1.2.所需软件2 1.3.安装步骤主备 ...

  4. RedHat 7配置keepalived+LVS实现高可用的Web负载均衡

    上一篇博文中我们使用keepalived实现了haproxy的高可用,但keepalived问世之初却是为LVS而设计,与LVS高度整合,LVS与haproxy一样也是实现负载均衡,结合keepali ...

  5. 高可用与负载均衡(7)之聊聊Lvs-DR+Keepalived的解决方案

    今天直接开门见山了,直接说配置吧.首先介绍下我这的环境 如有问题,请联系我18500777133@sina.cn IP 安装软件 192.168.1.7 lvs1+keepalived master角 ...

  6. keepalived高可用+nginx负载均衡

    keepalived高可用+nginx负载均衡 1.IP地址规划 hostname ip 说明 KN01 10.4.7.30 keepalived MASTER节点 nginx负载均衡器 KN02 1 ...

  7. keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...

    前言:初期应用较小,一般以单机部署为主,即可满足业务的需求,随着业务的不断扩大,单机部署的模式无法承载这么大的业务量,需要进行服务集群化的部署,本文主要介绍服务器Tomcat多实例部署,搭载Keepa ...

  8. nginx+keepalived 高可用兼负载均衡集群

    Nginx是一个高性能的web服务器,同时也是一个优秀的反向代理服务器,本文利用两台Dell R720 构建一个高可用兼负载均衡的Linux web集群. 原理 通过nginx分别搭建两个web服务器 ...

  9. 使用pgpool-ii 搭建postgresql 高可用、负载均衡架构

    pgpool有很多功能,其中最重要的我觉得是如下几个:提供连接池(负载均衡模式),复制模式(能通过pgpool分发sql,因此是基于sql语句的分发复制),主备模式(依赖其他的复制,如snoly和流复 ...

最新文章

  1. 关于android创建快捷方式会启动两个应用的问题(一)
  2. Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法 ISAPI CGI
  3. vs2010调用matlab2010b,VS2010调用matlab2010b引擎
  4. Python---查找序列的最长递增子序列
  5. mysql memcached 使用场景_memcache 应用场景
  6. 老司机如何找素材,如何找灵感?
  7. vue.js 表单 v-text
  8. Windows 8实例教程系列 - 布局控制
  9. yourphp超出20记录自动删除
  10. js实现视频时间段拖拽编辑
  11. Cpdetector编码识别
  12. 张俊芳电机学13章计算题以及答案
  13. 万用表测量电阻图解及使用注意事项
  14. 单链表学生管理系统(0723-林雪阵)
  15. w7计算机无法管理员权限设置,win7管理员权限设置技巧:教你win7管理员权限设置是灰色的处理方法...
  16. java实现生命游戏(2维元胞自动机)
  17. UE4-如何做一个简单的TPS角色(二)-实现角色基础移动
  18. ds数据与mysql_比较CCDS数据库和R包内置数据集的差异
  19. nekohtml解析html(string或是文件流)
  20. 在线计算机长度,长度单位在线换算器

热门文章

  1. mysql错误Table ‘./mysql/proc’ is marked as crashed and should be repaired
  2. JPA+Hibernate 3.3 ——第一个JPA程序
  3. 吴昊品游戏核心算法 Round 18 —— 吴昊教你玩Zen Puzzle Garden
  4. java写dnf_【DNF 增幅器 JAVA 模拟增幅代码】
  5. python以读写方式打开文件_python 文件读写with open模式r,r+,w,w+,a,a+的区别
  6. 多吉搜索不能用了_「转载」一个纯粹的中文搜索引擎:「Doge Doge」多吉搜索
  7. hive内部表和外部表的区别_3000字揭秘Greenplum的外部数据加载——外部表
  8. 关于python列表去重复后按照元列表序列输出
  9. java 日期年度 35变2035_连接IBM MQ原因码报2035的错误解决办法
  10. web界面设计工具_您应该了解的14个Web设计工具