centos7配置keepalive+lvs

news2024/11/26 20:49:25

拓扑图

  • 用户访问www.abc.com解析到10.4.7.8,防火墙做DNAT将访问10.4.7.8:80的请求转换到VIP 172.16.10.7:80,负载均衡器再将请求转发到后端web服务器。
    请添加图片描述

实验环境
在这里插入图片描述
VIP:负载均衡服务器的虚拟ip地址
LB :负载均衡服务器
realserver:后端真实服务器

一、配置防火墙,先让内网服务器能上网

1、先确认网关服务器能上网

(1) 查看网关服务器ip地址
[root@gateway ~]# ifconfig ens33 |grep -w "inet"
        inet 10.4.7.8  netmask 255.255.255.0  broadcast 10.4.7.255
[root@gateway ~]# ifconfig ens37 |grep -w "inet"
        inet 172.16.10.8  netmask 255.255.255.0  broadcast 172.16.10.255

(2) ping百度
[root@gateway ~]# ping www.baidu.com -c 2
PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data.
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=128 time=9.51 ms
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=2 ttl=128 time=8.90 ms

2、防火墙开启路由转发,并配置NAT规则

(1) 开启路由转发
[root@gateway ~]# sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf
[root@gateway ~]# sysctl -p

(2) 配置SNAT让来自172.16.10.0/24的内网用户能上网(公网ip不固定就是用自动寻路)
[root@gateway ~]# iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -j  MASQUERADE

(3) 配置DNAT让访问目标地址是10.4.7.8:80的请求,跳转到VIP172.16.10.7:80
[root@gateway ~]# iptables -t nat -A PREROUTING -p tcp  -d 10.4.7.8 --dport 80 -j DNAT --to-destination 172.16.10.7:80
[root@gateway ~]# service iptables save

3、将所有内网服务器网关指向gateway服务器内网ip

(1) lvs-master
[root@lvs-master ~]# echo -e "GATEWAY=172.16.10.8\nDNS1=8.8.8.8" >> /etc/sysconfig/network-scripts/ifcfg-ens33 
[root@lvs-master ~]# systemctl restart network
[root@lvs-master ~]# ping www.baidu.com
PING www.wshifen.com (104.193.88.77) 56(84) bytes of data.
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=1 ttl=127 time=198 ms

(2) lvs-slave
[root@lvs-slave ~]# echo -e "GATEWAY=172.16.10.8\nDNS1=8.8.8.8" >> /etc/sysconfig/network-scripts/ifcfg-ens33 
[root@lvs-slave ~]# systemctl restart network
[root@lvs-slave ~]# ping www.baidu.com
PING www.wshifen.com (104.193.88.77) 56(84) bytes of data.
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=2 ttl=127 time=218 ms

(3) web1
[root@web1 ~]# echo -e "GATEWAY=172.16.10.8\nDNS1=8.8.8.8" >> /etc/sysconfig/network-scripts/ifcfg-ens33
[root@web1 ~]# systemctl restart network 
[root@web1 ~]# ping www.baidu.com
PING www.wshifen.com (104.193.88.77) 56(84) bytes of data.
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=1 ttl=127 time=221 ms

(4) web2
[root@web2 ~]# echo -e "GATEWAY=172.16.10.8\nDNS1=8.8.8.8" >> /etc/sysconfig/network-scripts/ifcfg-ens33
[root@web2 ~]# systemctl restart network
[root@web2 ~]# ping www.baidu.com
PING www.wshifen.com (104.193.88.77) 56(84) bytes of data.
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=1 ttl=127 time=209 ms

二、配置keepalive+lvs

1、安装keepalived+lvs(keepalived和lvs 在一台服务器上,主备都安装)

(1) lvs-master
[root@lvs-master ~]# yum -y install keepalived   ipvsadm
[root@lvs-master ~]# keepalived -v                                     # 查看keepalived版本号
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
[root@lvs-master ~]# ipvsadm -v                                        # 查看ipvsadm版本号
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)

