Keepalived高可用集群--VRRP协议实现

Keepalived 高可用集群

高可用HA

HA:
高可用性(HA)通常用来描述一个系统经过专门的设计,从而减少停工的时间,而保持其服务的高度可用性
    
#高可用类型    
主备方式
    两个相同的服务,一个对外提供服务,另一个不运行为备份,一旦主服务出现问题,备份提供服务
    
互为主备
    两个相同的服务,同时对外提供服务,当一个节点出现问题时,另一个节点也可以对外提供服务

高可用相关技术

NAS(Network Attached Storage):网络附加存储,基于网络的共享文件系统
SAN(Storage Area Network):存储区域网络,基于网络的共享存储

HA cluster实现方案–AIS

#AIS:应用程序接口规范
 --RHCS:Red Hat Cluster Suite 红帽集群套件
 heartbeat:基于心跳监测实现服务高可用
 pacemaker+corosync:资源管理与故障转移   

HA cluster实现方案–VRRP协议

VRRP:虚拟路由冗余协议,解决静态网关单点风险 
   软件层—keepalived
   物理层—路由器、三层交换机

#VRRP相关术语
虚拟路由器:Virtual Router 
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
VIP:Virtual IP 
物理路由器:
   master:主设备
   backup:备用设备
   priority:优先级

#VRRP相关技术
节点之间相互通告: 心跳,优先级
工作方式:抢占式,非抢占式
安全认证:
  无认证,简单字符认证,MD5

Keepalived 初步

keepalived: 高可用集群,VRRP协议的软件实现
功能:
   VRRP协议的软件实现
   集成LVS功能,为VIP所在的节点生成IPVS规则
   为后端RS做健康性状态检测

软件包名:keepalived
主配置文件:/etc/keepalived/keepalived.conf

核心组件:
  vrrp stack:VIP消息通告
  checkers:监测real server
  system call:实现 vrrp 协议状态转换时调用脚本的功能
  SMTP:邮件组件
  ipvs wrapper:生成IPVS规则

Keepalived 安装

#环境准备
  各节点时间必须同步:ntp, chrony
  关闭防火墙及SELinux
  各节点之间可通过主机名互相通信:非必须
  各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须
  
#rpm包安装
yum info keepalived 
yum install -y keepalived
rpm -ql keepalived

编译安装keepalived

yum install -y gcc curl openssl-devel libnl3-devel net-snmp-devel
wget https://keepalived.org/software/keepalived-2.0.20.tar.gz
tar xvf keepalived-2.0.20.tar.gz -C /opt/
cd /opt/keepalived-2.0.20/
./configure --prefix=/opt/keepalived
make && make install
/opt/keepalived/sbin/keepalived -v 
cat /usr/lib/systemd/system/keepalived.service  #自动生成service文件
mkdir /etc/keepalived 
cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
systemctl start keepalived 
systemctl status keepalived 
hostname -I
iptables -vnL   #自动生成防火墙规则

vim /etc/keepalived/keepalived.conf
  vrrp_strict  #注释此行

killall keepalived    #centos7 使用restart会有bug
systemctl start keepalived
iptables -vnL   #此时防火墙规则已被清空

keepalived 配置

#/etc/keepalived/keepalived.conf 
GLOBAL CONFIGURATION
  Global definitions:全局配置:邮件,route_id,vrrp配置,多播地址等
VRRP CONFIGURATION
  VRRP instance(s):每个vrrp虚拟路由器
LVS CONFIGURATION
  Virtual server(s):LVS集群的VS和RS

#全局配置
global_defs {
 notification_email {
 root@localhost  #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
 }
 notification_email_from keepalived@localhost  #发邮件的地址
 smtp_server 127.0.0.1     #邮件服务器地址
 smtp_connect_timeout 30   #邮件服务器连接timeout
 router_id ha1.example.com  #每个keepalived主机唯一标识,建议使用当前主机名
 vrrp_skip_check_adv_addr  #对所有通告报文都检查,会比较消耗性能
 vrrp_strict       #严格遵守VRRP协议,开启iptables防火墙规则,建议关闭此项配置
 vrrp_garp_interval 0    #GARP 报文发送延迟,0表示不延迟
 vrrp_mcast_group4 224.0.0.18   #指定组播IP地址,默认值:224.0.0.18 
}

#虚拟路由器配置
vrrp_instance <NAME> {
state MASTER|BACKUP   #当前节点在此虚拟路由器上的初始状态
interface eth0      #绑定为当前虚拟路由器的网卡
virtual_router_id VRID  #虚拟路由器惟一标识,0-255,必须唯一,同一个虚拟路由器的节点必须相同
priority 100        #当前物理节点在此虚拟路由器的优先级,范围:1-254,每个节点值不同
advert_int 1        #vrrp通告的时间间隔,默认1s
authentication {    #认证机制
auth_type PASS
auth_pass 123456    #预共享密钥,同一个虚拟路由器的多个keepalived节点必须一样
}
virtual_ipaddress {    #虚拟IP
 10.0.0.88/24          #指定VIP,默认为eth0网卡
 10.0.0.99/24 dev eth1   #指定VIP的网卡
}
}

#独立子配置文件
vim /etc/keepalived/keepalived.conf
  include /etc/keepalived/conf.d/*.conf
  
#开启keepalived日志功能
vim /etc/sysconfig/keepalived 
 KEEPALIVED_OPTIONS="-D -S 6"
vim /etc/rsyslog.conf 
local6.*           /var/log/keepalived.log 
 systemctl restart keepalived rsyslog 
ll /var/log/keepalived.log 

实现master/slave 的 Keepalived 单主架构

#master节点配置
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 66
    priority 100
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
   10.0.0.100/24 
    }
}

#slave节点配置
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 66
    priority 90
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
    10.0.0.100/24   
 }
}

systemctl restart keepalived
#抓包观察    
tcpdump -i eth0 -nn host 224.0.0.18
#down掉主节点,再次观察,会发现地址飘到了backup服务器
#开启主节点,再次观察,会发现地址又被master服务器抢占

实现master/slave 的 Keepalived 双主架构

master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低下,可以使用master/master的双主架构,解决此问题
#10.0.0.8作为虚拟IP 10.0.0.100的master
#10.0.0.18作为虚拟IP 10.0.0.200的master

#10.0.0.8配置
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 66
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
   10.0.0.100/24 }
}

vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 77
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
   10.0.0.200/24   }
}

#10.0.0.18配置
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 66
    priority 90
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
    10.0.0.100/24 
 }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 77
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
    10.0.0.200/24 }
}

抢占式与非抢占式

#非抢占模式
默认为抢占模式,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色,造成网络抖动,建议设置为非抢占模式 nopreempt ,即高优级主机恢复后,并不会抢占低优先级主机的master角色
#注意:需要各keepalived服务器state为BACKUP

#1节点配置
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 66
    priority 100
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
   10.0.0.100/24
    }
}

#2节点配置
vrrp_instance VI_1 {
    state BACKUP   
    interface eth0
    virtual_router_id 66
    priority 90   #优先级低
    nopreempt    #不抢占
    authentication {
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
    10.0.0.100/24 
 }
}

#抢占延迟模式
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回VIP
#注意:需要各keepalived服务器state为BACKUP
#ha1主机配置
vrrp_instance VI_1 {
  state BACKUP     #都为BACKUP
  interface eth0
  virtual_router_id 66
  priority 100  #优先级高
  preempt_delay 60s #抢占延迟模式,默认延迟300s
    virtual_ipaddress {
    10.0.0.100/24 
 }
 
#抓包观察
tcpdump -i eth0 -nn host 224.0.0.18

VIP单播配置

#默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
#注意:启用单播,不能启用vrrp_strict

#在所有节点vrrp_instance语句块中对方主机的IP,建议设置为专用于对应心跳线网络的地址
#主节点配置
vrrp_instance VI_1 {
 .....
  nicast_src_ip 10.0.0.8     #添加源IP地址
  unicast_peer{  10.0.0.18 }   #目标IP地址
    virtual_ipaddress {
   10.0.0.100/24
    }
}

#从节点配置
vrrp_instance VI_1 {
 ...
   unicast_src_ip 10.0.0.18   #添加源IP地址
   unicast_peer { 10.0.0.8 }  #添加目标IP地址
    virtual_ipaddress {
    10.0.0.100/24 
 }
}

#抓包观察
tcpdump -i eth0 -nn host 10.0.0.8 and host 10.0.0.18

你可能感兴趣的:(Keepalived高可用集群--VRRP协议实现)