高可用和负载均衡学习笔记

2023-05-16

负载均衡(LB):load balancer 化整为零
高可用(HA):High Avilibility 互相备份,互相替换 防止单点故障
好处:防止单点故障,保障系统的正常运行
坏处:多搞了服务器,加大投入。

HA 软件:
keepalived :开源免费,深度融合了LVS,可以实现高可用和负载均衡

heartbeat
HAproxy :可以实现高可用和负载均衡
LB 软件:

keepalived

keepalived 是一个用C语言编写的路由软件,主要目标是为Linux系统和基于Linux的基础设施提供负载平衡和高可用性设施。
负载均衡:是用LVS的(IPVS)内核模块提供Layer 4负载均衡。
高可用性:是通过VRRP协议。
VRRP是路由器故障转移的基本块。此外,Keepalied还实现了一组连接到VRRP有限状态机的钩子,提供了低速和高速的协议交互。为了提供最快的网络故障检测。

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
heartbeat是集群管理中保证集群高可用的一个服务软件

keepalived 是基于VRRP协议实现的

VRRP协议:虚拟路由冗余协议,可以认为是实现路由器高可用的一个协议

就是将多个相同功能的路由组成一个路由器组,
然后这个组里面有有个master和多个backup,这个路由器组它对外提供服务的是一个vip,虚拟ip,这个虚拟ip是放在master上面的,

这个master会定时的发送组播给所有的backup,当backup收不到master发送的vrrp包的时候就认为master已经挂掉了,
然后就会根据vrrp的优先级再选出一个backup来当master,从而保证了路由器的一个高可用

keepalived 主要有三个模块:core,check,vrrp

core:核心模块:负责进程的启动及维护,配置文件的加载和解析
check:负责进行健康检查,常见的检查方式:
vrrp模块是用来实现vrrp协议的

keepalived 的配置文件:keepalived.conf

配置域:
global_defs:
内容:邮件的配置,机器的标识
作用:是当发生故障的时候的通知对象以及机器的一些标识
static_ipaddress和static_ipaddress : 配置本节点的ip信息和路由信息
如果自己的机器上已经配置了ip和路由的话,这两个地方就不用再去配置了

vrrp_script
用来在健康检查的,当检查失败的时候,vrrp_script里面有一个权重值,vrrp_instance 里的priority就会减少相应的权重值
vrrp_instance
用来定义对外提供服务的vip及相关属性的
vrrp——rsync_group 它是用来定义vrrp_instance组的,可以使这个组内的成员动作一致
就是比如说有两个vrrp_instance在这个组里面,当其中一个vrrp_instance发生故障切换时,
另一个也会跟着切换,即使他没有发生故障

相关参数:
smtp_alert 表示是否开启邮件通知(用全局区域的邮件设置来发通知)
state 可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER,因此该项其实没有实质用途。
interface 节点固有IP(非VIP)的网卡,用来发VRRP包。
virtual_router_id 取值在0-255之间,用来区分多个instance的VRRP组播。
同一网段中virtual_router_id的值不能重复,否则会出错
可以用这条命令来查看该网络中所存在的vrid:tcpdump -nn -i any net 224.0.0.0/8
priority 用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)。
advert_int 发VRRP包的时间间隔,即多久进行一次master选举(可以认为是健康查检时间间隔)。
virtual_ipaddress vip,不解释了。
virtual_routes 虚拟路由,当IP漂过来之后需要添加的路由信息。

nopreempt 允许一个priority比较低的节点作为master,即使有priority更高的节点启动。

virtual_server_group一般在超大型的LVS中用到,一般LVS用不上这东西

keepalived主从切换
将backup的配置项里的priority选项的值调整的比master高50个点,然后再刷新一下配置文件就可以了
也可以将master的keepalive停止,让keepalived的backup们重新选举

keepalived 仅做HA时的配置
1,keepalived主机,配置文件
2,keepalived的备用机器 配置文件
3,vip,对内提供服务的内网ip地址
4,对外提供服务的公网ip地址

LVS+Keepalived配置
keepalived与LVS结合使用的时候。会用到一个工具ipvsadm
用来查看相关VS的状态

编译安装keepalived

去官网下载压缩包
解压
cd keepalived-xxx
./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share
make && make install

实验

master机器上和backup上做同等操作

1,安装keepalive

[root@master  ~]# yum intall keepalived -y 
已加载插件:fastestmirror, product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