(2) lvs-slave
[root@lvs-slave ~]# yum -y install keepalived   ipvsadm
[root@lvs-slave ~]# keepalived -v
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
[root@lvs-slave ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)

2、配置keepalived+lvs主、备(keepalived是专门为lvs设计的)

  • 设置非抢占模式只在master上配置就可以
(1) 配置 lvs-master
[root@lvs-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@lvs-master ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL_01   # keepalive标识符,主备不能相同
}
vrrp_instance VI_1 {        # VRRP实例,主备必须相同
    state MASTER            # 角色,MASTER为主,BACKUP为备
    #state BACKUP            # 如果是非抢占模式要两边都为BACKUP
    interface ens33         # 监听的网卡
    virtual_router_id 51    # 虚拟路由标识,主备必须相同
    priority 150            # 优先级,主要高于备
    #nopreempt               # 开启非抢占模式(在优先级高的上面配置)
    advert_int 1            # 主备同步检查间隔1秒
    authentication {        # 主备认证密码
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {     
        172.16.10.7         # 设置虚拟ip地址
    }
}
################ 上面是keepalived设置,下面是lvs设置 ##################
virtual_server 172.16.10.7 80 {       # 基于上面的VIP创建虚拟服务器
    delay_loop 6                      # 健康检查时间
    lb_algo rr                        # 调度算法rr为轮训
    lb_kind DR                        # 负载均衡模式DR路由模式
    persistence_timeout 50            # 会话保持时间
    protocol TCP                      # 转发协议类型

    real_server 172.16.10.5 80 {      # 设置第一台后端web服务器
        weight 1                      # 设置web服务器权重
        HTTP_GET {                    # 设置健康检查页面,健康检查方式 常见有 TCP_CHECK, HTTP_GET, SSL_GET, MISC_CHECK(自定义脚本)
            url {
                path /index.html
                # digest的值这样生成 genhash -s 172.16.10.5 -p 80 -u /index.html
                digest d8cf4a4aed83e042d2b147561f1c83df
            }
            connect_timeout 8             # 设置响应超时时间
            nb_get_retry 3                # 设置超时重试次数
            delay_before_retry 3          # 设置超时重试间隔
        }
    }
    
    real_server 172.16.10.6 80 {      # 设置第二台后端web服务器
        weight 1                      # 设置web服务器权重
        HTTP_GET {                    # 设置健康检查页面
            url {
                path /index.html
                # digest的值这样生成 genhash -s 172.16.10.6 -p 80 -u /index.html
                digest  0583558e12e704650cd8bd72e0274347
            }
            connect_timeout 8             # 设置响应超时时间
            nb_get_retry 3                # 设置超时重试次数
            delay_before_retry 3          # 设置超时重试间隔
        }
    }
}

---------------------------------------------------------------------------------------------------

(2) 配置lvs-slave
[root@lvs-slave ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@lvs-slave ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL_02   # keepalive标识符,主备不能相同
}
vrrp_instance VI_1 {        # VRRP实例,主备必须相同
    state BACKUP             # 角色,MASTER为主,BACKUP为备
    interface ens33         # 监听的网卡
    virtual_router_id 51    # 虚拟路由标识,主备必须相同
    priority 90             # 优先级,主要高于备
    advert_int 1            # 主备同步检查间隔1秒
    authentication {        # 主备认证密码
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {     
        172.16.10.7   # 设置虚拟ip地址
    }
}

################ 上面是keepalived设置,下面是lvs设置 ##################
virtual_server 172.16.10.7 80 {       # 根据上面的VIP创建虚拟服务器
    delay_loop 6                      # 健康检查时间
    lb_algo rr                        # 调度算法rr为轮训
    lb_kind DR                        # 负载均衡模式DR路由模式
    persistence_timeout 50            # 会话保持时间
    protocol TCP                      # 转发协议类型

    real_server 172.16.10.5 80 {      # 设置第一台后端web服务器
        weight 1                      # 设置web服务器权重
        HTTP_GET {                    # 设置健康检查页面
            url {
                path /index.html
                # digest的值这样生成 genhash -s 172.16.10.5 -p 80 -u /index.html
                digest  d8cf4a4aed83e042d2b147561f1c83df
            }
            connect_timeout 8             # 设置响应超时时间
            nb_get_retry 3                # 设置超时重试次数
            delay_before_retry 3          # 设置超时重试间隔
        }
    }

    real_server 172.16.10.6 80 {      # 设置第二台后端web服务器
        weight 1                      # 设置web服务器权重
        HTTP_GET {                    # 设置健康检查页面
            url {
                path /index.html
                # digest的值这样生成 genhash -s 172.16.10.6 -p 80 -u /index.html
                digest  0583558e12e704650cd8bd72e0274347
            }
            connect_timeout 8             # 设置响应超时时间
            nb_get_retry 3                # 设置超时重试次数
            delay_before_retry 3          # 设置超时重试间隔
        }
    }
}

三、配置nginx服务器

1、配置web1

(1) 安装nginx
[root@web1 ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@web1 ~]# yum -y install nginx

(2) 增加虚拟主机
[root@web1 ~]# cat /etc/nginx/conf.d/www_abc_com.conf 
server {
    listen       80;
    server_name  www.abc.com;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
[root@web1 ~]# echo "web1-172.16.10.5" > /usr/share/nginx/html/index.html

(3) 配置vip,以及抑制ARP广播脚本
[root@web1 ~]# cat /etc/init.d/lvs_realserver 
#!/bin/sh  
VIP=172.16.10.7

Usage ()
{
  echo "Usage:`basename $0` (start|stop)"
  exit 1
}

if [ $# -ne 1 ];then
  Usage
fi

case $1 in
  start)
  echo "reparing for Real Server"
  echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  echo "1" >/proc/sys/net/ipv4/conf/ens33/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/ens33/arp_announce
  /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255  up
#/sbin/route add -host $VIP dev lo:0
  ;;
  stop)
  /sbin/ifconfig lo:0 down
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  echo "0" >/proc/sys/net/ipv4/conf/ens33/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/ens33/arp_announce
  echo "stop Real Server"
  ;; 
  *)
  Usage
esac

2、配置web2

(1) 安装nginx
[root@web2 ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@web2 ~]# yum -y install nginx

(2) 增加虚拟主机
[root@web2 ~]# cat /etc/nginx/conf.d/www_abc_com.conf 
server {
    listen       80;
    server_name  www.abc.com;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
[root@web2 ~]# echo "web2-172.16.10.6" > /usr/share/nginx/html/index.html

(3) 编写绑定vip和抑制ARP广播脚本
[root@web2 ~]# cat /etc/init.d/lvs_realserver 
#!/bin/sh  
VIP=172.16.10.7

Usage ()
{
  echo "Usage:`basename $0` (start|stop)"
  exit 1
}

if [ $# -ne 1 ];then
  Usage
fi

case $1 in
  start)
  echo "reparing for Real Server"
  echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  echo "1" >/proc/sys/net/ipv4/conf/ens33/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/ens33/arp_announce
  /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255  up
#/sbin/route add -host $VIP dev lo:0
  ;;
  stop)
  /sbin/ifconfig lo:0 down
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  echo "0" >/proc/sys/net/ipv4/conf/ens33/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/ens33/arp_announce
  echo "stop Real Server"
  ;; 
  *)
  Usage
