草庐IT

keepalived配置和使用

gy001 2023-03-28 原文

1、keepalived的简单介绍

keepalived是基于vrrp协议的软件来实现的,原生设计的目的就是为了高可用ipvs服务。它的功能如下:

1、基于vrrp协议完成地址流动
2、为vip地址所在的节点生成ipvs的规则(是在配置文件中预先定义的)
3、为ipvs集群的各real server来做健康状态检测
4、基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

2、编译安装keepalived

源码下载地址: https://keepalived.org/download.html

现在官方的最新版是2.2.7的版本,我实验使用的系统是ubuntu20.04的系统,系统apt包只带的有点老是2.0.19的版本,不过在这里我就编译安装一个最新版本的keepalived。

2.1、安装相关依赖包

[root@ubuntu2004 ~]#apt -y install curl gcc libssl-dev libnl-3-dev libnl-genl-3-dev libsnmp-dev

2.2、下载源码包并解压

[root@ubuntu2004 ~]#cd /usr/local/src/
[root@ubuntu2004 src]#wget https://keepalived.org/software/keepalived-2.2.7.tar.gz
--2022-10-27 15:20:46--  https://keepalived.org/software/keepalived-2.2.7.tar.gz
Resolving keepalived.org (keepalived.org)... 91.121.30.175
Connecting to keepalived.org (keepalived.org)|91.121.30.175|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1180180 (1.1M) [application/octet-stream]
Saving to: ‘keepalived-2.2.7.tar.gz’

keepalived-2.2.7.tar.gz        100%[=======================================================================>]   1.12M   834KB/s    in 1.4s    

2022-07-12 15:20:49 (834 KB/s) - ‘keepalived-2.2.7.tar.gz’ saved [1180180/1180180]
[root@ubuntu2004 src]#tar xf keepalived-2.2.7.tar.gz

2.3、编译安装

进入到刚刚解压完后的目录下,执行configure脚本生成Makefile文件,执行configure的时候是有很多选项的,编译keepalived的时候是可以不用加什么选项的,可以指定一下安装的目录,还可以加上–disable-fwmark选项来防止安装后生成的iptables规则会导致VIP无法访问的。

[root@ubuntu2004 keepalived-2.2.7]#cd keepalived-2.2.7/
[root@ubuntu2004 keepalived-2.2.7]# ls
aclocal.m4  autogen.sh   build-aux    ChangeLog  configure.ac  COPYING  Dockerfile.in  keepalived          lib  Makefile.am  README.md  TODO
AUTHOR      bin_install  build_setup  configure  CONTRIBUTORS  doc      INSTALL        keepalived.spec.in  m4   Makefile.in  snap       tools
[root@ubuntu2004 keepalived-2.2.7]# ./configure --prefix=/usr/local/keepalived --disable-fwmark #选项--disable-fwmark 可用于禁用iptables规则,可防止VIP无法访问,无此选项默认会启用iptables规则
[root@ubuntu2004 keepalived-2.2.7]# make -j 2 && make install

2.4、准备相关配置文件

#查看生成的二进制程序,并使用查看一下版本
[root@ubuntu2004 keepalived-2.2.7]# ls /usr/local/keepalived/sbin/
keepalived
[root@ubuntu2004 keepalived-2.2.7]#/usr/local/keepalived/sbin/keepalived -v
Keepalived v2.2.7 (01/16,2022)

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

Built with kernel headers for Linux 4.15.18
Running on Linux 4.15.0-188-generic #199-Ubuntu SMP Wed Jun 15 20:42:56 UTC 2022
Distro: Ubuntu 18.04.6 LTS

configure options: --prefix=/usr/local/keepalived --disable-fwmark

Config options:  LVS VRRP VRRP_AUTH VRRP_VMAC OLD_CHKSUM_COMPAT INIT=systemd

System options:  VSYSLOG MEMFD_CREATE IPV4_DEVCONF RTA_ENCAP RTA_EXPIRES RTA_NEWDST RTA_PREF FRA_SUPPRESS_PREFIXLEN FRA_SUPPRESS_IFGROUP FRA_TUN_ID RTAX_CC_ALGO RTAX_QUICKACK RTEXT_FILTER_SKIP_STATS FRA_L3MDEV FRA_UID_RANGE RTAX_FASTOPEN_NO_COOKIE RTA_VIA RTA_TTL_PROPAGATE IFA_FLAGS LWTUNNEL_ENCAP_MPLS LWTUNNEL_ENCAP_ILA NET_LINUX_IF_H_COLLISION LIBIPTC_LINUX_NET_IF_H_COLLISION IPVS_DEST_ATTR_ADDR_FAMILY IPVS_SYNCD_ATTRIBUTES IPVS_64BIT_STATS VRRP_IPVLAN IFLA_LINK_NETNSID GLOB_BRACE GLOB_ALTDIRFUNC INET6_ADDR_GEN_MODE VRF

#拷贝service文件和conf配置文件
[root@ubuntu2004 keepalived-2.2.7]# cp /usr/local/src/keepalived-2.2.7/keepalived/keepalived.service /lib/systemd/system/
[root@ubuntu2004 keepalived-2.2.7]# mkdir /etc/keepalived
[root@ubuntu2004 keepalived-2.2.7]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf

2.5、启动keepalived服务

[root@ubuntu2004 keepalived-2.2.7]#systemctl enable --now keepalived.service
[root@ubuntu2004 keepalived-2.2.7]#systemctl status  keepalived.service
● keepalived.service - LVS and VRRP High Availability Monitor
     Loaded: loaded (/lib/systemd/system/keepalived.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-10-27 15:21:26 CST; 1h 27min ago
       Docs: man:keepalived(8)
             man:keepalived.conf(5)
             man:genhash(1)
             https://keepalived.org
   Main PID: 228720 (keepalived)
      Tasks: 3 (limit: 4575)
     Memory: 2.4M
     CGroup: /system.slice/keepalived.service
             ├─228720 /apps/keepalived/sbin/keepalived --dont-fork -D
             ├─228733 /apps/keepalived/sbin/keepalived --dont-fork -D
             └─228734 /apps/keepalived/sbin/keepalived --dont-fork -D

3、keepalived的配置文件介绍

keepalived配置文件为/etc/keepalived/keepalived.conf,主要是有global_defs、vrrp_instance和virtual_server三个模块构成的。

3.1、global_defs

这里的global_defs是keepalived的全局的配置,它里面的配置有以下内容

notification_email:可以添加keepalived发现故障切换是发送邮件到指定的邮箱,这里可以指定多个邮箱;
notification_email_from:指定发邮件的地址;
smtp_server:指定邮件服务器的地址;
smtp_connect_timeout:指定邮件服务器连接超时的时长;
router_id:每个keepalived节点的唯一标识,这里可以设置主机的主机名,但是多节点重名不影响;
vrrp_skip_check_adv_addr:对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict:严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1、无VIP地址 2、配置了单播邻居 3、在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置;
vrrp_garp_interval:设置ARP接口之间发送免费报文的延迟时间,这个可以精确到毫秒,默认是0;
vrrp_gna_interval:设置非请求消息的发送延迟时间,默认为0;
vrrp_mcast_group4:指定组播的IP范围,可以选择224.0.0.0到239.255.255.255这个范围内的地址,默认设置的是224.0.0.18;
vrrp_iptables:与vrrp_strict同时设置时,是不会添加iptables规则的,注释或者无vrrp_strict时可不加此项。

 

 

 3.2、vrrp_instance

vrrp_instance这个模块是配置虚拟路由器的,配置项有以下内容

vrrp_instance的string为设置的VRRP的实例名,生产环境都是设置项目名称;
state:设置当前节点在此虚拟路由器上的初始化状态,状态为MASTER或者BACKUP;
interface:可以绑定当前虚拟路由器所使用的物理接口,比如eth0,bond0,br0,可以和VIP不在一个网卡上;
virtual_router_id:设置每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
priority:设置当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同
advert_int:设置VRRP通告的时间间隔,默认1s
authentication:设置认证机制,需要设置两部分
    1、auth_type:设置认证类型,有两种选择一个是AH类型,另一种是PASS类型,AH为IPSC互联网安全认证,而PASS是简单的密码认证,这里推荐使用PASS认证,默认是使用的PASS认证。
    2、auth_pass:预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点的值必须一样
virtual_ipaddress:设置虚拟路由器的虚拟IP,生产环境可能指定上百个IP地址,设置虚拟IP对应的子网掩码、网卡和标签等,设置多个虚拟IP使用换行隔开,不指定网卡时它会默认添加到默认的网卡上,不设置子网掩码的话默认是32位的,在环境中还要查看设置的虚拟IP是否已经存在,也就是是否在使用了。

 

 

 

3.3、virtual_server

virtual_server模块是用于配置虚拟服务器,将虚拟路由器中添加的VIP与后端real server对应起来,该模块配置包括以下内容

virtual_server后面需要跟上虚拟IP地址和端口,也就是让客户端通过哪个vip和哪个端口来向后端服务器发起访问;
delay_loop:设置检查后端服务器的时间间隔;
lb_algo:指定调度算法;
lb_kind:指定集群的类型;
persistence_timeout:指定持久连接的时长;
protocol:指定服务的协议;
real_server:设置VIP所对应的后端服务器IP和端口,也包括以下的配置部分
    1、weight:设置后端服务器的权重
    2、SSL_GET、HTTP_GET、TCP_CHECK、SMTP_CHECK和MISC_CHECK等可以定义当前后端主机的健康状况检查方法;
    3、connect_timeout:设置客户端的连接超时的时长;
    4、retry:重试的次数;
    5、delay_before_retry:初始之前的延迟时长;

 

有关keepalived配置和使用的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