Nginx+keepalived实现高可用集群的具体配置

Posted 纵享山河万里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx+keepalived实现高可用集群的具体配置相关的知识,希望对你有一定的参考价值。

一.准备工作

      首先我们需要准备两台主机,在此之前要在两台机器上安装nginx和keepalived服务,这两个服务在安装之前都需要安装依赖的.首先是nginx的安装:

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
yum install nginx -y

然后就是keepalived的安装,也是先安装依赖:

yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel 
yum install keepalived -y

接下来就是要确保防火墙,selinux以及时间同步问题.

二.具体配置

    由于我们是nginx和keepalived相结合,最后是在网页上访问的,所以我们需要先配置一个nginx访问界面的html.这个文件是在:/usr/local/nginx/html/下的index.html,具体配置如下:

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>Master ip:192.168.204.130</p>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

这里面的ip地址设置为本机ip地址即可,主机的配置如上所示,从机的配置也是这样,唯一要修改的就是IP地址,这样我们访问的时候就可以看出不同了,下面我会给大家看一下访问的网页.

 

 以上就是两台机器的nginx网页了,第一张是主机,第二张是从机的.

接下来我们就要写个脚本了,要使用脚本监控nginx.

首先要:

 yum install psmisc -y 

接下来我们要创建脚本文件,在/etc/keepalived/创建一个check_nginx,sh文件,具体内容如下:

#!/bin/bash
#Auto check nginx process if is actived
killall -0 nginx
if [[ $? -ne 0 ]]
then
        systemctl stop keepalived
fi

两台机器上都需要创建这个脚本文件.接下来就是keepalived的集体配置了.

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
        root@director_server
   }
   notification_email_from root@director_server
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 1
    #weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    mcast_src_ip 192.168.204.130
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.204.196
     }
     track_script {
        check_nginx
     }
}

如上图是我们主机的配置,在这里我们需要注意的就是我们check_nginx.sh 的文件路径以及文件名称,对照着上面的配置进行修改基本上是没有什么问题的.

三.测试

   接下来我们配置完成,服务重启之后就要进行网页测试了,首先我们访问一下虚拟ip,

 我们会发现网页上的ip地址为主机的ip地址,接下来我们模拟宕机,先将主机的服务关闭,然后继续访问虚拟ip,看看会发生什么变化.

 看上面的图我们可以发现在主机服务关闭时,我们还是可以继续访问虚拟IP的,只是这时候的访问页面就跳到了我们从机的IP.

四.总结和排错思路

      本次的配置过程其实并不是很难,主要是让我们通过动手配置来真切的体会到了keepalived的高可用以及在一台服务器出现宕机其他从机都可以代替主机的身份继续保持服务的继续运行,这一点时非常实用的,接下来我也会与大家分享一下我在这次配置中所遇到的问题.

问题一:我在写nginx的网页配置时发现无法添加本机的ip地址,但是服务重启并不会报错,我发现我所添加的 文本格式也是没有问题的,接下来我们就要思考一下为什么index.html修改不生效呢?我们就要去到nginx的源文件目录下的defalut.conf文件中,后来我发现原来是目录写错了,我配置的文件在/usr/local/nginx/html目录下,而我的配置文件写的识别目录在/usr/share/nginx/html目录下,在修改之后再次刷新网页就发现多加了IP.

问题二:我的从机在访问网页时显示的并不是nginx服务的页面,而是apache

 这个时候我们就要思考是否是nginx服务没有启动,果然由于我在修改完配置文件之后直接运行了重启命令,并没有查看服务状态,随后我查看了nginx服务的运行状态发现出现报错了,之后我们需要查看报错日志.

 

 我发现报错日志里写道80端口被占用,

        然后我们使用netstat命令来查看并过滤一下80端口被什么服务占用,我们发现原来是被apache服务占用了80端口,所以nginx服务无法启动,我们在关闭apache服务后,nginx就可以正常启动了,再一次刷新网页也正常了.在这里我在访问页面出现apache的时候我就知道了是apache服务占用了端口,但是我之所以说的这么详细就是要和大家分享排错思路,我们在发现错误时第一个要想到是什么造成了错误的发生,在配置文件检查无误之后就要想到去查看日志文件,然后再继续进行后面的排错.希望本次的分享对大家的学习和排错有了一点点的帮助,另外祝大家七夕节快乐!!!!

以上是关于Nginx+keepalived实现高可用集群的具体配置的主要内容,如果未能解决你的问题,请参考以下文章

实战 | Nginx+keepalived 实现高可用集群

实战 | Nginx+keepalived 实现高可用集群

keepalived+Nginx实现高可用集群

keepalived+nginx实现高可用and负载均衡集群

Keepalived+Nginx实现高可用负载均衡集群

Keepalived+Nginx+Tomcat 实现高可用Web集群(转)