关于多个tracker的负载均衡问题
1、假如使用fastdfs的客户很多,超出单个tracker的能力(10K),我使用多个tracker,前面是否能有lvs做负载均衡?
2、TrackerGroup tg = new TrackerGroup(new InetSocketAddress[]{new InetSocketAddress("192.168.41.51", 22122),new InetSocketAddress("192.168.41.42", 22122)});
TrackerClient tc = new TrackerClient(tg);
TrackerServer ts = tc.getConnection();
这段代码能否根据负载均衡访问一个负载较轻的tracker?不能的话怎么办?
3、http下载通过Tracker Server自带的Web Serverr跳转方式,怎样才能返回给用户一个url使用户使用改url下载时能访问负载较轻的tracker,然后跳转到storage?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
回复 1# chenfeng111
个人认为没必要走LVS。
当然LZ可以尝试一下。
不会。目前仅实现了简单的轮询机制。
最简单是轮询方式。通常采用这种方式就够用了。
如果LZ要根据负载来均衡,那自己想办法实现吧。
2、TrackerGroup tg = new TrackerGroup(new InetSocketAddress[]{new InetSocketAddress("192.168.41.51", 22122),new InetSocketAddress("192.168.41.42", 22122)});
TrackerClient tc = new TrackerClient(tg);
TrackerServer ts = tc.getConnection();
ts是前面设置的多个Tracker中第一个能连通的链接吗?
回复 3# chenfeng111
TrackerGroup tg = new TrackerGroup(new InetSocketAddress[]{new InetSocketAddress("192.168.41.51", 22122),new InetSocketAddress("192.168.41.42", 22122)});
出于性能考虑,这行应该初始化一次即可。而不是每次创建。
更多细节,建议看一下代码。
我在两台tracker(192.168.41.51、192.168.41.42)前加了个lvs(192.168.41.222),lvs采用DR方式。
TrackerGroup tg = new TrackerGroup(new InetSocketAddress[]{new InetSocketAddress("192.168.41.222", 22122)});
TrackerClient tc = new TrackerClient(tg);
TrackerServer ts = tc.getConnection();
运行到最后一句时报拒绝连接到222服务器上,如何解决啊?
回复 5# chenfeng111
这个应该和LVS有关,你检查一下LVS设置和工作状态吧。
本帖最后由 chenfeng111 于 2011-04-07 16:23 编辑
lvs配置如下:
#!/bin/bash
#description:start directserver
case "$1" in
start)
echo "start LVS of DirectorServer"
/sbin/ip addr add 192.168.41.222/24 dev eth1
#echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf > /dev/null 2>&1
#sysctl -p
echo "1" > /proc/sys/net/ipv4/ip_forward
ipvsadm -C
ipvsadm -A -t 192.168.41.222:22122 -s wlc
ipvsadm -a -t 192.168.41.222:22122 -r 192.168.41.42:22122 -g
ipvsadm -a -t 192.168.41.222:22122 -r 192.168.41.51:22122 -g
#ipvsadm -a -t 192.168.26.222:80 -r 192.168.41.42:22122 -g
;;
stop)
echo "stop LVS of DirectorServer"
/sbin/ip addr del 192.168.41.222/24 dev eth1
#echo "net.ipv4.ip_forward = 0" > /etc/sysctl.conf > /dev/null 2>&1
#sysctl -p
echo "0" > /proc/sys/net/ipv4/ip_forward
ipvsadm -C
;;
*)
echo "Usage: $0{start|stop}"
exit 1
esac
错误信息如下:
connect to server 192.168.41.222:22122 fail
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:46)
at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:71)
at org.csource.fastdfs.TrackerClient.getConnection(TrackerClient.java:58 )
at org.csource.fastdfs.test.Test1.main(Test1.java:25)
本帖最后由 happy_fish100 于 2011-04-07 16:52 编辑
回复 7# chenfeng111
sorry,不懂LVS
不过,你可以确认一下LVS是否正常工作。
在LVS服务器上通过
netstat -an | grep 22122
检查一下是否在侦听22122端口