esac

四、启动服务器

(1) 启动keepalive和lvs
[root@lvs-master ~]# systemctl start keepalived
[root@lvs-slave ~]# systemctl start keepalived

(2) 启动nginx、启动绑定VIP并抑制ARP广播的脚本
[root@web1 ~]# systemctl start nginx
[root@web1 ~]# /etc/init.d/lvs_realserver start
[root@web1 ~]# ifconfig lo:0 |grep "inet"
        inet 172.16.10.7  netmask 255.255.255.255   # 已经绑定vip

[root@web2 ~]# systemctl start nginx
[root@web2 ~]# /etc/init.d/lvs_realserver start
[root@web2 ~]# ifconfig lo:0 |grep "inet"
        inet 172.16.10.7  netmask 255.255.255.255



(3) 查看keepalived当前的vip状态和监听的后端web节点
[root@lvs-master ~]# ip add
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP
    inet 172.16.10.3/24 brd 172.16.10.255 scope global ens33   # 这是本机地址
    inet 172.16.10.7/32 scope global ens33    # keepalived已经绑定VIP成功
    
[root@lvs-master ~]# ipvsadm -L
TCP  lvs-master:http rr persistent 50
  -> 172.16.10.5:http             Route   1      3          0     # 监听后端web1      
  -> 172.16.10.6:http             Route   1      0          0     # 监听后端web2

