防止单点故障——keepalived+nginx高可用搭建

目录

(1)方案规划:

(2)安装nginx:

(3)安装keepalived:

(4)配置keepalived:

A、主服务器:

B、备服务器:

(5)编写nginx健康检查脚本:

(6)启动测试:


(1)方案规划:

方案规划是:安装2台nginx服务器,并且每一个nginx上都有一个keepalived,通过keepalived映射的VIP访问nginx服务器。keepalived通过shell脚本定时检查nginx健康状态,如果nginx进程死掉,就立即杀死对应的keepalived并邮件通知管理员。此时备keepalived开始起作用,nginx服务可正常访问,如此便做到了高可用。示意图如下:

(2)安装nginx:

在主、备服务器上安装nginx,注意两个nginx配置的端口号必须要一致。安装nginx操作步骤见对应的汇总整理即可或网上查询安装操作。

(3)安装keepalived:

在主、备服务器上安装keepalived,操作步骤见上述操作。

(4)配置keepalived:

配置文件:/etc/keepalived/keepalived.conf

A、主服务器:

global_defs {

   router_id host_192.168.0.141 #唯一标识符

}

vrrp_script checknginx {

    script "/data/shell/nginx_check.sh" #健康检查脚本

    interval 3 #定时3秒执行一次脚本

}

vrrp_instance VI_1 {

    state MASTER #主、备角色

    interface eth0 #网卡

    virtual_router_id 51 #keepalived主、备群唯一符号,必须相同

    priority 100 #优先级,主高、备低

 nopreempt #非争抢VIP模式

    advert_int 1

    authentication {

        auth_type PASS #keepalived主、备群密码,必须相同

        auth_pass 2222 #keepalived主、备群密码,必须相同

    }    

    virtual_ipaddress {

        192.168.100.160 #VIP

    }

    track_script {

        checknginx #vrrp_script名称必须放在VIP下面

    }

}

B、备服务器:

global_defs {

   router_id host_192.168.0.142

}

vrrp_script checknginx {

    script "/data/shell/nginx_check.sh"

    interval 3

}

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 50

 nopreempt

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 2222

    }    

    virtual_ipaddress {

        192.168.100.160

    }

    track_script {

        checknginx

    }

}

简单来说,就是复制主服务器上keepalived.conf配置文件,然后修改参数:router_id、state、priority,三个参数值即可。

(5)编写nginx健康检查脚本:

编写脚本检查nginx的提供端口号的url是否正常返回内容,如果检测到nginx返回内容为空串,那么就将该服务器上的keepalived进行杀死(还可以在此添加发送邮件的功能,keepalived自带的发送邮件只能发送服务器内部邮件,无法发送外部网络邮件),因为keepalived的高可用是体现在keepalived软件上,只有当该软件进程被杀死,VIP才会进行浮动到备用keepalived上。

具体脚本资源见:https://download.csdn.net/download/LSY_CSDN_/12051742,该脚本中只是检查nginx健康,没有杀死keepalived,下载后只需要在.sh脚本文件中监测到nginx异常发送邮件的地方添加上:service keepalived stop,命令即可。

(6)启动测试:

首先,将主、备服务器上nginx先启动好,然后再将keepalived启动好,然后通过浏览器输入VIP+nginx端口号访问。

将主keepalived上的nginx服务杀死,此时nginx健康检查的脚本会发现nginx提供端口的url返回内容为空串,就会杀死主keepalived,然后VIP就会浮动到备服务器上,此时浏览器中刷新访问就会访问到备服务器上nginx。

将主keepalived上的nginx、keepalived都启动好。如果配置的非抢占VIP模式,那么访问的还是备服务器上nginx,否则VIP会浮动到主keepalived上,将访问主服务器上nginx。

发布了131 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LSY_CSDN_/article/details/103723157