前言

首先介绍一下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

file 新建一个用户:

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

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

file

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

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

修改为:

file

修改完毕后重新加载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"

file

在/etc/rsyslog.conf 末尾添加

local0.* /var/log/keepalived.log

file

最后执行命令:

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节点:

file

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

file

说明安装成功。

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

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

思考:如何开启双主模式

什么是双主模式?

分别介绍一下两种配置

1、Nginx+keepalived 主从配置

file

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

2、Nginx+keepalived 双主配置

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

file

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

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

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

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

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

ELK实践攻略

Nginx双机主备(Keepalived实现)的更多相关文章

  1. 使用Keepalived实现Nginx的双机主备高可用

    1.概述 前面我们聊过使用 Nginx 为 后端Tomcat 做负载均衡.高可用,但是这时Nginx又成了单点,如果Nginx不幸挂掉,整个网站便无法访问. 此时我们就会用到另一个软件 -- Keep ...

  2. nginx+keepalived实现nginx双主高可用的负载均衡

    http://kling.blog.51cto.com/3320545/1253474 一.前言: 在互联网上面,网站为用户提供原始的内容访问,同时为用户提供交互操作.提供稳定可靠的服务,可以给用户带 ...

  3. keepalived+nginx双机热备+负载均衡

    Reference: http://blog.csdn.net/e421083458/article/details/30092795 keepalived+nginx双机热备+负载均衡 最近因业务扩 ...

  4. JAVAEE——宜立方商城03:Nginx负载均衡高可用、Keepalived+Nginx实现主备

    1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...

  5. 如何使用keepalived实现nginx双机热备

    1.linux安装方法:yum -y install keepalived 配置开机启动:sudo chkconfig  keepalived on 查看keepalivede运行日志:/var/lo ...

  6. keepalived+Nginx实现主备保障Nginx的高可用。

    1.什么是keepalived? Keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障. Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工 ...

  7. 企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇

    1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...

  8. MySQL 5.7 双主复制+keepalived,常规业务一般够用了

    业务需求: 为Zabbix搭建2个数据库,一个库给服务器监控用,一个库给网络监控用. 硬件: 两台服务器,硬盘是1.2 T SSD卡,内存128G 架构: 希望做双主复制+keepalived,架构大 ...

  9. nginx负载均衡配合keepalived服务案例实战

    本实验用4台 centos6 虚拟机,2台做负载均衡,2台做web服务器,都先装上nginx lb01:192.168.0.235  --主负载均衡器 lb02:192.168.0.236  --备负 ...

随机推荐

  1. 修改xampp中phpmyadmin用户管理

    用相关软件打开位于D:/xampp/phpMyAdmin文件夹中的config.inc.php文件. 搜索$cfg['Servers'][$i]['auth_type'] = 'config'; 将其 ...

  2. git指令-管理修改

    git指令-管理修改 git管理的不是文件,而是修改 eg:对readme.txt文件进行修改一行 在最后追加一句git has to tracked 然后添加,并且查看状态 cat +文件名称 表示 ...

  3. 强大的java工作流引擎,可视化开发工作流

    我们先来看看什么是工作流? 所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等核心解决方案.工作流引擎包括 ...

  4. CentOS7.5源码编译安装mysql5.7.29

    #查看系统版本 [root@ctos3 ~]# cat /etc/redhat-release CentOS Linux release (Core) #下载源码包,需要注意的是mysql5.7 编译 ...

  5. VUE实现Studio管理后台(七):树形结构,文件树,节点树共用一套代码NodeTree

    本次介绍的内容,稍稍复杂了一点,用VUE实现树形结构.目前这个属性结构还没有编辑功能,仅仅是展示.明天再开一篇文章,介绍如何增加编辑功能,标题都想好了.先看今天的展示效果: 构建树必须用到递归,使用s ...

  6. HTML5中form的新增属性或元素

    1.新增的表单元素 1.1 progress表示任务的完成情况,常用于进度条. max 定义进度元素所要求的任务的工作量,默认值为1 value 定义已经完成的工作量,如果max值为1,该值必须是介于 ...

  7. [转帖]RSYNC 的核心算法

    RSYNC 的核心算法 https://coolshell.cn/articles/7425.html rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并 ...

  8. 利用wps创建有目录的PDF/word

    为什么要创建: 在阅读一些行业规范或者很长的文件,像是项目管理方案时,非常麻烦,定位需要重新返回目录去.--->所以我想能不能创建一个带目录的PDF,可以点击直接跳转,那就方便多了. 如何创建: ...

  9. 一起了解 .Net Foundation 项目 No.16

    .Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Orchard CMS O ...

  10. idea创建简单web项目分析Servlet的请求转发与重定向的区别

     注:如需转载,请附上原文链接,如有建议或意见,欢迎批评指正! 需求说明: // index.jsp页面 1 <% 2 String basePath = request.getScheme() ...