前言

首先介绍一下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 真实IP nginx端口 主从
192.168.124.20 192.168.124.13 80 MASTER
192.168.124.20 192.168.124.14 80 BACKUP

安装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 keepalivedglobal_defs {#一个没重复的名字即可router_id hyq_slave}#ng是否运行
vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 2weight -20
}vrrp_instance VI_1 {state BACKUP      #  必填,可以是MASTER或BACKUPinterface ens33virtual_router_id 101priority 90advert_int 1# 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式# 本机ipunicast_src_ip 192.168.124.14unicast_peer {# 其他机器ip192.168.124.13}# 设置nopreempt防止抢占资源nopreemptauthentication {auth_type PASSauth_pass 1111}# 与上方nginx运行状况检测呼应track_script {chk_nginx}virtual_ipaddress {192.168.124.20}
}

编辑 slave 节点的 keepalived.conf

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {#一个没重复的名字即可router_id hyq_slave}#ng是否运行
vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 2weight -20
}vrrp_instance VI_1 {state BACKUP      #  必填,可以是MASTER或BACKUP   interface ens33virtual_router_id 101priority 90advert_int 1# 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式# 本机ipunicast_src_ip 192.168.124.14unicast_peer {# 其他机器ip192.168.124.13}# 设置nopreempt防止抢占资源nopreemptauthentication {auth_type PASSauth_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/nginxsleep 1A2=`ps -C nginx --no-header |wc -l`if [ $A2 -eq 0 ]thensystemctl stop keepalivedfi
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 写入速度提升的案例分享

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

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

可视化界面在线生成JVM参数

java线上故障分析+性能调优

ELK实践攻略

Nginx双机主备(Keepalived实现)相关推荐

  1. Java架构师:单体部署 ->Nginx 集群 -> + Keepalived“高可用”组件 -> + LVS负载均衡

    一.集群阶段开篇概述 1.单体部署 1.1 单台服务器(节点)部署 1.2.多台服务器(节点)部署 集群.分布式.微服务中的各个服务器节点必须互通,必须在同一个局域网(内网要通) 1.3.单体架构的优 ...

  2. nginx负载均衡(四)----keepalived原理及实现双vip

    keepalived原理及实现双vip 一.什么是keepalived? 二.VRRP协议 1.vrrp协议格式 2.相关术语 3.vrrp协议工作原理 4.master选举 4.1备份组中路由器的优 ...

  3. linux 双mysql_MySQL双主互备+Keepalived高可用架构实现案例

    一.环境介绍 1.1.规划 序号 类别 版本 主机名 IP 端口 备注 1 OS CentOS release 6.9 (Final) (minimal) my1 172.16.210.180 830 ...

  4. keepalived nginx 双机热备图文讲解

    原文:http://blog.csdn.net/wanglei_storage/article/details/51175418 keepalived nginx 双机热备实战精讲 在试验之前先贴张图 ...

  5. Keepalived + Nginx - linux 灾备方案(实现主备、热备)

    Keepalived + Nginx - linux 灾备方案(实现主备.热备) 主备 两台服务器上配置Nginx反向代理Tomcat集群配置 访问虚拟ip 192.168.50.166,直接转入ng ...

  6. Keepalived+Nginx双机热备实验

    文章目录 前言 一.Keepalived的工作过程 二.Keepalived+Nginx双机热备实验 1.基础环境 1.1.关闭防火墙和selinux 2.安装nginx 2.1.nginx的一些默认 ...

  7. keepalived热备 keepalived+LVS Haproxy

    keepalived热备 keepalived概述 调度器出现单点故障,如何解决? keepalived实现了高可用集群 keepalived最初是为了LVS设计的,专门监控个服务器节点的状态 kee ...

  8. 物联网架构----双机热备Keepalived了解

    物联网架构----双机热备Keepalived了解 1. 前言 负载均衡LB,高可用HA,这一小结主要讲双机热备方案保证高可用.这里选择Keepalived作为双机热备方案,下面就对具体的配置进行了解 ...

  9. Nginx、LVS、Keepalived的关系

    了解Nginx的高可用就接触到了这几个概念,一开始对这些概念还有点迷糊.区分这几个概念概念的最好方法就是搭建一个同时包含他们三个的架构.如下图: 当然,他们三个组合的架构其实有很多种,这只是其中一种. ...

最新文章

  1. 2016年CCPC/ICPC比赛总结
  2. 1、计算机图形学——2D变换与齐次坐标
  3. 手把手教你用 TensorFlow 实现文本分类(下)
  4. java 数据包含_如何高效判断java数组是否包含某个值
  5. slqite3库查询数据处理方式_SQLite3命令操作大全
  6. 鸿蒙系统手机9月11日,鸿蒙系统9月11日,将有望正式成为国际第三大手机操作生态系统...
  7. C#反射调用类的私有方法
  8. matlab信号加入白噪音再分离,Matlab中给信号增加白噪声
  9. Arcgis 创建渔网
  10. iOS10 关于推送
  11. L1-087 机工士姆斯塔迪奥 - java
  12. android 市场 历史版本,安卓市场旧版本
  13. ckeditor 使用说明,手把手,详细步骤: ckeditor-5 online-builder,持续更新中~~
  14. 数据结构串、数组和广义表
  15. 计算机信息安全培训计划,年度信息安全培训计划.doc
  16. 将基于Spring的UnitTest集成到Maven中
  17. pdf转换器V4.1注册码
  18. 好多粉今日头条广告oCPM一键联调激活教程
  19. Python安装教程(版本3.8.10)windows10
  20. 区块链技术演进简史:德勤报告解读《区块链技术变革-来自GitHub平台的见解》

热门文章

  1. 深度学习参数初始化(二)Kaiming初始化 含代码
  2. 电动车控制器 GPS 车充OC2004设计方案参考电路,可替MPS9486
  3. 在anaconda环境下安装orange和开发环境步骤和遇见问题的解决方法
  4. Docker日常随笔
  5. [Linux从无到有] 进程
  6. ALOS PRISM传感器数据文件的说明
  7. 黑莓与富士康签5年合作协议专注廉价手机
  8. 西安交大计算机辅助手术系统,数字医学与计算机辅助手术设备的发展趋势
  9. 为场景打造工具,启业云面向工业互联网的融代码平台
  10. 混合多云不一定最佳,Gartner对2022年云服务的六大洞察