当前位置: 首页 > news >正文

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

一、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 BACKUPno_premmpt  ## 不抢占interface ens33treck_interface{ens33}virtual_route_id 50      ## 虚拟路由id标识priority 100               ## 优先级preempt_delay              ## 抢占延迟authenication{auth_type PASSauth_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||BACKUPinterface ens33lvs_sync_daemon_inteface ens33virtual_router_id 151     ## 虚拟路由IDpriority 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||BACKUPinterface ens33lvs_sync_daemon_inteface ens33virtual_router_id 152     ## 虚拟路由IDpriority 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||BACKUPinterface ens33lvs_sync_daemon_inteface ens33virtual_router_id 151     ## 虚拟路由IDpriority 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||BACKUPinterface ens33lvs_sync_daemon_inteface ens33virtual_router_id 152     ## 虚拟路由IDpriority 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:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1echo "RealServer Start OK"exit 0
;;                                                                                                                                                                                                                                         
stop)ifconfig lo:0 downroute del $VIP >/dev/null 2>&1echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announceecho "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 3delay_before_retry 3connect_port 80}}real_server 192.168.33.13 80 {weight 100TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}

基于HTTP状态码校验

real_server 192.168.1.4 80 { weight 100HTTP_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地址进行解密,如果在同一个网段,将直接返回给用户,不在同一个网段则通过路由器网关返回给用户

http://www.xdnf.cn/news/1305739.html

相关文章:

  • 利用Minicsv库解析csv文件的c程序及读入测试
  • expand.exe命令为什么能显示CD.iso的版本信息?
  • 中国象棋人机对战
  • Linux Namespace隔离实战:dd/mkfs/mount/unshare构建终极沙箱
  • Spring Boot 静态函数无法自动注入 Bean?深入解析与解决方案
  • MySQL 主键详解:作用与使用方法
  • 嵌入式:Linux软件编程:线程
  • 【详细操作指南】如何将 Moodle 与编辑器连接,以修改文档、检查和批改作业等
  • 2025年最新油管视频下载,附MassTube下载软件地址
  • 【Canvas与玻璃光】铝圈蓝底玻璃光按钮
  • 华为实验综合小练习
  • YAML:锚点深度解析,告别重复,拥抱优雅的配置艺术
  • 第二十四天:虚函数与纯虚函数
  • 【科研绘图系列】R语言绘制三维曲线图
  • MySQL多表查询案例
  • 关系型数据库从入门到精通:MySQL 核心知识全解析
  • 单片机常用通信协议(一)
  • ubuntu 24.04 通过部署ollama提供大模型api接口
  • Storage.AI解读:构建AI数据基础设施的开放标准
  • 【万字精讲】 左枝清减·右枝丰盈:C++构筑的二叉搜索森林
  • Java 中使用阿里云日志服务(SLS)完整指南
  • nifi 增量处理组件
  • 区块链:用数学重构信任的数字文明基石
  • 【0基础3ds Max】学习计划
  • 007TG洞察:特斯拉Robotaxi成本降低84%?技术驱动的效率革命对营销自动化的启示
  • 以下是对智能电梯控制系统功能及系统云端平台设计要点的详细分析,结合用户提供的梯控系统网络架构设计和系统软硬件组成,分点论述并补充关键要点:
  • 深度解读 Browser-Use:让 AI 驱动浏览器自动化成为可能
  • 初识CNN02——认识CNN2
  • 数据结构初阶:排序算法(二)交换排序
  • Boost库中boost::function函数使用详解