内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。
一: 一些名词解释 (利用下面的拓扑来理解名词)
1; VIP: Virtual IP(虚拟ip, 主要是提供用户进行访问的);
2; RIP: REAL SERVER IP(真实服务器ip, 主要是提供服务的, 主要的服务器有http服务器);
3; CIP: CLIENT IP(客户端ip, 用来访问虚报ip);
4; DIP: DEVICE IP(设备的ip, 作为REAL SERVER的Gateway, 这个最好也是用虚拟ip, 这个ip是在nat模式下才使用, 配置nat模式最好使用两张网卡);
5; DIRECTOR: 调度器(是指安装ipvsadm的那台机器);
6; RS: REAL SERVER(真实的服务器, 里面有安装服务器, 比如web, mail等等;)
二: lvs的三种模式(按照出现的时间顺序来排列);
1; nat模式 (回复包要经过DIRECTOR, 这种模式最早出现, 最成熟, 但是调度器是瓶颈,所以这个模式现在比较少用; tunneling模式和直接路由模式是后来为了解决某些问题而出现的);
2; tunneling模式;(回复包不需要经过DIRECTOR, 这种模式只要调度器和真实服务器的路由可达即可, 所以应用起来比较广, 回复包的时候直接通过各自的路由器出去, 所以比较方便配置, 只要realserver支持tunneling即可)
3; 直接路由模式;(回复包不需要经过DIRECTOR, 这种模式要求RS与DIRECTOR中间不能用路由器隔开, 回为这个模式只改变目标的mac地址)
三: lvs的十种算法;
1; 四种静态算法(假设服务器为a, b, c! 后面的数字代表服务器的权重);
1: rr: abc, abc, abc
2: wrr: a3b2c1, aababc aababc
3: dh: 目标hash;(根据目标地址选择服务器)
4: sh: 源hash;(根据源地址选择服务器)
2; 六种动态算法;
1: lc: ci最小, (ci指established状态的数量)处理能力比较强的计算机就一直回复;
2: wlc: ci/wi最小, (wi指weight的值)针对处理能力强的计算机weight调大一点;
3: lblc: 基于wlc, cache, 如果有一台已经跟服务器在连接, 那就一直使用这一台;如果负载太重(ci>wi), 则wlc选择一台, 就一直这台;
4: lblcr: 基于lblc, 只是cache集群;如果每台负载都过重, wlc选一台; 如果一台没有用, remove掉;
5: sed: (ci+1)/wi最小;一开始就把weight用上;
6: nq: 基于sed选一台, 如果没过载, 一直就这台, 有过载, 再使用sed再选一台;(ci>wi)
四: 需要实现的目标;
1; 用户访问192.168.2.149, 192.168.2.149把服务请求一会儿转发到192.168.2.31, 一会儿转发到192.168.2.32;
DIRECTOR: 192.168.2.23(VIP 192.168.2.149)
REAL SERVERS: 192.168.2.31(lo:0 192.168.2.149)
à 把上面的需要用三种模式各实现一遍, 调试算法使用wrr;
2; 使用两台机器192.168.2.23(DIRECTOR MASTER)和192.168.2.31(DIRECTOR BACKUP)作为调试器; 使用192.168.2.20, 192.168.2.21, 192.168.2.22, 192.168.2.31, 192.168.2.32作为真实服务器;
DIRECTOR: 192.168.2.23, 192.168.2.31(VIP 192.168.2.149)
REAL SERVERS: 192.168.2.21, 192.168.2.20, 192.168.2.22, 192.168.2.31, 192.168.2.32(lo:0 192.168.2.149);
五: 第一个目标的实现;
1; DIRECTOR的配置;
1; 安装lvs软件ipvsadm; (确认有ip_vs模块, 使用lsmod | grep ip_vs)
apt-get install ipvsadm
2; 配置虚拟ip;
ifconfig eth1:1 192.168.2.149 netmask 255.255.255.255 up
route add –host 192.168.2.149 dev eth1:1
3; 配置负载均衡(使用dr模式, 调度算法为wrr, weight统一配置成5);
ipvsadm –A –t 192.168.2.149:80 –s wrr
ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.31:80 –g –w 5
ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.32:80 –g –w 5
2; 真实服务器的配置(要注意arp问题, 分别在192.168.2.31和192.168.2.32上配置);
1; 配置虚拟ip;
ifconfig lo:0 192.168.2.149 netmask 255.255.255.255 up
route add –host 192.168.2.149 dev lo:0
2; 抑制arp广播;
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
六: 第二个目标的实现;
1; DIRECTOR的配置(上面那个主要实现的是负载均衡, 这个主要实现的高可用性的配置, 这个是在192.168.2.23上的配置, 192.168.2.31只需要改变两个地址即可, 下面有注释);
1; 高可用性软件的安装keepalived;
apt-get install keepalived
2; keepalived主要的配置文件如下(keepalived.conf)
! configuration file for keepalived
global_defs {
notification_email{
361589194@qq.com
}
notification_email_from 361589194@qq.com
smtp_server smtp.163.com
router_id lvs_director #邮件通知的标识, keepalived的日志文件在/var/log/syslog, 可以在这个文件查看状态即可;
}
vrrp_instance V1{
state MASTER #在192.168.2.31配置为BACKUP
interface eth1
lvs_sync_daemon_interface eth1
virtual_router_id 51 #虚拟路由的标识, 必须与BACKUP一样;
priority 150 #在192.168.2.31配置为100(一般来说要小t50);
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.149
}
}
virtual_server 192.168.2.149 80 {
delay_loop 10 #ping的超时时间;
lb_algo wrr
lb_kind DR
#persistence_timeout 10 #这个是配置持久性连接的, 如果配置这个, 那要预防单台的突发性连接;
protocol TCP
real_server 192.168.2.20 80 {
weight 100
TCP_CHECK {
connect_timeout 10 #检测80的端口的超时时间;
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试的延时
connect_port 80
}
}
real_server 192.168.2.22 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.21 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.30 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.32 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.32 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3; 启动keepalived;
/etc/init.d/keepalived restart
2; 真实服务器的配置与上面lvs的配置一样, 每台都要配置;
六: 配置lvs或者lvs+keepalived需要注意的问题;
1; 使用client机器ping一下虚拟ip(ping 192.168.2.149), 使用arp –n查看192.168.2.149的mac地址, 必须与调度器的mac地址一样, 如果不一样, 那就是真实服务器的欺骗了交换机, 调度器就失去了作用;
2; tunnel模式的配置需要在真实服务器配置tunnel接口地址;
ifconfig tunl0 192.168.2.149 netmask 255.255.255.255 up(同时如果在同一个局域网里面测试, 也要预防arp欺骗)
3; nat模式下, 真实服务器基本不需要配置什么, 只需要把网关指向DIP即可;
作者: whzhuang
日期: 2013/4/20
版本: first release
参考网站:
1; 51cto的lvs标签推荐博客; http://blog.51cto.com/tagindex.php
2; lvs的英文官方网站; http://www.linuxvirtualserver.org/
3; lvs的中文官方网站; http://zh.linuxvirtualserver.org/
4; arp问题的解决(教授亲自出手指点); http://zh.linuxvirtualserver.org/node/225
4; lvs初学必看; http://os.51cto.com/art/201202/319979.htm