keepalived的基础讲解

一、keepalived的引入

1、HA基础回顾

HA:
heartbeat、corosync
keepalived:lvs(director:HA,ipvs rules ,health check,)
messger layer
coluter resource messger 为那些非HA var提供管理
resource agent
资源:主资源,组资源,克隆资源,主从资源

keepalived 的实现方法:

2、vrrp的基础知识

vrrp:virtual redundent routing protocol 虚拟路由冗余协议

到达外网的方法

1、默认网关

2、添加路由条目

静态路由

动态路由:ospf,rip

vrrp:蒋两个或两个以上的路由器虚拟化为一个路由组,虚拟化为一个路由器,在每一个上面配置上ip地址和mac地址,如果一个路由器坏了,另外一个路由器会自动承担起转发路由数据包的任务,达到高可用的目的。
抢占式和非抢占式
抢占式:根据配置在路由器上的策略来设置路由器在工作时如果意外重启要不要比较优先级,ip地址大小,确定谁为主,谁为备。

3、keepalived的引入

Keepalived的适用场景
keepalived:只需要简单的定义一个ip就能实现nginx的高可用,它的适用场景是轻量级,无需共享存储,资源征用。主要用在反向代理,的高可用。
ipvs:
lvs:keepalived
nginx,haproxy(reverse proxy):keepalived
heartbeat+drbd:主要实现mysql的高可用
keepalived  haproxy 被read hot 收入到红帽系
而nginx却没有

4、Keepalived的主从配置

keepalived

的安装

前提是安装了 nginx做反向代理

二、keepalived的主从、主主配置

1、主从模型

环境准备

Node1:172.16.1.143  lamp+nginx+keepalived

Node2:172.16.1.144  lamp+nginx+keepalived

keepalived可以编译安装,也可rpm包安装

Node1
yum install keepalived -y
cp /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf.bak
Node1
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 107
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kingken
    }
    virtual_ipaddress {
    172.16.1.147
        }
}
scp /etc/keepalived/keepalived.conf 172.16.1.144:/etc/keepalived/keepalived.conf

Node2

yum install keepalived -y
vim /etc/keepalived/keepalived.conf
backup
vrrp_instance VI_1 {
    state BACKUP  修改
    interface eth0
    virtual_router_id 107
    priority 99 修改
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kingken
    }
    virtual_ipaddress {
    172.16.1.147
        }
}

2、实验验证

开启节点一查看日志 service keepalived  start
tail -f /var/log/messages
ip addr show 查看vip配置上没有
然后关闭节点1 service keepalived stop
开启节点二 service keepalived  start
tail -f /var/log/messages
ip addr show 查看vip配置上没有
然后在开启节点一看配置的优先级起作用没有,会不会抢回vip

3、双主模型

node1
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
virtual_router_id 107
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kingken
    }
    virtual_ipaddress {
    172.16.1.147
        }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 149
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kingking
    }
    virtual_ipaddress {
    172.16.1.149
}
scp /etc/keepalived/keepalived.conf 172.16.1.144:/etc/keepalived/keepalived.conf

node2

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 107
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kingken
    }
    virtual_ipaddress {
    172.16.1.147
        }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 149
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kingking
    }
    virtual_ipaddress {
    172.16.1.149
        }
}

4、主主验证

开启节点一查看日志 service keepalived  start

tail -f /var/log/messages

ip addr show 查看vip配置上没有

开启节点二 service keepalived  start

tail -f /var/log/messages

ip addr show 查看vip配置上没有

然后在开启节点一看配置的优先级起作用没有,会不会抢回vip

三、结合邮件做健康状态检测

1、邮件基础知识回顾

25号端口是邮件服务器
echo "hello" | mail -s "how are you?" root
mail 查看

2、定义邮件发给谁

global_defs {
   notification_email {
        [email protected]
        }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
}
man  keepalived  #查看帮助命令怎么设置
/notify
可以是脚本
也可以是自己定义的命令

3、定义发邮件内容

virtual_ipaddress {
    172.16.1.147
        }
        notify_master "echo ‘to be master‘ |  /bin/mail -s ‘to be master‘ root"
        notify_backup "echo ‘to be backup‘ |  /bin/mail -s ‘to be backup‘ root"
}

4、定义在什么情况下发邮件

实现nginx 的主备切换

两边都装上nginx然后启动添加测试页面

virtual_ipaddress {

172.16.1.147

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"

}

5、检测脚本的原理:

使用单独的配置段定义进程机制

vrrp_script CHK_NAME {
script "/path/to/somefie.sh"脚本返回值0为成功,非零值为不成功
interval # 每隔多长时间检测
weight -5 降低权重
fall 3  正常到失败次数,至少检测3次
rise 1  失败到正常
}

在实例调用定义的检测机制,其才能生效

6、示例帮助脚本查看

cat  /usr/share/doc/keepalived-1.2.7/keepalived.conf.vrrp.localcheck
! Configuration File for keepalived
global_defs {
   notification_email {
        [email protected]
        }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
}
#vrrp_script chk_sched_down {
#        script "[ -e /etc/keepalived/down] && exit 1 || exit 0 "
#        interval 2
#        weight -50
#        fall 2
#        rise 1
#}

#主要是在这里定义

7、检测nginx健康的应用实例

vrrp_script chk_nginx {
        script "killall -0 nginx"
        interval 1
        weight -5
        fall 2
        rise 1
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 107
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kingken
    }
   virtual_ipaddress {
    172.16.1.147
        }
#在此处调用检测nginx启动,注意不能killall ngnix 这样资源是不会转过去的
        track_script {
        chk_nginx
        #chk_sched_down
}
        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、为BACKUP就行啦

8、扩展应用脚本检测nginx的健康状态

vim chk_nginx.sh

Pwd

定义调用脚本检测nginx的健康状态并发送邮件

/etc/keepalived/
        notify_master "/etc/rc.d/init.d/chk_nginx.sh master"
        notify_backup "/etc/rc.d/init.d/chk_nginx.sh backup"
        notify_fault "/etc/rc.d/init.d/chk_nginx.sh fault"

复制keepalived   发邮件的脚本

脚本内容

#!/bin/bash
# Author: MageEdu <[email protected]>
# description: An example of notify script
#
vip=172.16.1.147
contact=‘[email protected]‘
notify() {
    mailsubject="`hostname` to be $1: $vip floating"
    mailbody="`date ‘+%F %H:%M:%S‘`: vrrp transition, `hostname` changed to be $1"
    echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
    master)
        notify master
        /etc/rc.d/init.d/nginx start
        exit 0
    ;;
    backup)
        notify backup
        /etc/rc.d/init.d/nginx stop
        exit 0
    ;;
    fault)
        notify fault
        /etc/rc.d/init.d/nginx stop
        exit 0
    ;;
    *)
        echo ‘Usage: `basename $0` {master|backup|fault}‘
        exit 1
    ;;
Esac

chmod +x  chk_nginx.sh

两个节点都要有配置文件和修改

然后重启测试mail

四、keepalived自动生成ipvs规则的应用

缺点是有有一台directory是空闲的

dns轮询到directory

规则要每台directory的不同

双主模型,dns轮询,real server 也要轮询

vrrp 的vip地址必须是公网地址,要做轮询

keepalived实现 lvs

node1  ip:172.16.1.143 vip:172.16.1.148  lamp+nginx+keepalived

node2  ip:172.16.1.144 directory keepalived   lamp+nginx+keepalived

node3 ip:172.16.1.145  vip:172.16.1.148  real server

1、Keepalived的主从ipvs

Node1

[[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.1.148 netmask 255.255.255.255 broadcast 172.16.1.148 up
[[email protected] ~]# route add -host 172.16.1.148 dev lo:0
Vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 43
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kingken
    }
    virtual_ipaddress {
        172.16.1.148
        }
}
virtual_server 172.16.1.148 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.1.145 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
                }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

node2 修改为备节点 和优先级改小

实验验证

node2

yum install ipvsadm -y

ipvsadm -L -n

查看是否自动配置好real server 生成规则

node1

yum install ipvsadm -y

ipvsadm -L -n

查看是否自动配置好real server 生成规则

我们也可以在网页上浏览172.16.1.148看是否实现了ipvs的功能

2、Keepalived的双主模式下实现ipvs

双主模式

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 43
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kingken
    }
    virtual_ipaddress {
        172.16.1.148
        }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1kingken
    }
    virtual_ipaddress {
        172.16.1.149
        }
}
virtual_server 172.16.1.148 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.1.145 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
                }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}
virtual_server 172.16.1.149 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.1.145 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
                }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

备用节点跟上面一样修改优先级、和主备互换就可以啦

node3

