LVS-NAThtml
1、架构平台环境linux
系统平台:CentOS 6.5 64bit vmw10.0 lvs01(RS),lvs02(RS),lvs03(Director) 相关服务和专用名词定义 Director:负责调度集群的主机;也简称为调度器、分发器 VIP:Virtual IP 向外提供服务的IP;一般此IP绑定域名 DIP:与内部主机RIP通讯的IP,在Director主机上 RIP:RealServer IP;内部真正提供服务的主机 CIP:客户端IP
2、LVS-NAT架构算法
3、LVS-NAT模型实现负载均衡的工做方式bash
NAT模型其实就是经过网络地址转换来实现负载均衡的,它的工做方式几乎跟DNAT如出一辙的,目前的DNAT只能转发到一个目标地址,早期的DNAT是能够将请求转发到多个目标的,在LVS出现以后就将此功能从DNAT中去掉了,下面来讲说NAT模型的工做方式或者说NAT模型是怎么实现负载均衡的,根据上图,
1.用户请求VIP(也能够说是CIP请求VIP)
2,Director Server 收到用户的请求后,发现源地址为CIP请求的目标地址为VIP,那么Director Server会认为用户请求的是一个集群服务,那么Director Server 会根据此前设定好的调度算法将用户请求负载给某台Real Server ;假如说此时Director Server 根据调度算法的结果会将请求分摊到RealServer1上去,那么Director Server 会将用户的请求报文中的目标地址,从原来的VIP改成RealServer1的IP,而后再转发给RealServer1
3,此时RealServer1收到一个源地址为CIP目标地址为本身的请求,那么RealServer1处理好请求后会将一个源地址为本身目标地址为CIP的数据包经过Director Server 发出去,
4.当Driector Server收到一个源地址为RealServer1 的IP 目标地址为CIP的数据包,此时Driector Server 会将源地址修改成VIP,而后再将数据包发送给用户。服务器
4、LVS-NAT的性能瓶颈网络
在LVS/NAT的集群系统中,请求和响应的数据报文都须要经过负载调度器(Director),当真实服务器(RealServer)的数目在10台和20台之间时,负载调度器(Director)将成为整个集群系统的新瓶颈。大多数Internet服务都有这样的特色:请求报文较短而响应报文每每包含大量的数据。若是能将请求和响应分开处理,即在负载调度器(Director)中只负责调度请求而响应直接(RealServer)返回给客户,将极大地提升整个集群系统的吞吐量。架构
5、部署环境负载均衡
一、准备工做框架
(1)关闭全部测试主机的iptables和selinux服务 setenforce 0 service iptables stop && chkconfig iptables off (2)HA中全部节点尽量保证时间是一致的,方法是时间同步+任务计划同步时间; 注意:对于LB来讲时间的影响不是很大,可是对于HP来讲各节点之间的时间误差不该该超出一秒钟: ntpdate -u asia.pool.ntp.org
二、拓扑图地址规划curl
LVS Director 机器: 公网地址:vip 主机名:lvs03 网卡:eth0 vip地址:10.19.166.169 网络链接方式:vmw-bridge 私网地址:dip dip地址:10.0.0.1/24 网络链接方式:vmw-(not use[VMnet3]) RealServer机器: 私网地址:rip1 主机名:lvs01 rip地址:10.0.0.8/24 网络链接方式:vmw-(not use[VMnet3]) 私网地址:rip2 主机名:lvs01 rip地址:10.0.0.9/24 网络链接方式:vmw-(not use[VMnet3])
三、RealServer上部署httpd服务并测试
安装Apache httpd 建立测试页面,并启动httpd服务 # yum install httpd -y # /etc/init.d/httpd start [root@lvs01]# echo "<h1>Node1.ssc.com</h1>" > /var/www/html/index.html [root@lvs02]# echo "<h1>Node2</h1>" > /var/www/html/index.html 测试httpd服务器是否能正常打开页面 [root@lvs01]# curl http://10.0.0.8[root@lvs02]# curl http://10.0.0.9
四、在Director上部署ipvs服务并测试
(1)肯定本机ip_vs模块是否加载,也就是是否支持lvs,2.4.2后都支持了;而后安装ipvsadm 用户操做命令 [root@lvs03 ~]# grep -i "ip_vs" /boot/config-2.6.32-431.el6.x86_64 CONFIG_IP_VS=m CONFIG_IP_VS_IPV6=y # CONFIG_IP_VS_DEBUG is not set CONFIG_IP_VS_TAB_BITS=12 CONFIG_IP_VS_PROTO_TCP=y #IPVS支持哪些集群服务 CONFIG_IP_VS_PROTO_UDP=y CONFIG_IP_VS_PROTO_AH_ESP=y CONFIG_IP_VS_PROTO_ESP=y CONFIG_IP_VS_PROTO_AH=y CONFIG_IP_VS_PROTO_SCTP=y CONFIG_IP_VS_RR=m #IPVS支持的十种调度算法 CONFIG_IP_VS_WRR=m CONFIG_IP_VS_LC=m CONFIG_IP_VS_WLC=m CONFIG_IP_VS_LBLC=m CONFIG_IP_VS_LBLCR=m CONFIG_IP_VS_DH=m CONFIG_IP_VS_SH=m CONFIG_IP_VS_SED=m CONFIG_IP_VS_NQ=m CONFIG_IP_VS_FTP=m #支持代理FTP协议的 CONFIG_IP_VS_PE_SIP=m (2)安装 ipvsadm [root@lvs03 ~]# yum install ipvsadm -y (3)添加集群服务 [root@lvs03 ~]# ipvsadm -A -t 10.19.166.169:80 -s rr #定义一个集群服务 [root@lvs03 ~]# ipvsadm -a -t 10.19.166.169:80 -r 10.0.0.8 -m #添加RealServer并指派调度 [root@lvs03 ~]# ipvsadm -a -t 10.19.166.169:80 -r 10.0.0.9 -m #添加RealServer并指派调度 [root@lvs03 ~]# ipvsadm -L -n #查看IPVS定义的规则列表 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.19.166.169:80 rr -> 10.0.0.8:80 Masq 2 0 0 -> 10.0.0.9:80 Masq 1 0 0 [root@lvs03 ~]# cat /proc/sys/net/ipv4/ip_forward #查看Linux是否开启路由转发功能 0 [root@lvs03 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward #启动Linux的路由转发功能 [root@lvs03 ~]# cat /proc/sys/net/ipv4/ip_forward 1
(4)测试访问http页面
(5)永久保存LVS规则并恢复 第一种方法: [root@lvs03 ~]# service ipvsadm save ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [肯定] 第二种方法: [root@lvs03 ~]# ipvsadm -S > /etc/sysconfig/ipvsadm.s1 模拟清空ipvsadm规则来恢复 [root@lvs03 ~]# ipvsadm -C [root@lvs03 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@lvs03 ~]# ipvsadm -R < /etc/sysconfig/ipvsadm.s1 [root@lvs03 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.19.166.169:80 wrr -> 10.0.0.8:80 Masq 3 0 0 -> 10.0.0.9:80 Masq 1 0 0
ipvsadm用法
其实LVS的自己跟iptables很类似,并且连命令的使用格式都很类似,其实LVS是根据iptables的框架开发的,那么LVS的自己分红了两个部分,第一部分是工做在内核空间的一个IPVS的模块,其实LVS的功能都是IPVS模块实现的,,第二部分是工做在用户空间的一个用来定义集群服务的一个工具ipvsadm, 这个工具的主要做用是将管理员定义的集群服务列表传送给工做在内核空间中的IPVS模块,下面来简单的介绍下ipvsadm命令的用法
ipvsadm组件定义规则的格式: 1.定义集群服务格式: (1).添加集群服务: ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] -A: 表示添加一个新的集群服务 -E: 编辑一个集群服务 -t: 表示tcp协议 -u: 表示udp协议 -f: 表示firewall-Mark,防火墙标记 service-address: 集群服务的IP地址,即VIP -s 指定调度算法 -p 持久链接时长,如#ipvsadm -Lcn ,查看持久链接状态 -M 定义掩码 ipvsadm -D -t|u|f service-address 删除一个集群服务 ipvsadm -C 清空全部的规则 ipvsadm -R 从新载入规则 ipvsadm -S [-n] 保存规则 2.向集群服务添加RealServer规则: (1).添加RealServer规则 ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] -a 添加一个新的realserver规则 -e 编辑realserver规则 -t tcp协议 -u udp协议 -f firewall-Mark,防火墙标记 service-address realserver的IP地址 -g 表示定义为LVS-DR模型 -i 表示定义为LVS-TUN模型 -m 表示定义为LVS-NAT模型 -w 定义权重,后面跟具体的权值 ipvsadm -d -t|u|f service-address -r server-address --删除一个realserver ipvsadm -L|l [options] --查看定义的规则 如:#ipvsadm -L -n ipvsadm -Z [-t|u|f service-address] --清空计数器
lvs的10种调度算法
LVS Scheduling Method LVS的调度方法: 1.Fixed Scheduling Method 静态调服方法 (1).RR 轮询 (2).WRR 加权轮询 (3).DH 目标地址hash (4).SH 源地址hash 2.Dynamic Scheduling Method 动态调服方法 (1).LC 最少链接 (2).WLC 加权最少链接 (3).SED 最少指望延迟 (4).NQ 从不排队调度方法 (5).LBLC 基于本地的最少链接 (6).LBLCR 带复制的基于本地的最少链接
###########################################################
Real Server httpd 安装脚本
#!/bin/bash #install httpd #2015/03/23 i='httpd' if [ `rpm -qa | grep $i | wc -l` -eq 0 ] then echo "$i is not installed" sleep 2 echo "### yum httpd ###" sleep 2 echo `yum install -y httpd` else echo "i was installed" fi sleep 2 echo `/etc/init.d/httpd start` sleep 3 echo "### insert RS1 ###" echo `cat /etc/sysconfig/network` > /var/www/html/index.html sleep 3 echo `curl http://localhost`
###########################################################
Director 安装脚本
#!/bin/bash # Director install # 2015/03/23 vip=10.19.166.169 dip=10.0.0.1 rip1=10.0.0.8 rip2=10.0.0.9 case "$1" in start) echo `ifconfig eth1 $dip/24 up` echo "ipvsadm install" sleep 3 echo `yum install ipvsadm -y` sleep 4 echo `echo 1 > /proc/sys/net/ipv4/ip_forward` sleep 1 echo `ipvsadm -A -t $vip:80 -s wrr` echo `ipvsadm -a -t $vip:80 -r $rip1 -m` echo `ipvsadm -a -t $vip:80 -r $rip2 -m` ;; stop) echo `echo 0 > /proc/sys/net/ipv4/ip_forward` sleep 1 echo `ipvsadm -C` sleep 1 echo `ifconfig eth1 down` ;; status) if [ `ipvsadm -L -n | wc -l` -eq 6 ];then echo "ipvsadm is running...." else echo "ipvsadm is stopped...." fi ;; * ) echo "Usage: $0 {start|stop}" ;; esac