keepalived实现主从、主主架构

2018-08-02  本文已影响164人  任总

一、HA Cluster实现方案:

1、vrrp协议的实现
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议。通常,一个网络内的所有主机都设置一条缺省路由,这样,主机发出的目的地址不在本网段的报文将被通过缺省路由发往路由器RouterA,从而实现了主机与外部网络的通信。当路由器RouterA 坏掉时,本网段内所有以RouterA 为缺省路由下一跳的主机将断掉与外部的通信产生单点故障。VRRP 就是为解决上述问题而提出的,它为具有多播组播或广播能力的局域网(如:以太网)设计。
2、实现软件有keepalived、ais(完备HA集群方案)、RHCS(cman)、heartbeat和corosync。

二、工作原理

VRRP的工作过程如下:

  1. 路由器开启VRRP功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为主用路由器,优先级低的成为备用路由器。主用路由器定期发送VRRP通告报文,通知备份组内的其他路由器自己工作正常;备用路由器则启动定时器等待通告报文的到来。

  2. VRRP在不同的主用抢占方式下,主用角色的替换方式不同:

    在抢占方式下,当主用路由器收到VRRP通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为主用路由器;否则将保持备用状态。

    在非抢占方式下,只要主用路由器没有出现故障,备份组中的路由器始终保持主用或备用状态,备份组中的路由器即使随后被配置了更高的优先级也不会成为主用路由器。

  3. 如果备用路由器的定时器超时后仍未收到主用路由器发送来的VRRP通告报文,则认为主用路由器已经无法正常工作,此时备用路由器会认为自己是主用路由器,并对外发送VRRP通告报文。备份组内的路由器根据优先级选举出主用路由器,承担报文的转发功能。

在实际组网中一般会进行VRRP负载分担方式的设置。负载分担方式是指多台路由器同时承担业务,避免设备闲置,因此需要建立两个或更多的备份组实现负载分担。

VRRP负载分担方式具有以下特点:

三、keepalived软件

1、术语:

虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255)
物理路由器:
master:主设备
backup:备用设备
priority:优先级
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
GraciousARP

安全工作:认证、无认证、简单字符认证和MD5

工作模式有:
主/备:单虚拟路径器;
主/主:主/备(虚拟路径器1),备/主(虚拟路径器2)

2、Keepalived功能:
3、组件:
4、HA Cluster的配置前提:

(1) 各节点时间必须同步,使用ntp, chrony等工具同步。
(2) 确保iptables及selinux不会成为阻碍;
(3) 各节点之间可通过主机名互相通信(对KA并非必须);
建议使用/etc/hosts文件实现;
(4) 确保各节点的用于集群服务的接口支持MULTICAST通信;
(5)使用D类多播地址:224-239;

四、keepalived安装配置:

1、程序环境:

TOP HIERACHY顶级配置段
GLOBAL CONFIGURATION
Global definitions全局定义
Static routes/addresses静态路由
VRRPD CONFIGURATION
VRRP synchronization group(s):vrrp同步组;
VRRP instance(s):实例,每个vrrp instance即一个vrrp路由器;
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s):ipvs集群的vs和rs;

环境搭建

2、 基本安装配置

[root@keepalive130 ~]  yum -y install net-tools tcpdump #安装抓包工具和网络工具
[root@keepalive130 ~] vim /etc/hosts#设置解析
172.16.15.130 keepalive130#主节点
172.16.15.131 keepalive131#备节点
[root@keepalive130 ~]  ping keepalive130#测试
[root@keepalive130 ~] ip link set multicast on dev eth0#开启多播
image.png

五、keepalived实现主从架构

1、主节点配置
[root@keepalive130 ~]  yum -y install keepalived#安装
[root@keepalive130 ~]# vim /etc/keepalived/keepalived.conf #编辑配置文件

! Configuration File for keepalived

global_defs {#全局配置
   notification_email {#邮件通知地址 ,这里是本机收件地址
    root@localhost
 }
   notification_email_from keepalived@localhost   #发件地址
   smtp_server 127.0.0.1 #邮件服务地址,端口是25
   smtp_connect_timeout 30  #连接邮件服务器超时时间30秒
   router_id keepalive130 #可以使用主机名
   vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
}

vrrp_instance VI_1 { #定义一个虚拟路由器,第一个
    state MASTER  #当前状态,主的
    interface eth0  #当前的vrp应用,绑定到那个网卡设备上
    virtual_router_id 33#这个虚拟ip,与其他主机要保持一至
    priority 100 #优先级,高于其他主机
    advert_int 1
    authentication {
        auth_type PASS  #密码认证
        auth_pass a1b2c3d4   #密码为8位,不能用默认的密码
    }
    virtual_ipaddress {#虚拟ip地址
        172.16.15.99/16 dev eth0 label eth0:0#别名为eth0:0
    }
}
[root@keepalive130 ~]# systemctl start keepalived  #启动keepalived
[root@keepalive130 ~]# systemctl status keepalived #查询启动信息
......
Jul 27 14:12:55 keepalive130 Keepalived_vrrp[4242]: VRRP_Instance(VI_1) Entering MASTER STATE #主要状态
......
2、备用节点设置
[root@keepalive131 ~]# vim /etc/keepalived/keepalived.conf #编辑配置文件
! Configuration File for keepalived

