Nginx+Keepalived实现双机主备的方法_nginx

来源:脚本之家  责任编辑:小易  

1.假设已经自动安装了一个nginx2.第二个必须执行编译安装,编译时需要制定-prefix,这样才能将nginx安装到一个指定的目录下,设为$ngx_dir3.把执行文件复制一份:cp-f$ngx_dir/sbin/nginx$ngx_dir/sbin/nginx-new4.把自动安装的启动脚本文件复制一份,cp-f/etc/init.d/nginx/etc/init.d/nginx-new5.修改启动脚本文件/etc/init.d/nginx-new,让其指向实际的执行文件$ngx_dir/sbin/nginx-new,修改其它相关选项6.修改系统配置文件(CentOS需要),/etc/sysconfig/nginx-new,将其内容改为实际的配置文件地址,NGINX_CONF_FILE=$ngx_dir/conf/nginx.confwww.zgxue.com防采集请勿采集本网。

前言

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

两个VIP,我觉得没必要,前端两台做nginx+keepalive,只用一个VIP对外提供服务就行了,你的另一个VIP是用在什么地方。理论上上是的,但是为了控制脑裂的问题,我们都是检测到有问题,就重启那台

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

使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高

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

通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)

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

keepalive_timeout: keepalive_timeout 60s;没看到过 keepalive_timeout 60s 50s;send_timeout?是不是proxy_send_timeout proxy_send_timeout 60s;keepalive_timeout是客户端的超时时间 proxy_

环境准备

一般来说nginx配置文件中对优化比较有作用的为以下几项: worker_processes 8;1 nginx进程数,建议按照cpu数目来指定,一般为它的倍数。worker_cpu_affinity 00000001 00000010 00000100

在两台主机上准备如下压缩文件: 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/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confcp /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 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 keepalivedglobal_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/shA=`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 fifi

含义是:如果 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

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

到此这篇关于Nginx+Keepalived实现双机主备的方法的文章就介绍到这了,更多相关Nginx Keepalived 双机主备内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

要设置成keepalive_timeout 0;那么 长连接就会被关闭。返回时设置头Connection:close内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • nginx+keepalived实现双机热备
  • keepalived双机热备nginx的配置方法
  • nginx+php+mysql双机互备、全自动切换方案
  • nginx session共享问题解决方案解析
  • 安装配置php-fpm来搭建nginx+php的生产环境
  • windows10 系统配置nginx文件服务器的图文教程
  • nginx 出现 403 forbidden 最终解决方法
  • nginx配置多个站点共用80端口的解决方法
  • nginx启用gzip压缩的方法示例
  • ubuntu+nginx+mysql+php+zend+eaccelerator安装配置文字版
  • nginx服务器中配置404错误页面时一些值得注意的地方
  • 浅谈nginx反向代理中神奇的斜线
  • nginx 禁止访问某个目录或文件的设置方法
  • 为什么 nginx 已经设置了 keepalive
  • 如何使nginx支持keepalive?
  • Nginx相关配置(?keepalive
  • 为什么 nginx 已经设置了 keepalive
  • nginx+keepalive 做的是ha还是负载
  • 什么情况下该开启Keep-Alive
  • HTTP Keep-Alive是什么?如何工作
  • Nginx相关配置(?keepalive
  • linux 只能打开65536 nginx怎么实现10万并发
  • Nginx与Keeplaived之间有什么关系?
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器nginxnginx+keepalived实现双机热备keepalived双机热备nginx的配置方法nginx+php+mysql双机互备、全自动切换方案nginx session共享问题解决方案解析安装配置php-fpm来搭建nginx+php的生产环境windows10 系统配置nginx文件服务器的图文教程nginx 出现 403 forbidden 最终解决方法nginx配置多个站点共用80端口的解决方法nginx启用gzip压缩的方法示例ubuntu+nginx+mysql+php+zend+eaccelerator安装配置文字版nginx服务器中配置404错误页面时一些值得注意的地方浅谈nginx反向代理中神奇的斜线nginx 禁止访问某个目录或文件的设置方法nginx提示:500 internal servernginx 多站点配置方法集合权限问题导致nginx 403 forbiddenginx fastcgi错误primary scripnginx服务器的反向代理proxy_pasnginx 403 forbidden的解决办法nginx伪静态配置和常用rewrite伪nginx下301重定向域名的方法小结详解nginx服务器中配置超时时间的windows下nginx+php5的安装与配置linux 系统 nginx 服务器安装及负载均衡配nginx中用json格式记录日志的配置示例解读nginx中limit配置参数nginx负载均衡/ssl配置的实现linux下nginx安装教程hipchat上传文件报未知错误的原因分析及解nginx访问控制的实现示例nginx使用的php-fpm的两种进程管理方式及解决nginx报错信息 client intended to s浅析nginx 负载均衡4种模式
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved