博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS7搭建lvs-DR模式
阅读量:3963 次
发布时间:2019-05-24

本文共 6810 字,大约阅读时间需要 22 分钟。

文章目录

ipvsadm命令

在2.4.23之前的linux内核想要使用LVS需要重新编译内核打补丁,之后的LVS直接做进了内核

使用grep -i -C 5 ipvs /boot/config-uname -r可以查看
ipvsadm工作在用户空间/ipvs工作在内核空间,用户使用ipvsadm进行设置并且传递到内核空间中的ipvs (ipvsadm工具在光盘中的cluster中)
ipvsadm功能
定义一个集群服务,定义REALSERVER,集群服务的查看

-t 基于tcp的集群服务-u 基于udp的集群服务-f 基于防火墙标记的集群服务-A 添加一个服务-E 修改一个服务-s 调度算法 默认WLC-g LVS-DR直接路由模型-i LVS-TUN隧道模型-m LVS-NAT模型-C 清空规则-R 从一个文件中恢复规则-S 保存对着到文件中-L/l -n 查看定义集群服务添加或修改集群服务:ipvsadm -A|E -t|u|f VIP:port -s 调度算法删除一个集群服务:  ipvsadm -D -t|u|f VIP:portrealserver添加或者修改REALSERVER:ipvsadm -a|e -t|u|f VIP:port -r REALSERVER[:port] -g|-i|-m [-w 权重]删除一个REALSERVER:    ipvsadm -d -t|u|f VIP:port -r REALSERVER[:port]

场景一:拥有多个公网IP且在同一网段

这是最容易部署的一种场景,但并不是最优化的应用场景。之所以说它不是最优化的应用场景,是因为这是最消耗公网IP的一种场景,在这个后ipv4的时代,ip地址是紧缺资源,在达到系统性能最大化之后应该考虑尽量节约资源

实验环境

在这里插入图片描述

在上图,用四台Linux主机组成一个LVS集群。其中一台主机(P0/4)作为Director,其他三台(P0/1、P0/2、P0/3)作为RealServer。

由图分析可看出此集群共消耗了5个公网IP,但只有三个RealServer对外部用户提供服务。其实在当前场景中:群集所消耗的公网IP = RealServer数 + 2;在提供同样服务的情况下与其他场景比较,这种场景是最消耗公网IP的。

环境配置

对Director主机的配置
#首先是要安装ipvsadm软件包:yum install -y ipvsadm#然后是对ipvsadm进行配置:-A -t 192.168.11.20:80 -s rr-a -t 192.168.11.20:80 -r 192.168.11.22:80 -g -w 1-a -t 192.168.11.20:80 -r 192.168.11.22:80 -g -w 1-a -t 192.168.11.20:80 -r 192.168.11.23:80 -g -w 1#从图片中可以看到在Director中VIP是配置在lo:0上面的。ifconfig lo:0 192.168.11.20 netmask 255.255.255.255 up#你也可以把Director中的VIP配置在一个真实网卡,前提条件是你得有这么一个网卡,并且通过这个网卡可以接收来自互联网的访问。ifconfig eth1 192.168.11.20 netmask 255.255.255.255 up需要特别说明的是:在VS/DR模块下Director是不需要开启ip_forword(路由转发)功能的。在此后的各个场景中不再赘述。

对RealServer节点的配置

#所有RealServer节点,除了RIP不同之外,其他配置都是一样的。#首先需要把VIP配置在RealServer节点的lo:0网卡上:ifconfig lo:0 192.168.11.20 netmask 255.255.255.255 up#因为所有RealServer与Director是在同一个网段中(同一局域网中),所以需要对所有RealServer进行ARP抑制;避免因RealServer主机应答对VIP的ARP询问,而造成局域网内ARP解析混乱。如果不对RealServer进行ARP抑制,那么用户对VIP的请求是由哪台服务器应答的将不可预知。echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/all/arp_announce#Linux 内核参数arp_ignore和arp_announce作用说明#arp_ignore - INTEGER0:默认值,表示可使用本地任意接口上配置的任意地址进行arp应答;1:仅当请求的目标IP配置在本地主机接受到报文的接口上时,才给予响应;2:仅当目的IP配置在收到报文的接口上,且arp请求的源IP和该接口同一网段,才响应arp请求;3:如ARP请求的IP作用域是主机则不响应,如果作用域是全局或者链路则响应ARP4-7:保留8:不应答所有本地IP#arp_announce - INTEGER0:默认值,允许使用本机上所有接口的IP作ARP通告。1:尽量避免使用本地IP向非本网卡直接连接网络进行ARP通告。2:必须避免使用本地IP向非本网卡直接连接网络进行ARP通告。

编制自动化脚本

Director上的启动脚本
#!/bin/sh# Startup script handle the initialisation of LVS# chkconfig: - 28 72# description: Initialise the Linux Virtual Server for DR#LOCK=/var/lock/lvs-dr.lockVIP=192.168.11.20RIP1=192.168.11.21RIP2=192.168.11.22RIP3=192.168.11.23. /etc/rc.d/init.d/functionsstart()    {
PID=`ipvsadm -Ln | grep ${
VIP} | wc -l` if [ $PID -gt 0 ]; then echo "The LVS-DR Director Server is already running !" else /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up #Clear IPVS Table /sbin/ipvsadm -C #Set Lvs /sbin/ipvsadm -At $VIP:80 -s rr /sbin/ipvsadm -at $VIP:80 -r $RIP1:80 -g -w 1 /sbin/ipvsadm -at $VIP:80 -r $RIP2:80 -g -w 1 /sbin/ipvsadm -at $VIP:80 -r $RIP3:80 -g -w 1 /bin/touch $LOCK #Run Lvs echo "starting LVS-DR Director Server is ok !" fi}stop() {
#stop Lvs server /sbin/ipvsadm -C /sbin/ifconfig lo:0 down >/dev/null rm -rf $LOCK echo "stopping LVS-DR Director server is ok !"}status() {
if [ -e $LOCK ]; then echo "The LVS-DR Director Server is already running !" else echo "The LVS-DR Director Server is not running !" fi}case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; status) status ;; *) echo "Usage: $1 {start|stop|restart|status}" exit 1esacexit 0#把上面的脚本放到/etc/init.d/目录下。并授予其可执行权限:chmod o+x /etc/init.d/lvs_dr-d#然后使用如下指令设置为开机启动。chkconfig --level 35 lvs_dr-d on

RealServer上的启动脚本 lvs_dr-r

#!/bin/sh## Startup script handle the initialisation of LVS# chkconfig: - 28 72# description: Initialise the Linux Virtual Server for DR-RealServer#LOCK=/var/lock/ipvsadm.lockVIP=192.168.11.20. /etc/rc.d/init.d/functionsstart() {
PID=`ifconfig | grep lo:0 | wc -l` if [ $PID -ne 0 ]; then echo "The LVS-DR-RealServer is already running !" else # 配置lo:0网卡 /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up # 配置lo:0网卡的arp策略 echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce /bin/touch $LOCK echo "starting LVS-DR-RealServer is ok !" fi}stop() {
# 关闭lo:0网卡 /sbin/ifconfig lo:0 down # 配置lo:0网卡的arp策略 echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce rm -rf $LOCK echo "stopping LVS-DR-RealServer is ok !"}status() {
if [ -e $LOCK ]; then echo "The LVS-DR-RealServer is already running !" else echo "The LVS-DR-RealServer is not running !" fi}case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "Usage: $1 {start|stop|restart|status}" exit 1esacexit 0#把上面的脚本放到/etc/init.d/目录下。并授予其可执行权限:chmod o+x /etc/init.d/lvs_dr-r#然后使用如下指令设置为开机启动。chkconfig --level 35 lvs_dr-r on

场景二:只有一个公网IP

这是最节约公网IP的一种场景,无论你有多少个RealServer节点都只需要一个公网IP。但你必须要有一个可自主配置的路由器才行。

实验环境

在这里插入图片描述

如上图,虽然使用的都是私网的IP地址,但我们可以认为192.168.x.x为公网IP(映射到公网后该网络拓扑依然可行)。而10.0.0.x为私网IP。从这个图中你应该能理解为什么说这种场景需要有一个可自主配置的路由器了。因为你需要在路由器E0/1口上配置私网IP。

对Director主机的配置
#首先是要安装ipvsadm软件包:yum install -y ipvsadm#然后是对ipvsadm进行配置:-A -t 192.168.11.20:80 -s rr-a -t 192.168.11.20:80 -r 10.0.0.21:80 -g -w 1-a -t 192.168.11.20:80 -r 10.0.0.22:80 -g -w 1-a -t 192.168.11.20:80 -r 10.0.0.23:80 -g -w 1#从图片可以看到在Director中VIP是配置在eth1上面的。ifconfig eth1 192.168.11.20 netmask 255.255.255.0 up## ORifconfig eth1 192.168.11.20 netmask 255.255.255.255 up#如果你的网卡资源不够,你也可以把Director中的VIP配置在环回网卡lo上或eth0:0网卡上。 ifconfig lo:0 192.168.11.20 netmask 255.255.255.0 up ifconfig eth0:0 192.168.11.20 netmask 255.255.255.0 up ## OR ifconfig lo:0 192.168.11.20 netmask 255.255.255.255 up ifconfig eth0:0 192.168.11.20 netmask 255.255.255.255 up

不过这种情况下你的网络拓扑也需要做相应的调整:

在这里插入图片描述
细心的朋友可能发现了,这里在Director上对VIP的配置子网掩码有两种。其实在当前场景下,子网掩码的选择只要保证VIP与DIP、RIP不在同一网段就行了。(其实是因为我制作拓扑图时笔误了,把Director中VIP的子网掩码写成了24位,于是就随便扩展了一下这个小知识点)

对RealServer节点的配置

#所有RealServer节点,除了RIP不同之外,其他配置都是一样的。#首先需要把VIP配置在RealServer节点的lo:0网卡上:ifconfig lo:0 192.168.11.20 netmask 255.255.255.255 up#因为所有RealServer是在同一个网段中(同一局域网中),所以需要对所有RealServer进行ARP抑制;避免因RealServer主机应答对VIP的ARP询问,而造成局域网内ARP解析混乱。echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/all/arp_announce

转载地址:http://gqezi.baihongyu.com/

你可能感兴趣的文章
Mule ESB-Content-Based Routing Tutorial(2)
查看>>
Mule ESB-Content-Based Routing Tutorial(3)
查看>>
年末项目经验总结
查看>>
做事情要放下面子,拿起责任
查看>>
敏捷开发实践(1)-故事工作量估算导致的问题
查看>>
记一次解决jenkins持续构建,自动部署的问题
查看>>
敏捷开发实践(2)-要不要文档?
查看>>
《java系统性能调优》--2.缓存
查看>>
JAVA注解引发的思考
查看>>
写博意味着什么
查看>>
比较Cint() , int() , fix() ,round()的区别
查看>>
举例说明常用字符串处理函数
查看>>
软件生存期模型
查看>>
制定计划(问题的定义,可行性研究)
查看>>
需求分析
查看>>
软件设计
查看>>
程序编码
查看>>
软件测试
查看>>
软件维护
查看>>
软件项目管理
查看>>