17、RedHat5 LB集群(LVS)-NAT模式

LB集群(LVS)-NAT模式

实验目的:

了解LB集群NAT模式的理论和配置

 

实验理论:

LB负载均衡集群的诞生:

我们都知道,一台服务器是有着并发指数的(同时访问的数量),在淘宝双11节日的那一天,会有无数的客户来访问淘宝网站,显然一台服务器是接收不了如此多的客户,为了避免丧失大量的客户,可以使用提高服务器的并发处理的技术来解决,这种技术叫负载均衡集群(LB)

 

LB集群分为硬件和软件:

基于硬件层面:F5(企业用的最多)、A10(思杰)

基于软件层面:Lvs(linux VM system国人开发的)、nginx、Haproxy(红帽7主推)

Lvs基于TCP-UDP第四层,nginx和Haproxy基于TCP-UDP第7层

 

LB集群类型:

LVS-NAT

LVS-DR

LVS-TUN

 

我们现在使用的是LVS这款软件来做负载均衡

LVS-NAT模式:(小型公司内部来的最快)

 

Cip(客户端IP地址)  Vip(公网网卡)  Dip(私有网卡) 

RIP1:192.168.0.11  RIP2:192.168.0.12  RIP3:192.168.0.13

Director(调度器):接收来自客户端的请求,然后通过算法把请求转发给Realserver1、2、3,Realserver接收到了请求后,会把信息转发给Director,Director再把信息传给客户端

 

注意一:Ipvsadm是一个调用IPVS模块的一款工具,和iptables一个概念

使用LVS软件要看是否有IPVS模块,红帽系统自动安装了IPVS模块

如果是其它操作系统,你需要把IPVS编译到模块中去才能使用LVS功能

注意二:玩LVS,要把iptables给关掉,两者不能共存,如果非要共存,那就需要在Director的前面(路由器)做一个防火墙

 

注意三:集群节点(Realserver)跟Director必须在同一个IP网络中(私有IP网络),改网络仅用于各集群节点间的通讯

 

注意四:Director位于client和realserver之间,并负责处理进出的所有通信,realserver必须将网关指向Dip,Director支持端口映射,realserver可以使用任意OS,

较大规模应用场景中,Director易成为系统瓶颈

 

实验步骤:

RealServer1

服务器:关闭防火墙,安装httpd服务器,配置好IP地址192.168.0.11,指定网关192.168.0.100

[root@localhost~]#iptables    -F

[root@localhost~]#service  iptables  save

Savingfirewallrulesto/etc/sysconfig/iptables:[OK]

[root@localhost~]#iptables  -L

ChainINPUT(policyACCEPT)

targetprotoptsourcedestination

 

ChainFORWARD(policyACCEPT)

targetprotoptsourcedestination

 

ChainOUTPUT(policyACCEPT)

targetprotoptsourcedestination

 

ChainRH-Firewall-1-INPUT(0references)

targetprotoptsourcedestination

 

[root@localhost~]#cat    /etc/yum.repos.d/boy.repo

[base]

name=RedHat

baseurl=file:///mnt/Server

enabled=1

gpgcheck=0

 

[Cluster]

name=RedHat

baseurl=file:///mnt/Cluster

enabled=1

gpgcheck=0

[root@localhost~]#mount   /dev/cdrom/mnt

mount:blockdevice/dev/cdromiswrite-protected,mountingread-only

[root@localhost~]#yum   -y   install httpd

[root@localhost~]#cd  /var/www/html

[root@localhosthtml]#vim   index.html

[root@localhosthtml]#cat  index.html

Rsa1.example.com

[root@localhosthtml]#service   httpd  restart

Stoppinghttpd:[FAILED]

Startinghttpd:[OK]

[root@localhosthtml]#chkconfig   httpd on

 

[root@localhost~]#cat   /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

HWADDR=00:0c:29:3b:ad:61

ONBOOT=yes

NETMASK=255.255.255.0

IPADDR=192.168.0.11

TYPE=Ethernet

GATEWAY=192.168.0.100

[root@localhosthtml]#service   network  restart

Shuttingdowninterfaceeth0:[OK]

Shuttingdownloopbackinterface:[OK]

Bringinguploopbackinterface:[OK]

Bringingupinterfaceeth0:[OK]

 

 

 

 

 

RealServer2

服务器:关闭防火墙,安装httpd服务器,配置好IP地址192.168.0.12,指定网关192.168.0.100

[root@localhost~]#iptables   -F

[root@localhost~]#service  iptables  save

Savingfirewallrulesto/etc/sysconfig/iptables:[OK]

[root@localhost~]#iptables   -L

ChainINPUT(policyACCEPT)

targetprotoptsourcedestination

 

ChainFORWARD(policyACCEPT)

targetprotoptsourcedestination

 

ChainOUTPUT(policyACCEPT)

targetprotoptsourcedestination

 

ChainRH-Firewall-1-INPUT(0references)

targetprotoptsourcedestination

 

[root@localhost~]#cat   /etc/yum.repos.d/boy.repo

[base]

name=RedHat

baseurl=file:///mnt/Server

enabled=1

gpgcheck=0

 

[Cluster]

name=RedHat

baseurl=file:///mnt/Cluster

enabled=1

gpgcheck=0

[root@localhost~]#mount  /dev/cdrom/mnt

mount:blockdevice/dev/cdromiswrite-protected,mountingread-only

[root@localhost~]#yum   -y   installhttpd

[root@localhost~]#cd  /var/www/html

[root@localhosthtml]#vim   index.html

[root@localhosthtml]#cat  index.html

Rsa2.example.com

[root@localhosthtml]#service  httpd  restart

Stoppinghttpd:[FAILED]

Startinghttpd:[OK]

[root@localhosthtml]#chkconfig  httpd  on

 

[root@localhost~]#cat  /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

HWADDR=00:0c:29:3b:ad:61

ONBOOT=yes

NETMASK=255.255.255.0

IPADDR=192.168.0.12

TYPE=Ethernet

GATEWAY=192.168.0.100

[root@localhosthtml]#service  network restart

Shuttingdowninterfaceeth0:[OK]

Shuttingdownloopbackinterface:[OK]

Bringinguploopbackinterface:[OK]

Bringingupinterfaceeth0:[OK]

 

Director:

配置两个网卡,一个网卡作为公网网卡(192.168.1.156),一个网卡作为私有网卡(192.168.0.100),私有网卡作为Realserver1、2的网关,开启IP转发

关闭防火墙,安装Ipvsadm软件。

[root@localhost~]#iptables   -F

[root@localhost~]#service  iptables   save

Savingfirewallrulesto/etc/sysconfig/iptables:[OK]

[root@localhost~]#iptables  -L

ChainINPUT(policyACCEPT)

targetprotoptsourcedestination

 

ChainFORWARD(policyACCEPT)

targetprotoptsourcedestination

 

ChainOUTPUT(policyACCEPT)

targetprotoptsourcedestination

 

ChainRH-Firewall-1-INPUT(0references)

targetprotoptsourcedestination

 

eth0在Vmnet1上,作为RealServer1和RealServer2的网关,eth1在桥接上

[root@localhost~]#ifconfig

eth0Linkencap:EthernetHWaddr00:0C:29:CA:37:AE

inetaddr:192.168.0.100Bcast:192.168.0.255Mask:255.255.255.0

 

 

eth1Linkencap:EthernetHWaddr00:0C:29:CA:37:B8

inetaddr:192.168.1.156Bcast:192.168.1.255Mask:255.255.255.0

[root@localhost~]#vim  /etc/sysctl.conf开启IP转发让eth0eth1能相互通信

[root@localhost~]#sysctl   -p

net.ipv4.ip_forward=1

net.ipv4.conf.default.rp_filter=1

net.ipv4.conf.default.accept_source_route=0

kernel.sysrq=0

kernel.core_uses_pid=1

net.ipv4.tcp_syncookies=1

kernel.msgmnb=65536

kernel.msgmax=65536

kernel.shmmax=4294967295

kernel.shmall=268435456

 

 

 

 

 

 

 

[root@localhost~]#cat   /etc/yum.repos.d/boy.repo

[base]

name=RedHat

baseurl=file:///mnt/Server

enabled=1

gpgcheck=0

 

[Cluster]

name=RedHat

baseurl=file:///mnt/Cluster

enabled=1

gpgcheck=0

[root@localhost~]#mount  /dev/cdrom/mnt

mount:blockdevice/dev/cdromiswrite-protected,mountingread-only

[root@localhost~]#yum  -y  install  ipvsadm

[root@localhost~]#ipvsadm  -A  -t  192.168.1.156:80  -s   rr

[root@localhost~]#ipvsadm   -a  -t  192.168.1.156:80  -r  192.168.0.11  -m

[root@localhost~]#ipvsadm  -a  -t   192.168.1.156:80   -r  192.168.0.12  -m

当客户端访问请求为192.168.1.156:80时,根据调度算法rr,把请求丢给192.168.0.11还是丢给192.168.0.12.

-s:调度算法  -r:realserver的IP地址  -m:表示NAT模式  -i:表示TUN模式  -g :表示DR模式  -g参数后面要跟 加权参数-w

ipvsadm  -a -t   192.168.1.156:80   -r 192.168.0.12  -g  -m  2

[root@localhost~]#ipvsadm   -L

IPVirtualServerversion1.2.1(size=4096)

ProtLocalAddress:PortSchedulerFlags

->RemoteAddress:PortForwardWeightActiveConnInActConn

TCP192.168.1.156:httprr

->192.168.0.12:httpMasq100

->192.168.0.11:httpMasq100

[root@localhost~]#service  ipvsadm  save

SavingIPVStableto/etc/sysconfig/ipvsadm:[OK]

[root@localhost~]#cat  /etc/sysconfig/ipvsadm

-A-t192.168.1.156:80-srr

-a-t192.168.1.156:80-r192.168.0.12:80-m-w1

-a-t192.168.1.156:80-r192.168.0.11:80-m-w1

 

 

客户端访问:

Director的eth1接口是桥接的,把我的真机当做客户端来访问网页

 

刷新一下

 

 

再刷新一下

 

 

LVS算法类型:

1.静态算法:

rr  轮询:不管后台机器性能的好与坏,将客户端请求轮流、均衡的分配到每一台服务器上

wrr 加权:以权重作为比列进行轮询

sh 源地址:hash  session  affinity,调度算法根据请求的源地址IP,作为散列键(hashkey)从静态分配的算列表中找出相应的服务器,若该服务器是可用的且未超载,就将请求发送到该服务器,否则返回空

dh目标地址:hash调度算法根据请求的目标地址IP,作为散列键(hash key)从静态分配的散列表中找出对应的服务器,若该服务器是可用的且未超载,就将请求发送到该服务器,否则返回空。

2.动态算法:

Lc   最少连接:active*256+inactive,谁小,挑谁

Wlc  加权最少连接: (active*256+inactive)/weight  谁小,挑谁

Sed   最短期望延迟

Nq   永不排队,和Sed一样,不考虑非活动连接状况

Lblc   基于本地的最少连接

Lblcr   基于本地带复制功能的最少连接

默认方法:Wlc

 

 

实验总结:

NAT模式缺点

第一:由于是NAT模式,外界无法访问具体的某一个集群节点,假如说某个集群节点坏了,我们不能远程连接那个坏的节点,不能系统管理集群节点。

第二:由于客户端所有的请求和所有的集群节点发给客户端的信息都会被Director接收,在小规模场景中,没有什么问题,但在大规模场景中,Director是承受不住了,所以在企业中用的最多的LB还是DR模式。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值