Linux之高可用集群实战(二)

发布于:2025-08-16 ⋅ 阅读:(26) ⋅ 点赞:(0)

一、keepalive问题之脑裂现象

导致这种现象主要原因是由于两台服务器是否存在网络隔离(防火墙、网卡等问题),为了解决keepalive启动无法正常完成高可用集群的搭建,我们通常引入zabbix通过shell脚本监控两台服务主机的keepalive中VIP使用情况,最终通过其状态情况来进一步判断其高可用性。

二、keepalive配置文件详解

## 监控 软件服务进程
vrrp_sripts 脚本实例 {
    scripts "脚本路径"
    interval  (指定时间间隔/s)
}

## vrrp实例定义块
vrrp_sync_group VG_1{   ## 监控网段
    group{
        V1_1
    }
}

## 当切换到master执行脚本
notify_master /data/sh/nginx.sh

## 当切换到backup执行脚本
notify_backup /data/sh/nginx.sh

## vrrp实例创建
vrrp_instance JFEDU_1 {
    state BACKUP
    no_premmpt  ## 不抢占
    interface ens33
    treck_interface{
        ens33
    }
    virtual_route_id 50      ## 虚拟路由id标识
    priority 100               ## 优先级
    preempt_delay              ## 抢占延迟
    authenication{
        auth_type PASS
        auth_pass 111
    }
}

三、配置多实例keepalive节点

确保两台机器配置两次keepalive配置,确保其keepalive可以主从备份(实现DNS负载均衡工作

.5机器配置情况

! Configuration File for keepalived 
 global_defs { 
  notification_email { 
      support@666
 } 
## 结合zabbix监控keepalive报警信息
    notification_email_from wgkgood@163.com 
    smtp_server 127.0.0.1 
    smtp_connect_timeout 30 
    router_id LVS_DEVEL 
 } 
 
 vrrp_script chk_nginx {   ## vrrp脚本模块
    script  "/data/sh/check_nginx.sh" 
    interval 2 ## 计时
    weight 2 ## 权重
 } 
 # VIP1 
 vrrp_instance VI_1 {    ## 开启vip模块
     state MASTER        ## 状态Master||BACKUP
     interface ens33
     lvs_sync_daemon_inteface ens33
     virtual_router_id 151     ## 虚拟路由ID
     priority 100     ## 优先级
     advert_int 5     ## 每隔5s发生组播请求
     nopreempt    ## 防止抢占keepalive(只在backup机器上生效,针对优先级无效)
     authentication { 
         auth_type  PASS ## 发送密码认证进行通信
         auth_pass  1111
 
     } 
     virtual_ipaddress { 
         10.0.0.188    ## VIP地址信息
     }
    track_script { 
     chk_nginx   ## 调用脚本模块
    } 
 
 }


 vrrp_instance VI_2 {    ## 开启vip模块
     state BACKUP        ## 状态Master||BACKUP
     interface ens33
     lvs_sync_daemon_inteface ens33
     virtual_router_id 152     ## 虚拟路由ID
     priority 90     ## 优先级
     advert_int 5     ## 每隔5s发生组播请求
     nopreempt    ## 防止抢占keepalive(只在backup机器上生效,针对优先级无效)
     authentication { 
         auth_type  PASS ## 发送密码认证进行通信
         auth_pass  2222
 
     } 
     virtual_ipaddress { 
         10.0.0.189    ## VIP地址信息
     }
    track_script { 
     chk_nginx   ## 调用脚本模块
    } 
 
 }

.6机器配置情况

[root@localhost ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived 
 global_defs { 
  notification_email { 
      support@666
 } 
## 结合zabbix监控keepalive报警信息
    notification_email_from wgkgood@163.com 
    smtp_server 127.0.0.1 
    smtp_connect_timeout 30 
    router_id LVS_DEVEL 
 } 
 
 vrrp_script chk_nginx {   ## vrrp脚本模块
    script  "/data/sh/check_nginx.sh" 
    interval 2 ## 计时
    weight 2 ## 权重
 } 
 # VIP1 
 vrrp_instance VI_1 {    ## 开启vip模块
     state BACKUP        ## 状态Master||BACKUP
     interface ens33
     lvs_sync_daemon_inteface ens33
     virtual_router_id 151     ## 虚拟路由ID
     priority 90     ## 优先级
     advert_int 5     ## 每隔5s发生组播请求
     nopreempt    ## 防止抢占keepalive(只在backup机器上生效,针对优先级无效)
     authentication { 
         auth_type  PASS ## 发送密码认证进行通信
         auth_pass  1111
 
     } 
     virtual_ipaddress { 
         10.0.0.188    ## VIP地址信息
     }
    track_script { 
     chk_nginx   ## 调用脚本模块
    } 
 
 }


 vrrp_instance VI_2 {    ## 开启vip模块
     state MASTER        ## 状态Master||BACKUP
     interface ens33
     lvs_sync_daemon_inteface ens33
     virtual_router_id 152     ## 虚拟路由ID
     priority 100     ## 优先级
     advert_int 5     ## 每隔5s发生组播请求
     nopreempt    ## 防止抢占keepalive(只在backup机器上生效,针对优先级无效)
     authentication { 
         auth_type  PASS ## 发送密码认证进行通信
         auth_pass  2222
 
     } 
     virtual_ipaddress { 
         10.0.0.189    ## VIP地址信息
     }
    track_script { 
     chk_nginx   ## 调用脚本模块
    } 
 
 }

四、LVS负载均衡策略

LVS(虚拟服务器)作为主流的网络可伸缩结构,通常它们都需要一个前端调度器,实现虚拟网络负载均衡,在IP负载均衡技术中可以分为三类(NET模式、TUN隧道模式、DR模式),主要包含均衡算法包括RR(轮询)、LC(最少连接数)、WRR、WLC

  • NET模式原理

用户通过IP地址访问目标IP的VIP地址,而实际最终是VIP内部目标机房的设备情况,然后lvs会将报文转发至后端IP地址,同时将目标端口也转换成后端选定的端口,最后后端处理完请求后会将报文请求转发到LVS ,最终LVS会将请求转发给用户

配置实操:

  • 准备两块网卡(设置一块内网卡为仅主机模式)

  • 配置仅主机模式的IP地址
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens36
    DEVICE=ens36
    IPADDR=172.17.0.2
    NETMASK=255.255.255.0
    GATEWAY=172.17.0.1
    DNS1=114.114.114.114
    

安装lvs软件

yum -y install ipvsadm


## 查看lvs版本及均衡列表
[root@10.0.0.5 /etc/sysconfig/network-scripts]#ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn


## 添加均衡列表信息(-m使用nat模式)
ipvsadm  -A  -t  10.0.0.5:80  -s  wrr
ipvsadm  -a  -t  10.0.0.5:80  -r  172.17.0.2 -m  -w 100
ipvsadm  -a  -t  10.0.0.5:80  -r  172.17.0.3 -m  -w 100


## 再次查看均衡列表(Masq为加权轮询)
root@10.0.0.5 /etc/sysconfig/network-scripts]#ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.5:80 wrr
  -> 172.17.0.2:80                Masq    100    0          0         
  -> 172.17.0.3:80                Masq    100    0          0         
TCP  10.0.0.6:80 wrr
  -> 172.17.0.2:80                Masq    100    0          0      


## 将lvs当做路由器使用进行ip转发   
[root@10.0.0.5 /etc/sysconfig/network-scripts]#cat /proc/sys/net/ipv4/ip_forward
0
[root@10.0.0.5 /etc/sysconfig/network-scripts]#echo 1 > /proc/sys/net/ipv4/ip_forward
[root@10.0.0.5 /etc/sysconfig/network-scripts]#cat /proc/sys/net/ipv4/ip_forward
1

配置net模式有哪些注意事项

1)LVS服务器至少2块网卡,一块作为公网,另外内网(网关);
2)后端RS机器的网关必须设置为LVS内网网卡的IP地址;
3)后端RS服务器上80端口服务启动了,防火墙关闭;
4)LVS服务器必须开启路由转发功能内核ip_forward参数设置为1;
echo 1 > /proc/sys/net/ipv4/ip_forward
5)LVS NAT模式后端最好不要超过30台RS(realserver)服务器;
  • DR模式原理

