文档章节

单机架构升级集群架构--nginx+keepalived主从集群高可用搭建工作记

j
 java_龙
发布于 2017/07/05 16:49
字数 1956
阅读 940
收藏 124

        本文将继续单机架构升级集群系列博文, 记录nginx+keepalived主从高可用搭建工作的记录,希望能帮助到需要的朋友们,也欢迎大牛们批评指正!!       

背景

        在博文( https://my.oschina.net/u/2342969/blog/995598 )中描述了本次架构升级的背景

        在博文( https://my.oschina.net/u/2342969/blog/1036702 )中记录了redis主从集群搭建

        以上博文有需要的朋友们可以观阅

本文将记录nginx+keepalived主从集群高可用搭建工作, 在此参考了 博文(http://blog.csdn.net/u012453843/article/details/69668663?locationNum=2&fps=1)

概述

        本段仅仅介绍一下基础概念,供小白参考..

        keepalived:它是集群环境下保证高可用的一个服务软件。 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。 master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级选举一个backup当master。这样的话就可以保证路由器的高可用了。 总结之,主备环境共有一个虚拟ip(自定义ip),外部用户只需要访问这个虚拟ip,主节点挂掉后,虚拟ip就会漂移到选举出来的从节点上,对用户无感知的。更多资料自行百度一下或者发私信评论。

        nginx:nginx详细信息可百度,本文只用nginx对tomcat做负载均衡使用。

环境准备

  •     centOs:6.5
  •    keepalived :1.2.18 (版本不同和本文就会有不同之处) 

  •    nginx : 1.5.8

  •   虚拟ip: 192.168.1.110

资源准备

    nginx下载地址:http://nginx.org/download/nginx-1.5.8.tar.gz

    keepalived 下载地址:http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

环境搭建

    nginx环境搭建

        本文采用的一主一从集群模式

       nginx_A 虚拟机ip:192.168.1.100

        nginx_B 虚拟机ip:192.168.1.101

      nginx安装

        两台虚拟机安装步骤一样,

        安装目录选择的  /opt/nginx (目录自定义)

        一般我们都需要先装pcre, zlib(自行百度),前者为了重写rewrite,后者为了gzip压缩。

         安装nginx前,编译环境gcc g++ 开发库之类的需要提前装好

yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
  • 进入nginx待安装目录
cd /opt
  •  下载nginx
wget -c http://nginx.org/download/nginx-1.5.8.tar.gz
  • 解压安装包
tar zxvf nginx-1.5.8.tar.gz
  • 进入nginx目录
cd nginx-1.5.8
  • 安装nginx
./configure --prefix=/opt/nginx --with-pcre= pcre-8.36的安装路径 
make && make install
  • 启动nginx(前提是80端口未被占用)
/opt/nginx/sbin/nginx
  •  浏览器输入IP地址

    如图所示,访问成功。

  • 修改nginx欢迎界面(%nginx_home%/html/index.html)

    如下图两台虚拟机分别添加一行:

    192.168.1.100:     <p><em>This is nginx_A.</em></p>

    192.168.1.101:     <p><em>This is nginx_B.</em></p>

 

    

  • 验证两台nginx均启动成功

    如图:

    192.168.1.100访问结果:

    

192.168.1.101访问结果:

   

      nginx基本命令

        启动: /opt/nginx/sbin/nginx

        修改配置后重新加载: /opt/nginx/sbin/nginx -s reload

        停止: kill -9 pid

    keepalived环境搭建

        需要高可用的nginx对应的虚拟机均需要安装keepalived服务,安装步骤一样

        本文安装目录为: /opt/keepalived

         keepalived  VIP(虚拟ip): 192.168.1.110

     keepalived安装

  • 进入keepalived待安装目录
cd /opt
  • 下载keepalived
wget -c http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
  • 解压安装包
tar -zxvf keepalived-1.2.18.tar.gz
  • 进入安装包
cd keepalived-1.2.18
  • 编译安装包
./configure --prefix=/opt/keepalived
  •  安装keepalived服务
make && make install

    启动命令: /opt/keepalived/sbin/keepalived -f /opt/keepalived/etc/keepalived/keepalived.conf

    keepalived做成系统服务

        为了方便启停keepalived服务,做成系统服务自启动

  • 复制启动文件
cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ 
&& 
cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  • 复制启动配置文件
mkdir /etc/keepalived && cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
  • 创建启动软连接
ln -s /opt/keepalived/sbin/keepalived /sbin/
&&
ln -s /opt/keepalived/sbin/keepalived /usr/sbin/
  • 设置开机服务
chkconfig keepalived on
  •  启停keepalived服务

    就可以使用以下命令启停服务了: service keepalived [start | stop | reload | restart ]

两台机器按照以上步骤安装完毕后,进入下面配置keepalived

    配置keepalived

    192.168.1.100为主节点, 192.168.1.101为从节点, 192.168.1.110 为VIP

    注意: 此时keepalived的配置路径为 : /etc/keepalived/keepalived.conf

 

  • 停止keepalived服务(此步骤非必须)
service keepalived stop
  • 修改192.168.1.100 的keepalived配置       
! Configuration File for keepalived

global_defs {  
   router_id nginx100  #自定义主机名
}  
  
# vrrp_script chk_nginx {   #检查nginx进程脚本此处暂未启动
#   script "/etc/keepalived/nginx_check.sh"  
#   interval 2  
#   weight -20  
# }  
  
vrrp_instance VI_1 {  
    state MASTER  # 主节点 为 MASTER  从节点为 BACKUP
    interface eth0  # 网卡标识名
    virtual_router_id 11  
    mcast_src_ip 192.168.1.100 网卡ip
    priority 100   # 主节点 优先级数字需要高于从节点,多个从节点需要一次降低优先级
    nopreempt  
    advert_int 1  
    authentication {   # 主从节点此区域需要一致
        auth_type PASS  
        auth_pass 1111  
    }  
    track_script {  # 执行上面检测nginx进程脚本
       chk_nginx  
    }  
    virtual_ipaddress {  #虚拟ip
        192.168.1.110 
    }  
}
  • 修改192.168.1.101 的keepalived配置 
! Configuration File for keepalived

global_defs {  
   router_id nginx101  #自定义主机名
}  
  
# vrrp_script chk_nginx {   #检查nginx进程脚本此处暂未启动
#   script "/etc/keepalived/nginx_check.sh"  
#   interval 2  
#   weight -20  
# }  
  
vrrp_instance VI_1 {  
    state BACKUP  # 主节点 为 MASTER  从节点为 BACKUP
    interface eth0  # 网卡标识名
    virtual_router_id 11  
    mcast_src_ip 192.168.1.101 网卡ip
    priority 90   # 主节点 优先级数字需要高于从节点,多个从节点需要一次降低优先级
    nopreempt  
    advert_int 1  
    authentication {   # 主从节点此区域需要一致
        auth_type PASS  
        auth_pass 1111  
    }  
    track_script {  # 执行上面检测nginx进程脚本
       chk_nginx  
    }  
    virtual_ipaddress {  #虚拟ip
        192.168.1.110
    }  
}
  •  两台分别执行命令 ip a

    如下图所示: ip信息仅包含有.本地ip和虚拟机的物理ip

  • 两台机器分别启动keepalived服务
service keepalived start
  • 查看VIP漂移结果

       192.168.1.100看到了VIP漂移成功(下图),192.168.1.101没有VIP绑定

  • 关闭192.168.1.100(主节点)keepalived服务
service keepalived stop
  • 在192.168.1.101(备节点)输入 ip a

        如图所示: vip已经漂移到192.168.1.101节点

    nginx高可用搭建

  • 修改192.168.1.100 和 192.168.1.101中keepalived配置

    

  • 编写nginx_check.sh脚本
#!/bin/sh  
# 查看nginx服务数量赋值给变量A
A=`ps -C nginx --no-header |wc -l` 
# 判断nginx服务数量是否等于0
if [ $A -eq 0 ];then 
# nginx服务数量为0 则启动nginx服务(根据实际nginx启动方法启动)
	/opt/nginx/sbin/nginx  
	sleep 2  
# nginx服务数量为0 则杀掉keepalived服务
	if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then  
		killall keepalived  
	fi  
fi 

    注意: 如果在window下编写的 , 一定要转换文件格式为 unix, 本人使用notepad++,转换方法为:

    编辑-->文档格式转换-->转换成UNIX格式

  • 上传nginx_check.sh脚本到192.168.1.100 和 192.168.1.101虚拟机

        根据下图keepalived配置的脚本路径将nginx_check.sh脚本上传

    此配置是keepalived每2秒执行一次脚本, 如果nginx无服务,则启动nginx,如果启动失败,则停掉keepalived服务

    上传完毕后要给脚本赋执行权限,命令如下:

chmod 777 /etc/keepalived/nginx_check.sh
  • 启动192.168.1.100 和 192.168.1.101中keepalived
service keepalived start
  • 在浏览器访问虚拟ip

        如图所示: 访问虚拟ip即访问的主节点(192.168.1.100)nginx_A

  • 给192.168.1.100中nginx一个致命无法启动的错误

        因为keepalived的检测脚本会尝试启动nginx, 如果nginx可以启动成功的话,主节点就会继续工作,

我直接把192.168.1.100的nginx配置文件清空, 然后停止nginx服务,让nginx无法启动。

    此时在浏览器访问虚拟ip--192.168.1.110,如图所示: 访问到了备节点(192.168.1.101)nginx_B

 

到此,已经完成了nginx高可用调整, 有问题的欢迎留言沟通。。。。

 

© 著作权归作者所有

共有 人打赏支持
j
粉丝 68
博文 96
码字总数 135188
作品 0
成都
程序员
私信 提问
对单机架构升级集群架构的工作记录

概述 还有公司敢用单机模式架构,狠狠的擦了一把汗。。在此萌生了改造单机架构模式,自行网上搜索出一套适合公司的高可用架构,才大致了解完毕。领导就召集大家说了现有单机模式的弊端。。 ...

java_龙
2017/06/22
0
0
zanePerfor前端性能监控系统高可用之Mongodb副本集读写分离架构

HI!,你好,我是zane,zanePerfor是一款最近我开发的一个前端性能监控平台,现在支持web浏览器端和微信小程序段。 我定义为一款完整,高性能,高可用的前端性能监控系统,这是未来会达到的目...

11/14
0
0
19个心得 明明白白说Linux下的负载均衡

19个心得 明明白白说Linux下的负载均衡 http://bbs.uchao.net/thread-32910-1-1.html 一、目前网站架构一般分成负载均衡层、web层和数据库层,我其实一般还会多加一层,即文件服务器层,因为...

浩源社区
2012/03/01
0
0
架构师必备词汇和知识点

01 高可用 负载均衡(负载均衡算法) 反向代理 服务隔离 服务限流 服务降级(自动优雅降级) 失效转移 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时) 回滚机...

t4i2b10X4c22nF6A
2017/11/24
0
0
有经验JAVA程序员如何提升自己?

具有一到五年开发经验 需要学习内容很多 JVM/分布式/高并发/性能优化/Spring MVC/Spring Boot/Spring Cloud/MyBatis/Netty源码分析等等等 01、透彻理解Tomcat原理手写动静态资源的实现 02、分...

阿阳啊啊
2017/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mybatis批量操作sql配置

在写批量sql操作时,遇到执行报错: <foreach collection="list" item="item" index="index" separator=";"> update t_xxx set column1=#{item.column1} where id= #{item.id} </foreach> 分......

lar555
20分钟前
2
0
L2TP VPN客户端配置

打开网络设置-->选择VPN-->添加VPN链接 配置完毕,打开更改适配器选项 右键-->属性 选中安全---允许使用安全协议,确定保存后连接vpn即可

阿伦哥-
24分钟前
1
0
缘“熟”而起——《乡土中国》读书笔记3600字

缘“熟”而起——《乡土中国》读书笔记3600字: 发现电脑里藏了几篇本科大一大二写的读书笔记。回想当初阅读这些社会科学书籍的时候,自己尽力又时而深感难以读懂的心境仿佛重现。但如今细想...

原创小博客
26分钟前
0
0
SpringBoot与pageHelper版本问题

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version></parent> <dependency>......

WALK_MAN
30分钟前
3
0
PHP开发支付宝微信个人免签支付接口实例

这是一个PHP开发支付宝微信个人免签支付接口实例,支付宝微信即时到帐接口,使用原生支付宝即时到帐接口修改而来,即可实现多接口收款功能,开发只需要按照支付宝即时到帐接口开发即可,减少...

sucaihuo
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部