一些LVS实验配置、工具和方案
最近做了一些LVS配置和方案的验证实验,将过程中用到的一些配置、工具和具体的解决方案记录一下。使用DR模式。验证一种不中断业务的RealServer升级或者重启方案。
网络规划:
| 节点 | IP地址 |
| ceph1(RealServer1) | 172.16.0.114 |
| ceph2(RealServer2) | 172.16.0.115 |
| ceph4(DirectServer) | 172.16.0.113 |
| 客户端:Win 8.1 | 172.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} -s wrr
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's broadcast Usage () {
echo "Usage:`basename $0` (start|stop)" exit 1 } if [ $# -ne 1 ];then Usage fi case $1 in start) echo "reparing for Real Server" 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/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $BROADCAST up /sbin/route add -host $VIP dev lo:0 ;; stop) /sbin/ifconfig lo:0 down 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 "stop Real Server" ;; *) Usage esac
|
二、工具
RealServer上面提供可以监听固定端口,并接受客户端从TCP连接发送过来的数据的TCP Server服务,将接收到的数据打印到屏幕,并回复当前节点信息给客户端,让客户端能够区分具体的服务是由哪个RealServer提供的。
package com; import java.net.ServerSocket; import java.net.Socket; import java.io.IOException; publicclass Server {
publicstaticvoid main(String[] args) throws IOException {
if (args.length < 1) {
System.out.println("arguments error!\nusage: java -jar tcpser.jar server port");
System.exit(0); } int serverport = Integer.parseInt(args[0]); System.out.println("==============TCP SERVER==============");
ServerSocket server = null; try {
server = new ServerSocket(serverport); System.out.println("Listening Port is " + server.getLocalPort() + "...");
while (true) {
Socket connectedCli = server.accept(); System.out.println("a new client: " + connectedCli.getInetAddress() + ":" + connectedCli.getPort());
new DataProcesser(connectedCli).start(); } } catch (Exception e) {
e.printStackTrace(); } finally {
if (server != null) {
server.close(); } } } } package com; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; publicclass DataProcesser extends Thread {
private Socket cli; public DataProcesser(Socket clientsocket) {
cli = clientsocket; } @Override publicvoid run() {
BufferedReader reader = null; BufferedWriter writer = null; try {
reader = new BufferedReader(new InputStreamReader(cli.getInputStream())); writer = new BufferedWriter(new OutputStreamWriter(cli.getOutputStream())); while (true) {
String receivedString = reader.readLine(); if (receivedString != null) {
System.out.println(cli.getInetAddress() + ":" + cli.getPort() + " " + receivedString); String hostname = InetAddress.getLocalHost().getHostName(); writer.write("it's from the host: " + hostname);
writer.write("\n");
writer.flush(); } if ("shutdown".equals(receivedString))
{
break; } } } catch (Exception e) {
e.printStackTrace(); } finally {
if (reader != null) {
try {
reader.close(); } catch (Exception e2) {
e2.printStackTrace(); } } if (cli != null) {
try {
cli.close(); } catch (Exception e2) {
e2.printStackTrace(); } } } } }
|
root@ceph1:~# java -jar server.jar 2100 ==============TCP SERVER============== Listening Port is 2100... a new client: /172.16.0.100:49314 a new client: /172.16.0.100:49316
|
客户端工具:
客户端工具直接使用开源的sockettest工具:http://sourceforge.net/projects/sockettest/
三、验证RealServer的一种安全退出机制
当IPVS正在接受业务时,IPVS将请求按照指定的规则分发给两个节点。当需要重启某一个业务节点时,会存在两个问题:1、正在执行的业务会被中断,如:TCP上面正在做数据交互会中断;2、如何确保不再有新的业务下发到需要重启的节点上面,如果采用LVS服务器将业务节点踢出,那么也会中断已经接入的请求。
其中问题1,一般来说需要服务本身去做判断,判断业务全部完成后,再做下电重启等处理。
对于问题2,需要寻求一种安全的移除业务节点的方案。既不能影响已经接入点业务请求,又不能让新的业务再下发到该节点上面。考虑使用带权重的轮询方式,将某个业务节点的权重设置为0,这样该节点就不会再有业务。但是节点并没有从lvs的配置中删除掉。因此已有的业务不会受影响。
结合客户端工具,和服务端的长连接支持方式,最终很轻松即可验证上述方案,验证步骤:
2、配置RealServer,启动TCP Server服务;
3、在Windows上面使用sockettest工具分别与LVS的VIP建立长连接;
|
ipvsadm -e -t 172.16.0.113:2100 -r 172.16.0.114:2100 -w 0
|
5、观察之前已经跟114节点建立的连接是否断开,是否还能继续发送和接受数据。验证结果为:连接不会断开,该连接还能继续处理数据。
6、DirectServer接受到的新的请求,是否还是会转给114节点。验证结果为:0权重生效,所有的业务都只发送到另外一个业务节点上面。
7、到此整个验证结束。
一些LVS实验配置、工具和方案的更多相关文章
- LVS/DR 配置
LVS/DR 配置 实验环境 三台主机:Linux Centos 6.4 32位 调度器Director:192.168.1.160(公网IP).192.168.1.100(VIP) HTTP真实服务 ...
- LVS/NAT 配置
LVS/NAT 配置 实验环境 三台主机:Linux Centos 6.4 32位 调度器Director:192.168.1.160(内网IP).192.168.2.20(公网IP) HTTP真实服 ...
- 物联网框架ServerSuperIO(SSIO)更新、以及增加宿主程序和配置工具,详细介绍
一.更新内容 1.修改*Server类,以及承继关系.2.增加IRunDevice的IServerProvider接口继承.3.修复增加COM设备驱动可能造成的异常.4.修复网络发送数据可能引发的异常 ...
- 安装LVS安装LVS和配置LVS的工作比较繁杂
安装LVS安装LVS和配置LVS的工作比较繁杂,读者在配置的过程中需要非常细心和耐心.在本节我们将对其进行详细地介绍.主要包括如下几个核心步骤:1.获取支持LVS的内核源代码如果读者需要使用LVS,需 ...
- centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课
centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB ...
- CentOS 7网络配置工具
CentOS 7网络配置工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网卡命名机制 CentOS 6之前,网络接口使用连续号码命名:eth0.eth1等,当增加或删除网卡 ...
- lvs+keepalived做高可用方案1
本文我们主要讲解的是LVS通过keepalived来实现负载均衡和高可用,而不是我们第三篇文章介绍的通过手动的方式来进行配置.通过脚本的方式来显示RS节点的健康检查和LVS的故障切换.此文会通过一个实 ...
- CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)
前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...
- SharePoint 2013 表单认证使用ASP.Net配置工具添加用户
前 言 上面一篇博客,我们了解到如何为SharePoint 2013配置表单身份认证,但是添加用户是一个麻烦事儿:其实,我们还可以用Asp.Net的配置工具,为SharePoint 2013添加表单用 ...
随机推荐
- macOS Sierra 10.12.6 安装u盘制作
一.准备工作: 准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过程会抹掉 U 盘全部数据) 从这里下载苹果官方 OS X Yosemite 正式版的安装程序 (可选 AppS ...
- CentOS6 安装Sendmail + Dovecot + Roundcubemail
前言 本文是继CentOS6 安装Sendmail + Dovecot + Squirrelmail 关于邮箱服务器配置的第二篇文章,因为关于使用Sendmail进行相关配置的文章.资料等太老,而且资 ...
- 排座椅 2008 NOIP 普及组 第二题
题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学 ...
- Vue过渡效果之CSS过渡
前面的话 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.本文将从CSS过渡transition.CSS动画animation及配合使用第三方CSS动画库(如animate. ...
- 深入理解Java 虚拟机阅读笔记(一)
1.程序计数器- 占用空间:较小 作用:字节码行号指示器 作用详情:指示指令执行,如(字节码的执行,分支,循环,跳转,异常处理,线程恢复) 特点:线程私有(每个计数器独立计算,上下文相互独立). 2. ...
- javaweb 登陆注册页面
视图的数据修改,表中也修改引用工具类用<%@ page import=""%> <%@ page import="java.util.Date" ...
- 【剑指offer】丑数
把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. leetcode上也 ...
- 剑指OFFER——正则表达式匹配
请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字 ...
- 第48篇 说说.Net与Java中的字符串
原文地址:http://blog.laofu.online/2017/08/18/String-In-dotnet-Java/ Java字符串碰到的问题 在写Java程序碰到一个问题,而正是这个问题引 ...
- Bash中的测试——test, [], [[]], (())
转自: http://blog.csdn.net/u013961718 https://www.shiyanlou.com/courses/running test 和 [ ] test是一条内置命令 ...