设为首页 收藏本站
查看: 923|回复: 0

[经验分享] keepalived基础及使用DR模型构建一个real_server

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-22 09:49:41 | 显示全部楼层 |阅读模式
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、先做简单的主从节点
主节点配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑keepalived的配置文件,在编辑之前先将此文件备份,以免以后使用
[iyunv@localhost 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
    }
}




从节点配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑keepalived的配置文件
[iyunv@localhost 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
    }
}



1
2
3
4
5
6
7
这样两节点的主备配置就已完成,然后启动服务,就可以测试了
[iyunv@localhost keepalived]# service keepalived restart
启动完以后,将主节点的服务停掉,然后查看备节点的情况
[iyunv@localhost keepalived]# service keepalived stop
然后在备节点使用ip addr show查看刚才设定的IP是否已经从主节点上获取到备节点上;从中可以看出备节点上已经得到了IP
[iyunv@localhost keepalived]# ip addr show 1: lo:  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:
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、双主模型
只需要在两台主机的刚才的配置文件中再添加配置定义信息即可
在主节点配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[iyunv@localhost 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
    }
}




在从节点配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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的文件,里面存放有运行实例
    定义检测脚本:
        使用单独的配置段定义检测机制

1
2
3
4
5
6
7
8
9
10
11
12
      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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
编辑配置文件,在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"
}




备用节点配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
! Configuration File for keepalived
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_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配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
创建一个目录
[iyunv@www ~]# mkdir -pv /web/htdocs/a
并添加一个页面文件
[iyunv@www ~]# vim /web/htdocs/a/index.html
配置httpd的主配置文件
[iyunv@www ~]# vim /etc/httpd/conf/httpd.conf

   DocumentRoot /web/htdocs/a
   ServerName www1.how.com

更改内核信息
[iyunv@www ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [iyunv@www ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore [iyunv@www ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce [iyunv@www ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
设置路由[iyunv@www ~]# ifconfig lo:0 172.16.25.30 netmask 255.255.255.255 broadcast 172.16.25.30 up
[iyunv@www ~]# route add -host 172.16.25.30 dev lo:0




172.16.25.1配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
将之前配置的文件删除,并复制最开始的配置文件
[iyunv@localhost keepalived]# cp keepalived.bak keepalived.conf
配置此文件[iyunv@localhost 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
[iyunv@localhost keepalived]# yum install ipvsadm
[iyunv@localhost keepalived]# ipvsadm -L -n




172.16.25.2配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[iyunv@localhost keepalived]# cp keepalived.bak keepalived.conf [iyunv@localhost 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服务
[iyunv@localhost keepalived]# service keepalived restart




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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25125-1-1.html 上篇帖子: keepalived双机实现高可用和负载均衡 下篇帖子: Linux 高可用(HA)集群之keepalive 模型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表