您的位置:首页 > 其它

一些LVS实验配置、工具和方案

2015-07-20 10:51 405 查看
最近做了一些LVS配置和方案的验证实验,将过程中用到的一些配置、工具和具体的解决方案记录一下。使用DR模式。验证一种不中断业务的RealServer升级或者重启方案。
网络规划:
节点IP地址
ceph1(RealServer1)172.16.0.114
ceph2(RealServer2)172.16.0.115
ceph4(DirectServer)172.16.0.113
客户端:Win8.1172.16.0.100
一、配置
DirectServer:

vip=172.16.0.113

r1ip=172.16.0.114

r2ip=172.16.0.115

port=$1

if[-z"$port"]

then

port=2100

fi


ipvsadm-C

ipvsadm-A-t${vip}:${port}-swrr

ipvsadm-a-t${vip}:${port}-r${r1ip}:${port}-g

ipvsadm-a-t${vip}:${port}-r${r2ip}:${port}-g


RealServer:

#!/bin/sh

VIP=172.16.0.113

BROADCAST=172.16.0.255#vip'sbroadcast


Usage()

{

echo"Usage:`basename$0`(start|stop)"

exit1

}


if[$#-ne1];then

Usage

fi


case$1in

start)

echo"reparingforRealServer"

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

/sbin/ifconfiglo:0$VIPnetmask255.255.255.255broadcast$BROADCASTup

/sbin/routeadd-host$VIPdevlo:0

;;

stop)

/sbin/ifconfiglo:0down

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"stopRealServer"

;;

*)

Usage

esac


上述配置是标准的DR模式的配置。
二、工具
RealServer上面提供可以监听固定端口,并接受客户端从TCP连接发送过来的数据的TCPServer服务,将接收到的数据打印到屏幕,并回复当前节点信息给客户端,让客户端能够区分具体的服务是由哪个RealServer提供的。
服务的代码如下:

packagecom;


importjava.net.ServerSocket;

importjava.net.Socket;

importjava.io.IOException;


publicclassServer

{


publicstaticvoidmain(String[]args)throwsIOException

{


if(args.length<1)

{

System.out.println("argumentserror!\nusage:java-jartcpser.jarserverport");

System.exit(0);

}


intserverport=Integer.parseInt(args[0]);


System.out.println("==============TCPSERVER==============");


ServerSocketserver=null;

try

{

server=newServerSocket(serverport);

System.out.println("ListeningPortis"+server.getLocalPort()+"...");

while(true)

{

SocketconnectedCli=server.accept();

System.out.println("anewclient:"+connectedCli.getInetAddress()+":"+connectedCli.getPort());

newDataProcesser(connectedCli).start();

}

}

catch(Exceptione)

{

e.printStackTrace();

}

finally

{

if(server!=null)

{

server.close();

}

}

}

}


packagecom;


importjava.io.BufferedReader;

importjava.io.BufferedWriter;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

importjava.net.InetAddress;

importjava.net.Socket;


publicclassDataProcesserextendsThread

{

privateSocketcli;


publicDataProcesser(Socketclientsocket)

{

cli=clientsocket;

}


@Override

publicvoidrun()

{

BufferedReaderreader=null;

BufferedWriterwriter=null;

try

{

reader=newBufferedReader(newInputStreamReader(cli.getInputStream()));

writer=newBufferedWriter(newOutputStreamWriter(cli.getOutputStream()));

while(true)

{

StringreceivedString=reader.readLine();

if(receivedString!=null)

{

System.out.println(cli.getInetAddress()+":"+cli.getPort()+""+receivedString);

Stringhostname=InetAddress.getLocalHost().getHostName();

writer.write("it'sfromthehost:"+hostname);

writer.write("\n");

writer.flush();

}

if("shutdown".equals(receivedString))

{

break;

}

}


}

catch(Exceptione)

{

e.printStackTrace();

}

finally

{

if(reader!=null)

{

try

{

reader.close();

}

catch(Exceptione2)

{

e2.printStackTrace();

}

}


if(cli!=null)

{

try

{

cli.close();

}

catch(Exceptione2)

{

e2.printStackTrace();

}

}


}

}

}


将上面的服务端代码导出为jar包:server.jar,部署到两台RealServer上面:
启动信息如下:

root@ceph1:~#java-jarserver.jar2100

==============TCPSERVER==============

ListeningPortis2100...

anewclient:/172.16.0.100:49314

anewclient:/172.16.0.100:49316


客户端工具:
客户端工具直接使用开源的sockettest工具:http://sourceforge.net/projects/sockettest/
三、验证RealServer的一种安全退出机制
当IPVS正在接受业务时,IPVS将请求按照指定的规则分发给两个节点。当需要重启某一个业务节点时,会存在两个问题:1、正在只执行的业务会被中断,如:TCP上面正在做数据交互会中断;2、如何确保不再有新的业务下发到需要重启的节点上面,如果采用LVS服务器将业务节点踢出,那么也会中断已经接入的请求。
其中问题1,一般来说需要服务本身去做判断,判断业务全部完成后,再做下电重启等处理。
对于问题2,需要寻求一种安全的移除业务节点的方案。既不能影响已经接入点业务请求,又不能让新的业务再下发到该节点上面。考虑使用带权重的轮询方式,将某个业务节点的权重设置为0,这样该节点就不会再有业务。但是节点并没有从lvs的配置中删除掉。因此已有的业务不会受影响。
结合客户端工具,和服务端的长连接支持方式,最终很轻松即可验证上述方案,验证步骤:
1、配置好DirectServer,两条分发记录到ceph1和ceph2节点;

2、配置RealServer,启动TCPServer服务;

3、在Windows上面使用sockettest工具分别与LVS的VIP建立长连接;

4、在LVS上面修改配置:

ipvsadm-e-t172.16.0.113:2100-r172.16.0.114:2100-w0


5、观察之前已经跟114节点建立的连接是否断开,是否还能继续发送和接受数据。验证结果为:连接不会断开,该连接还能继续处理数据。

6、DirectServer接受到的新的请求,是否还是会转给114节点。验证结果为:0权重生效,所有的业务都只发送到另外一个业务节点上面。

7、到此整个验证结束。
对于RealServer维护期间,需要精细化的维护业务不受损,可以使用如上方案来实现。
转载:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: