CentOS7搭建lvs-DR模式

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:port

realserver
添加或者修改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_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

#Linux 内核参数arp_ignore和arp_announce作用说明
#arp_ignore - INTEGER
0:默认值,表示可使用本地任意接口上配置的任意地址进行arp应答;
1:仅当请求的目标IP配置在本地主机接受到报文的接口上时,才给予响应;
2:仅当目的IP配置在收到报文的接口上,且arp请求的源IP和该接口同一网段,才响应arp请求;
3:如ARP请求的IP作用域是主机则不响应,如果作用域是全局或者链路则响应ARP
4-7:保留
8:不应答所有本地IP
#arp_announce - INTEGER
0:默认值,允许使用本机上所有接口的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.lock
VIP=192.168.11.20
RIP1=192.168.11.21
RIP2=192.168.11.22
RIP3=192.168.11.23
. /etc/rc.d/init.d/functions

start()    {
     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 1
esac
exit 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.lock
VIP=192.168.11.20
. /etc/rc.d/init.d/functions
start() {
     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 1
esac
exit 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
## OR
ifconfig 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_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
发布了71 篇原创文章 · 获赞 9 · 访问量 3326

猜你喜欢

转载自blog.csdn.net/qq_45206551/article/details/105137289
今日推荐