zl程序教程

您现在的位置是:首页 >  其他

当前栏目

如何安装keepalived、keepalived配置文件讲解

安装配置文件 如何 讲解 Keepalived
2023-09-11 14:21:21 时间

前言

环境:centos 7.9 keeplived官网:https://www.keepalived.org/

Keepalived是一款用于服务高可用的软件,主要用于企业服务的高可用。
高可用(原理、安装、启动、单实例配置、双实例双主配置实战篇)

安装keepalived软件

下面采用源码包编译安装的方式在两台服务器(LB01、LB02)上安装keepalived软件:

wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
tar -zxvf keepalived-2.2.7.tar.gz
yum install curl gcc openssl-devel libnl3-devel net-snmp-devel
cd keepalived-2.2.7/
./configure --prefix=/usr/local/keepalived/
echo $?
make -j 8
echo $?
make install

#如果觉得源码安装太麻烦,也可以直接yum install keepalived 安装keepalived 软件
# yum 安装的Keepalived配置文件在/etc/keepalived目录下

先查看keepalived的状态(先不启动,Keepalived很坑爹的)

systemctl status keepalived.service				#源码编译安装默认就使用了systemctl进行管理
#查看服务的状态
[root@node1 keepalived]# systemctl status  keepalived.service
  keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:keepalived(8)
           man:keepalived.conf(5)
           man:genhash(1)
           https://keepalived.org
#先别启动keepalived,因为还需要将配置文件移动到对应的目录并修改配置文件,否则Keepalived启动不起来的。这一点Keepalived太坑了。
#查看启动服务的文件
[root@node1 keepalived]# cat /usr/lib/systemd/system/keepalived.service
[Unit]
Description=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target 
Wants=network-online.target 
Documentation=man:keepalived(8)
Documentation=man:keepalived.conf(5)
Documentation=man:genhash(1)
Documentation=https://keepalived.org

[Service]
Type=forking
PIDFile=/run/keepalived.pid
KillMode=process
EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived		#这个是环境变量的配置文件
ExecStart=/usr/local/keepalived/sbin/keepalived  $KEEPALIVED_OPTIONS	#启动命令
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
[root@node1 keepalived]#

#从上面的文件我们可以看得出来,Keepalived使用/usr/local/keepalived/sbin/keepalived命令启动,并指定
#了$KEEPALIVED_OPTIONS参数,而这个参数是在环境变量的配置文件/usr/local/keepalived/etc/sysconfig/keepalived里定义的
#我们查看一下这个环境变量配置文件
[root@node1 keepalived]# cat /usr/local/keepalived/etc/sysconfig/keepalived
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp               -P    Only run with VRRP subsystem.
# --check              -C    Only run with Health-checker subsystem.
# --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
# --dump-conf          -d    Dump the configuration data.
# --log-detail         -D    Detailed log messages.
# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
#

KEEPALIVED_OPTIONS="-D"				#只有这一行

[root@node1 keepalived]# 
#查看一下/usr/local/keepalived/sbin/keepalived这个命令的使用帮助
#从下面的使用帮助我们可以看的出来,keepalived命令启动时的默认配置文件使用了
# '/usr/local/etc/keepalived/keepalived.conf' or '/etc/keepalived/keepalived.conf'

[root@node1 keepalived]# /usr/local/keepalived/sbin/keepalived --help
Usage: /usr/local/keepalived/sbin/keepalived [OPTION...]
  -f, --use-file=FILE          Use the specified configuration file
                                default '/usr/local/etc/keepalived/keepalived.conf'
                                     or '/etc/keepalived/keepalived.conf'
  -P, --vrrp                   Only run with VRRP subsystem
  -C, --check                  Only run with Health-checker subsystem
      --all                    Force all child processes to run, even if have no configuration
  -l, --log-console            Log messages to local console
  -D, --log-detail             Detailed log messages
  -S, --log-facility=([0-7]|local[0-7]|user|daemon)
                               Set syslog facility to LOG_LOCAL[0-7], user or daemon (default)
  -G, --no-syslog              Don't log via syslog
  -u, --umask=MASK             umask for file creation (in numeric form)
  -X, --release-vips           Drop VIP on transition from signal.
  -V, --dont-release-vrrp      Don't remove VRRP VIPs and VROUTEs on daemon stop
  -I, --dont-release-ipvs      Don't remove IPVS topology on daemon stop
  -R, --dont-respawn           Don't respawn child processes
  -n, --dont-fork              Don't fork the daemon process
  -d, --dump-conf              Dump the configuration data
  -p, --pid=FILE               Use specified pidfile for parent process
  -r, --vrrp_pid=FILE          Use specified pidfile for VRRP child process
  -T, --genhash                Enter into genhash utility mode (this should be the first option used).
  -c, --checkers_pid=FILE      Use specified pidfile for checkers child process
  -a, --address-monitoring     Report all address additions/deletions notified via netlink
  -s, --namespace=NAME         Run in network namespace NAME (overrides config)
  -m, --core-dump              Produce core dump if terminate abnormally
  -M, --core-dump-pattern=PATN Also set /proc/sys/kernel/core_pattern to PATN (default 'core')
  -e, --all-config             Error if any configuration file missing (same as includet)
  -i, --config-id id           Skip any configuration lines beginning '@' that don't match id
                                or any lines beginning @^ that do match.
                                The config-id defaults to the node name if option not used
      --signum=SIGFUNC         Return signal number for STOP, RELOAD, DATA, STATS, STATS_CLEAR
  -t, --config-test[=LOG_FILE] Check the configuration for obvious errors, output to
                                stderr by default
  -v, --version                Display the version number
  -h, --help                   Display this help message
