使用nginx+keepalived实现双机互备

216 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

背景 最近负责的有个项目已经到了客户环境的测试阶段,领导要求在客户的内网环境部署一套咱们的服务,要求完全按照生产环境的标准进行部署。思前想后,咱们微服务没啥问题,在正式环境就是多部署几个注册到nacos,但是挡在最前面的nginx肯定只有一台,那不是业也存在单节点问题?经过向大佬请教和网上查阅资料,了解到了keepalived这个神奇。下面是我的研究过程、

步骤

1、Nginx安装配置

1.1、安装要求的环境

1、安装gcc环境

yum install gcc-c++

2、第三方的开发包

2.1  PERE yum install -y pcre pcre-devel

2.2  zlib yum install -y zlib zlib-devel

2.3  openssl yum intsall -y openssl openssl-devel

1.2、安装Nginx

1、下载Nginx

官网地址: nginx.org/en/download…

2、安装Nginx

1. 将nginx源码包上传到Linux上

2. 将Nginx解压到/usr/local下面(目录根据需要可自行指定)

tar -xvf nginx-1.14.0.tar.gz -C /usr/local

3. 进入/usr/local/nginx-1.14.0目录下,执行configure命令生成makeFile文件

cd /usr/local/nginx-1.14.0

./configure \       # \ 代表命令还没有输完,换行的意思

--prefix=/usr/local/nginx \ #表示软件安装到/usr/local/nginx下面

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/temp/nginx/client \

--http-proxy-temp-path=/var/temp/nginx/proxy \

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

--http-scgi-temp-path=/var/temp/nginx/scgi \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-file-aio \ --with-http_realip_module

注意:启动nginx之前,上边将临时文件目录指定为/var/temp/nginx,需要创建该目录

mkdir /var/temp/nginx -p

4. 执行make命令进行编辑,执行make install命令进行安装

1. 进入到nginx-1.14.0目录下,执行make命令(已在该目录下则直接执行)

make

2. 进入到nginx-1.14.0目录下,执行make install命令(已在该目录下直接执行)

make install

3. 进入安装位置/usr/local/nginx 检查是否完成安装

4. 进入conf文件夹修改nginx.conf文件

4.1、进入nginx配置文件目录并编辑

4.2、在配置文件中找到注释 #pid logs/nginx.pid

4.3、将注释打开,并修改为 pid /usr/local/nginx/logs/nginx.pid

5. 在/usr/local/nginx目录下创建logs文件夹

cd /usr/local/nginx

mkdir logs

1.3、启动Nginx

进入sbin目录下,执行命令./nginx

cd /usr/local/nginx/sbin

./nginx

查看nginx是否启动成功

ps -aux | grep nginx

1.4、Nginx实现反向代理和负载均衡

假如有三台应用服务器,分别是:

Tomcat1:192.168.1.1:8081

Tomcat2:192.168.1.2:8082

Tomcat3:192.168.1.3:8083

2、keepalived安装配置(主机配置)

直接使用yum -y install keepalived安装

yum -y install keepalived

查看yum安装的配置文件在哪

rpm -ql keepalived

image.png

查看本机网卡名

ifconfig

image.png

修改keepalived.conf文件

vi /etc/keepalived/keepalived.conf

image.png

image.png

image.png

3、keepalived安装配置(备机配置)

安装过程与主机安装过程一致,需要修改的地方为备机的/etc/keepalived/keepalived.conf文件

image.png  

image.png 创建nginx脚本文件

cd /usr/local/src

touch nginx_check.sh

vi nginx_check.sh

输入以下命令

#!/bin/bas
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重启失败
        exit 1
    else
        exit 0
    fi
else
    exit 0
fi

4、启动keepalived

输入启动命令

systemctl start keepalived.service

查看是否成功运行

ps -ef | grep keepalived

设置开机自启动

systemctl enable keepalived

查看主机网卡,可以看到虚拟IP

ip addr show

主机显示虚拟ip

image.png

备机不显示虚拟ip

image.png

根据配置的虚拟ip地址,访问虚拟ip,查看是否访问成功

关闭主机keepalived,再次访问虚拟ip查看备机是否切换运行

systemctl stop keepalived

总结 配置这个东西可是真费劲啊,但是越是复杂难搞的东西,搞定之后真的是很爽,虚拟ip漂移真的是个很巧妙的设置,我觉得keepalived能实现这个互备功能,主要是虚拟ip起了很大的作用。 虽然今天是搞定了但是其中的原理或者是不是还要其他更好的用法还待我自己以后去细细研究一番。