一:原理分析介绍:
1:用到的软件:
http://www.stanford.edu/~riepel/lbnamed/
lbnamed:负责别名到真实服务器的解析
poller:实现负载均衡的部分,从各个lbcd上获取服务器的信息来决定DNS解析的结果
lbcd:真实服务器上的负载状态检测
BIND---如果自己配置DNS可选。。
2:需要负载均衡的真实服务器上都应该装有lbcd
3:lbnamed作为中转DNS负责将CNAME解析到集群中的单个真实服务器上。
整个过程是这样的:
实例域名:www.test.com ,有两种选择,一种是采用DNS服务商提供的域名服务,另外的就是自己架设DNS服务器,因为之后有CNAME的解析以及每个集群服务器的A记录问题,因此如果条件允许还是单独建设DNS服务器,
www.test.net
|| || (1)
alias www.best.test.net
|| || (2)
www1.test.net www2.test.net ...
|| || (3)
192.168.0.1 192.168.0.2
(1)的解析工作有单独的DNS服务器完成,(2)由lbnamed服务器完成解析,这步也是整个过程最关键的一步,这步解析的结果直接决定负载均衡的效果,(3)可以在/etc/hosts下指定对应的IP也可以用单独的DNS解析其A记录
二:实例制作:
实验采用三台内核为2.4.21-47的linux pc,
192.168.0.1
192.168.0.2
192.168.0.3
lbnamed-2.3.2.tar.gz
lbcd-3.3.0.tar.gz
192.168.0.1作为lbnamed服务器。另外两台作为负载均衡的真实服务器
1:现在192.168.0.2和192.168.0.3上分本安装lbcd
并不加任何参数运行。/usr/local/sbin/lbcd
2:在192.168.0.1上装 lbnamed
A:
cp poller /usr/sbin/poller
vi /etc/lbnamed.config
# Production www servers.
www1.test.net 10 www www-leland
www2.test.net 10 www www-leland
www3.test.net 10 www www-leland
www4.test.net 10 www www-leland
###############################################################################
# TTL, MX, and top slice factor -- THIS BLOCK MUST BE LAST
###############################################################################
# Pool name TTL Top slice MX
# ---------- --- --------- ----------------------
www 5 0 www.best.test.net
www-leland 5 0 www.best.test.net
B:
在/etc/hosts中添加wwwN的A记录
192.168.0.2 www2.test.net
192.168.0.3 www3.test.net
C:
更改lbnamed,将test.net更换为自己的IP
vi lbnamed
***********************************************
$hostmaster = "best.test.net";
@servers = qw(lbdns1.test.net lbdns2.test.net);
******************************************************
$ns->add_static("best.test.net", T_SOA, $soa);
$ns->add_static("www1.test.net",T_SOA, $soa);
$ns->add_static("www2.test.net",T_SOA, $soa);
$ns->add_static("www3.test.net",T_SOA, $soa);
$ns->add_static("www4.test.net",T_SOA, $soa);
$ns->add_dynamic("best.test.net" => /&handle_lb_request);
$ns->add_dynamic("www1.test.net" => /&handle_lb_a_request);
$ns->add_dynamic("www2.test.net" => /&handle_lb_a_request);
$ns->add_dynamic("www3.test.net" => /&handle_lb_a_request);
$ns->add_dynamic("www4.test.net" => /&handle_lb_a_request);
$ns->add_static("localhost.best.test.net", T_A,rr_A(0x7f000001));
$ns->add_static("localhost.www1.test.net",T_A,rr_A(0x7f000001));
$ns->add_static("localhost.www2.test.net",T_A,rr_A(0x7f000001));
$ns->add_static("localhost.www3.test.net",T_A,rr_A(0x7f000001));
$ns->add_static("localhost.www4.test.net",T_A,rr_A(0x7f000001));
/**************************************************************************
三:检查以及问题解决
在各个节点上启动lbcd后,再在192.168.0.1上启动lbnamed
./lbnamed -l 1.log -d
正常情况下cat 1.log 会有类似如下的记录:
08/09 12:40 4930 lbnamed do_reload
08/09 12:40 4930 lbnamed reloading config
08/09 12:40 4930 lbnamed www3.test.com participation in www is 1
08/09 12:40 4930 lbnamed www3.test.com participation in www-leland is 1
08/09 12:40 4930 lbnamed www2.test.com participation in www is 1
08/09 12:40 4930 lbnamed www2.test.com participation in www-leland is 1
08/09 12:40 4930 lbnamed www1.test.com participation in www is 1
08/09 12:40 4930 lbnamed www1.test.com participation in www-leland is 1
08/09 12:40 4930 lbnamed MX for www is www.best.test.com
08/09 12:40 4930 lbnamed MX for www-leland is www.best.test.com
08/09 12:40 4930 lbnamed load_config:
loading 6780 10 www3.test.com 192.168.0.72 www www-leland
loading 3000 10 www2.test.com 192.168.0.33 www www-leland
loading 3000 10 www1.test.com 192.168.0.31 www www-leland
loading www 5 0 www.best.test.com
loading www-leland 5 0 www.best.test.com
注意:第二列的数字
loading 6780 10 www3.test.com 192.168.0.72 www www-leland
loading 3000 10 www2.test.com 192.168.0.33 www www-leland
loading 3000 10 www1.test.com 192.168.0.31 www www-leland
poller将引导解析此数字较小的真实服务器。。意思就是:3000和6780.它会将请求解析到3000上
二相同的负载状况即两个3000.那么将交替解析上去。
另外内核的版本起到了很大的影响。建议将lbnamed和真实的负载均衡池中的服务器内核版本保持
尽可能的一致。否则负载均衡将无法进行或者出现莫名奇妙的问题,比如只解析到一个服务器上之类