首页 > 代码库 > lvs nat搭建

lvs nat搭建

    生产环境网站离不开负载均衡、高可用性这样的字眼,不用解释便知道其中的意义与重要性。高可用性可以用keepalived实现,负载均衡可以用lvs或者nginx实现,二者的区别是lvs基于网络层,nginx基于应用层或者基于浏览器。lvs有3中实现方式,分别是nat、dr、tunel(隧道),三者大体相似,这里介绍nat模式,本文也没用介绍keepalived,以后有时间再写。

    实验环境:使用vmware虚拟出4台linux,有一台作为client(rhel4.6),其中两台作为realserver(rhel5.6),另外一台作为lvs-nat(rhel5.6),各机器模拟信息如下图:

wKioL1N513aDCXKBACo_koE7gb8411.jpg

vmware里的各虚机网卡均采用桥接模式,lvs主机另添加了一块网卡eth1,共用两块网卡。

    实验过程:在实验前,统一把各主机selinux和iptables关掉,lvs软件也就是这里安装的ipvsadm软件。

    1.lvs配置:

    先静态配置两个ip:eth0、eth1: 

LVS# cat /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=static

IPADDR=192.168.65.200

NETWORK=192.168.65.0

NETMASK=255.255.255.0

BROADCAST=192.168.65.255

HWADDR=00:0C:29:03:54:66

ONBOOT=yes


LVS# cat /etc/sysconfig/network-scripts/ifcfg-eth1

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth1

BOOTPROTO=static

IPADDR=192.168.200.200

NETWORK=192.168.200.0

NETMASK=255.255.255.0

BROADCAST=192.168.200.255

ONBOOT=yes

HWADDR=00:0c:29:03:54:70


LVS#mount /dev/cdrom /media

LVS#cd /media/Cluster

LVS# rpm -ivh ipvsadm-1.24-12.el5.i386.rpm

到这里,ipvsadm功能可以使用了,下面指明lvs主机与realserver主机:

LVS# ipvsadm -A -t 192.168.200.200:80 -s rr   ///增加一台新的虚拟服务器,tcp地址为192.168.200.200,指明端口是web,使用调度算法是rr

LVS# ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.210 -m   ///增加一个realserver:192.168.200.210,lvs的模式为nat

LVS# ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.220 -m   ///如果有很多台realserver,可以一次往下添加

......

LVS# ipvsadm -ln     ///检验刚刚添加的配置是否正确

LVS# vi /etc/sysctl.conf

    net.ipv4.ip_forward = 1   ///将0改为1,开启ip转发功能,因为这里的lvs相当于分离器,将收到的请求转发给realserver

LVS# /sbin/sysctl -p   ///打印上一步的修改,检查有无错误

到这里,lvs机器基本信息配置完成,lvs不需要配置web(apache)。

    2.配置realserver RS1:

首先将ip地址eth0写成静态:

RS1# cat /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=static

IPADDR=192.168.200.210

NETWORK=192.168.200.0

NETMASK=255.255.255.0

BROADCAST=192.168.200.255

GATEWAY=192.168.200.200

HWADDR=00:0C:29:F8:73:52

ONBOOT=yes


RS1# yum install httpd

RS1# vi /var/www/html/index.html

    RS1-----IP:192.168.200.210

RS1#service httpd restart


    3.配置realserver RS2:

RS2# cat /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=static

IPADDR=192.168.200.220

NETWORK=192.168.200.0

NETMASK=255.255.255.0

BROADCAST=192.168.200.255

GATEWAY=192.168.200.200

HWADDR=00:0C:29:05:BB:BE

ONBOOT=yes


RS2# yum install httpd

RS2# vi /var/www/html/index.html

    RS2---------ip:192.168.200.220

RS2# service httpd restart


    4.客户端的配置:

client# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

IPADDR=192.168.65.100

NETWORK=192.168.65.0

NETMASK=255.255.255.0