没有该命令:intall。请使用 /usr/bin/yum --help
[root@master  ~]# /usr/bin/yum install keepalived -y
已加载插件:fastestmirror, product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.njupt.edu.cn
base                                                                                                                   | 3.6 kB  00:00:00     
extras                                                                                                                 | 2.9 kB  00:00:00     
updates                                                                                                                | 2.9 kB  00:00:00     
正在解决依赖关系
--> 正在检查事务
查看keepalived 的版本
[root@master  ~]# keepalived -v
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2

Copyright(C) 2001-2017 Alexandre Cassen, <acassen@gmail.com>

Build options:  PIPE2 LIBNL3 RTA_ENCAP RTA_EXPIRES RTA_PREF FRA_OIFNAME FRA_SUPPRESS_PREFIXLEN FRA_TUN_ID RTAX_CC_ALGO RTAX_QUICKACK LIBIPTC LIBIPSET_DYNAMIC LVS LIBIPVS_NETLINK VRRP VRRP_AUTH VRRP_VMAC SOCK_NONBLOCK SOCK_CLOEXEC FIB_ROUTING INET6_ADDR_GEN_MODE SNMP_V3_FOR_V2 SNMP SNMP_KEEPALIVED SNMP_CHECKER SNMP_RFC SNMP_RFCV2 SNMP_RFCV3 SO_MARK

先备份(修改配置文件前先备份)

[root@swarm-manager keepalived]# cp keepalived.conf /root

修改配置文件

[root@master ~]# cd /etc/keepalived/
[root@master  keepalived]# ls
keepalived.conf
[root@lb-nginx keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 151
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
    }
}

启动keepalived

[root@swarm-manager keepalived]# service keepalived start 
Redirecting to /bin/systemctl start keepalived.service
#查看Keepalived 进程是否启动
[root@lb-nginx keepalived]# ps aux |grep keepalived
root      14407  0.0  0.0 122888  1412 ?        Ss   11:37   0:00 /usr/sbin/keepalived -D
root      14408  0.0  0.0 133848  3344 ?        S    11:37   0:00 /usr/sbin/keepalived -D
root      14409  0.0  0.0 133720  2656 ?        S    11:37   0:00 /usr/sbin/keepalived -D
root      14412  0.0  0.0 112728   976 pts/0    S+   11:38   0:00 grep --color=auto keepalived