[[email protected] ~]# ifconfig lo:0 172.16.1.148 netmask 255.255.255.255 broadcast 172.16.1.148 up

[[email protected] ~]# route add -host 172.16.1.148 dev lo:0

node3注意虚拟主机只能定义成<VirtualHost *:80>

实验测试同上

时间: 2024-08-28 15:08:27

keepalived的基础讲解的相关文章

JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象JS基础讲解,工厂模式.构造函数模式.原型模式.混合模式.动态原型模式>,接下来讲一般通过那些方法完成JavaScript的继承. 原型链 JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下

面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式

什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现. 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象.其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可. function createBlog(

一,细说 HTML5 之 HTML5 基础讲解

这是一个HTML5系列,主要是零基础的宝宝们快速认识与学习HTML5. 了解 HTML 1.什么是 HTML HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (markup language) 注:标记语言是一套标记标签 (markup tag),HTML 使用标记标签来描述网页 2. HTML版本 版本 年份 HTML 1991 HTML + 1993 HTML 2.0

原生AJAX基础讲解及兼容处理

原文:原生AJAX基础讲解及兼容处理 AJAX = Asynchronous JavaScript and XML (异步的JavaScript和XML). AJAX不是新技术 ,但却是热门的技术.它可以在不重载(刷新)整个页面的情况下与服务器进行数据交互并更新网页模块. AJAX的优点有很多:可以局部刷新.按需加载,这样就减轻了服务器的数据流量.并且在页面更新的同时,用户可以浏览器网页的其它内容而不受影响,也减轻了结构负担.AJAX也不是万能的,在有以上优点的同时SEO也受到了影响. 在学习A

高性能集群软件Keepalived之基础知识篇

一.Keepalived介绍 Keepalived是Linux下一个轻量级的高可用解决方案,它与HeartBeat.RoseHA实现的功能类似,都可以实现服务或者网络的高可用,但是又有差别:HeartBeat是一个专业的.功能完善的高可用软件,它提供了HA软件所需的基本功能,比如心跳检测和资源接管,监测集群中的系统服务,在群集节点间转移共享IP地址的所有者等,HeartBeat功能强大,但是部署和使用相对比较麻烦:与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功

弹性布局的基础讲解

弹性布局的基础讲解 弹性布局是由w3c在2009年提出的一种布局方法,目前浏览器都已经支持弹性布局(忽略IE6吧).本文主要讲解弹性布局的基本语法并将其应用到实际网页布局中 如何应用弹性布局,代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content=&qu

Java设计模式之初学者笔记——设计模式基础讲解

前言 最近了解了一下设计模式,起初看的是<大话设计模式>,这本书是用C#语言写的,觉着挺有意思,其实很多模式我们都已经在用了,却不知道这就是设计模式.所以后来买了本GOF的<设计模式--可复用面向对象软件的基础>打算好好钻研下.这本书是设计模式的鼻祖,相当权威,书名中说的是"可复用面向对象软件的基础",这是基础,我对此表示比较震撼.用了三年的面向对象语言居然不了解设计模式,不知道这是基础,看来也是白活了.我暂时了解到的在此基础上还有重构等等很多比较高级概念.但这

AWK基础讲解笔记

目录 awk课程总结... 1 第1章 awk基础入门... 1 1.1 awk基础入门... 1 1.2 awk简介... 1 1.2.1 一种名字怪异的语言... 1 1.2.2 模式扫描和处理... 1 1.3 学过awk可以掌握的内容... 1 1.4 awk命令... 1 1.5模式及pattern,可以类似理解成sed的模式匹配,可以由表达式组成,也可以是俩个正斜杠之间的正则表达式,比如:NR==1 ,这就是模式,可以理解为一个条件.... 2 1.6动作即action,是由在大括号

Ajax基础讲解 1

随着web的不断发展,Ajax的运用越来越普及,但是对很多同学来说Ajax稍微有些难懂,今天呢就简单给大家讲解一下Ajax的一些基础入门的知识,希望可以帮到刚学习Ajax的同学. 第一步:首先就是服务器的搭建,关于服务器呢不同的人有不同的需求,刚学的人就不要考虑到底用哪个服务器好了,根据每个人的技术不同服务器也不同,新手就随便弄一个可以用的就可以了,我用的是WampServer这个,比较好安装,用于自己写的页面足够了,没有服务器的同学如果想用,可以在下面给我留言,我看到会给你发送过去的:(另外多