nginx+keepalived 实现高可用

上一篇写了nginx的配置,nginx确实能帮咱们分配到多个应用中,但是仍然有一个问题,当我其中一个机器down了,比如意外关机了,那么仍然是访问不了了,必须用户手动切换地址才可以访问,所以需要配置高可用,当其中一个nginx意外down了,则自动切换为另外一台nginx上面,即自动主备切换

此时就需要用到 keepalived

具体想了解keepalived的原理以及作用,请参考官网:https://www.keepalived.org/index.html

下面进行keepalived的安装和配置,配合nginx实现高可用

1、安装keepalived

系统为:centos7

直接进行在线安装:

yum install keepalived

离线安装参考:https://www.cnblogs.com/hanpengblog/p/11330706.html

2、配置keepalived

安装完成后,配置文件为:/etc/keepalived

vim keepalived.conf

以下是我配置的所有内容:

主节点:

 1 #配置文件
 2 ! Configuration File for keepalived
 3 
 4 global_defs {
 5    #从服务器最改一下这个
 6    router_id node1 #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
 7 }
 8 #监控服务.NGINX mysql等
 9 vrrp_script chk_nginx {
10     script "/etc/keepalived/health_check.sh"
11     #每2s检查一次
12     interval 2
13     #每次检查-20
14     weight -20
15 }
16 vrrp_instance VI_1 {
17     ##主从设置 MASTER/BACKUP  
18     state MASTER
19     #网卡名称
20     interface enp0s8
21     #同一个集群下这个 router_id是一样的
22     virtual_router_id 51
23     #本机的ip,需要修改
24     mcast_src_ip 192.168.0.109 
25     #优先级,从节点 配置,需要小于主节点
26     priority 100
27     #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
28     advert_int 1
29     #认证的密码
30     authentication {
31         auth_type PASS
32         #设定授权密码,密码相同的为一个集群
33         auth_pass root
34     }
35     #触发的脚本
36     track_script {
37         chk_nginx  #检测脚本,上面配置的
38     }
39     #虚拟ip地址
40     virtual_ipaddress {
41         192.168.0.120
42     }
43 }

备节点:

 1 #配置文件
 2 ! Configuration File for keepalived
 3 
 4 global_defs {
 5    #从服务器最改一下这个
 6    router_id node2 #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
 7 }
 8 #监控服务.NGINX mysql等
 9 vrrp_script chk_nginx {
10     script "/etc/keepalived/health_check.sh"
11     #每2s检查一次
12     interval 2
13     #每次检查-20
14     weight -20
15 }
16 vrrp_instance VI_1 {
17     ##主从设置 MASTER/BACKUP  
18     state BACKUP
19     #网卡名称
20     interface enp0s8
21     #同一个集群下这个 router_id是一样的
22     virtual_router_id 51
23     #本机的ip,需要修改
24     mcast_src_ip 192.168.0.109 
25     #优先级,从节点 配置,需要小于主节点
26     priority 99
27     #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
28     advert_int 1
29     #认证的密码
30     authentication {
31         auth_type PASS
32         #设定授权密码,密码相同的为一个集群
33         auth_pass root
34     }
35     #触发的脚本
36     track_script {
37         chk_nginx  #检测脚本,上面配置的
38     }
39     #虚拟ip地址
40     virtual_ipaddress {
41         192.168.0.120
42     }
43 }

说明:

上面的内容基本已经写了注释,主备又那些需要注意的呢

1、备节点的 priority 的值不要大于主节点的值

2、router_id、auth_pass 这两个值要相同

3、virtual_ipaddress 虚拟地址,这个地址就是将来真正要访问的地址,也要配置相同,可以配置多个虚拟地址

4、需要配置一个检测脚本,本篇中的health_check.sh脚本内容如下:

1 #!/bin/bash
2 count=$(ps aux | grep -v grep | grep nginx | wc -l)
3 if [ $count -gt 0 ]
4 then
5     exit 0
6 else
7     exit 1
8 fi

给health_check.sh设置可执行权限  chmod 777 health_check.sh

5、在interface属性配置的机器的网卡,查看网卡信息(ip a),此时我配置的interface的值为 enp0s8


3、启动服务并验证

systemctl start keepalived.service

#停止服务  systemctl stop keepalived.service

#重启服务 systemctl restart keepalived.service

查看日志:

journalctl -xe

查看虚拟地址是否启动成功

ip a

查看倒数第5行,虚拟的地址已经启动成功了,此时,在浏览器中访问就不要在用nginx的地址了,而应该用虚拟地址192.168.0.120,如下图:

四个应用均可以访问,此时,我将主机(109)的nginx停掉 nginx -s stop

此时继续刷新页面,仍然是可以访问所有应用

此时将主机(109)启动,然后把备机(111)的nginx停止,仍然能访问所有应用

安装完成。

本篇参考的文章:https://blog.csdn.net/yelllowcong/article/details/78764780

上一篇nginx配置地址:https://www.cnblogs.com/hanpengblog/p/11330447.html

 

posted @ 2019-08-10 09:19  车祸现场  阅读(273)  评论(0编辑  收藏  举报