[root@master keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:77:73:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.33/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.200.16/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.200.17/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.200.18/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe77:73fe/64 scope link 
       valid_lft forever preferred_lft forever

keepalived --脑裂现象

什么是脑裂现象?
master和backup上都有vip

为什么会出现脑裂现象?
1, 两边的vrrp通告报文不能正常发送,可能是网络不通畅,或两边都有防火墙
使master发送的证明自己还活着的数据包不能成功发送给backup,两边联系不上了,backup也会生成vip,
2, master和backup的router id不同
3,优先级一样也会出现脑裂

脑裂的影响是什么?
不影响用户使用 ,如果是局域网的用户使用,反而还可以起到一个负载均衡的作用,但缺点是有随机性,不可控,决定权不在管理员的手中了,而是在arp缓存表里存的是哪个复杂载均衡器的mac地址(arp缓存表里一个ip只能对应一个mac),给管理员的管理带来了不便。

keepalived (高可用)和LVS (负载均衡)

LVS :DNAT
NGINX:FULLNAT
master和backup上必须要开启路由功能
并且real server要填写网关
双vip的使用场景:DNAT
nginx不需要使用双vip

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高可用和负载均衡学习笔记 的相关文章

  • ubuntu下录屏软件kazam及使用问题

    Ubuntu下视频录制工具kazam及问题 视频录制工具 在Ubuntu或linux下录制视频应该是每个用linux的朋友都会用到的 xff0c 这里笔者使用了Kazam 功能挺多的 xff0c 包括截屏 xff08 虽然ubuntu有自带
  • NUC安装Ubuntu18.04系统

    NUC安装Ubuntu18 04系统 基本信息前言安装过程配置Ubuntu18 04系统镜像安装系统解决系统字体过大 分辨率低的问题测试 其他软件安装 基本信息 Time xff1a 2021 3 9使用NUC版本 xff1a 猎豹峡谷NU
  • 11代i5 NUC使用记录

    11代i5 NUC使用记录 NUC信息NUC选型配置过程内存条固态安装安装windows安装Ubuntu18 04使用ROS2GO 其他学习总结 NUC信息 NUC基本信息 xff1a NUC xff1a Next Unit of Comp
  • ROS rosdep initupdate报错解决方法

    ROS rosdep init update报错解决方法 在安装ROS的过程中 xff0c 很多同学在执行上述指令时会提示以下错误 xff1a ERROR cannot download default sources list from
  • Ubuntu18.04下使用D435i跑ROS包和ORB-SLAM2

    Ubuntu18 04下使用D435i跑ROS包和ORB SLAM2相关问题 前言主要问题及解决方法汇总一 realsense包版本问题二 无法定位安装包问题三 警告问题四 如何检测是否发布五 利用D435i跑ORB SLAM2一点注意 后
  • 小觅双目sdk地址

    https mynt eye d sdk readthedocs io zh CN latest sdk install ubuntu src html
  • FreeRTOS移植STM32F4

    64 TOC FreeRTOS FreeRTOS移植到STM32F4上 本文章讲解一下如何将FreeRTOS移植到STM32F4开发板上 xff0c 如有不对之处 xff0c 欢迎指正 xff0c 多多交流 一 创建工程文件及代码调试 我们
  • stm32使用串口进行通讯之发送数据

    前提准备 xff1a 1 库函数基础模板 2 stlink下载器 USB TTL下载器 单片机最小开发板stm32F103C8T6 3 面包板及相关接线 4 vscode与keil的联合开发更流畅 5 串口软件 xff0c 这个下面视频有
  • 什么是事件流(总结),ECMAScript6(总结)

    1 xff0c 事件流 xff08 1 xff09 事件流是指页面 接收事件的顺序 xff08 2 xff09 假设页面中的元素都具备相同的事件 并且这些个元素之间是相互嵌套的 关系 xff08 3 xff09 那么在触发一个元素的事件时候
  • rabbitmq消息可靠性分析

    通过firehose插件跟踪消息过程 开发测试阶段用于分析消息消费的过程 xff0c 生产关闭 xff0c 以免影响整体性能 rabbitmq tracing 插件相当于Firehose 的GUI 版本 xff0c 能跟踪RabbitMQ
  • vscode拉取git代码到本地提示 在签出前,请清理存储库工作树

    最近使用vscode拉取git代码到本地提示 在签出前 请清理存储库工作树 xff0c 具体如图 xff1a 一 原因分析 原因很简单 xff0c 就是因为本地代码和git远程库代码存在冲突 xff0c 也就是你改的文件 xff0c 别人也
  • UCOSIII 系统(STM32任务管理)学习笔记

    作者 xff1a 瓴 时间 xff1a 2021 07 28 UCOSIII 系统 xff08 STM32任务管理 xff09 学习笔记 UCOSIII 系统学习笔记一 UCOSIII 任务管理1 任务状态2 任务控制块 OS TCB3 任
  • 主机字节序和网络字节序

    1 大端字节序和小端字节序 xff1a 大端字节序存储时值的高位存储在较小的地址 xff0c 值的低位存储在较大的地址 小端字节序存储时值的高位存储在较大的地址 xff0c 值的低位存储在较小的地址 以0x12345678为例 xff1a
  • 神经网络中Batch和Epoch

    随机梯度下降法是一种具有大量超参数的学习算法 通常会使初学者感到困惑的两个超参数 Batch大小和Epoch数量 它们都是整数值 xff0c 看起来做的事情是一样的 在这篇文章中 xff0c 您将发现随机梯度下降中Batch和Epoch之间
  • return返回一个数组(返回多个值)的方法

    两种方法可以让函数返回多个值 xff0c 一种是返回数组 xff0c 一种是返回结构体 下面只是返回数组的 xff1a span class token keyword int span span class token operator
  • 运行Python文件报错Microsoft Visual C++ Redistributable is not installed

    运行带有import torch的文件报错 xff1a Microsoft Visual C 43 43 Redistributable is not installed 提示可能是Microsoft Visual C 43 43 Redi
  • 数组全部赋值为0

    一 通用方法 xff08 强烈推荐 xff01 xff09 利用string h封装好的函数 span class token macro property span class token directive keyword includ
  • QT学习笔记(六)——①进度条可拖动、点击②有暂停按钮 的视频播放器

    一 配置文件更改 用到多媒体的话 xff0c 需要修改配置文件的第一行 xff0c 后面加一句 sql multimedia multimediawidgets 修改后的配置文件前3行如下 QT span class token opera
  • Elastic stack 技术栈学习(七)—— kibana中索引的基本操作(创建、删除、更新、查看)以及文档的基本操作

    目录 一 Restful风格 二 关于索引的基本操作 1 创建 xff08 1 xff09 创建索引 xff08 2 xff09 创建索引规则 2 GET获取信息 xff08 1 xff09 获得索引信息 xff08 2 xff09 获得文

随机推荐