Centos7 搭建LVS DR模式 + Keepalive + NFS

一、环境准备

共7台虚拟机(Vmware)
client:200.200.200.2
gateway:200.200.200.1 && 192.168.75.140
director1:192.168.75.131
director2:192.168.75.132
realserver1:192.168.75.138
realserver2:192.168.75.139
storage:192.168.75.143
VIP:192.168.75.100
VM网络连接模式:
client:200.200.200.2和gateway:200.200.200.1使用自定义VMnet10
其他网卡使用Nat模式
除网关需要iptables外,其他主机全部关闭清空防火墙规则,停止firewalld,关闭selinx
iptables -F
systemctl stop firewalld.service
setenfore 0 (ip有点乱)

 

二、原理

外网客户端发送报文经过网关,网关为双网卡联通内外网。网关通过iptables的DNAT方式将目标地址为200.200.200.1端口为80的报文,映射为VIP地址,端口为80,转发至director(1或2)。

director开启保存VIP的子网卡,通过ipvsadm从内核监听VIP的80端口(netstat -antp |grep 80是看不到开启了80端口的),匹配后通过某种轮询方式分发至realserver。

同时director1,2开启keepalive,共用一个VIP地址,通过心跳检测,防止负载的一方宕机,如遇险情快速切换至另一个director

realserver开启保存VIP的回环口的子网卡(realserver的VIP在回环口子网卡上,子网掩码32位,只能本地访问,避免与director的VIP冲突),将目标地址为VIP的报文交付给web容器。

web容器通过本地挂载的NFS网络存储找到所需要的页面。之后报文返回过程中,原地址(client的地址)作为目标地址通过网关将报文返回给client。

 

三、配置

1.网关配置

1.1 默认ens33网卡设置

默认网卡设置,只修改ONBOOT=yes,启动网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=58d67b1d-7381-414b-9d7d-2a2aba240437
DEVICE=ens33
ONBOOT=yes

 

1.2 在vm添加一个网卡,重启系统,根据新识别的网卡设备名,添加一个网卡文件

在vm网卡选项高级中找到mac地址,添加HWADDR,之后重启网卡
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=200.200.200.1
NETMASK=255.255.255.0
HWADDR=00:0C:29:CD:E3:9B

 

1.4 开启路由转发

写入内核文件,并刷新启用文件参数
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.conf 
sysctf -p

 

1.5 iptables设置

centos7默认没有管理内核中的iptables的工具,需要安装
在nat表中的PREROUTING 链上,将目标地址为200.200.200.1,端口为80的报文,的目标地址和端口转换为192.168.75.100:80
yum install iptables-services
iptables -F iptables
-t nat -I PREROUTING -d 200.200.200.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.75.100:80
iptables -t nat -nvL

 

2. 主备调度器设置

2.1 网卡设置

开启默认网卡,获取地址,开启子网卡
ifconfig ens33:0 192.168.75.100 mask 255.255.255.0 up

 

2.2 安装,配置ipvsadm

centos7默认内核中有iptables,
但没有安装ipvsadm管理工具 yum install
-y ipvsadm 配置 /sbin/ipvsadm -A -t $VIP:80 -s rr /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -A 表示添加一个LVS服务器 -t 指定VIP地址和监听端口 -s 指定轮询方式 -r 指定后端realserver的ip和端口 -g 指定为DR模式,-m为nat模式

ipvsadm -Ln
查看配置好的规则
ipvsadm -Lnc
查看链接纪录

在DS上 curl vip访问不会返回,不要这样测试。
具体原因在,有知道的请告诉我,不胜感谢。

 

2.3 脚本化ipvsadm安装配置

编辑lvsdr脚本,内容为配置启动子网卡,配置ipvsadm,之后加入开机启动
vim /etc/init.d/lvsdr
#!/bin/sh

VIP=192.168.75.100
RIP1=192.168.75.138
RIP2=192.168.75.139
. /etc/rc.d/init.d/functions
case "$1" in
start)
  echo " start LVS  of DirectorServer"
  # set the Virtual  IP Address
   ifconfig ens33:0 $VIP/24
   #/sbin/route add -host $VIP dev eth3:0
   #Clear IPVS table
   /sbin/ipvsadm -C
  #set LVS
  /sbin/ipvsadm -A -t $VIP:80 -s rr # (如果需要session保持添加-p 默认保持300秒)
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
  #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 –g
  #Run LVS
  /sbin/ipvsadm
  #end