用户访问Lvs机器地址,请求到达lvs机器之后会将请求报文的目标MAC地址发送给后端机器(在同一个物理网段情况下),如果用户和RS不在同一个网段,则通过网关返回用户(VIP同时配置在RS上,同时也在LVS机器上,防止VIP机器冲突)

ipvsadm管理ip_vs内核模块查看
[root@10.0.0.7 ~]#modprobe ip_vs
[root@10.0.0.7 ~]#lsmod | grep -aiE ip_vs
ip_vs                 192512  0
nf_conntrack          180224  1 ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
libcrc32c              16384  2 nf_conntrack,ip_vs

配置DR模式有哪些注意事项

1)LVS服务器1块网卡,DR和RS在同一个物理网段;
2)LVS服务器上配置VIP地址101.188,配置在物理网卡上,负责响应ARP广播;
3)后端RS机器的配置VIP地址101.188,配置在lo网卡上,避免冲突;
4)后端RS服务器要抑制VIP 101.188的ARP广播响应;
5)后端RS服务器上80端口服务启动了,防火墙关闭;
6)只有LVS的VIP能够响应用户的请求,抑制RS的VIP ARP响应。
7)后端RS服务器处理完成之后,直接返给用户,无需发送给LVS机器。
我这里准备配置一个vip机器
VIP=10.0.0.188
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP

## 使用arp命令查看mac地址与其他机器进行比对,查看是否阻止了arp传播
arp -a


## 设置抑制arp广播(只抑制非真实网卡请求,不抑制非真实网卡请求)
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

## 使用arp命令清除刷新广播
arp -d 地址
arp -d *

## 在lvs机器上放置一个vip地址
VIP=10.0.0.188
ifconfig ens33:1 $VIP netmask 255.255.255.255 broadcast $VIP


## arp_announce忽略源ip所在的网卡,使用本机能跟外网通信的网卡将数据发出去
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce


创建RS后端脚本(要求前端物理网卡配置vip)

#!/bin/sh
#LVS Client Server
VIP=10.0.0.188
case  $1  in                                                                                                                                                                                                                                                    
start)                                                                                                                                                                                                                                            
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
    /sbin/route add -host $VIP dev lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    sysctl -p >/dev/null 2>&1
    echo "RealServer Start OK"
    exit 0
;;                                                                                                                                                                                                                                         
stop)
    ifconfig lo:0 down
    route del $VIP >/dev/null 2>&1
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
    echo "RealServer Stoped OK"
    exit 1
;;
*)
    echo "Usage: $0 {start|stop}"
;;
esac

压测请求(需要安装httpd-tools工具)

## 压测文件
ab -c 1000 -n 10000 http://10.0.0.188

## 每次访问最大文件数
ulimit -SHn 65535

压力测试多连接运行方式

配置LVS配置(一旦重启lvs都会影响到lvs配置其他文件的使用)

## 备份lvs配置
ipvsadm-save -n

## 备份配置到指定文件中
ipvsadm-save -n > lvs_config.txt


## 将lvs配置导入到lvs中
ipvsadm-restore < lvs_config.txt

LVS结合keepalive工具

若机器异常则自动移出均衡池,正常启动后机器数据会返回均衡池

virtual_server 192.168.101.188 80 {
    delay_loop 6    
    lb_algo wrr    
    lb_kind DR   
persistence_timeout  60   
    protocol TCP     
    real_server 192.168.33.12 80 {
        weight 100        
        TCP_CHECK {
        connect_timeout 10 
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.33.13 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }

基于HTTP状态码校验

real_server 192.168.1.4 80 { 
    weight 100
    HTTP_GET { 
    url { 
    path /monitor/warn.jsp 
    status_code 200 
     } 
    connect_timeout 10 
    nb_get_retry 3 
    delay_before_retry 3 
 } 
}

基于md5情况校验

  • TUN模式原理

用户请求到达Director之后,lvs通TUN管道加密技术将把报文的目标MAC地址换成后端MAC地址,然后后端基于报文MAC地址进行解密,如果在同一个网段,将直接返回给用户,不在同一个网段则通过路由器网关返回给用户


网站公告

今日签到

点亮在社区的每一天
去签到