keepalived结合nginx实现nginx高可用的方法

  

实现nginx高可用的方法有很多种,其中一种比较常见的方法是使用keepalived结合nginx。接下来我将给出一个完整的攻略,包括keepalived、nginx的安装和配置以及两个示例说明。

安装keepalived

keepalived是一个高可用性的解决方案,可以在多个服务器之间维护虚拟IP。在此之前需要安装依赖库和编译工具:

sudo yum install -y gcc make openssl-devel libnfnetlink-devel net-snmp-devel wget

然后,从官网下载最新的稳定版本的keepalived,比如v2.1.5:

wget https://www.keepalived.org/software/keepalived-2.1.5.tar.gz
tar zxvf keepalived-2.1.5.tar.gz
cd keepalived-2.1.5 
./configure
make && sudo make install

配置keepalived

安装完之后,在需要实现高可用的两台服务器上都进行如下配置:

编辑/etc/keepalived/keepalived.conf文件,添加如下内容:

vrrp_script check_nginx {
        script "/usr/local/nginx/sbin/nginx -t"
        interval 2
        fall 2
        rise 2
}
vrrp_instance VI_nginx {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 101
        authentication {
             auth_type PASS
             auth_pass 1111
        }
        track_script {
             check_nginx
        }
        virtual_ipaddress {
             192.168.1.100/24
        }
}

其中,virtual_router_idinterface需要在两台服务器上分别设置不同的值,priority用于设置主服务器的优先级,数字越大优先级越高。

上述配置中,check_nginx是自定义的脚本,用于检测nginx是否正常运行。如果nginx出现问题,则该脚本的返回值为“1”,表示nginx状态异常,keepalived会向另一台服务器发送虚拟IP的切换请求。

安装nginx

安装最新的稳定版本的nginx,比如v1.20.1:

wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_sub_module --with-stream
make && sudo make install

配置nginx

在两台服务器上都进行如下nginx配置:

编辑/usr/local/nginx/conf/nginx.conf文件,修改为如下内容:

user  nobody;
worker_processes  2;
error_log  logs/error.log;
pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location /health {
            return 200 'ok';
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}
stream {
    upstream nginx_server {
        server 127.0.0.1:80;
    }
    server {
        listen 192.168.1.100:80;
        proxy_pass nginx_server;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_buffer_size 32k;
    }
}

其中,server块中的“location /health”用于健康检查,如果返回值为“ok”则表示nginx健康。

stream块中的upstream用于指定上游服务器的地址,server块用于将虚拟IP绑定到本机,并将请求转发到上游服务器上。

示例说明

下面我们将给出两个示例说明,分别是nginx访问应用服务器的情况和nginx作为反向代理的情况。

示例一:nginx访问应用服务器

假设我们有两台应用服务器,分别为192.168.1.101和192.168.1.102,监听的端口号为8080,使用HTTP协议。

我们需要在nginx配置文件中添加如下内容:

upstream app_servers {
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://app_servers;
    }
}

上述配置中,upstream用于指定应用服务器的地址,server用于监听HTTP请求,将请求转发到上游服务器上。

当nginx的虚拟IP被切换到另一台服务器时,上游服务器的地址会自动更新。

示例二:nginx作为反向代理

假设我们有两台Web服务器,分别为192.168.1.201和192.168.1.202,使用HTTP协议。

我们需要在nginx配置文件中添加如下内容:

upstream web_servers {
    server 192.168.1.201;
    server 192.168.1.202;
}

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://web_servers;
    }
}

上述配置中,upstream用于指定Web服务器的地址,server用于监听HTTP请求,将请求转发到上游服务器上。

当nginx的虚拟IP被切换到另一台服务器时,上游服务器的地址会自动更新。

以上就是使用keepalived结合nginx实现nginx高可用的方法的完整攻略,包括安装和配置keepalived和nginx以及两个示例说明。

相关文章