LVS负载均衡之--Keepalived模式(超详细)

一.Keepalived概述

  • Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能-----判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集中
  • Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
     

1.1Keepalived的工作原理

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
 

1.2Keepalived体系主要模块及其作用

   keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

  • core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  • vrrp模块:是来实现VRRP协议的。
  • check模块:负责健康检查,常见的方式有端口检查及URL检查。

1.3 VRRP (虚拟路由冗余协议)

vrrp会把多台路由器组成一个虚拟路由组vrid,VRRP会生成一个虚拟路由(包含虚拟IP和虚拟MAC,局域网内用户不关心哪个是主哪个是备,他们只用虚拟路由器的的虚拟IP作为他们的网关)实际上虚拟IP是承载再master路由器,也就是说实际的数据通过master进行转发,backup是通过优先级来决定哪个是master路由,优先级最大的那台就是master,backup只是用来监听master定时发来的vrrp报文,如果超时未收到master发来的vrrp报文 backup就会抢占master 虚拟IP也就会一漂移到backup上
 

二、LVS负载均衡之--Keepalived模式实例部署

部署准备

主服务器:192.168.50.22     虚拟VIP:192.168.50.23

备服务器:192.168.50.41

Web服务器1:192.168.50.56

Web服务器2:192.168.50.57

 部署主服务器配置(192.168.50.22)

必须执行操作

1.#关闭防火墙

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0

[root@localhost keepalived]# modprobe ip_vs
[root@localhost keepalived]# cat /proc/net/ip_vs

2.#安装Keepalived服务

[root@localhost ~]# yum -y install ipvsadm keepalived

3.#备份keeplived.conf文件

