Linux集群--简单实现LVS-DNAT及LVS-DR

来源:互联网 发布:瓦尔登湖 知乎 译本 编辑:程序博客网 时间:2024/05/29 07:58

LVS-DNAT

 

工作原理:

在数据包进入本机内部之前,就改变它的目的地址(需要在内核实现)

 

LVS的工作机制类似iptables,一部分工作在用户空间(ipvsadm),一部分工作在内核空间

安装ipvsadm软件就足以实现LVS的功能

 

使用ipvsadm,早期需要重新编译内核,不过现在版本的redhat默认直接做进内核

# 查看内核是否含有ipvs

grep –I –c 5 ipvs /boot/config-‘uname -r’ 

 

 

ipvsadm命令的使用:

ipvsadm功能

1:定义集群服务

   2:定义真正的REALSERVER

   3:查看定义的信息

  

1.定义集群服务

ipvsadm

-t        基于tcp的集群服务

-u        基于udp

-f        基于firewall的集群服务,防火墙的类型

-A       添加一个新集群

-E       修改一个集群

-s        指定算法 默认 wlc

         -D               删除一个集群

         -g|i|m     gateway|internet|net  DR|TUN|DNAT模型

         -w        权重

         -C        清空规则

         -S               保存规则到某个文件

   -R               从某个文件恢复规则

         -L|l       查看

        -n --numeric    数字方式显示地址

                      --stats        显示统计的数据信息(statistics的简写)

          --rate         显示速率信息

         -Z        清空计数器

 

添加/删除director端

ipvsadm -A| -E -t |-u VIP:port -s 

ipvsadm -D -t|-u VIP:port

 

添加/删除realserver端

ipvsadm -a |-e -t|-u VIP:port -r REALSERVER[-g|-i|-m] [-w weight]

ipvsadm -d -t|-u VIP:port -r READSERVER

 

 

配置安装LVS

1.安装OS

2.后方安装apache

3.设置默认路由

4.安装lvs

5.配置LVS,定义好规则

6.做测试

 

 

1.两个apache作为realserver 只提供静态页面

2.Directory打开转发功能

3.两个realserver处于同一个网段

 

准备:

1)      3台干净的虚拟机:RS1 RS2  Director (需要加一块网卡)

2) 配置各自的好yum源

 

一:配置好地址,安装软件

realserver端:

ifconfig eth0 10.0.0.11/8

route add default gw 10.0.0.1/8

yum install httpd php php-mysql mysqlmysql-server php-mbstring -y

# 测试网页是否显示

vim /var/www/html/index.html

realserver1

service httpd start

elinks http://10.0.0.11

 

directory端:

ifconifg eth0 10.0.0.1/8

yum install ipvsadm

 

 

# 打开ipforward

echo 1 > /proc/sys/net/ipv4/ip_forward

 

#添加director

ipvsadm -A -t 172.16.14.1:80 -s rr

# 查看集群服务

ipvsadm -L -n     

#添加realserver

ipvsadm -a -t 172.16.14.1:80 -r 10.0.0.11-m

ipvsadm -a -t 172.16.14.1:80 -r 10.0.0.12-m

ipvsadm -L -n

 

集群已经构建好了。。。。用浏览器测试下

 

# 压力测试,十个并发连接,发起10000次

ab -c 10 -n 10000 http://172.16.14.1/index.html

# 查看结果

ipvsadm -Ln 

# 使用加权最少连接

ipvsadm -E -t 172.16.14.1:80 -s wlc

# 修改权重

ipvsadm -e -t 172.16.14.1:80 -r 10.0.0.11-m -w 3

 

# 压力测试,十个并发连接,发起10000次

ab -c 10 -n 10000http://172.16.14.1/index.html

 

# 换别的算法来测试,看看效果  单引号

watch -n 1 ‘ipvsadm -L -n’

 

# 保存ipvsadm 结果,否则开机就没有了

# 对于redhat

service ipvsadm save

chkconfig ipvsadm on

# 或者

ipvsadm -S > /etc/sysconfig/ipvsadm

##########建议自己写脚本实现,save的功能,最好带startstop restart

 


 



 

==========================================================================

LVS-DR

 

工作原理

通过设置内核参数,禁止RS直接响应用户请求,既将RS都隔离起来,只允许它们响应DR转发过来的请求。


 

使用LVS-DR 前提:

内核有 arp_announce 和 arp_ignore

arp_annouce 定义通过哪个地址向别人通告本地MAC-ip对应信息所定义的限制级别

 

0  表示响应任意本地地址,任何接口(IP地址属于内核而不是网卡)

1  尽可能的避免用和来源主机的IP地址非同一个网络的地址响应它

2  总是用本地的最佳地址给予响应(同一个网段)

 

arp_ignore    定义响应方式和类型

0  无论地址放在任何地方都响应

1  只有在所请求的地址和请求所进来的接口一致(既进来的接口和请求的地址是同一个网段)的时候才响应

 

 

想想一下 arp_ignore=1  arg_annouce=2

 

 

服务器拒绝响应2.2

 

解决数据进入:

为了避免RS直接响应,给服务器的lo:0设置VIP地址,给本地网卡设置成CIP,这样RS就不会直接响应了,隐藏了RS

解决数据出去:

而默认情况下,Linux设置数据包从哪块网卡出去,源地址设为该网卡地址,通过添加一条特殊路由信息,如果目标地址是lo的VIP地址,那么出去的时候源地址设置为lo的地址。

路由信息的原理:

添加一条主机路由,将VIP的地址自己设置成一个网段,既子网掩码为255.255.255.255,这样VIP出去的时候没有比VIP更优的了,就成为最佳IP

 

 

相关网络规划如下:

 

需要配置:

1.Lo设为VIP

2.修改内核参数

3.添加特殊路由

 

 

配置LVS-DR须注意:

1.设置网卡模式为桥接

2.RIP地址不一定必须是公网地址

 

 

一、设置网卡

Director端

1.DIP配置在接口上,VIP要配置在接口别名上

# director ,一步到位,否则需要重启网络服务

ifconfig eth0:0 172.16.14.1 broadcast172.16.14.1 netmask 255.255.255.255 up          # VIP

ifconfig eth0 172.16.14.10      # DIP

 

VIP应该设置在别名地址上,DIP设置在静态地址上,所有VIP设置在eth0:0

 

 

RS端

DIP 要配置在接口上,VIP要配置在lo的别名上

 

ifconfig eth0 172.16.14.11    # RIP

 

# 配置内核参数,禁止响应对VIP的ARP广播请求

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/all/arp_announce

echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

 

# 此时设置VIP,就不会和director冲突

# 255.255.255.255 自闭

# VIP 只向自己广播

ifconfig lo:0 172.16.14.1 broadcast172.16.14.1 netmask 255.255.255.255 up

 

# 增加路由信息,所有出去的信息都以dev的信息为准

route add -host 172.16.14.1 dev lo:0

route -n

 

所有的RS都要设置

 

二.配置ipvsadm

ipvsadm -C    # 去掉上次的

ipvsadm -A -t 172.16.14.1:80 -s wlc

ipvsadm -a -t 172.16.14.1:80 -r172.16.14.11 -g w 2

ipvsadm -a -t 172.16.14.1:80 -r172.16.14.12 -g w 4

ipvsadm -L -n

 

 

 

 

 

原创粉丝点击