百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Nginx双机主备(Keepalived实现)

off999 2025-01-06 14:49 28 浏览 0 评论

前言

首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,起初是专为LVS负载均衡软件设计的,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现web服务端的高可用。

Keepalived以VRRP协议为实现基础,VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。

VRRP出现的目的就是为了解决静态路由的单点故障问题的,它能保证当个别节点宕机时,整个网络可以不间断地运行。

下面我们介绍一下nginx keepalived高可用方案的部署安装。

环境准备

在两台主机上准备如下压缩文件:

  • keepalived-2.0.20.tar.gz
  • nginx-1.16.1.tar.gz

虚拟IP真实IPnginx端口主从192.168.124.20192.168.124.1380MASTER192.168.124.20192.168.124.1480BACKUP

安装nginx

新建一个用户:

useradd tianyan

确定安装目录,我这里的安装目录是:/home/tianyan/tianyan_soft/nginx.install。

在这个目录下分别新建两个目录用于安装nginx和keepalived,解压两个压缩包。

执行安装命令:

./configure --prefix=/home/tianyan/tianyan_soft/nginx.install \
--sbin-path=/home/tianyan/tianyan_soft/nginx.install/sbin/nginx --conf-path=/home/tianyan/tianyan_soft/nginx.install/conf/nginx.conf \
--error-log-path=/home/tianyan/tianyan_soft/nginx.install/error.log \
--http-log-path=/home/tianyan/tianyan_soft/nginx.install/access.log \
--pid-path=/home/tianyan/tianyan_soft/nginx.install/nginx.pid \
--lock-path=/home/tianyan/tianyan_soft/nginx.install/nginx.lock \
--user=tianyan --group=tianyan \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-threads  \
--with-pcre \
--http-client-body-temp-path=/home/tianyan/tianyan_soft/nginx.install/client/  \
--http-proxy-temp-path=/home/tianyan/tianyan_soft/nginx.install/proxy/ \
 --http-fastcgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/fcgi/  \
--http-uwsgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/uwsgi  \
--http-scgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/scgi

如果报错,记得安装相关依赖:

yum install gcc gcc-c++
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)。

注:以非root权限启动时,会出现 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) 错误。

原因:Linux只有root用户可以使用1024一下的端口

解决办法:

  • 1.按照root权限启动
  • 2.将 /usr/local/nginx/conf/nginx.conf 文件中的80端口改为1024以上。

安装keepalived

./configure --prefix=/usr/local/keepalived

上述命令执行完毕后继续执行:

make && make install

安装完毕后,目录是这个样子:

将配置文件拷贝到系统对应的目录下

mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

编辑 master 节点的 keepalived.conf

vim /etc/keepalived/keepalived.conf

内容参考如下:

! Configuration File for keepalived

global_defs {
    #一个没重复的名字即可
    router_id hyq_slave
   }


#ng是否运行
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
}

vrrp_instance VI_1 {
    state BACKUP      #  必填,可以是MASTER或BACKUP

    interface ens33
    virtual_router_id 101
    priority 90
    advert_int 1

    # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
    # 本机ip
    unicast_src_ip 192.168.124.14
    unicast_peer {
        # 其他机器ip
        192.168.124.13
    }
    # 设置nopreempt防止抢占资源
    nopreempt

    authentication {
        auth_type PASS
        auth_pass 1111
    }

    # 与上方nginx运行状况检测呼应
    track_script {
        chk_nginx
    }
    virtual_ipaddress {
        192.168.124.20
    }
}

编辑 slave 节点的 keepalived.conf

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
    #一个没重复的名字即可
    router_id hyq_slave
   }


#ng是否运行
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
}

vrrp_instance VI_1 {
    state BACKUP      #  必填,可以是MASTER或BACKUP   


    interface ens33
    virtual_router_id 101
    priority 90
    advert_int 1

    # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
    # 本机ip
    unicast_src_ip 192.168.124.14
    unicast_peer {
        # 其他机器ip
        192.168.124.13
    }
    # 设置nopreempt防止抢占资源
    nopreempt

    authentication {
        auth_type PASS
        auth_pass 1111
    }

    # 与上方nginx运行状况检测呼应
    track_script {
        chk_nginx
    }
    virtual_ipaddress {
        192.168.124.20
    }
}

编写nginx_check.sh脚本

在/etc/keepalived目录下新建nginx_check.sh脚本

touch nginx_check.sh

编辑其内容为:

#!/bin/sh
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ]
then
  /usr/sbin/nginx
  sleep 1
  A2=`ps -C nginx --no-header |wc -l`
  if [ $A2 -eq 0 ]
  then
    systemctl stop keepalived
  fi
fi

含义是:如果 nginx 停止运行,尝试启动,但是如果无法启动,则杀死本机的 keepalived 进程, keepalied将会把虚拟 ip 绑定到 BACKUP 机器上。 注意: /usr/sbin/nginx是nginx的启动命令,如果你安装到其他目录,则相应的替换。

Keepalived的日志

Keepalived日志默认位置是在/var/log/messages目录下。我们将其修改一下。

由于系统是centos7,修改位置为:/lib/systemd/system/keepalived.service

原内容:

EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived
ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS

修改为:

修改完毕后重新加载service

systemctl daemon-reload

创建命令软连接:

ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

执行:

keepalived -D -f /etc/keepalived/keepalived.conf
-D   将日志输出到message日志,默认日志也在message
-f    是指定配置文件

修改/etc/sysconfig/keepalived

把KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"

在/etc/rsyslog.conf 末尾添加

local0.*                                                /var/log/keepalived.log

最后执行命令:

service rsyslog restart

重启keepalived后就可以看到日志在/var/log/keepalived.log下了。