;;
stop)
 echo "close LVS Directorserver"
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
vim /etc/rc.local >> /etc/init.d/lvsdr

 

2.3 安装配置keepalive

! Configuration File for keepalived

global_defs {
        router_id LVS_MASTER       # 指定router_id 主备不能一致
}

vrrp_instance VI_1 {
    state MASTER                   # 主指定为MASTER,备指定为BACKUP
    interface ens33
    virtual_router_id 51           # LVS id 主备一致
    priority 100                   # 优先级,备需要比主低
    advert_int 1                   # 心跳检测间隔
    authentication {
        auth_type PASS             # 验证方式,PASS和AH
        auth_pass 1111             # 验证码,主备需一致
    }
    virtual_ipaddress {
        192.168.75.100             # VIP,可多个
    }
}

virtual_server 192.168.75.100 80 { # 某一VIP的设置
    delay_loop 6                   # 健康检查间隔
    lb_algo rr                     # 轮询方式
    lb_kind DR                     # LVS 模式
    persistence_timeout 50         # 会话保持时间,不间断的访问一直会用这个realserver
    protocol TCP                   # 转发协议,TCP,UDP

    real_server 192.168.75.138 80 {
        weight 1                   # realserver的权重
        TCP_CHECK {
            connect_timeout 3      # 连接超时时间
            nb_get_retry 3         # 重连次数
            delay_before_retry 3   # 重连间隔时间
        }
    }
    real_server 192.168.75.139 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

}

 

3. realserver配置

3.1 修改内核

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

arp_ignore =1    尽量避免不在该网络接口子网段的本地地址做出arp回应当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce    
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore

 

3.2 网络配置

默认网卡配置需要,静态ip加网关
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#BOOTPROTO=dhcp
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=894d5d55-7569-4217-b3f7-1a2cd2cdd10c
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.75.139
PREFIX=24
GATEWAY=192.168.75.140

开启回环口子网卡
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP

VIP路由指向lo:0
route add -host $VIP dev lo:0

 

3.3 脚本化realserver配置

#!/bin/sh
VIP=192.168.75.100

. /etc/rc.d/init.d/functions
case "$1" in
start)
  echo " start LVS  of RealServer"
  echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
  echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
  service network restart
  ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
  route add -host $VIP dev lo:0

  #end
;;
stop)
echo "close LVS Realserver"
service network restart
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

 

3.4 httpd安装使用

yum install -y httpd

直接使用默认访问目录

 

3.5 网络存储设置

该操作应该在搭建网NFS服务器之后操作

安装NFS及相关组件,rpcbind管理nfs使用随机端口通信
yum -y install nfs-utils ,rpcbind
systemctl start   rpcbind.service
systemctl start  nfs.service
systemctl enable rpcbind.service
systemctl enable nfs.service

查看是否可连接,NFS服务器
showmount -e 192.168.75.143

挂载NFS目录
mount -t nfs 192.168.75.143:/data/www /var/www/html

 

4 搭建NFS服务器

安装NFS及相关服务,rcpbind管理nfs使用随机端口传输,设置网路目录全向,创建存储目录,创建目录用户,并将目录属主设置为该用户,添加网络文件
yum -y install nfs-utils ,rpcbind
systemctl start   rpcbind.service
systemctl start  nfs.service
systemctl enable rpcbind.service
systemctl enable nfs.service
vim /etc/exports
/data 192.168.75.0/24(rw,sync)
mkdir -p /data/www
cd /data
chown apache:apache www
vim /data/www/index.html

 

五、测试

使用client:200.200.200.2
curl -s 200.200.200.2

如果没有搭建keepalive,没有搭建NFS存储服务器,单独测试LVS
RS使用httpd,在默认访问目录/var/www/html/中,
写入文件,内容不一致。访问两次的结果也不一致。
即为成功

如果搭建了keepalive,没有搭建NFS存储服务器。测试LVS和keepalive
httpd配置同上,访问结果应该只有一种,因keepalive默认开启了,
50秒内不间断访问,一直会分发到一台RS上

如果LVS,keepalive,NFS都搭建
测试访问结果应该为NFS服务器中NFS目录中的内容。

 

posted on 2018-03-06 18:30  运维小学生  阅读(533)  评论(0编辑  收藏  举报

导航