nginx 高可用HA keepalived学习

一、原理介绍

image.png
image.png

上图就是keepalived的双机主备原理,用户通过访问虚拟ip,然后虚拟ip是和nignx相关联的,如果主节点挂掉,虚拟ip在接收心跳的过程中发现主节点挂掉了,这个时候,虚拟ip就会访问备份的nginx,这样就达到了keepalived双机主备的原理了

需要注意的是,两台nginx机子配置一定是需要一样的,因为如果访问量很大,master挂掉了,然后虚拟ip访问到备份的nginx,这个时候备份的nginx会瞬间挂掉。

二、keepalived安装

image.png

链接:https://www.keepalived.org/download.html

下载好压缩包然后上传到服务器上,之后解压进入keepalived目录:


image.png

这个就和nginx一样了,也有configure文件,这个时候我们制定一些变量,然后进行配置安装keepalived

./configure --prefix=/usr/local/keepalived --sysconf=/etc

--prefix= 安装的路径,这里我们安装到usr/local下
--sysconf 代表的是核心配置文件存放的路径,这里我们需要配置到etc 不然会报错
执行完上述命令之后然后执行命令进行安装文件
make && make install 来安装


image.png

安装之后我们来检测下安装结果:

[root@172host keepalived-2.1.5]# whereis keepalived
keepalived: /etc/keepalived /usr/local/keepalived

keepalived的配置文件则是安装到了/etc/keepalived下面,打开配置信息:


image.png

三、keepalived注册为系统服务

首先我们需要找到keepalived安装包的下面目录:

keepalived-2.1.5/keepalived/etc

拷贝一些文件

cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/

#刷新服务并启动keepalived
systemctl daemon-reload
systemctl start keepalived.service

keepalived 我们需要同时配置到主备节点上,主节点配置如下:

主节点的ip是172

global_defs {
   # 路由id,当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_172
}

# 服务器节点
vrrp_instance VI_1 {
    # 表示的状态,当前172位nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡                                                                                                
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在master挂掉之后就可以成为master
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip
    virtual_ipaddress {
        192.168.121.171
    }
}

备节点的ip是173

bal_defs {
   # 路由id,当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_173
}

# 服务器节点
vrrp_instance VI_1 {
    # 表示的状态,当前173位nginx的备节点,BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在master挂掉之后就可以成为master
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip
    virtual_ipaddress {
        192.168.121.171
    }
} 

这样,如果主节点的keepalived挂掉,使用命令ip addr 查看ip就会发现,主节点已经没有了虚拟ip171了,而在备份节点上查看,发现虚拟ip已经绑定到了子节点上。

而访问虚拟ip 发现页面指向的是备份节点的nginx所指向的内容了。

三、keepalived配置nginx自动重启

我们发现如果keepalived挂了,是可以做到主备切换的,但是如果nginx挂掉呢,发现页面是挂掉的状态,这个不是我们想要的,因此我们需要做到nginx24小时都在服务,如果挂掉,需要自动重启

我们把脚本check_nginx_alive_or_not.sh写到etc/keepalived 目录下,与keepalived的配置文件放在一起。

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    # 等待一小会儿再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
    sleep 3
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then                                                                  
        killall keepalived
    fi
fi

然后给这个脚本赋权 chmod +x ***.sh
然后运行,发现没有报错,理论是正常的
然后我们修改keepalived的配置文件,让它可以定时的调取脚本,配置内容如下:

global_defs {
   # 路由id,当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_172
}

vrrp_script check_nginx_alive{                                                                                          
    script "/etc/keepalived/check_nginx_alive_or_not.sh"
    interval 2 # 每隔两秒运行上一次脚本
    weight 10 # 如果脚本运行成功,则升级权重+10 如果配置-10则是减10
}

# 服务器节点
vrrp_instance VI_1 {
    # 表示的状态,当前172位nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在master挂掉之后就可以成为master
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        check_nginx_alive # 追踪nginx脚本
    }
   # 虚拟ip
    virtual_ipaddress {
        192.168.121.171
    }
}   

四、keepalived双主热备

image.png

图中的原理很简单就是在备份节点上类似于主节点一样配置一个虚拟ip来做到互补的作用,因为如果仅配置主备节点,那么只有主节点挂掉,备份节点才可以使用,平时是无法使用的,这样就造成了资源的浪费,成本的上升,所以做成双主热备就可以做到资源的最大利用。

五、DNS轮询

image.png
image.png
image.png

图上就是配置的DNS轮询,因为我们在第四步中已经做到两个keepalived组成的双主热备,那么就有两个虚拟ip了,两个虚拟ip对应两台服务器,我们都是需要去访问做到资源的最大利用,那么这个时候就需要DNS轮询了,我们的请求首先到DNS解析,解析分配到ip然后访问,这块的配置就是分配 两个ip的权重和时间。

六、双主热备的实现

直接贴配置信息:

! Configuration File for keepalived

global_defs {
   # 路由id,当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_172
}

vrrp_script check_nginx_alive{
    script "/etc/keepalived/check_nginx_alive_or_not.sh"
    interval 2 # 每隔两秒运行上一次脚本
    weight 10 # 如果脚本运行成功,则升级权重+10 如果配置-10则是减10
}

# 服务器节点
vrrp_instance VI_1 {
    # 表示的状态,当前172位nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在master挂掉之后就可以成为master
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        check_nginx_alive # 追踪nginx脚本
    }


    # 虚拟ip
    virtual_ipaddress {
        192.168.121.171
    }
}

# 服务器节点
vrrp_instance VI_2 {
    # 表示的状态,当前172位nginx的主节点,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 52
    # 优先级/权重,谁的优先级高,在master挂掉之后就可以成为master
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip
    virtual_ipaddress {
        192.168.121.170
    }
}


bal_defs {
   # 路由id,当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_173
}

# 服务器节点
vrrp_instance VI_1 {
    # 表示的状态,当前173位nginx的备节点,BACKUP
    state BACKUP
    # 当前实例绑定的网卡                                                                                                
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在master挂掉之后就可以成为master
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip
    virtual_ipaddress {
        192.168.121.171
    }
}

# 服务器节点
vrrp_instance VI_2 {
    # 表示的状态,当前173位nginx的备节点,BACKUP
    state MASTER
    # 当前实例绑定的网卡                                                                                                
    interface ens33
    # 保证主备节点一致
    virtual_router_id 52
    # 优先级/权重,谁的优先级高,在master挂掉之后就可以成为master
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip
    virtual_ipaddress {
        192.168.121.170
    }
}

配置完成之后,我们需要重启keepalived,然后使配置生效。
可以看到其实就是反着再配置了一边而已,测试的话我们可以类似于测试主备的模式一样,访问虚拟ip,然后关掉主节点的keepalived,然后反着再试一下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360