nginx+keepalived实现nginx双主高可用的负载均衡
http://kling.blog.51cto.com/3320545/1253474
一、前言:
在互联网上面,网站为用户提供原始的内容访问,同时为用户提供交互操作。提供稳定可靠的服务,可以给用户带来良好的体验,保证用户的正常访问使用,在网站的可靠性方面,有很多的技术可以来提供,这类技术可以分为:
高可用:保证服务的可靠,稳定,实现故障的屏蔽,避免了单点故障。
高性能:多台服务器连接起来,处理一个复杂的计算问题。
负载均衡:将用户请求引导到后端多台服务器,实现服务器请求的负载。
我们将这类技术称之为集群负载均衡,可以提供负载均衡和高可用的有硬件和软件,软件方面有haproxy,lvs,keepalived,nginx,heartbeat,corosync等等,而这里我们采用的是nginx-keepalived来构建。
Nginx有很强的代理功能,但是一台nginx 就形成了单点,现在使用keepalived来解决这个问题,keepalived可以实现故障转移切换,实现后端的健康检查,前端的高可用,使网站故障记录大大降低,避免了单点故障造成网站无法访问的问题,确保了网站业务的正常运行。
二、Nginx+keepalived有两种配置方案:
2.1、Nginx+keepalived 主从配置
这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠,所以本次不予采用。
2.2、Nginx+keepalived 双主配置
这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境,故本次采用此方案对网站进行高可用架构。
三、Nginx+keepalived 主从配置
3.1、Nginx+keepalived 主从配置详情请见http://kling.blog.51cto.com/3320545/1240359
这里不做重点介绍。
四、Ningx+Keepalived 双主配置
4.1、拓扑结构

4.2、测试环境如下:
系统:Ceentos 6.4 64位
前端node1服务器:
DIP: 192.168.122.2
VIP: 192.168.122.22
前端node2服务器:
DIP: 192.168.122.3
VIP:192.168.122.23
后端服务器:
web server01:192.168.122.4
web server02:192.168.122.5
web server03:192.168.122.6
4.3、软件安装
分别在两台前端服务器上安装nginx+keepalived,使用脚本如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #!/bin/bash# author: kuangl# mail: kuangl@orient-media.com# description: The installation of Nginx files.# -------------------------------------------------------- #         ## Nginx_install# -------------------------------------------------------- ## Nginx installation#CURRENT_PATH=$(pwd)fori in$(rpm -q gcc gcc-c++ kernel-devel openssl-devel zlib-devel popt-devel popt-static libnl-devel wget make|grep'not installed'| awk'{print $2}')do    yum -y install$idone[ -d /root/software][ "$?"!= 0 ] && mkdir/root/softwarecd/root/software[ !  -e pcre-8.33.tar.gz ] && wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gztar-zxvf pcre-8.33.tar.gzcdpcre-8.33./configuremake&& makeinstallecho$? || [ $? != 0  ] || echo" installation pcre  failed"|| exit1cd/root/software[ ! -e nginx-1.2.9.tar.gz ] && wget http://nginx.org/download/nginx-1.2.9.tar.gztar-zxvf nginx-1.2.9.tar.gzcdnginx-1.2.9./configure--prefix=/usr/local/nginx--with-http_ssl_module --with-http_sub_module --with-http_stub_status_module  --with-http_gzip_static_modulemake&& makeinstallecho$? || [ $? != 0  ] || echo" installation  nginx  failed"|| exit1# -------------------------------------------------------- #            ## Keepalived_intsall# -------------------------------------------------------- ## Keepalived installationcd/root/softwarae[ ! -e keepalived-1.2.4.tar.gz ] &&  wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gztar-zxvf keepalived-1.2.4.tar.gzcdkeepalived-1.2.4ln-s /usr/src/kernels/$(uname-r) /usr/src/kernels/linux./configure--prefix=/usr--bindir=/usr/bin--sbindir=/usr/bin--libexecdir=/usr/libexec--localstatedir=/var--libdir=/lib64--infodir=/usr/share/info--sysconfdir=/etc--mandir=/usr/local/share/man--with-kernel-dir=/usr/src/kernels/linuxmake&& makeinstallecho$? || [ $? != 0  ] || print " installation keepalived  failed"|| exit1chkconfig --add keepalivedchkconfig --level 345 keepalived on | 
4.4、在后端服务器上安装apached
后端node4
| 1 2 3 4 5 | [root@node4 ~]# yum  -y install httpd[root@node4 html]# echo "this is 192.168.122.4" > /var/www/htmlindex.html[root@node4 ~]# service httpd start[root@node4 html]# curl  192.168.122.4this is 192.168.122.4 | 
后端node5
| 1 2 3 4 5 | [root@node5 ~]# yum  -y install httpd[root@node5 html]# echo "this is 192.168.122.5" > /var/www/htmlindex.html[root@node5 ~]# service httpd start[root@node5 html]# curl  192.168.122.5this is 192.168.122.5 | 
后端node6
| 1 2 3 4 5 | [root@node6 ~]# yum  -y install httpd[root@node6 html]# echo "this is 192.168.122.6" > /var/www/htmlindex.html[root@node6 ~]# service httpd start[root@node6 html]# curl  192.168.122.6this is 192.168.122.6 | 
4.5、node2、node3上配置nginx
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [root@node2 ~]# vim /usr/local/nginx/conf/nginx.confupstream web1       ##定义负载均衡组为web1    {        ip_hash;        server 192.168.122.4:80;        server 192.168.122.5:80;        server 192.168.122.6:80;    } server {        listen       80;        server_name  dev.test01.com;        location /        {        root /home/kuangl/;        index index.html index.htm;        proxy_set_header Host $host;        proxy_set_header X-Forwarded-For $remote_addr;        proxy_pass http://web1;        }      } | 
4.6、在node2上配置keepalived
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | [root@node2 conf]# vim /etc/keepalived/keepalived.conf! Configuration File forkeepalivedglobal_defs {   notification_email {     404060945@qq.com   }   notification_email_from root@localhost   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id LVS_DEVEL}vrrp_script chk_haproxy {    script "/etc/keepalived/chk_nginx.sh"    interval 2    weight 2}vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 200    priority 250    advert_int 1    authentication {        auth_type PASS        auth_pass kuanglnginx    }   track_script {        chk_nginx    }    virtual_ipaddress {        192.168.122.22    }}vrrp_instance VI_2 {    state BACKUP    interface eth0    virtual_router_id 251    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass kuangl    }    track_script {        chk_nginx    }    virtual_ipaddress {        192.168.122.23    }} | 
4.7、在node3上配置keepalived
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | ! Configuration File forkeepalivedglobal_defs {   notification_email {     404060945@qq.com   }   notification_email_from root@localhost   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id LVS_DEVEL}vrrp_script chk_haproxy {    script "/etc/keepalived/chk_nginx.sh"    interval 2    weight 2}vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 200    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass kuanglnginx    }    track_script {        chk_nginx    }    virtual_ipaddress {        192.168.122.22    }}vrrp_instance VI_2 {    state MASTER    interface eth0    virtual_router_id 251    priority 250    advert_int 1    authentication {        auth_type PASS        auth_pass kuangl    }    track_script {        chk_nginx    }    virtual_ipaddress {        192.168.122.23    }} | 
4.8、在两台双主服务器上添加自动检测脚本
| 1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash# description:# 定时查看nginx是否存在,如果不存在则启动nginx# 如果启动失败,则停止keepalivedstatus=$(ps-C nginx --no-heading|wc-l)if[ "${status}"= "0"]; then        /usr/local/nginx/sbin/nginx        status2=$(ps-C nginx --no-heading|wc-l)        if[ "${status2}"= "0"]; then                /etc/init.d/keepalivedstop        fifi | 
4.9、开启nginx、keepalived服务
| 1 2 3 4 | [root@node2 ~]# service keepalived start[root@node2 ~]# /usr/local/nginx/sbin/nginx[root@node3 ~]# service keepalived start[root@node3 ~]# /usr/local/nginx/sbin/nginx | 
4.10、用 ip a 查看VIP