[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# ls

4.#修改配置keeplived.conf文件

[root@localhost keepalived]# vim keepalived.conf

--10行--修改,邮件服务指向本地
  smtp_server 127.0.0.1

--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02

  router_id LVS_01

--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接

   #vrrp_strict

vrrp_instance VI_1 {                #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致    
    virtual_router_id 10
    #nopreempt        #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    priority 100
    advert_int 1                    #通告间隔秒数(心跳频率)
    authentication {                #定义认证信息,每个热备组保持一致
        auth_type PASS                #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 123
    }
    virtual_ipaddress {                #指定群集vip地址
        192.168.50.23
    }
}

--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.50.23 80 {
    delay_loop 6                    #健康检查的间隔时间(秒)
    lb_algo rr                        #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 0            #连接保持时间(秒)
    protocol TCP                    #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.50.56 80 {
        weight 1                    #节点的权重
--45行--删除,添加以下健康检查方式        
        TCP_CHECK {
            connect_port 80            #添加检查的目标端口
            connect_timeout 3        #添加连接超时(秒)
            nb_get_retry 3            #添加重试次数
            delay_before_retry 3    #添加重试间隔
        }
    }

    real_server 192.168.50.57 80 {        #添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
##删除后面多余的配置##
}

5.#刷新服务并查看虚拟网卡的IP

[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip addr show dev ens33 

6.#调整响应参数

[root@localhost keepalived]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

 #刷新一下

 [root@localhost keepalived]# sysctl -p

7.#配置策略并且启动服务

 [root@localhost keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm
 [root@localhost keepalived]# systemctl start ipvsadm

8.#清空ipvsadm,并做策略

 [root@localhost keepalived]# ipvsadm -C
[root@localhost keepalived]# ipvsadm -A -t 192.168.50.23:80 -s rr
[root@localhost keepalived]#  ipvsadm -a -t 192.168.50:23:80 -r 192.168.50.56:80 -g
illegal virtual server address[:port] specified
[root@localhost keepalived]#  ipvsadm -a -t 192.168.50.23:80 -r 192.168.50.56:80 -g
[root@localhost keepalived]#  ipvsadm -a -t 192.168.50.23:80 -r 192.168.50.57:80 -g
[root@localhost keepalived]# ipvsadm 

[root@localhost keepalived]# ipvsadm -ln

 [root@localhost keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm

部署备服务器配置(192.168.50.41)

注:所有部署参照上方部署主服务器配置

部署节点服务器

Web服务器1:192.168.50.56

Web服务器2:192.168.50.57

Web服务器2:192.168.50.56

1.#关闭防火墙

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

2.#安装并开启httpd服务

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

[root@localhost ~]#systemctl start httpd

3.#配置站点文件

[root@localhost ~]# vim /var/www/html/index.html

 4.#配置虚拟IP

[root@localhost ~]#  /etc/sysconfig/network-scripts/ifcfg-lo:0
[root@localhost opt]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0

DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.50.23
NETMASK=255.255.255.255

5.#重启服务并配置虚拟网卡
[root@localhost network-scripts]# systemctl restart network

[root@localhost ~]# ifup lo:0
[root@localhost ~]# ifconfig lo:0

6.#设置路由

[root@localhost ~]# route add -host 192.168.50.23 dev lo:0
[root@localhost ~]# route -n

7. #调整响应参数并查看

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

 [root@localhost ~]# sysctl -p            

注:Web服务器2:192.168.50.57 同Web服务器2配置

浏览器验证 

 过一会刷新

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

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

相关文章

【数据结构】二叉树

🐇 🔥博客主页: 云曦 📋系列专栏:数据结构 💨吾生也有涯,而知也无涯 💛 感谢大家👍点赞 😋关注📝评论 文章目录 前言一、树的概念及结构&#x…

简单理解Python中的深拷贝与浅拷贝

I. 简介 深拷贝会递归的创建一个完全独立的对象副本,包括所有嵌套的对象,而浅拷贝只复制嵌套对象的引用,不复制嵌套对象本身。 简单来说就是两者都对原对象进行了复制,因此使用is运算符来比较新旧对象时,返回的都是F…

java把数字转换成汉字 java 数字转汉字

使用java将数字转化为中文汉字_java数字转中文_javaerly的博客-CSDN博客 package com.unicom.apartment.utils;public class NumUtil {public static String convert(int number) {if(number < 0){return "";}if(number 1){return "当天";}//数字对应的…

C#实现普通的语音播报

Windows有文字转语音功能&#xff0c;C#提供了调用的类库Interop.SpeechLib.dll 使用方法很简单&#xff0c;在你的项目中添加Interop.SpeechLib.dll引用&#xff0c;在类中引用&#xff1a; using SpeechLib;这里提供一个CVoice类 帮助实现语音播报 public class CVoice{pri…

【5G 核心网】5G 多PDU会话锚点技术介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

Spring Boot(六十四):SpringBoot集成Gzip压缩数据

1 实现思路 2 实现 2.1 创建springboot项目 2.2 编写一个接口,功能很简单就是传入一个Json对象并返回 package com.example.demo.controller;import com.example.demo.entity.Advertising; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframewo…

LeetCode150道面试经典题-- 加一(简单)

1.题目 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 2.示例 示例 1&#xff1a; 输入&am…

excel提示更新外部引用文件 这个提示能手动禁用

是的&#xff0c;你可以手动禁用 Excel 中的更新外部引用文件的提示。这些步骤可能因 Excel 版本而有所不同&#xff0c;以下是一般的步骤&#xff1a; 1. **打开 Excel**&#xff1a; 2. **进入“选项”**&#xff1a; - 在 Excel 中&#xff0c;点击顶部菜单中的“文件”…

网络通信原理传输层TCP三次建立连接(第四十八课)

ACK :确认号 。 是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。确认号X+1SEQ:序号字段。 TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的…

「UG/NX」Block UI 面收集器FaceCollector

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

LangChain手记 Question Answer 问答系统

整理并翻译自DeepLearning.AILangChain的官方课程&#xff1a;Question Answer&#xff08;源代码可见&#xff09; 本节介绍使用LangChian构建文档上的问答系统&#xff0c;可以实现给定一个PDF文档&#xff0c;询问关于文档上出现过的某个信息点&#xff0c;LLM可以给出关于该…

【vue】项目基础环境搭建、css样式重置与公用

nodejs环境 nodejs是当下前端工程化开发必不可少的环境, 使用 nodejs的 npm功能来管理依赖包 查看node 和 npm的版本 node -v #查看node版本npm -v #查看npm版本 git版本控制 git版本控制工具是目前最为流行的分布式版本管理工具,代码的**提交, 检出, 日志**, 都需要通过git完…

Matplotlib数据可视化(二)

目录 1.rc参数设置 1.1 lines.linestype取值 1.2 lines.marker参数的取值 1.3 绘图中文预设 1.4 示例 1.4.1 示例1 1.4.2 示例2 1.rc参数设置 利用matplotlib绘图时为了让绘制出的图形更加好看&#xff0c;需要对参数进行设置rc参数设置。可以通过以下代码查看matplotli…

C++11并发与多线程笔记(8) condition_variable、wait、notify_one、notify_all

C11并发与多线程笔记&#xff08;8&#xff09; condition_variable、wait、notify_one、notify_all 1、条件变量condition_variable、wait、notify_one、notify_all1.1 std::condition_variable1.2 wait()1.3 notify_one()1.4 notify_all() 2、深入思考 1、条件变量condition_…

JS内存泄漏

JS内存泄漏 1.意外的全局变量 全局变量的生命周期很长&#xff0c;直到页面关闭&#xff0c;它都存活&#xff0c;所以全局变量上的内存一直都不会被回收 当全局变量使用不当&#xff0c;没有及时回收&#xff08;手动赋值null&#xff09;&#xff0c;或者拼写错误等将某个变…

[Machine Learning] decision tree 决策树

&#xff08;为了节约时间&#xff0c;后面关于机器学习和有关内容哦就是用中文进行书写了&#xff0c;如果有需要的话&#xff0c;我在目前手头项目交工以后&#xff0c;用英文重写一遍&#xff09; &#xff08;祝&#xff0c;本文同时用于比赛学习笔记和机器学习基础课程&a…

【算法学习】两数之和II - 输入有序数组

题目描述 原题链接 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < …

Springboot MultipartFile文件上传与下载

yml文件配置是否可以上传及上传附件大小 servlet:multipart:# 允许文件上传enabled: true# 单个文件大小max-file-size: 20MB# 设置总上传的文件大小max-request-size: 50MB /*** param files* param request* Description 上传文件* Throws* Return java.util.List* Date 202…

南大通用数据库(Gbase 8s) 创建UDR外部函数

一、在使用 date_format、from_unixtime、to_days、yearweek 函数时&#xff0c;Gbase 8s 数据库不支持&#xff0c;可以使用创建 UDR 外部函数来实现 二、登录命令控制台或者使用 navicat 连接 Gbase 数据库 这里使用 navicat &#xff0c;点击新增连接选择 PostGreSql 驱动…

动手学深度学习—卷积神经网络LeNet(代码详解)

1. LeNet LeNet由两个部分组成&#xff1a; 卷积编码器&#xff1a;由两个卷积层组成&#xff1b;全连接层密集块&#xff1a;由三个全连接层组成。 每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均汇聚层&#xff1b;每个卷积层使用55卷积核和一个sigmoid激…