linux两台机器做高可用,【实战演练】Linux操作系统14-keepalived实现Nginx服务器高可用...

本文欢迎转载,转载请注明出处和作者。

理论部分,在之前的文章已经说明过了,详见《【理论研究】业务系统高可用及负载均衡》。

上一篇已经讲述通过单台Nginx服务器对2/多台Apache服务器做负载均衡,但是Nginx本身却存在单点故障隐患。

如前面理论所述,解决上述问题,本篇介绍通过安装keepalive,对Nginx服务器做高可用HA。

960bec801e7f

1、Keepalived简介

Linux有很多开源的HA软件,keepalived是其中的一款,用keepalived可以用来解决很多应用程序的高可用问题。(如本篇的Nginx,以及后面对LVS、Mysql都可以用Keepalived来做高可用配置)

2、LVS、Keepalived、Nginx区别

LVS是用来做4层的负载均衡的,只能通过IP五元组进行流量分发。

Keepalived是用来做HA的,可以对任意的程序(需要写脚本)进行检测,然后对该软件做HA,例如可以对LVS、Nginx、Mysql等来做HA。

Keepalived内嵌LVS模块的,提供VIP的功能。所以如果用了Keepalived,就不需要额外做LVS的Director配置了,但是Realserver的配置还是需要。

Nginx,是可以做7层的负载均衡。LVS只能对IP五元组进行流量分发,而Nginx可以做到应用级别,例如动静分离(图片、视频)等。

3、安装Keepalived

3.1 安装

yum install keepalived -y

3.2 修改配置文件

cd /etc/keepalived

rm keepalived.conf

#原有的配置文件

vi keepalived.conf

#创建新的配置文件

注意配置文件只有一些关键参数必须修改,其他都是默认的。

Master(主)服务器配置

global_defs {

notification_email {

xxx@xxx.com

}

notification_email_from sns-lvs@gmail.com

smtp_server xxx.xxx.xxx.xxx

smtp_connection_timeout 30

router_id LVS_MASTER # 设置lvs的id,在一个网络应该是唯一的

}

vrrp_script chk_http_port {

script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行

interval 2 #(检测脚本执行的间隔,单位是秒)

weight 2

}

vrrp_instance VI_1 {

state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备

interface eth1 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡),注意如果网卡是eth1,要对应修改。

virtual_router_id 66 # 虚拟路由编号,主从要一直

priority 100 # 优先级,数值越大,获取处理请求的优先级越高

advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_http_port #(调用检测脚本)

}

virtual_ipaddress {

10.1.30.31 # 定义虚拟ip(VIP),可多设,每行一个

}

}

注意上面配置中vrrp_script后面定义了一个叫chk_http_port的脚本,而真正脚本实际的路径是/usr/local/src/下面的check_nginx_pid.sh。这个是要后面实际添加的,也就是需要写一个脚本检测nginx服务运行状况。

下面的tracks_cript设置检测脚本为上面定义的chk_http_port,keepalived启动后会自动按照设置好的时间间隔,周期性调用检测脚本。

Slave(从)服务器配置

global_defs {

notification_email {

xxx@xxx.com

}

notification_email_from sns-lvs@gmail.com

smtp_server xxx.xxx.xxx.xxx

smtp_connection_timeout 30

router_id LVS_BACKUP # 设置lvs的id,在一个网络应该是唯一的

}

vrrp_script chk_http_port {

script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行

interval 2 #(检测脚本执行的间隔,单位是秒)

weight 2

}

vrrp_instance VI_1 {

state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备

interface eth1 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡),注意如果网卡是eth1,要对应修改。

virtual_router_id 66 # 虚拟路由编号,主从要一致

priority 99 # 优先级,数值越大,获取处理请求的优先级越高

advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_http_port #(调用检测脚本)

}

virtual_ipaddress {

10.1.30.31 # 定义虚拟ip(VIP),可多设,每行一个

}

}

3.3 编写检测脚本

编写nginx检测脚本,注意路径与名称要和上面keepalivce.conf中的保持一致。

vi /usr/local/src/check_nginx_pid.sh

# vi /usr/local/src/check_nginx_pid.sh

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`

if [ $A -eq 0 ];then

/usr/local/nginx/sbin/nginx #重启nginx

if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移

killall keepalived

fi

fi

增加脚本执行权限

chmod +x /usr/local/src/check_nginx_pid.sh

3.4 启动keepalived服务

service keepalived start

3.4 测试

3.4.1 手动停止Nginx

启动进程后,在30.40输入ip a s查看虚拟IP是否成功挂载。

960bec801e7f

ping 虚拟IP测试

960bec801e7f

连续通过VIP(10.1.30.31)访问网站,不断刷新测试,发现访问流量已经在两个Apache01与Apache02之间分发。

然后对Nginx主机手动停止Nginx服务。

service nginx stop

然后继续通过VIP(10.1.30.31)访问网站,发现网站依然能够正常访问。

960bec801e7f

960bec801e7f

通过ip a s查看,发现30.31还是在nginx01上面。

960bec801e7f

原因是这样的:我们设置了一个脚本(check_nginx_pid.sh),利用keepalived周期性自动运行,脚本检测nginx进程是否存活,如果进程异常退出/没有运行,脚本会重新启动nginx进程。

因此,上面手动停止nginx服务,keepalived并不会将VIP从主Nginx服务器切换到备Nginx服务器,而是通过脚本重启将nginx启动。因此通过VIP访问网站,由于3秒内nginx已经重启启动了,业务仍然能够正常访问。

3.4.2 手动停止keepalived

主Nginx服务器手动停止Keepalived

service keepalived stop

通过ip a s发现VIP已经自动切换到备Nginx服务器了。

960bec801e7f

通过VIP访问网站,发现业务正常访问。

960bec801e7f

960bec801e7f

当前,2台Nginx服务器通过keepalived以及nginx检测脚本,实现了HA。但是用户通过VIP访问业务的时候,正常情况下只有1台Nginx负载用户的访问。

为了让2台Nginx服务器都能承载业务负载,下一篇通过keeaplived自带的LVS模块功能,实现2台Nginx服务器的负载均衡。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值