Keepalived的安装与详细配置

3,713 阅读6分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第12篇文章,点击查看活动详情

Keepalived

Keepalived概述

Keepalived由C编写,最初是专为LVS负载均衡软件设计的,Keepalived软件主要是通过VRRP协议实现高可用功能。

VRRP(Virtual Route Redundancy Protocol)协议,译为虚拟路由冗余协议。

VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP在路由器组内部,实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,MASTER实现针对虚拟路由器IP的各种网络功能。其他设备不拥有该虚拟IP,状态为BACKUP,除了接收MASTER的VRRP状态通告信息以外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。

VRRP可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。其中的虚拟路由即Virtual路由是由VRRP路由群组创建的一个不真实存在的路由,这个虚拟路由也是有对应的IP地址。而且VRRP路由1和VRRP路由2之间会有竞争选择,通过选择会产生一个Master路由和一个Backup路由。

Master路由和Backup路由之间会有一个心跳检测,Master会定时告知Backup自己的状态,如果在指定的时间内,Backup没有接收到这个通知内容,Backup就会替代Master成为新的Master。Master路由有一个特权就是虚拟路由和后端服务器都是通过Master进行数据传递交互的,而备份节点则会直接丢弃这些请求和数据,不做处理,只是去监听Master的状态

官网地址:https://keepalived.org/

文档地址:https://keepalived.org/manpage.html

下载Keepalived

下载地址:keepalived.org/download.ht…

wget https://keepalived.org/software/keepalived-2.2.7.tar.gz

安装Keepalived

解压

tar -zxvf keepalived-2.2.7.tar.gz 

对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,同时指定安装keepalived的位置,进行编译

cd keepalived-2.2.7

./configure  --prefix=/usr/local/program/keepalived

编译和安装同时进行

make && make install

运行前配置

cp /usr/local/program/keepalived-2.2.7/keepalived/etc/init.d/keepalived /etc/init.d/


# keepalived的系统配置文件
mkdir /etc/keepalived
cp /usr/local/program/keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf

cp /usr/local/program/keepalived-2.2.7/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# 启动和关闭keepalived
cp /usr/local/program/keepalived/sbin/keepalived /usr/sbin/

keepalived.conf配置介绍

keepalived.conf配置文件是系统配置文件,主要分三个部分。

global全局配置

第一部分是global全局配置
# global全局配置
global_defs {
   # 邮件通知,当keepalived发送切换时需要发email给具体的邮箱地址			
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   # 设置发件人的邮箱信息
   notification_email_from Alexandre.Cassen@firewall.loc
   # 指定smpt服务地址
   smtp_server 192.168.200.1
   # 指定smpt服务连接超时时间
   smtp_connect_timeout 30
   #运行keepalived服务器的一个标识,可以用作发送邮件的主题信息
   router_id LVS_DEVEL
   # 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,
   # 如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)
   vrrp_skip_check_adv_addr
   # 严格遵守VRRP协议
   vrrp_strict
   # 在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0
   vrrp_garp_interval 0
   # 在一个网卡上每组na消息之间的延迟时间,默认为0
   vrrp_gna_interval 0
}

vrrp相关配置

第二部分是vrrp相关配置

# vrrp配置,包含四个子模块:1. vrrp_script 2. vrrp_sync_group 3. garp_group 4. vrrp_instance

# 设置keepalived实例信息,VI_1为VRRP实例名称
vrrp_instance VI_1 {
    # 两个值可选MASTER主 BACKUP备,即主节点就选MASTER
    state MASTER
    # vrrp实例绑定的当前服务器使用的网卡名称,用于发送VRRP包,使用命令ifconfig查看
    interface eth0
    # 指定VRRP实例ID,范围是0-255
    virtual_router_id 51
    # 指定优先级,优先级高的将成为MASTER
    priority 100
    # 指定发送VRRP通告的间隔,单位是秒
    advert_int 1
    # vrrp之间通信的认证信息
    authentication {
        # 指定认证方式。PASS简单密码认证(推荐)
        auth_type PASS
        # 指定认证使用的密码,最多8位
        auth_pass 1111
    }
    # 设置虚拟IP地址,供用户访问使用,可设置多个,一行一个
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

LVS相关配置

第三部分是LVS相关配置
# 定义虚拟服务器

# 定义一个虚拟服务器,ip是virtual_address中定义的其中一个, 语法:ip+空格+服务端口
virtual_server 192.168.200.100 443 {
    # 健康检查时间间隔,单位:秒	
    delay_loop 6
    # 负载均衡调度算法,常用wlc或rr
    lb_algo rr
    # 负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则
    lb_kind NAT
    # http服务会话保持时间,单位:秒
    persistence_timeout 50
    # 转发协议,分为TCP和UDP两种
    protocol TCP
    # 真实服务器IP和端口,可以定义多个	
    real_server 192.168.201.100 443 {
       # 负载权重,值越大,转发的优先级越高
        weight 1
        # http get方式健康检查
        HTTP_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            # 服务连接超时时长,单位:秒
            connect_timeout 3
            # 服务连接失败重试次数
            retry 3
            # 重试连接间隔,单位:秒
            delay_before_retry 3
        }
    }
}

keepalived实现Mycat高可用

配置keepalived.conf

通过配置keepalived.conf实现Mycat高可用

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 MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}


virtual_server 192.168.200.16 8086 {	
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    real_server mycat真实IP1 8086 {
        weight 1 
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    
    real_server mycat真实IP2 8086 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }    
    
}

查看网卡名称,通常名叫:eth0ens33

[root@administrator ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.22.4.21  netmask 255.255.192.0  broadcast 172.22.63.255
        ether 00:16:3e:02:73:19  txqueuelen 1000  (Ethernet)
        RX packets 101391541  bytes 56887890390 (52.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 98759302  bytes 29273448927 (27.2 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

启动验证

启动Keepalived

service keepalived start

[root@administrator ~]# service keepalived start
Starting keepalived (via systemctl):                       [  OK  ]

登录验证 注意:keepalived配置文件中真实服务地址不能是外网IP,必须是内网IP

[root@administrator keepalived]# mysql -u mycat -h  192.168.200.16  -P 8086 -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.6.29-mycat-1.6.7.6-release-20220524173810 MyCat Server (OpenCloudDB)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

测试高可用

将某台Mycat服务器实例停止,再次访问Keepalived的虚拟IP

mysql -umycat -p123456 -h 192.168.200.16 -P 8066