zjhqlmzldx 2011-09-12
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
前言:在涉及到对外项目,经手许多小中型网站的架构,F5、LVS及Nginx都比较多,我想一种比较通俗易懂的语气跟大家说明下何谓负载均衡,何谓Linux集群,帮助大家走出这个误区,真正意义上来理解它们。