4.11、测试访问
| 1 2 3 4 5 6 7 8 9 10 11 12 | [kuangl@node01 ~]$ curl http://192.168.122.22this is 192.168.122.6[kuangl@node01 ~]$ curl http://192.168.122.22this is 192.168.122.4[kuangl@node01 ~]$ curl http://192.168.122.22this is 192.168.122.5[kuangl@node01 ~]$ curl http://192.168.122.23this is 192.168.122.6[kuangl@node01 ~]$ curl http://192.168.122.23this is 192.168.122.4[kuangl@node01 ~]$ curl http://192.168.122.23this is 192.168.122.5 | 
五、后端用rsync做数据同步
node5-node6上配置进程模式,以node5为例
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | [root@node5 ~]# yum -y install rsync[root@node5 ~]# vim /etc/rsynsd.confuid = rootgid = rootuse chroot = nomax connections = 5pid file= /var/run/rsyncd.pidlock file= /var/run/rsync.locklog file= /var/log/rsyncd.log[web01]                      path=/home/kuangl/comment = update          ignore errors              readonly = no             list = no                 hosts allow = 192.168.122.0/24auth users= root        uid = rootgid = rootsecrets file= /etc/rsyncd.secrets[root@node5 ~]# vim /etc/rsyncd.secretsroot:123456[root@node5 ~]# chmod 0600 /etc/rsyncd.secrets[root@node5 ~]# ll /etc/rsyncd.secrets-rw-------. 1 root root 12 Jul 20 19:41 /etc/rsyncd.secrets[root@node5 ~]# rsync --daemon[root@node5 ~]# echo "rsync --daemon" >> /etc/rc.local | 
node4上配置命令模式:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@node4 ~]# yum -y install rsync[root@node4 ~]# vim /etc/rsyncd.secrets123456[root@node4 ~]# chmod 0600 /etc/rsyncd.secretsroot@node4 kuangl]# rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.secrets  rsync+inotify root@192.168.122.5::web01sending incremental filelistrsync+inotify/rsync+inotify/inotify-tools-3.14.tar.gz      358772 100%    1.85MB/s0:00:00 (xfer#1, to-check=2/4)rsync+inotify/rsync+inotify_client.sh         617 100%    3.11kB/s0:00:00 (xfer#2, to-check=1/4)rsync+inotify/rsync+inotify_server.sh         900 100%    4.03kB/s0:00:00 (xfer#3, to-check=0/4)sent 360679 bytes  received 69 bytes  240498.67 bytes/sectotal size is 360289  speedup is 1.00 | 
查看结果
| 1 2 3 4 5 | [root@node5 ~]# cd /home/kuangl/[root@node5 kuangl]# lltotal 8-rw-r--r--. 1 root root   22 Jul 20 15:16 index.htmldrwxr-xr-x. 2 root root 4096 Nov 11  2012 rsync+inotify | 
本文出自 “&思远晨曦” 博客,请务必保留此出处http://kling.blog.51cto.com/3320545/1253474
nginx+keepalived实现nginx双主高可用的负载均衡的更多相关文章
- haproxy+keepalive双主高可用实现负载均衡
		转载自https://blog.51cto.com/3381847248/1977073 前面我已经介绍了haproxy结合keepalive做简单的双主高可用,如果不清楚的话,可以去我的上一 篇博客 ... 
- keepalived+mysql实现双主高可用
		环境: DB1:centos6.8.mysql5.5.192.168.2.204 hostname:bogon DB2:centos6.8.mysql5.5.192.168.2.205 hostn ... 
- 基于Keepalived实现LVS双主高可用集群
		Reference: https://mp.weixin.qq.com/s?src=3×tamp=1512896424&ver=1&signature=L1C7us ... 
- MySQL集群(四)之keepalived实现mysql双主高可用
		前面大家介绍了主从.主主复制以及他们的中间件mysql-proxy的使用,这一篇给大家介绍的是keepalived的搭建与使用! 一.keepalived简介 1.1.keepalived介绍 Kee ... 
- 基于keepalived搭建mysql双主高可用
		目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能 ... 
- 使用Keepalived实现MySQL双主高可用
		MySQL双主配置 环境准备: OS: CentOS7 master:192.168.1.10 backup:192.168.1.20 VIP:192.168.1.30 一.安装MySQL数据库. 在 ... 
- Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡
		周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Linux系统的朋友们, ... 
- MariaDB+Keepalived双主高可用配置MySQL-HA
		利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ... 
- Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡
		文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ... 
随机推荐
- 深入理解UITableView
			基本介绍 UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped.这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照 ... 
- sqlserver2008附加数据库——错误3415
			权限问题, 在其文件,右击属性>安全>编辑>添加>加一个everyone单击确定>其完全控制, 这样给每个用户权限 ---来自凌波小屋----冯和超笔记----- 
- js删除数组指定的某个元素
			1.给js数组对象原型加indexof方法 获得元素索引 Array.prototype.indexOf = function(val) { for (var i = 0; i < this.l ... 
- 如何让Hadoop运行得更快一些
			在数据处理方面,我们发现数据输入速度一般要比的数据处理速度快很多,这种现象在大多数据领域尤为明显.随着数据不断膨胀,相应的响应时间自然要有所增加,数据处理的复杂度也在不断提高.作为一个开发者,我们自然 ... 
- javascript 中的nextSibling和previousSibling使用注意事项
			JavaScript中的nextSibling和previousSibling和作用类似于jquery的next()和prev(),都是获取下一个/上一个同胞元素,如果下一个同级节点不存在,则此属性返 ... 
- php把excel数值格式转成日期格式问题
			在excel中:40847对应2011-10-31,是日期的数值型表现形式. 在PHP中,echo date('Y-m-d H:i:s',40847);//结果1970-01-01 11:52:30 ... 
- DEDE在下载文件时会生成table
			当我们在系统内容模型中添加附件类型字段时,前台需要用{dede:field name='字段名'/}来调用. 例如我在后台发布一篇文章,上传一个zip的附件,字段的时间内容是:'/uploads/so ... 
- thinkphp 内置函数详解
			D() 加载Model类M() 加载Model类 A() 加载Action类L() 获取语言定义C() 获取配置值 用法就是 C("这里填写在配置文件里数组的下标")S( ... 
- 手写 title 提示
			jquery实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ... 
- C语言的算法--------二分法查找
			int find(int n,int a[],int l){int low=0;int high=l-1;int middle=0;while(low<high){middle=(low+hig ... 