测试验证VIP

当keepalived和nginx都启动后,我们来测试一下。

首先在浏览器里面访问三个地址

  • http://192.168.124.20 (vip)
  • http://192.168.124.13 (master)
  • http://192.168.124.14 (slave)

我修改了一下nginx的index.html,可以看到当前vip指向是13的master节点:

然后,我们手动停止13上的nginx,再次访问http://192.168.124.20。

说明安装成功。

其中通过ip address命令可以观察到网卡的变化

实验到这里,我们就完成了keepalived + nginx 主从配置的安装部署了。

思考:如何开启双主模式

什么是双主模式?

分别介绍一下两种配置

1、Nginx+keepalived 主从配置

这种方案就是上文介绍过的,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,仅仅用于灾备,平时都是空闲着的。

2、Nginx+keepalived 双主配置

这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,如下图:


推荐阅读:

【实战】 elasticsearch 写入速度提升的案例分享

https://sourl.cn/ZHcLLB

用java做一个能赚钱的微信群聊机器人(PC协议)

https://sourl.cn/ghaHjj

Mysql百万量级数据高效导入Redis

https://sourl.cn/BKw2vS

相关推荐

腾讯手机管家电脑版(腾讯手机管家电脑版官方下载)

手机管家关闭电脑的方法。首先,打开电脑管家主页面。2.再点击“更多选项”图标。3.然后,点击“设置”。4.选择“手机管理”。5.勾选“不需要提醒”。6.再单击“确定”。7.最后,我们关闭面...

腾讯qq最新版下载(腾讯qq下载2019 8.0版)

可能是网速问题!或者你先看看你是否已经下载安装了QQ游戏,是不是最新的版本,如果之前没问题的话你不要到QQ页面进QQ游戏,试试从我的电脑中的文件夹中进入,再不行的话或者重新安装下QQ游戏:再不行的话建...

qq邮箱手机版登录(手机qq邮箱app登录)
  • qq邮箱手机版登录(手机qq邮箱app登录)
  • qq邮箱手机版登录(手机qq邮箱app登录)
  • qq邮箱手机版登录(手机qq邮箱app登录)
  • qq邮箱手机版登录(手机qq邮箱app登录)
樱花校园模拟器中文版下载(樱花校园模拟器 下载)

1可以在应用商店搜索“校女园模拟器”下载最新版本。2原因是应用商店会及时更新最新版本,而且下载安装十分方便快捷。3如果在应用商店找不到最新版本,可以在官方网站进行下载,但需要注意安全问题。同时,...

单机斗地主 单机版 免费版下载

免费的单机斗地主有《欢乐斗地主单机版》联众《单机斗地主》。1,《欢乐斗地主单机版》《欢乐斗地主单机版》是根据欢乐斗地主规则改编的pc电脑单机游戏。这是789游戏中心好玩的斗地主游戏,电脑具有较高的人工...

腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
  • 腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
  • 腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
  • 腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
  • 腾讯游戏平台官网入口(腾讯游戏平台官网入口网址)
三国志5手机版单机游戏(三国志5手机版单机游戏有哪些)

1.提示DirectX的话--下载驱动人生更新驱动重启,保证能玩2.如果不是上面问题试下--右键游戏图标,属性,兼容性,禁用桌面元素钩上就OK了3.发现安装后桌面的启动图标是GameSt...

免费的视频app网站入口(免费的视频app网站入口)

柠檬影院是个网站,柠檬影视是个软件柠檬影院是一个真正免费看电影电视剧的影视网站,以提供高清影视在线观看,下载,网络休闲等为最终发展目标,致力于给广大的互联网用户带来最丰富影视柠檬影院每日实时更新,每日...

光影魔术手手机版下载(光影魔术手手机版下载 app)

1、打开光影魔术手软件,点击“打开”。2、选好需要去除文字的图片,插入光影魔术手中。3、然后点击左上角的“数码暗房”按钮。4、在打开的页面中选择“人像”。5、下拉菜单,在“人像”中选择“祛斑”按钮。6...

电视直播中央一台(电视直播中央一台开学第一课)

如果我们想在电脑或手机上观看中央电视台一套直播,只要用爱奇艺pps就可以了。1、点击进入应用商店,在搜索框中输入“爱奇艺”,点击搜索,并安装。2、安装结束后,在手机或电脑主页面找到爱奇艺图标,点击进入...

远程控制软件哪个好用(免费远程控制软件哪个好用)

一、UPDF——PDF文档处理分享二、腾讯会议——远程开会三、向日葵——远程控制四、Github——代码协同五、Snipaste——屏幕截图六、Canva——在线设计工具七、博思白板BoardM...

魔兽世界手游官网公测(魔兽世界手游官网公测 新闻)

2005年4月26日2005年4月26日由九城代理的《魔兽世界》国服开启公测,6月9日国服正式运营。2009年4月,暴雪将《魔兽世界》在国服的代理运营权由九城转交给网易。

qq2012(qq2012旧版本下载)

建议你升级到最新版本,因为一般来说旧版本都不会怎么更新、维护,容易出现BUG!

香蕉加速器(香蕉加速器怎么样)

OPPO系统自带的游戏加速器是HyperBoost据OPPO介绍,HyperBoost是OPPO花了三年时间自主研发的一项技术,由系统引擎、应用引擎和游戏引擎三部分组成,能够实现全场景系统,提升...

小说下载txt电子书免费全本下载

因为违规了。久久小说网的许多小说,都没有作者的授权而且他的名声太大了,被人给投诉然后违规追究了,就关闭了这个网站。所以平时看小说的时候,尽量到正版的网站去看,一些大网站,或者是一些小网站都可以去瞅一瞅...

取消回复欢迎 发表评论: