keepalived基础及使用DR模型构建一个real_server

keepalived

HA的解决方案的两大流派分为heartbeat、corosync和keepalived

keepalived在诞生时被赋予的使命仅仅是为lvs的director的HA、生成ipvs规则和监控后端主机的健康状况

keepalived是可以模拟并以进程的方式实现vrrp协议,并以此协议进行工作的HA解决方案

vrrp:虚拟冗余路由协议

vrrp的工作方式:将两个或两个以上的物理路由设备定义成一个虚拟的路由器,这种方式称作为一个路由组,这组路由设备共同构建成为一个虚拟的路由,在此路由上配置一个VIP和与此VIP相对应的VMAC,在此路由组中,每个路由器都有自己的优先级,当路由器开启时都会自我初始化,然后发送广播通告路由组中的所有路由器自己的优先级,以此推选出主节点MASTER和备用节点BACKUP级别的路由器,只有当主节点故障或优先级降低时才会通告其他节点,然后其他节点再次通过比较优先级推选出另外一个主节点,另外一个主节点会去夺取之前主节点的IP地址等信息

在keepalived中有三种节点类型:

MASTER:主节点类型

BACKUP:备用节点类型

Initialized:表初始化

下面是keepalived的常用案例:

案例环境:

主节点:172.16.25.1

从节点:172.16.25.2

先在两台节点上安装keepalived程序包

这里使用yum的方式安装

#yum install keepalived

两台主机都安装完以后,开始我们的案例

1、先做简单的主从节点

主节点配置:

编辑keepalived的配置文件,在编辑之前先将此文件备份,以免以后使用
[[email protected] keepalived]# vim keepalived.conf
在此文件中暂时没用的信息都删除,然后开始定义所需的配置,这里我们开始直接进行定义
vrrp_instance VI_1 {  
    state MASTER   //表示设置此主机的节点信息为主节点
    interface eth0  //表示使用eth0网卡
    virtual_router_id 51  //默认的id号
    priority 100   //优先级为100
    advert_int 1  //表示发送自己在线信息,两节点的时间必须一样
    authentication {  //表示设置认证方式
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  //表示设置一个虚拟的IP地址
        172.16.25.30
    }
}

从节点配置:

编辑keepalived的配置文件
[[email protected] keepalived]# vim keepalived.conf
 在此文件中暂时没用的信息都删除,然后开始定义所需的配置,这里我们开始直接进行定义
vrrp_instance VI_1 {  
    state BACKUP   //表示设置此主机的节点信息为备节点
    interface eth0  //表示使用eth0网卡
    virtual_router_id 51  //默认的id号
    priority  99  //优先级为99
    advert_int 1  //表示发送自己在线信息,两节点的时间必须一样
    authentication {  //表示设置认证方式
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  //表示设置一个虚拟的IP地址
        172.16.25.30
    }
}
这样两节点的主备配置就已完成,然后启动服务,就可以测试了
[[email protected] keepalived]# service keepalived restart
启动完以后,将主节点的服务停掉,然后查看备节点的情况
[[email protected] keepalived]# service keepalived stop
然后在备节点使用ip addr show查看刚才设定的IP是否已经从主节点上获取到备节点上;从中可以看出备节点上已经得到了IP
[[email protected] keepalived]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:62:4d:37 brd ff:ff:ff:ff:ff:ff inet 172.16.25.2/16 brd 172.16.255.255 scope global eth0 inet 172.16.25.30/32 scope global eth0
如果再把主节点启动起来的话,因为主节点的优先级大于从节点,主节点就会把IP夺回自己的主机

2、双主模型

只需要在两台主机的刚才的配置文件中再添加配置定义信息即可

在主节点配置:

[[email protected] keepalived]# vim keepalived.conf
vrrp_instance VI_2 { //改下次名称
    state BACKUP   
    interface eth0
    virtual_router_id 61
    priority 99  
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  //设置第二个虚拟IP为60
        172.16.25.60
    }
}

在从节点配置:

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 61
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.25.60
    }
}

配置完以后将两主机的服务都重新启动,然后都使用ip  addr  show命令查看配置结果

会发现在主节点上会得出172.16.25.30的IP地址;而在从节点上会看出有172.16.25.60的IP地址

2、使用自定义脚本监控设定当主节点所设定的服务出现问题时自动切换到备用节点

在/usr/share/doc/keepalived-1.2.7/目录下有一个名叫keepalived.conf.vrrp.localcheck的文件,里面存放有运行实例

定义检测脚本:

使用单独的配置段定义检测机制

      vrrp_script CHK_NAME {
                script  "/path/to/somefile.sh"  //检测的方式
                interval # //表示检测的间隔时间,单位为秒钟
                weight -5 //表示当检测失败时,此主机的优先级减去5
                fall 3 //表示当检测失败时,再检测3次
                rise 1 // 从正常到失败要检测几次,一般来说1次即可
         定义完成以后,要在实例调用定义的检测机制,才能生效
             vrrp_instance NAME {
                        track_script {
                            CHK_NAME
                        }
                }

使用示例:

主节点配置:

在两节点上都安装nginx程序,保证nginx运行无误后,配置keepalived

编辑配置文件,在global_defs下面定义内容
vrrp_script chk_nginx {
    script "killall -0 nginx"  //表示检测此进程是否运行,killall -0 nginx表示此进程的是否运行,使用此命令不会打印到屏幕信息,使用echo $?查看状态返回值
    interval 1  //检测间隔时间为1秒
    weight -5 //检测失败时优先级减5
    fall 2  //检测失败时再检测2次
    rise 1  //从正常到失败要检测1次
}
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 {
        172.16.25.30
    }
    track_script { //调用定义机制
        chk_nginx
}
    notify_master "/etc/rc.d/init.d/nginx start"   //调用信息
    notify_backup "/etc/rc.d/init.d/nginx stop"
    notify_fault "/etc/rc.d/init.d/nginx stop"
}

备用节点配置:

! Configuration File for keepalived
global_defs {
  notification_email {
 
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "killall -0 nginx"
interval 1
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.25.30
}
track_script {
chk_nginx
}
notify_master "/etc/rc.d/init.d/nginx start"
notify_backup "/etc/rc.d/init.d/nginx stop"
notify_fault "/etc/rc.d/init.d/nginx stop"
}          
两节点都配置完后,便可进行测试。为了让测试结果更加信息,可以把主从节点的nginx的主页设置不同,以便区分,然后关闭两个节点的其中一个,再使用浏览器访问虚拟IP,查看得到的结果,这里测试步骤不在做演示。
     
vrrp_script chk_sched_down { //表示当需要自己手动调试keepalived,可使用此方法
    script "[ -e /etc/keepalived/down ] && exit 1 || exit 0 " //表示当此文件存在时便显示失败,不存在则显示成功
    interval 2   //失败后检查2秒
    weight -50 //优先级减50
    fall 2  //检测失败时再检测2次
    rise 1 //从正常到失败要检测1次
}

然后在使用track_script调用定义便可,然后再从节点配置相同内容;配置完成后查看配置结果,然后再/etc/keepalived/下创建一个down文件,便发现在此节点上的keepalived下线了。

3、使用DR模型构建一个real_server

172.16.25.1:主节点

172.16.25.2:备节点

172.16.25.3:real_server

172.16.25.3配置

创建一个目录
[[email protected] ~]# mkdir -pv /web/htdocs/a
并添加一个页面文件
[[email protected] ~]# vim /web/htdocs/a/index.html
配置httpd的主配置文件
[[email protected] ~]# vim /etc/httpd/conf/httpd.conf
<VirtualHost  *:80>
   DocumentRoot /web/htdocs/a
   ServerName www1.how.com
</VirtualHost>
更改内核信息
[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore [[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce [[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
设置路由[[email protected] ~]# ifconfig lo:0 172.16.25.30 netmask 255.255.255.255 broadcast 172.16.25.30 up
[[email protected] ~]# route add -host 172.16.25.30 dev lo:0

172.16.25.1配置

将之前配置的文件删除,并复制最开始的配置文件
[[email protected] keepalived]# cp keepalived.bak keepalived.conf 
配置此文件[[email protected] keepalived]# vim keepalived.conf
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 {
        172.16.25.30
    }
}
virtual_server 172.16.25.30 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.0.0
    protocol TCP
    real_server 172.16.25.3 80 {
        weight 1
        HTTP_GET {
            url {
              path /
           status_code 200
        }
        connect_timeout 2
        nb_get_retry 3
        delay_before_retry 1
        }
    }
}
安装ipvsadm
[[email protected] keepalived]# yum install ipvsadm
[[email protected] keepalived]# ipvsadm -L -n

172.16.25.2配置

[[email protected] keepalived]# cp keepalived.bak keepalived.conf [[email protected] keepalived]# vim keepalived.conf
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.25.30
    }
}
virtual_server 172.16.25.30 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.0.0
    protocol TCP
    real_server 172.16.25.3 80 {
        weight 1
        HTTP_GET {
            url {
              path /
           status_code 200
        }
        connect_timeout 2
        nb_get_retry 3
        delay_before_retry 1
        }
    }
}
配置完后主备节点都重启keepalived服务
[[email protected] keepalived]# service keepalived restart

配置完使用浏览器查访问虚拟IP地址,可看到已经得到了172.16.25.3的http页面

时间: 2024-08-26 06:39:07

keepalived基础及使用DR模型构建一个real_server的相关文章

keepalived配置基于lvs DR模型的HA

基本架构图如下:  平台环境:centos6.x1.    安装keepalived.安装ipvsadmyum –y install keepalived  ipvsadm 2.    配置服务2.1 lvs realserver 配置脚本#!/bin/bashVIP1=192.168.1.199case "$1" instart)echo " start LVS of REALServer"/sbin/ifconfig lo:0 $VIP1 broadcast $

Linux实验报告-构建一个LVS的DR模型

Linux实验报告-构建一个LVS的DR模型 实验背景: 学习笔记,构建一个LVS的DR模型 实验目的: 了解LVS的DR模型工作原理 实现一个LVS的DR模型的实验 实验环境: Vmware Workstation 9,CentOS 6.4  实验步骤: 1,实验目的规划如下模型,CIP.VIP.DIP与RIP在同一网段 2.RS1上配置如下: 配置内核参数: #echo 1 > /prco/sys/net/ipv4/conf/lo/arp_ignore                    

基于keepalived的LVS-DR模型构建

实验拓扑:基础环境的准备:两台keepalived的高可用服务器,两台real server用于配置httpd服务在两台real server上安装httpd服务并创建测试页面: 关闭防火墙跟selinux之后开始配置 yum install -y httpd systemctl start httpd systemctl enable httpd vim /var/www/html/index.html //创建测试页面 This httpd-1 Page 另一台real server做同样配

LVS基础详解和NAT/DR模型的实现

LVS:Linux Virtual Server 所谓虚拟的服务就是,当客户端请求服务时,将服务在前端调度器上,通过一定方式负载到后端多台服务器上,但对于客户端来说是不可见的,像在访问同一台服务器一样,这就是虚拟的意思 原理 ipvs:使用LVS服务时,在linux内核当中的一个过滤框架,作用在Input链上,通过解析用户请求的ip和端口号,判断是否是集群服务(若较老的版本内核中没有内置则需自行编译安装) 当用户请求到达,进入调度器内核空间,由于请求的是本地地址,转发到Input链,通过请求的i

Android基础入门教程——2.4.7 构建一个可复用的自定义BaseAdapter

Android基础入门教程--2.4.7 构建一个可复用的自定义BaseAdapter 标签(空格分隔): Android基础入门教程 本节引言: 如题,本节给大家带来的是构建一个可复用的自定义BaseAdapter,我们每每涉及到ListView GridView等其他的Adapter控件,都需要自己另外写一个BaseAdapter类,这样显得非常麻烦, 又比如,我们想在一个界面显示两个ListView的话,我们也是需要些两个BaseAdapter- 这,程序员都是喜欢偷懒的哈,这节我们就来写

Keepalived基础知识

大纲: 一.什么是Keepalived? 二.VRRP协议简介. 三.Keepalived原理. 四.Keepalived配置文件详解. 五.Keepalived配置示例. 一.什么是Keepalived? 什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,那说到keepalived时不得不说的一个协议就是VRRP协议,可以说这个协议就是

keepalived基础配置详解(一)

一.简介 keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障,用于web服务器的健康状态检测,如果有一台web服务器工作出现故障,keepalived将检测到,并将有故障的web服务器从系统中下线,等待服务器故障排除之后,将服务器重新添加至系统中. 要想学习keepalived,必须先了解VRRP协议,keepalived就是在VRRP协议的基础之上实现的. 二.VRRP协议简介 1.VRRP协议 虚拟路由冗余协议 VRRP(Virtual Rout

为您的Web项目构建一个简单的JSON控制器

摘要:无论您的项目使用的是哪种数据库后端,JavaScript Object Notation (JSON) 控制器都能简化您的开发工作.本文将带领您建立一个能够增强您的下一个开发项目的非常基础的 JSON 控制器. 您的下一个 PHP/MySQL 项目可能与您最近完成的十几个项目类似:建立一个 MySQL 数据库,创建包含 HTML 的 PHP 视图,根据需要添加 JavaScript 代码和 CSS 文件,连接到数据库,从数据库提取内容来填充视图,等等.如果您熟悉 web 开发,您一定知道分

keepalived基础知识及高可用的实现

目录 1.keepalived软件介绍 2.keepalived的安装及VRRP的实现 3.总结 1.keepalived软件介绍 keepalived是由c语言编写的一个路径选择软件,是IPVS的一个扩展性项目,为IPVS提供高可用性(故障转移)特性,它的高可用性是通过VRRP协议实现的,并实现了对负载均衡服务器池中的real server进行健康状态检测,当real server不可用时,自身实现了故障的隔离,这弥补了IPVS不能对real server服务器进行健康检测的不足,这也是kee