[root@node1 keepalived]# 

复制配置文件

#我们发现根本没有'/usr/local/etc/keepalived/keepalived.conf' or '/etc/keepalived/keepalived.conf'这两个配
# 置文件,甚至连对应的目录都没有,这一点keepalive做的不太好

# 方法一、手动创建目录并建立软链接
[root@node1 keepalived]# pwd
/usr/local/keepalived/etc/keepalived
[root@node1 keepalived]# ll			#发现当前源码安装的目录下有个样例配置文件
total 8
-rw-r--r-- 1 root root 3550 Oct 12 21:56 keepalived.conf.sample
drwxr-xr-x 2 root root 4096 Oct 12 21:56 samples
[root@node1 keepalived]# cp  keepalived.conf.sample  keepalived.conf	#复制一下

#下面两种建立软链接的方式任选一种,建议选择第二种
#1、创建目录
mkdir /etc/keepalived
#对配置文件建立软链接
ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf   /etc/keepalived/keepalived.conf

#2、直接对目录建立软链接(建议采用这样)
ln -s /usr/local/keepalived/etc/keepalived   /etc/keepalived

# 方法二、环境变量配置文件指定配置文件
#可以不使用系统默认的配置文件路径,需要在`/usr/local/keepalived/etc/sysconfig/keepalived`修改参数:
`KEEPALIVED_OPTIONS="-f /usr/local/keepalived/etc/keepalived/keepalived.conf -D"`    #-f就是指定配置文件

启动Keepalived

到这里,仍需检查一下keepalived的配置文件/usr/local/keepalived/etc/keepalived/keepalived.conf 参数,因为里面有个vip绑定的网卡,这个网卡写的不对,Keepalive启动仍会是失败。

vim /etc/keepalived/keepalived.conf		
interface ens33		#vip绑定的网卡名称,填写你的网卡名称

systemctl daemon-reload 				#重载
systemctl stop keepalived.service  		
systemctl start keepalived.service  	#启动keepalived
systemctl status keepalived.service  	#keepalived状态正常

#到这里,keepalived已经正常启动了,但是加载的配置文件内容是官网给的样例,我们仍需要修改配置文件内容

keepalived配置文件说明

根据官网https://www.keepalived.org/manpage.html介绍,Keepalived配置文件可以分为4个部分,每部分都对应特定的功能:

GLOBAL configuration: 全局设置
BFD  configuration:BFD(双向转发检测机制)设置
VRRPD configuration:对VRRP(虚拟路由冗余协议)设置
LVS configuration:LVS(Linux虚拟服务)设置

#我们主要是对VRRPD这换功能进行配置
vim /usr/local/keepalived/etc/keepalived/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服务器,可选
   smtp_connect_timeout 30									#连接SMTP的超时时间,可选
   router_id LVS_DEVEL										#keepalived服务器的路由标识,用于标识机器的,默认是hostname
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}															#以上可选的配置可以不配置,企业中会让zabbix来监控
#下面这段就是配置VRRPD功能模块的
vrrp_instance VI_1 {					#实例配置,VI_1是实例名字,可以自定义,master实例和backup实例名必须相同
    state MASTER						#表示VI_1的角色,角色只有两种:master和backup
    interface eth0						#指定网卡,即vip要与哪块网卡进行绑定
    virtual_router_id 51	#虚拟路由标识id,用于区分VRRPD的多个实例,从1到255的任意数字都可以,该参数在整个配置文件中必须唯一,同时master和backup该标识必须相同,用于表示他两是一组
    priority 100						#优先级,数字越大表示优先级越高,同一个实例里master的优先级必须比backup的优先级高
    advert_int 1						#master和backup通信心跳时间间隔,默认就是1秒发送心跳包
    authentication {					#mater和backup的通信认证方式
        auth_type PASS					#认证方式有两种PASS和AH,官方建议PASS
        auth_pass 1111					#认证密码,同一个实例中,认证方式和密码必须相同,这个mater和backup才能通信
    }
    virtual_ipaddress {					#虚拟IP即vip,一般配置一个即可
        192.168.200.16
    }
}

#LVS功能模块的配置,我们暂时用不到lvs配置
virtual_server 192.168.200.100 443 {	#LVS相关的虚拟主机配置,暂时不用管
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.2 1358 {		#LVS相关的虚拟主机配置,暂时不用管
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {		#LVS相关的虚拟主机配置,暂时不用管
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {		#LVS相关的虚拟主机配置,暂时不用管
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}