首先说下负载均衡服务器:
LVS:LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
Nginx:Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Apache:mod_backhand 是一个Apache 的负载平衡模块 。它定义了每个请求的HTTP重定向在一个异构的Apache服务器群集。每个请求的处理,并贯穿了一套“候选人的职能” ,以确定哪些服务器是最适合的回应。请求然后代理到该服务器。设施已到位,让你写您自己的动态加载决策算法。一切有关的要求和当前可用的资源可用于决策过 程。
至于三者之间的对比相信百度上会有很多,简而言之:负载软件的选取适合实际业务需求紧密贴合的,不过相对来说LVS应该是比较好的选择,因为Nginx毕竟存在一个单点问题,而LVS可以实现一个主从热备并且由于他是工作在网络四层,效率上是极高的。
好了,先配置VIP:
$ cd /etc/init.d $ vi realserver
输入:
VIP=192.168.8.100 case "$1" in start ) /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev lo: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 sysctl -p echo "realserver start" ;; stop )/sbin/ifconfig lo:0 down /sbin/ifconfig lo:1 down /sbin/route del -host $VIP 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 stop" ;; * ) echo "argment is wrong" exit 1 esac exit 0
在linux2.6版本以上自带LVS,需要安装的仅仅只是KeepAlived。
1,在主备机器上安装keepalived,
步骤如下:下载keepalived-1.1.15.tar.gz,然后解压安装
$ #tar zxvf keepalived-1.1.15.tar.gz $ #cd keepalived-1.1.15 $ #./configure $ #make $ #make install
2,配置keepalived
配置中的state MASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
主节点的配置如下:
global_defs { notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个 [email protected] } notification_email_from [email protected] #指定发件人 smtp_server localhost #指定smtp服务器地址 smtp_connect_timeout 30 #指定smtp连接超时时间 router_id LVS_DEVEL #运行keepalived机器的一个标识 } vrrp_instance inside_network { state MASTER #指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决 定 interface eth0 #设置实例绑定的网卡 dont_track_primary #忽略vrrp的interface错误(默认不设置) track_interface{ #设置额外的监控,里面那个网卡出现问题都会切换 eth0 eth1 } mcast_src_ip #发送多播包的地址,如果不设置默认使用绑定网卡的primary ip garp_master_delay #在切换到master状态后,延迟进行gratuitous ARP请求 virtual_router_id 50 #VPID标记 priority 99 #优先级,高优先级竞选为master advert_int 1 #检查间隔,默认1秒 nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高 preempt_delay #抢占延时,默认5分钟 debug #debug级别 authentication { #设置认证 auth_type PASS #认证方式 auth_pass 111111 #认证密码 } virtual_ipaddress { #设置vip 192.168.8.100 } } virtual_server 192.168.202.200 23 { delay_loop 6 #健康检查时间间隔 lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh lb_kind DR #负载均衡转发规则NAT|DR|RUN persistence_timeout 5 #会话保持时间 protocol TCP #使用的协议 real_server 192.168.200.5 23 { weight 1 #默认为1,0为失效 inhibit_on_failure #在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除 notify_up <string> | <quoted-string> #在检测到server up后执行脚本 notify_down <string> | <quoted-string> #在检测到server down后执行脚本 TCP_CHECK { connect_timeout 3 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 23 #健康检查的端口的端口 bindto <ip> 80 #绑定的端口 } } real_server 192.168.201.5 23 { weight 1 #默认为1,0为失效 inhibit_on_failure #在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除 notify_up <string> | <quoted-string> #在检测到server up后执行脚本 notify_down <string> | <quoted-string> #在检测到server down后执行脚本 TCP_CHECK { connect_timeout 3 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 23 #健康检查的端口的端口 bindto <ip> 80 #绑定的端口 } } }
备用节点的配置如下:
global_defs { notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个 [email protected] } notification_email_from [email protected] #指定发件人 smtp_server localhost #指定smtp服务器地址 smtp_connect_timeout 30 #指定smtp连接超时时间 router_id LVS_DEVEL #运行keepalived机器的一个标识 } vrrp_instance inside_network { state BACKUP #指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决 定 interface eth0 #设置实例绑定的网卡 dont_track_primary #忽略vrrp的interface错误(默认不设置) track_interface{ #设置额外的监控,里面那个网卡出现问题都会切换 eth0 eth1 } mcast_src_ip #发送多播包的地址,如果不设置默认使用绑定网卡的primary ip garp_master_delay #在切换到master状态后,延迟进行gratuitous ARP请求 virtual_router_id 50 #VPID标记 priority 99 #优先级,高优先级竞选为master advert_int 1 #检查间隔,默认1秒 nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高 preempt_delay #抢占延时,默认5分钟 debug #debug级别 authentication { #设置认证 auth_type PASS #认证方式 auth_pass 111111 #认证密码 } virtual_ipaddress { #设置vip 192.168.8.100 } } virtual_server 192.168.202.200 23 { delay_loop 6 #健康检查时间间隔 lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh lb_kind DR #负载均衡转发规则NAT|DR|RUN persistence_timeout 5 #会话保持时间 protocol TCP #使用的协议 real_server 192.168.200.5 23 { weight 1 #默认为1,0为失效 inhibit_on_failure #在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除 notify_up <string> | <quoted-string> #在检测到server up后执行脚本 notify_down <string> | <quoted-string> #在检测到server down后执行脚本 TCP_CHECK { connect_timeout 3 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 23 #健康检查的端口的端口 bindto <ip> 80 #绑定的端口 } } real_server 192.168.201.5 23 { weight 1 #默认为1,0为失效 inhibit_on_failure #在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除 notify_up <string> | <quoted-string> #在检测到server up后执行脚本 notify_down <string> | <quoted-string> #在检测到server down后执行脚本 TCP_CHECK { connect_timeout 3 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 23 #健康检查的端口的端口 bindto <ip> 80 #绑定的端口 } } }
验证启动:
$ keepalived -D -f /usr/local/etc/keepalived/keepalived.conf