利用keepalived搭建高可用集群

在一个系统中,常常存在一些单点服务器,为了提高整个系统的稳定性,我们常常需要对这些单点服务做高可用配置;keepalived即为一种常用的高可用配置服务;

Keepalived的工作模式有以下两种:

1、 /备:即单虚拟路径器,仅配置一个VIP

2、 /主:即多个虚拟路径器,配置多个VIP,每个虚拟路径器作为其中某个VIP的的master虚拟路径器;

CentOS6.4以后,keepalived已经在Base仓库中提供,安装keepalived以后,我们可以看到其相关文件如下:

配置文件:/etc/keepalived/keepalived.conf

主程序文件:/usr/sbin/keepalived

Unit File/usr/lib/systemd/system/keepalived.service

安装完成之后,就可以对集群做配置了,但在配置之前,需要确保以下几点:

Ø  各节点时间必须同步;

Ø  确保iptablesSELinux规则不会成为阻碍;

Ø  各节点之间可通过主机名相互通信(对keepalived非必须);

Ø  各节点之间的root用户可以基于密钥认证的ssh服务完成相互通信(非必须);

首先,我们来看一下keepalived配置文件中各配置选项的意义:

l  虚拟路由器相关配置:

vrrp_instance <STRING> {    state MASTER | BACKUP:指定当前节点在此虚拟路由器上的初始状态;只能有一个为MASTER,余下的都应该为BACKUP;    interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口;    virtual_router_id VRID:当前虚拟路由的VRID,为虚拟路由器的唯一标识,范围为0~255;    priority 100:当前主机在此虚拟路径器中的优先级,范围为1~254;    advert_int 1:vrrp通告的时间间隔;    nopreempt:定义工作模式为非抢占模式;    preempt_delay NUM:定义在抢占模式下,节点上线后触发新选举操作的延迟时长;单位为秒;    authentication {        auth_type AH | PASS        auth_pass <PASSWORD>    }:定义认证方法;    virtual_ipaddress {        <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>    }:定义虚拟路径器IP地址,一般只需定义IPADDR/MASK dev <STRING>即可;    track_interface {        IFACE_NAME1        IFACE_NAME2        ...    }:配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态;    notify_master <STRING> | <QUOTED-STRING>:当前节点成为主节点时触发的脚本;    notify_backup <STRING> | <QUOTED-STRING>:当前节点转为备用节点时触发的脚本;    notify_fault <STRING> | <QUOTED-STRING>:当前节点转为fault状态时触发的脚本;    notify <STRING> | <QUOTED-STRING>:通用格式的通知触发机制,一个脚本可完成以上三种状态转换时的通知;}:定义要配置的虚拟路径器;

l  虚拟服务器相关配置:

virtual_server IP port | virtual_server fwmark int {    delay_loop <INT>:服务轮询的时间间隔;    lb_algo rr | wrr | lc | wlc | lblc | sh | dh:定义virtual_server的调度算法;    lb_kind NAT | DR | TUN:定义服务器集群的类型;    persistence_timeout <INT>:定义持久连接超时时长;    protocol TCP:定义服务协议,仅支持TCP;    sorry_server <IPADDR> <PORT>:指定备用服务器地址;    real_server <IPADDR> <PORT> {        weight <INT>:定义当前真实服务器的权重;        nofity_up <STRING> | <QUOTED-STRING>:当前真实服务器上线时触发的脚本;        notify_down <STRING> | <QUOTED-STRING>:当前真实服务器下线时触发的脚本;        HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC_CHECK {            url {                path <URL_PATH>:定义要监控的URL;                status_code <INT>:判断上述检测机制为健康状态的响应码;                digest <STRING>:判断上述检测机制为健康状态的响应的内容的校验码;            }:定义检测服务器健康状态时请求的URL及检测方法;可以有多个url配置段;            nb_get_retry <INT>:定义检测时的重试次数;            delay_before_retry <INT>:定义重试之前的延迟时长;            connect_ip <IP_ADDR>:定义向当前RS的哪个IP地址发起健康状态检测请求,若未定义,默认为定义RS时的IP地址;            connect_port <PORT>:定义向当前RS的哪个端口发起健康状态检测请求,若未定义,默认为定义RS时的端口;            bindto <IP_ADDR>:定义发出健康状态检测请求时使用的源地址;            bind_port <PORT>:定义发出健康状态检测请求时使用的源端口;            connect_timeout <INT>:定义连接请求的超时时长;        }:定义当前主机的健康状态检测方法;         TCP_CHECK {            connect_ip <IP_ADDR>:定义向当前RS的哪个IP地址发起健康状态检测请求,若未定义,默认为定义RS时的地址;            connect_port <PORT>:定义向当前RS的哪个端口发起健康状态检测请求,若未定义,默认为定义RS时的端口;            bindto <IP_ADDR>:定义发出健康状态检测请求时使用的源地址;            bind_port <PORT>:定义发出健康状态检测请求时使用的源端口;            connect_timeout <INT>:定义连接请求的超时时长;        }:在传输层应用tcp协议对当前主机进行健康状态检测;    }:定义真实服务器}:定义虚拟主机,可通过IP与端口或防火墙标记来进行定义;

了解了常用配置选项的意义后,我们就可以进行配置了;在网络拓扑中,我们使用nginx做反向代理以代理后端的httpd服务器;并对nginx做冗余,与keepalived放置在同一个主机上,并用keepalived实现主/主工作模式;其网络拓扑如下:

keepalived+nginx2.jpg

下面,我们进行具体的配置:

1、 编辑10.1.2.70keepalived的配置文件/etc/keepalived/keepalived.conf如下;

vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.2.74/16 dev eno16777736
    }
}
 
vrrp_instance VI_2 {
    state BACKUP
    interface eno16777736
    virtual_router_id 52
    priority 98
    advert_int 1
    preempt_delay 1
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        10.1.2.75/16 dev eno16777736
    }
}

2、编辑10.1.2.71keepalived的配置文件/etc/keepalived/keepalived.conf如下;

vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 98
    advert_int 1
    preempt_delay 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.2.74/16 dev eno16777736
    }
}
 
vrrp_instance VI_2 {
    state MASTER
    interface eno16777736
    virtual_router_id 52
    priority 100
    advert_int 1
    preempt_delay 1
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        10.1.2.75/16 dev eno16777736
    }
}

3、在10.1.2.7010.1.2.71主机上均安装nginx

yum –y install nginx

4、编辑nginx配置文件/etc/nginx/nginx.conf如下:

         http配置段增加如下内容:

upstream test {
    server 10.1.2.72:80 weight=1;
    server 10.1.2.73:80 weight=1;
}

         server配置段中增减如下内容:

location / {
    proxy_pass http://test;
}

5、配置完成,确保iptablesSELinux规则不会成为阻碍后,启动服务利用客户端测试即可;

    keepalived+nginx3.jpg

原创文章,作者:luoliumeng,如若转载,请注明出处:http://www.178linux.com/56702

(1)
luoliumengluoliumeng
上一篇 2016-11-01 17:22
下一篇 2016-11-01 17:48

相关推荐

  • 实验验证Linux系统环境下路由的最长掩码匹配原则

    实验验证Linux系统环境下路由的最长掩码匹配原则 实验环境拓扑如下 环境配置 HostA网卡配置 DEVICE=eth1 IPADDR=172.16.0.100 PREFIX=16 R1网卡配置 DEVICE=eth1 IPADDR=172.16.0.1 PREFIX=16 DEVICE=eth2 IPADDR=192.168.2.1 PREFIX=24 …

    2017-05-02
  • Python基础—内置数据类型

    一、简介              如果你用过C或者C++,你该知道你的许多工作集中在实现数据结构上面。你需要管理内存分配,部署内存结构等等。这些东西比较乏味,通常会让你无法集中在真正想实现的目标上面。    …

    Linux干货 2015-11-10
  • Shell脚本编程中作业

    一、作业: 1、1、编写服务脚本/root/bin/testsrv.sh,完成如下要求 (1) 脚本可接受参数:start, stop, restart, status (2) 如果参数非此四者之一,提示使用格式后报错退出 (3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功” 考虑:如果事先已经启动过一…

    Linux干货 2016-08-24
  • 超级用户切换普通用户后如何重置root密码

    今天在使用su命令切换root用户和普通用户使用中不小心改了root密码,在普通用户条件下怎么也切换不到root用户,于是通过搜索和尝试终于改了root密码,现以centos7为例总结如下: 1、首先进入开启菜单,按下e键进入编辑模式,找到ro那一行,将ro改为rw,在语言后面加上init=/bin/sh 2、根据提示按下ctrl-x键(注意选中x) 3、尝…

    Linux干货 2017-03-27
  • 谁写了Linux

    2009年8月,Linux软件基金会发布了一份叫《Who Writes Linux and Who Supports It》(PDF)的报告。这份报告主要对Linux 2.6.x的开发进行了全方位的统计。看了以后才知道,原来Linux的开发的生产率竟是这样的惊人,而且相当的的令人振奋,所以,在第一时间转过来给大家看看。让人不得不惊叹,这不可思议的具有非凡活力…

    Linux干货 2015-04-03
  • Linux磁盘管理

    面对一块硬盘,我们该如何使用它呢?本文从机械硬盘结构,分区,格式化,和挂载四个层次进行介绍。 一、机械硬盘结构 现在服务器使用机械式硬盘是主流,因为其造价低,容量大,和固态硬盘相比读写性能要差很多。机械硬盘主要由以下几个部件构成:转轴Spindle,盘片Platter,机械臂Boom,磁头Head。工作机制是马达带动盘片高速旋转,磁头对盘片进行擦写数据或读取…

    Linux干货 2016-09-01