BROADCASTL=192.168.65.255

GATEWAY=192.168.65.200

HWADDR=00:0C:29:76:ED:97

ONBOOT=yes

TYPE=Ethernet

接下来再客户机上面执行测试操作:

在命令符终端上面验证:

wKioL1N54X3SuXE4AAF2koq3liI132.jpg

在浏览器上面验证:

wKiom1N54jTCz0VWAAQe8FQ4OOE382.jpg

在客户机上面验证表明lvs功能发挥成功。

下面在lvs机器上面查看实验过程:

wKioL1N54rmDWJ_PAAUWUwiBOEQ246.jpg

到这里,种种迹象表明lvs的nat模式搭建成功。下面介绍相关原理:

1,virtual-service-address:是指虚拟服务器的ip 地址

2,real-service-address:是指真实服务器的ip 地址

3,scheduler:调度方法

(lna@networksbase.com 翻译 ipvsadm v1.21 2004 年4 月)

ipvsadm 的用法和格式如下:

ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p

[timeout]] [-M netmask]

ipvsadm -D -t|u|f virtual-service-address

ipvsadm -C

ipvsadm -R

ipvsadm -S [-n]

ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port

[-g|i|m] [-w weight]

ipvsadm -d -t|u|f service-address -r server-address

ipvsadm -L|l [options]

ipvsadm -Z [-t|u|f service-address]

ipvsadm --set tcp tcpfin udp

ipvsadm --start-daemon state [--mcast-interface interface]

ipvsadm --stop-daemon

ipvsadm -h

命令选项解释:

有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可

以。

-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也

就是增加一台新的虚拟服务器。

-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。

-C --clear 清除内核虚拟服务器表中的所有记录。

-R --restore 恢复虚拟服务器规则

-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式

-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器

记录。也就是在一个虚拟服务器中增加一台新的真实服务器

-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录

-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录

-L|-l --list 显示内核虚拟服务器表

-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)

--set tcp tcpfin udp 设置连接超时值

--start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说

明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的

VRRP 功能。

--stop-daemon 停止同步守护进程

-h --help 显示帮助信息

其他的选项:

-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务

[vip:port] or [real-server-ip:port]

-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务

[vip:port] or [real-server-ip:port]

-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。

-s --scheduler scheduler 使用的调度算法,有这样几个选项

rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,

默认的调度算法是: wlc.

-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客

户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。

-M --netmask netmask persistent granularity mask

-r --real-server server-address 真实的服务器[Real-Server:port]

-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)

-i --ipip 指定LVS 的工作模式为隧道模式

-m --masquerading 指定LVS 的工作模式为NAT 模式

-w --weight weight 真实服务器的权值

--mcast-interface interface 指定组播的同步接口

-c --connection 显示LVS 目前的连接 如:ipvsadm -L -c

--timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout

--daemon 显示同步守护进程状态

--stats 显示统计信息

--rate 显示速率信息

--sort 对虚拟服务器和真实服务器排序输出

--numeric -n 输出IP 地址和端口的数字形式



算法:

rr一人一个,缺点是当群中有的机器性能好,有的性能坏,坏的扛不住

wrr基于权重的rr算法,缺点是新加的RS不会分担旧RS的负载。

     如RS1   负载100

       RS2   负载100

       RS3(new) 1    RS3永远比旧RS少负担100

lc 最少链接  新加入的RS会主动承担负载,lvs会将新的请求全部分给新RS,直到新RS的负载和旧的大致相等的时候在分发

wlc基于权重的lc

lblc 尽可能让同一个访问分到同一个RS上,CDN常用,可以提高命中

sh 基于源IP的hash算法,保证同一个源IP的请求分到同一台RS上。主要用在会话连接中,如输入账号密码,如果用rr,两次请求就会切换到不同的RS上,就会需要重新输入账号密码,除非用cookice。

dh基于目标IP的hash算法


本文出自 “个人感受” 博客,谢绝转载!