37LVS集群.docx

上传人:b****6 文档编号:8937469 上传时间:2023-02-02 格式:DOCX 页数:15 大小:636.45KB
下载 相关 举报
37LVS集群.docx_第1页
第1页 / 共15页
37LVS集群.docx_第2页
第2页 / 共15页
37LVS集群.docx_第3页
第3页 / 共15页
37LVS集群.docx_第4页
第4页 / 共15页
37LVS集群.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

37LVS集群.docx

《37LVS集群.docx》由会员分享,可在线阅读,更多相关《37LVS集群.docx(15页珍藏版)》请在冰豆网上搜索。

37LVS集群.docx

37LVS集群

37_01_Linux集群系列之四——LVSDR详解及配置演示

37_02_Linux集群系列之五——脚本实现LVS后端服务健康状态检查

37_03_Linux集群系列之六——LVS持久连接

第一章:

LVS,DR详解以及配置演示

Ipvs一旦发现是集群的服务,本来数据包到达input之后进入用户空间,不会经过forward链,而是直接到了postrouting链

LVS监听在INPUT链

IPNUT-》postrouting,不经过forward

Ipvsadm:

管理服务:

-A,-E,-D

管理RS:

-a,-e,-d

查看:

-L|-l

-n;--stat,--rate,--timeout,--sort,--daemon

规则管理

-C;-S,-R

CIP/VIP

CIP/VIP

Director:

主管,领导,导演

到达DR后,DR不会修改原有的tcp首部以及ip首部,

也就是:

CIP/VIP都没有动,以及tcp首部端口都没有动

通过封装新的帧首部(源MAC为Director的MAC,目标MAC为挑选出的RS的MAC)完成调度。

RS和DR都有VIP,而请求进入时必须最先发送给DR,所以,在DR类型中,首先通过ARP广播确认DR主机,其他RS主机不响应,这就确定了哪一个是DR主机

但是在linux主机中,IP地址不属于网卡而是属于内核,就是说无论一个linux主机有多少个IP地址,它在接入的各个网络中都会公布它拥有的所有地址,这就给ARP广播的响应制造了困难,所以就需要修改内核参数来保证router发出ARP广播时,DR会响应RS不予响应,这里所说的内核参数分别为:

#arp_announce:

定义arp通知级别;

0:

默认级别,在各个网络中通告本机所含有的所有地址

1:

尽量不在各个网络中通告本机中含有的不属于该网络的地址

//尽可能仅向目标网络通告与其目标网络匹配的地址

2:

不在各个网络中通告本机中含有的不属于该网络的地址

//仅仅将与本地借口匹配的网络地址通告,只通告直连的,

#arp_ignore:

定义arp忽略arp请求或arp通告的级别;

0:

(默认值):

 回应任何网络接口上对任何本地IP地址的arp查询请求 

1:

只回答目标IP地址是来访网络接口本地地址的ARP查询请求 //目标iip相同

2:

只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在p和income借口该网络接口的子网段内 

3:

不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 

4-7:

保留未使用 

8:

不回应所有(本地地址)的arp查询

实现vip解析方法:

一:

在路由器上绑定VIP的mac为director的mac,这样,就直接发送给director

VIP:

MAC(DVIP),前提:

路由设备必须能够操作

二.Arptables,定义arptables规则,即可,在real-server上定义,请求本机的vip,不予响应

三.使用内核参数,arp_ignore,arp_announce,定义而,响应arp和通告arp的参数

一般使用第三种方式,

可以把rip:

eth0,Lo:

vip

有人请求vip地址的时候,real的lo对应vip,会用自己的mac,一定会通过eth0进行响应,

可以这样配置,

//可以配置,从eth0进来的,请求的地址不是eth0对应的地址,不予响应,

Arp_ignore对此,1:

代表目标ip进来的ip即eth0,2:

和1一样,但是必须在同一个网络中

Arp_announce:

向别人告诉自己的,mac和ip,通告级别默认0//尽可能响应或通告

Arp_ignore:

接收到arp请求时的响应级别;默认0

注意:

默认情况下,real-s响应报文的源地址为流出的接口的地址,即eth0,不是lo//添加一条路由即可

VIP一定是公网地址,rip和dip可以是内网地址,r1,r2,r3的vip对外是不可见得,

响应的时候DR可以使用vip响应,然后转发个rip,封装新的MAC首部,源mac是自己的,目标mac是real的

Real返回的时候,VIP和CIP都没有变,使用real自己的mac(eth0)进行返回,路由器需要解析real的mac,解析出来的ip是rip,但是real得ip和client的ip不在同一个网段,这样是出不去的

解决方法:

使用另外一个路由器,或者网关出去

或者:

路由器的黑色接口一定适合VIP是在同一个网段的,而和rip不在同一个网段

Rip的网关是路由器的白色接口

VIP和rip一定不在同一个网段,

Vip和路由器对外的接口都是公网地址,可以对外通信的

实验拓扑:

三台主机,都只需要一个网卡就可以了;三个网卡都在同一个网络中,都是用的是桥接

Rip必须先配置,arp_anounce,和arp_ignore以后才能配置vip

使用setup配置,rs1,rs2,以及director地址,rs1和rs2只配置eth0

配置rs1:

Cd/proc/sys/net/ipv4/conf/

Lsall,目录,lseth0目录,lslo目录

Sysctl-wnet.ipv4.conf.eth0.arp_anounce=2//配置eth0,只通告属于本网络的地址

Sysctl-wnet.ipv4.conf.all.arp_anounce=2

Echo1>/proc/sys/net/ipv4/conf/all/arp_ignore//目标接口必须和进来的接口相同

Echo1>/proc/sys/net/ipv4/conf/eth0/arp_ignore

Ifconfiglo:

0172.16.100.1

使用window主机ping172.16.100.1能够ping通,arp-a//查看对应mac地址//只有director响应,

配置rs2:

Echo2>/proc/sys/net/ipv4/conf/all/arp_announce

Echo2>/proc/sys/net/ipv4/conf/eth0/arp_announce

Echo1>/proc/sys/net/ipv4/conf/ath0arp_ignore

Echo1>/proc/sys/net/ipv4/conf/all/arp_ignore

Ifconfiglo:

0172.16.100.1/16

Windows必须能够ping通任何一台主机

Windows测试;arp–d*删除arp,进行ping后,arp–a查看还是director的mac地址

配置:

Real-server回应的时候使用vip:

Rs1:

Ifconfiglo:

0172.16.100.1broadcast172.16.100.1netmask255.255.255.255up

Routeadd-host172.16.100.1devlo:

0//目标地址是vip的通过lo:

0出去

Rs2:

Ifconfiglo:

0172.16.100.1broadcast172.16.100.1netmask255.255.255.255up

Routeadd-host172.16.100.1devlo:

0

Director:

Routeadd-host172.16.100.1deveth0:

0

配置ipvs

前提:

在director:

上使用curl可以访问,rs1,和rs2

在director上:

Ipvsadm–C//清空规则

Ipvsadm–A –t172.16.100.1:

80–swlc

Ipvsadm–a–t172.16.100.1:

80-r172.16.100.7–g–w2

Ipvsadm–a–t172.16.100.1:

80-r172.16.100.8–g–w1

Ipvsadm–L–n//查看规则,

在windows上进行访问,http:

//172.16.100.1测试查看权重比例

Ipvsadm–L-n

问题:

模拟rs2损坏

Iptables–AINPUT–ptcp–dport80–jREJECT

在windows上刷新访问httpd服务,会出现错误,卡在一个页面

Rs2,损坏,但是director并不知道,没有办法做健康状况检查

LVS添加一个模块后可以实现,检查状况,但是ldirectord,但是这个是在ipvs做高可用的时候才能用到

或者开发一个在director上始终运行的一个脚本

测试rs是否在线,不在线,就在lvs列表中删除

错误:

得不到mac地址,原因,实际网关的子网掩码,和实验掩码不同,也就是说,其实他们不在同一个网络中

刷新,多次可以看到r1和r2之间的切换

第二章:

实验1:

实现director上提供web服务,不推荐,因为director比较忙,

DR:

Vip:

192.168.10.3

Dip:

192.168.10.5

Rs1:

192.168.10.7

Rs2:

192.168.10.8

可不可以在direcotor上的web服务器也启用,当做一个real-server使用

启动director上的httpd服务,写入一个index.html文件,进行测试

Ipvsadm-a-t172.16.6.101:

80-r127.0.0.1-g-w3

Ipvsadm–L–n//测试即可看到效果

//只有在所有主机都宕机了,这时候director提供一个页面,告诉用户,已经宕机,

实现集群自动配置

DR类型中,director和real-server的配置脚本示例

DR脚本,real-server脚本,以及状况检查脚本

RS=("192.168.10.7""192.168.10.8")//数组

Echo${a[0]}//

数组:

一片连续的内存空间,类型相同,array,element元素

Echo${#a[*]}//元素个数,

Echo${#a[0]}//第0个元素的字符个数,

Echo${a[*]}//列出所有元素

第三章:

LVS持久链接,

无论使用何种算法,LVS持久都能实现在一定时间内,将来自同一个客户端请求派发至此前选定的RS。

持久链接模板(内存缓冲区),以前记录,并且灭有超时,就是用原来的连接

ipvsadm-L--persistent-conn//持久链接信息

ipvsadm-A|E-t|u|fservice-address[-sscheduler][-p[timeout]][-Mnetmask]

//只需要在指定服务的时候使用-p指定持久链接的时长,默认300s

//给予ssl的回话中经常使用持久链接,

来自于同一个客户端的,不光是同一个服务http,还有ftp服务都定位到同一个客户端,假如后面的集群同时启用了多个服务

持久链接类型:

PPC:

持久端口链接:

同一个cip同一个集群服务,始终定向到一个rip

PCC:

持久客户端链接:

将同一个cip对所有端口的请求,始终定向到一个rip

PNMPP:

PersistentNetfilterMarkedPacketpersistence//持久防火墙标记链接,

实验:

LVS的PPC持久链接

ipvsadm-E-t172.16.6.101:

80-srr-p30

ipvsadm-L-n--persistent-conn

在windows上进行测试

实验:

PCC测试,telnet和http测试

分别在r1和r2上添加用户,并分配密码,

分别启动telnet服务,并检查是否启用,服务netstat—tunlp|grpe23

并测试,r1和r2的telnet是否能够使用

添加集群服务:

使用的vip还是上一个服务的同一个vip

ipvsadm-A-t172.16.6.101:

23-srr

ipvsadm-a-t172.16.6.101:

23-r172.16.6.107-g-w1

ipvsadm-a-t172.16.6.101:

23-r172.16.6.107-g-w2

telnet登录测试//ipvsadm–L-n查看效果

ipvsadm–E-t172.16.6.101:

23–srr–p3600//持久链接,实现PPC

ipvsadm–C//清空所有请求,重新创建

实现PCC:

//把所有的端口都定义位集群服务,一律像real-server转发,不仅仅包括,http和telnet

[root@localhost~]#ipvsadm-A-t172.16.6.101:

0-srr-p60

[root@localhost~]#ipvsadm-a-t172.16.6.101:

0-r172.16.6.107-g-w2

[root@localhost~]#ipvsadm-a-t172.16.6.101:

0-r172.16.6.108-g-w1

Ssh172.16.6.101//可以查看,虽然没有定义ssh服务,但是,只要real-server具有这个服务,就会提供该服务

PCC是所有集群服务,PPC是针对单个服务

假如需要单独定义两个单独的集群服务,其他的服务都是定义为一个集群服务,比较困难

方法:

防火墙标记:

PREROUTING

80:

10

23:

10//把80和23都标记为10,

然后在ipvsadm中,把防火墙标记为10的定义为一个集群服务

标记是0–99之间的整数,只要没有被使用就行

实验:

防火墙标记-PNMPP

ipvsadm-C

iptables-tmangle-APREROUTING-d172.16.6.101-ptcp--dport80-jMARK--set-mark8

iptables-tmangle-APREROUTING-d172.16.6.101-ptcp--dport23-jMARK--set-mark8

//防火墙设置

[root@localhost~]#ipvsadm-A-f8-srr

[root@localhost~]#ipvsadm-a-f8-r172.16.6.107-g-w2

[root@localhost~]#ipvsadm-a-f8-r172.16.6.108-g-w1

分别进行http测试,刷新,

以及telnet多次登录测试,查看ip

Ipvsadm–L–n//查看结果

[root@localhost~]#ipvsadm-E-f8-srr–p600//持久连接

持久链接一定会破坏LB效果,但是有时候需要使用持戒链接:

例如cookie或者session

LAMP

Mysql/NFS

LAMP

网页文件放在LAMP中,数据库文件放在同一台mysql中,上传的附件,放在NFS中

假如对网页文件进行二次开发,则需要在LAMP之间同步数据

可以把一台主机作为rsyncserver+inotify,其他主机向其同步,只需要更新rsyncserver即可

但是这个更新速度特别慢,不适合经常进行的文件

Sersync:

能够接受inotify开发机制,基于C++开发,性能特别好,支持大文件的同步

Sersync:

自己找

Rsync+inotify,以及sersync+inotify

Session共享,php使用memcached进行session共享

或者使用长连接机制

Memcached:

共享session,将两个lamp将session保存在memcached中

假如是一个购物网站:

假如购物车的东西,要么使用持久链接,要么进行session共享

假如购物完,进行支付的时候,肯定要是用https,但是https和http本身就不是同一种协议

假如定义到https网站:

在第二个服务器上肯定没有http的购物商品

所以,80和443基于防火墙标记绑定//一定要使用持久链接

两个https必然要使用到证书,是否能够用到证书,建议两个服务器上使用同一个证书

小结:

LVS-DR详解

ipvs-INPUT->postrouting

cip的请求到达director之后

DR封装新的MAC

Real-server//对于arp请求vip不予响应

arp_announce:

默认0

2:

同网段则通告

arp_ignore:

默认0

1:

请求的目标ip是流入的eth0的ip,

实现vip解析的方法:

1.在路由器上绑定vip+director.vip

2.arptables定义规则,

3.内核参数arp_announce,arp_ignore

DR模型real-s需要有独立的gw

real-server设置:

1.分别设置{eth0,all}.{arp_announce=2,arp_ignore=1}

Sysctl-wnet.ipv4.conf.eth0.arp_anounce=2//配置eth0,只通告属于本网络的地址

Sysctl-wnet.ipv4.conf.all.arp_anounce=2

Echo1>/proc/sys/net/ipv4/conf/all/arp_ignore//目标接口必须和进来的接口相同

Echo1>/proc/sys/net/ipv4/conf/eth0/arp_ignore

或者:

sysctl-wnet.ipv4.conf.{eth0,all}.{arp_ignore=1,arp_announce=2}//一条命令即可

2.ifconfiglo:

0172.16.6.101broadcast172.16.6.101netmask255.255.255.255up

ifconfiglo:

0172.16.6.101//director的vip,因为需要对外开放

3.routeadd-host172.16.6.101devlo:

0//返回时使用vip作为源地址

DR模型中,real-s需要配置vip,但是nat模型中不用

director上也可以提供http服务,也就是说,director即是director又是real-server

DR脚本:

director脚本:

接受start,stop,status实现自动创建DR或者关闭

REAL脚本:

实现real自动检查状态,失效就删除,恢复则添加

数组的使用

LVS持久链接:

1.PPC:

持久端口链接,同一个cip对一个服务的所有请求,始终定向为一个rip

ipvsadm-E-t172.16.6.101:

80-srr-p30

2.PCC:

持久客户端链接,同一个cip对所有服务的请求定向同一个rip

ipvsadm-A-t172.16.6.101:

0-srr-p60

3.PNMPP持久防火墙标记链接

iptables-tmangle-APREROUTING-d172.16.6.101-ptcp--dport80-jMARK--set-mark8

ipvsadm-A-f8-srr//标记,

ipvsadm-E-f8-srr–p600//持久连接

一般-端口/客户端

标记-端口/客户端

php使用memcached进行session共享

附件:

文件DR脚本

附件:

1.rsync+inotify

2.sersync+inotify

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1