五、客户端绑定hosts,并访问http://www.abc. com

1、设置hosts

172.16.10.7 www.abc.com

2、访问测试(由于是轮训rr算法,多次访问才会访问到web1上面)
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2228169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【亚马逊云科技】Amazon Bedrock搭建AI服务

前言 大模型应用发展迅速&#xff0c;部署一套AI应用的需求也越来越多&#xff0c;从头部署花费时间太长&#xff0c;然而亚马逊科技全托管式生成式 AI 服务 Amazon Bedrock&#xff0c;Amazon Bedrock 简化了从基础模型到生成式AI应用构建的复杂流程&#xff0c;为客户铺设了…

「C/C++」C/C++ 之 判断语句

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

git快速合并代码dev->master

需求&#xff1a; 日常开发都是在dev分支进行开发&#xff0c;但是dev代码开发测试完成后&#xff0c;需要将dev代码合到master主分支上 开始合并代码&#xff1a; 一、场景 一个代码仓库&#xff0c;包含两个分支&#xff0c;一个是master&#xff0c;另一个是dev&#xff1b…

uniapp使用uni-push模拟推送

uniapp使用uni-push模拟推送 第一步先去uniapp开发者中心添加开通uni-push功能 这里的Android 应用签名可以先用测试的官网有,可以先用这个测试 官方测试链接文档地址 在项目中的配置文件勾选 组件中使用 如果要实时可以去做全局ws //消息推送模版uni.createPushMessage(…

前沿技术与未来发展第一节:C++与机器学习

第六章&#xff1a;前沿技术与未来发展 第一节&#xff1a;C与机器学习 1. C在机器学习中的应用场景 C在机器学习中的应用优势主要体现在高效的内存管理、强大的计算能力和接近底层硬件的灵活性等方面。以下是 C 在机器学习领域的几个主要应用场景&#xff1a; 1.1 深度学习…

Java程序设计:spring boot(10)——单元测试

1 pom.xml 测试依赖添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId> </dependency> 2 Service业务方法测试 以 UserService 为例&#xff0c;src/test/java ⽬录下添…

解决edge浏览器无法同步问题

有时候电脑没带&#xff0c;但是浏览器没有同步很烦恼。chrome浏览器的同步很及时在多设备之间能很好使用。但是edge浏览器同步没反应。 在这里插入图片描述 解决方法&#xff1a; 一、进入edge浏览器点击图像会显示未同步。点击“管理个人资料”&#xff0c;进入后点击同步&…

21.java异常:关于java异常的学习笔记。 异常的分类,异常体系结构,异常处理机制

关于java异常的学习笔记 什么是异常异常的分类异常体系结构ErrorException异常处理机制IDEA中很重要的快捷键什么是异常 实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格…

记录一次mmpretrain训练数据并转onnx推理

目录 1.前言 2.代码 3.数据形态【分类用】 4.配置文件 5.训练 6.测试-分析-混淆矩阵等等&#xff0c;测试图片效果等 7.导出onnx 8.onnx推理 9.docker环境简单补充 1.前言 好久没有做图像分类了&#xff0c;于是想用商汤的mmclassification快速搞一波&#xff0c;发现已…

gb28181-sip注册流程

gb28181-sip注册流程 当客户端第一次接入时&#xff0c;客户端将持续向Server端发送REGISTER消息&#xff0c;直到Server端回复"200 OK"后结束 它的注册流程如下图&#xff1a; 注册流程&#xff1a; 1 . SIP代理向SIP服务器发送Register请求&#xff1a; 第1行表…

