Lvs(DR模式)+keepalived高可用群集

左心房为你撑大大i 提交于 2020-11-12 08:53:41

目录

一.DR简介

二.DR特点

三.LVS-DR中的ARP问题

四.案例:LVS-DR部署

1.架构图

2.配置调度服务器

3.配置NFS服务器

4.配置web服务器

5.测试

五.keepalived工作原理

环境(基于LVS-DR进行搭建)

配置主调度器(192.168.100.14)

配置从调度器(192.168.100.15)

nfs配置

配置web服务器

测试


一.DR简介

直接路由
●Direct Routing,简称DR模式
●采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
●负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
 



二.DR特点

  • RS和DS必须在同一个物理网络中
  • RS可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对RIP进行直接访问
  • 所有的请求报文经由Director Server,但响应报文必须不能经过Director Server
  • RS的数据包绝不允许指向DIP
  • RS上的lo接口配置VIP的IP地址

三.LVS-DR中的ARP问题

  • 在LVS-DR负载均衡集群中,负载均衡与节点服务器都要配置相同的VIP地址
  • 在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱
  • 当ARP广播发送到LVS-DR集群时,因为负载均衡和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播
  • 只有前端的负载均衡器进行响应广播,节点服务器不应该响应ARP广播
  • 对节点服务要求进行处理,使其不响应针对VIP的ARP请求
  • 使用虚接口lo:0承载VIP地址
  • 设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求
  • RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址
  • 发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址
  • 路由器收到ARP请求后,将更新ARP表项
  • 原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址

 

四.案例:LVS-DR部署

1.架构图

2.配置调度服务器


[root@server ~]# modprobe ip_vs  //加载lvs内核
[root@server ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

​
[root@server ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm //安装ipvsadm工具
警告:/mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
	软件包 ipvsadm-1.27-7.el7.x86_64 已经安装

编辑调度服务器脚本

[root@server ~]# vi nat.sh 
#!/bin/bash
ifconfig ens33:0 192.168.100.200 broadcast 192.168.100.200 netmask 255.255.255.255 up  //添加虚拟地址的虚接口
ipvsadm -C  //清除内核虚拟服务器表中的所有记录
ipvsadm -A -t 192.168.100.200:80 -s rr  //创建虚拟服务器
ipvsadm -a -t 192.168.100.200:80 -r 192.168.100.12:80 -g  //添加服务器节点
ipvsadm -a -t 192.168.100.200:80 -r 192.168.100.13:80 -g
ipvsadm -Ln  //查看节点状态,加个"-n"将以数字形式显示地址、端口信息
[root@server ~]# sh nat.sh  //执行脚本
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.200:80 rr
  -> 192.168.100.12:80            Route   1      0          0         
  -> 192.168.100.13:80            Route   1      0          0
选项注释:
 "-A":表示添加虚拟服务器 
 "-a":表示添加真实服务器 
 "-t":用来指定VIP地址及TCP端口 
 "-r":用来指定RIP地址及TCP端口 
 "-s":用来指定负载调度算法——rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接) 
 "-m":表示使用NAT群集模式(是DR模式,是TUN模式)

 

3.配置NFS服务器

安装并启动nfs和rpcbind服务
[root@nfs ~]# yum -y install nfs-utils rpcbind

[root@nfs ~]# systemctl start nfs-utils
[root@nfs ~]# systemctl start rpcbind

创建俩个测试文件夹,并导入测试网页

设置访问权限

[root@nfs opt]# vi /etc/exports

/opt/web1 192.168.100.12(ro)
/opt/web2 192.168.100.13(ro)

查看权限

[root@nfs opt]# showmount -e
Export list for nfs:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12

4.配置web服务器

安装http服务

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

挂载nfs网页

[root@web1 ~]# mount 192.168.100.11:/opt/web1 /var/www/html/
[root@web1 ~]# systemctl restart httpd

[root@web2 ~]# mount 192.168.100.11:/opt/web2 /var/www/html/
[root@web2 ~]# systemctl restart httpd

查看权限

[root@web1 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
[root@web2 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12

配置DR模式

[root@web1 ~]# vi ab.sh 

#!/bin/bash
ifconfig lo:0 192.168.100.200 broadcast 192.168.100.200 netmask 255.255.255.255 up
route add -host 192.168.100.200 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
systctl -p &> /dev/null

[root@web1 ~]# sh ab.sh

 

5.测试

 

 

五.keepalived工作原理

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器

环境(基于LVS-DR进行搭建)

虚拟IP

192.168.100.200/24

主调度器

192.168.100.14/24

备调度器

192.168.100.15/24

Web1服务器

192.168.100.12/24

Web2服务器

192.168.100.13/24

NFS共享服务器

192.168.100.11/24

客户机一台

用于测试验证

配置主调度器(192.168.100.14)

[root@server ~]# modprobe ip_vs
[root@server ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@server ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm 
[root@server ~]# yum -y install gcc gcc-c++ make popt-devel openssl-devel kernel-devel
[root@server ~]# tar xf keepalived-2.0.13.tar.gz 
[root@server ~]# cd keepalived-2.0.13/
[root@server keepalived-2.0.13]# ./configure --prefix=/
[root@server keepalived-2.0.13]# make && make install

[root@server keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d
[root@server keepalived-2.0.13]# systemctl enable keepalived.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

[root@server keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {      //全局参数
  router_id LVS_01    //指定名称
}
vrrp_instance VI_1 {  //指定vrrp热备参数
   state MASTER       //服务器角色MASTER,备份为BACKUP
   interface ens33    //修改物理网卡名称
   virtual_router_id 10  //虚拟路由器的ID号,每个热备组保持一致
   priority 100  //优先级,数值越大优先级越高
  authentication {  //热备认证信息,每个热备组保持一致
      auth_type PASS //认证类型
      auth_pass 1111 //密码字符串
   }
   virtual_ipaddress { //指定漂移地址
      192.168.100.200
   }
}
virtual_server 192.168.100.200 80 { //虚拟服务器地址
   delay_loop 6  //健康检查的间隔时间(秒)
   lb_algo rr    //轮询(rr)调度算法
   lb_kind DR    //直接路由(DR)群集工作模式
   persistence_timeout 6
   protocol TCP
   real_server 192.168.100.12 80 {   //第一个web服务器节点的地址、端口
      weight 1   //节点的权重
      TCP_CHECK {           //健康检查方式
         connect_port 80    //检查目标端口
         connect_timeout 3  //连接超时
         nb_get_retry 3     //重试次数
         delay_before_retry 3 //重试间隔
     }
  }
real_server 192.168.100.13 80 {  //第二个web服务器节点的地址、端口
      weight 1
      TCP_CHECK {
         connect_port 80
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
      }
   }
}

[root@server keepalived-2.0.13]# systemctl enable keepalived //设置开机自启
[root@server keepalived-2.0.13]# systemctl start keepalived  //启动服务

配置从调度器(192.168.100.15)

 


与主调度之前配置一样

[root@server keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {      //全局参数
  router_id LVS_02    //指定名称
}
vrrp_instance VI_1 {  //指定vrrp热备参数
   state BACKUP
   interface ens33    //修改物理网卡名称
   virtual_router_id 10  //虚拟路由器的ID号,每个热备组保持一致
   priority 90 //优先级,数值越大优先级越高
  authentication {  //热备认证信息,每个热备组保持一致
      auth_type PASS //认证类型
      auth_pass 1111 //密码字符串
   }
   virtual_ipaddress { //指定漂移地址
      192.168.100.200
   }
}
virtual_server 192.168.100.200 80 { //虚拟服务器地址
   delay_loop 6  //健康检查的间隔时间(秒)
   lb_algo rr    //轮询(rr)调度算法
   lb_kind DR    //直接路由(DR)群集工作模式
   persistence_timeout 6
   protocol TCP
   real_server 192.168.100.12 80 {   //第一个web服务器节点的地址、端口
      weight 1   //节点的权重
      TCP_CHECK {           //健康检查方式
         connect_port 80    //检查目标端口
         connect_timeout 3  //连接超时
         nb_get_retry 3     //重试次数
         delay_before_retry 3 //重试间隔
     }
  }
real_server 192.168.100.13 80 {  //第二个web服务器节点的地址、端口
      weight 1
      TCP_CHECK {
         connect_port 80
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
      }
   }
}

[root@server keepalived-2.0.13]# systemctl enable keepalived //设置开机自启
[root@server keepalived-2.0.13]# systemctl start keepalived  //启动服务

nfs配置

安装并启动nfs和rpcbind服务
[root@nfs ~]# yum -y install nfs-utils rpcbind

[root@nfs ~]# systemctl start nfs-utils
[root@nfs ~]# systemctl start rpcbind

创建俩个测试文件夹,并导入测试网页

设置访问权限

[root@nfs opt]# vi /etc/exports

/opt/web1 192.168.100.12(ro)
/opt/web2 192.168.100.13(ro)

查看权限

[root@nfs opt]# showmount -e
Export list for nfs:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12

配置web服务器

安装http服务

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

挂载nfs网页

[root@web1 ~]# mount 192.168.100.11:/opt/web1 /var/www/html/
[root@web1 ~]# systemctl restart httpd

[root@web2 ~]# mount 192.168.100.11:/opt/web2 /var/www/html/
[root@web2 ~]# systemctl restart httpd

查看权限

[root@web1 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12
[root@web2 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12

配置DR模式

[root@web1 ~]# vi ab.sh 

#!/bin/bash
ifconfig lo:0 192.168.100.200 broadcast 192.168.100.200 netmask 255.255.255.255 up
route add -host 192.168.100.200 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
systctl -p &> /dev/null

[root@web1 ~]# sh ab.sh

测试

不同主机测试

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!