global_defs {#全局配置
   notification_email {#邮件通知地址 ,这里是本机收件地址
    root@localhost
 }
   notification_email_from keepalived@localhost   #发件地址
   smtp_server 127.0.0.1 #邮件服务地址,端口是25
   smtp_connect_timeout 30  #连接邮件服务器超时时间30秒
   router_id keepalive131 #可以使用主机名
   vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
}

vrrp_instance VI_1 { #定义一个虚拟路由器,第一个
    state BACKUP  #当前状态,从的
    interface eth0  #当前的vrp应用,绑定到那个网卡设备上
    virtual_router_id 33#这个虚拟ip,与其他主机要保持一至
    priority 96 #优先级,低于master主机
    advert_int 1
    authentication {
        auth_type PASS  #密码认证
        auth_pass a1b2c3d4   #密码为8位,不能用默认的密码
    }
    virtual_ipaddress {#虚拟ip地址
        172.16.15.99/16 dev eth0 label eth0:0#别名为eth0:0
    }
}
[root@keepalive131 ~]# systemctl start keepalived  #启动keepalived
[root@keepalive131 ~]# systemctl status keepalived #查询启动信息
......
Jul 27 14:13:53 keepalive131 Keepalived_vrrp[4497]: VRRP_Instance(VI_1) Entering BACKUP STATE #备用状态
......

3、测试:

基于抢占模式工作:
[root@keepalive131 ~]# tcpdump -i eth0 -nn host 224.1.101.33 #对多播地址抓包
image.png

六、keepalived实现主主架构

1、主节点配置
[root@keepalive130 ~]# vim /etc/keepalived/keepalived.conf #编辑配置文件

! Configuration File for keepalived

global_defs {#全局配置
   notification_email {#邮件通知地址 ,这里是本机收件地址
    root@localhost
 }
   notification_email_from keepalived@localhost   #发件地址
   smtp_server 127.0.0.1 #邮件服务地址,端口是25
   smtp_connect_timeout 30  #连接邮件服务器超时时间30秒
   router_id keepalive130 #可以使用主机名
   vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
}

vrrp_instance VI_1 { #定义一个虚拟路由器,第一个
    state MASTER  #当前状态,主的
    interface eth0  #当前的vrp应用,绑定到那个网卡设备上
    virtual_router_id 33#这个虚拟ip,与其他主机要保持一至
    priority 100 #优先级,高于其他主机
    advert_int 1
    authentication {
        auth_type PASS  #密码认证
        auth_pass a1b2c3d4   #密码为8位,不能用默认的密码
    }
    virtual_ipaddress {#虚拟ip地址
        172.16.15.99/16 dev eth0 
    }
}
vrrp_instance VI_2{ #定义一个虚拟路由器,第二个
    state BACKUP  #当前状态,从的
    interface eth0  #当前的vrp应用,绑定到那个网卡设备上
    virtual_router_id 34#这个虚拟ip,与其他主机要保持一至
    priority 96 #优先级,低于master主机
    advert_int 1
    authentication {
        auth_type PASS  #密码认证
        auth_pass a6b7c8d9   #密码为8位,不能用默认的密码,这里修改一下
    }
    virtual_ipaddress {#虚拟ip地址
        172.16.15.99/16 dev eth0 
    }
}
[root@keepalive130 ~]# systemctl start keepalived  #启动keepalived

2、备用节点设置
[root@keepalive131 ~]# vim /etc/keepalived/keepalived.conf #编辑配置文件
! Configuration File for keepalived

global_defs {#全局配置
   notification_email {#邮件通知地址 ,这里是本机收件地址
    root@localhost
 }
   notification_email_from keepalived@localhost   #发件地址
   smtp_server 127.0.0.1 #邮件服务地址,端口是25
   smtp_connect_timeout 30  #连接邮件服务器超时时间30秒
   router_id keepalive131 #可以使用主机名
   vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
}

vrrp_instance VI_1 { #定义一个虚拟路由器,第一个
    state BACKUP  #当前状态,从的
    interface eth0  #当前的vrp应用,绑定到那个网卡设备上
    virtual_router_id 33#这个虚拟ip,与其他主机要保持一至
    priority 96 #优先级,低于master主机
    advert_int 1
    authentication {
        auth_type PASS  #密码认证
        auth_pass a1b2c3d4   #密码为8位,不能用默认的密码
    }
    virtual_ipaddress {#虚拟ip地址
        172.16.15.99/16 dev eth0 label eth0:0#别名为eth0:0
    }
}
vrrp_instance VI_2{ #定义一个虚拟路由器,第二个
    state MASTER  #当前状态,主的
    interface eth0  #当前的vrp应用,绑定到那个网卡设备上
    virtual_router_id 34#这个虚拟ip,与其他主机要保持一至
    priority 100 #优先级,高于备用节点
    advert_int 1
    authentication {
        auth_type PASS  #密码认证
        auth_pass a6b7c8d9   #密码为8位,不能用默认的密码,这里修改一下
    }
    virtual_ipaddress {#虚拟ip地址
        172.16.15.99/16 dev eth0 
    }
}
[root@keepalive131 ~]# systemctl start keepalived  #启动keepalived

测试:
主备都启用:


image.png

主节点关闭:
[root@keepalive130 ~]# systemctl stop keepalived


image.png
上一篇下一篇

猜你喜欢

热点阅读