玄机-应急响应- Linux入侵排查

一、web目录存在木马&#xff0c;请找到木马的密码提交 到web目录进行搜索 find ./ type f -name "*.php" | xargs grep "eval(" 发现有三个可疑文件 1.php看到密码 1 flag{1} 二、服务器疑似存在不死马&#xff0c;请找到不死马的密码提交 被md5加密的…

如何有效提升MySQL大表分页查询效率(本文以一张900万条数据体量的表为例进行详细解读)

文章目录 1、提出问题1.1 问题测试 2、解决问题&#xff08;三种方案&#xff09;2.1、方案一&#xff1a;查询的时候&#xff0c;只返回主键 ID2.2、方案二&#xff1a;查询的时候&#xff0c;通过主键 ID 过滤2.3、方案三&#xff1a;采用 elasticSearch 作为搜索引擎 3、总结…

基于卷积神经网络的苹果病害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 苹果病害识别与防治系统&#xff0c;卷积神经网络&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积…

Java多线程编程基础

目录 编写第一个多线程程序 1. 方式一 : 继承Thread类, 重写run方法 2. 方式二: 实现Runnable接口, 重写run方法 3. 方式三: 使用Lambda表达式 [匿名内部类] [Lambda表达式] 在上个文章中, 我们了解了进程和线程的相关概念. 那么, 在Java中, 我们如何进行多线程编程呢? …

ffmpeg视频滤镜:网格-drawgrid

滤镜介绍 drawgrid 官网链接 》 FFmpeg Filters Documentation drawgrid会在视频上画一个网格。 滤镜使用 参数 x <string> ..FV.....T. set horizontal offset (default "0")y <string> ..FV.....T. set…

【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型

2024-arXiv-Lumiere: A Space-Time Diffusion Model for Video Generation Lumiere&#xff1a;视频生成的时空扩散模型摘要1. 引言2. 相关工作3. Lumiere3.1 时空 U-Net (STUnet)3.2 空间超分辨率的多重扩散 4. 应用4.1 风格化生成4.2 条件生成 5. 评估和比较5.1 定性评估5.2 …

没有对象来和我手撕红黑树吧

1. 红黑树的介绍 红黑树也是一种自平衡的二叉搜索树&#xff0c;在每一个节点增加了一个存储位来表示节点的颜色&#xff0c;可以是红色也可以是黑色&#xff0c;通过约束颜色来维持树的平衡&#xff0c;具有以下的性质&#xff1a; 每个节点不是红色就是黑色根节点为黑色如果…

【网络面试篇】TCP与UDP类

目录 一、综述 1. TCP与UDP的概念 2. 特点 3. 区别 4. 对应的使用场景 二、补充 1. 基础概念 &#xff08;1&#xff09;面向连接 &#xff08;2&#xff09;可靠的 &#xff08;3&#xff09;字节流 2. 相关问题 &#xff08;1&#xff09;TCP 和 UDP 可以同时绑定…

linux:回车换行+进度条+git理解与使用以及如何解决免密码push问题

目录 特殊符号 Linux小程序---进度条 1.\n和\r的理解 2.缓冲区 3.设计简单的倒计时 4.设计简单的进度条 git-版本控制器 1.理解什么是版本控制器? 2.git的使用 3.git的其他说明 总结上传过程 特殊符号 1.(取消显化) 的作用:执行指令,但指令本身不会显化; 举个例子:我…

智能家居10G雷达感应开关模块,飞睿智能uA级别低功耗、超高灵敏度,瞬间响应快

在当今科技飞速发展的时代&#xff0c;智能家居已经逐渐成为人们生活中不可或缺的一部分。从智能灯光控制到智能家电的联动&#xff0c;每一个细节都在为我们的生活带来便利和舒适。而在众多智能家居产品中&#xff0c;10G 雷达感应开关模块以其独特的优势&#xff0c;正逐渐成…