周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Linux系统的朋友们,希望能够有所帮助!(如果内容中有误,还望大家指出!)

常见的web集群调度器:

调度器分为软件和硬件两种,常见软件:lvs nginx haproxy等

                         常见硬件:f5 绿盟  梭子鱼等

    lvs在企业生产中抗负载能力很强,但是不支持动静分离,正则处理,在大型网站中lvs实施复杂,而且维护成本高,工作在TCP四层,lvs就是一个单纯的负载均衡软件

    Nginx使用简单,性能较好,可负载三万到五万的并发量,Nginx上功能较多,可做web服务器也可做流量分配,但不支持session会话 cookie引导等, 工作在TCP七层

    haproxy使用简单,功能多,harpoxy支持两种工作模式,一个是TCP四层和七层(传输层和应用层),它补充了Nginx不能session cookie等工作,支持URL检测,如果服务器出问题会有很好的帮助,它和lvs一样只是单纯的负载均衡软件,但是它负载均衡的速度和处理并发上要优于Nginx,haproxy也可对MySQL读进行负载均衡,对后端MySQL节点进行检测,如果后端的MySQL slaves数量超出10台时,性能不如lvs+keepalived

       

   

                                   部署Nginx+keepalived+Tomcat 双主高可用负载均衡

思路:

1.首先需要四台服务,两台做Nginx负载均衡(Nginx1和Nginx2),另外两台当作真实节点服务器(Tomcat1和Tomcat2)

2.既然要达到双主的目的,就需要用两个VIP(也就是虚拟ip)添加两条VIP是为了两台调度器互相是对方主服务和从从服务,把两个VIP添加同一个域名里,客户访问域名时同时工作,使两台机器没有一个是处于闲置浪费状态,并且当其中一台机器宕机后,第一台的VIP会转移到另一台,此时第二台会有俩个VIP,这样做最大化使负载均衡达到最理想化状态

3.然后就是在调度器器上安装keepalived工具,当某台调度器宕机后,进行vip飘移,故障切换

部署环境:

              负载Nginx1  192.168.40.21

              负载Nginx2  192.168.40.22

               Tomcat1  192.168.40.23        

               Tomcat2  192.168.40.24

               VIP  192.168.40.66  192.168.40.67 

安装Tomcat1

需要源码包  :

        Jdk-7u65-linux-x64.gz   apache-tomcat-7.0.54.tar.gz

 

安装并生成测试页

[root@root ~]# tar xf jdk-7u65-linux-x64.gz

[root@root ~]# mv jdk1.7.0_65/ /usr/local/tomcat7/

[root@root ~]# mkdir -p /web/webapp1/

[root@root ~]#vim /web/webapp1/index.jsp

安装Tomcat2

安装步骤和Tomcat1一样,安装过程略过

Tomcat2测试页内容:

部署Nginx1负载均衡

Nginx搭建过程略,搭建完成后修改Nginx主配置文件,在Nginx上添加Tomcat1和Tomcat2的真实节点服务器

  max—fails=1 fail_timeout=10s; 健康检查:最大连接失败测试1次,失败超时10秒

部署Nginx2的负载

Keepalived部署

keepalived可以说是健康检查工具,他可以故障自动切换,节点健康检查

Nginx1上安装keepalived

yum -y isntall  keepalived

修改keepalived配置文件,添加VIP以及Nginx 进程监测脚本

编写Nginx检测进程脚本:

#!/bin/bash
#by:ImproveMyself
#检测进程脚本
#检测nginx 进程是否开启,如果没有开启尝试开启
jc=`ps -C nginx --no-header|wc -l`
if [ $jc -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
#如果nginx尝试开启失败,那么就关闭keepalived服务,进行vip飘移
jc2=`ps -C nginx -no-header |wc -l`
if [ $jc -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi

修改keepalived的主配置文件:

位置: /etc/keepalived/

同时在Nginx2上部署keepalived,安装过程和Nginx1的keepalived一样,并且修改keepalived主配置文件

部署完成之后,开启Nginx 和keepalive服务,此时使用ip  a 命令查看 Nginx1上的vip,发现vip1的IP

因为VIP 1:192.168.40.66 主调度器是Nginx1 从调度器是Nginx2   ,只有当主调度器宕机之后,VIP1:192.168.40.66才切换到Nginx2上,所以Nginx1上显示VIP1:192.168.40.66是正确的,vip2:192.168.40.67 此时在Nginx1 上没有显示是因为Nginx1现在是VIP2的从调度服务,只有Nginx2 宕机之后VIP2才会切换到Nginx1上!

然后再查看Nginx2 上的vip,发现vip2的ip,这样就说明双主模式已经部署成功了

检测:

使用VIP 192.168.40.66进行访问

使用VIP 192.168.40.67进行访问

当Nginx1宕机后,此时Nginx2上有两条VIP

使用不同VIP访问,依然成功访问

------------------------------------------------------------------------------------------------------------------

                                                     Haproxy+keepalived+Tomcat高可用负载

思路:

基于上面那个环境,现在做haproxy高可用  整体思路和Nginx+keepalived+Tomcat的一样,只不过是把Nginx调度换成haproxy调度器,测试方法和方式和上面那个案例一样

部署环境:  负载haproxy1  192.168.40.21

                      负载haproxy2  192.168.40.22

                               Tomcat1  192.168.40.23        

                               Tomcat2  192.168.40.24

                                      VIP1  192.168.40.66  

                                      VIP2  192.168.40.67

部署haproxy1环境

 需要的源码包: haproxy-1.4.24.tar.gz

 

  安装haproxy

   tar  xf haproxy-1.4.24.tar.gz -C /usr/src/

cd /usr/src/haproxy-1.4.24/

make TARGET=linux26 && make install

mkdir /etc/haproxy

cp examples/haproxy.cfg  /etc/haproxy/

cp examples/haproxy.init /etc/init.d/haproxy

chmod +x /etc/init.d/haproxy

ln -s /usr/local/sbin/haproxy  /usr/sbin/

修改haproxy配置文件

vim /etc/haproxy/haproxy.cfg

创建haproxy.conf文件,用于日志管理

vim /etc/rsyslog.d/haproxy.conf

编写一个监测haproxy进程脚本用于故障切换,写入在keepalived配置文件里

脚本和上面的Nginx.sh脚本一样,你可以把Nginx.sh复制出一个haproxy.sh,更改一下脚本里的检测内容就行了

由于是基于上一个案例上的环境,所以keepalived就不在安装了,只需要把keepalived里的脚本名字更改一下就行了

部署haproxy2和keepalived

因为安装步骤和之前一样,安装过程略

修改haproxy.cfg配置文件和日志管理文件

修改keepalived的主配置文件,并且把脚本写入

部署完完成之后分别开启服务

/etc/init.d/haproxy restart

/etc/init.d/rsyslog  restart

/etc/init.d/keepalived restart

测试:

使用两个vip访问

宕机测试:

此时40.22上出现两条vip,证明vip飘移成功

此时再次访问

Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡的更多相关文章

  1. [转] Haproxy、Keepalived双主高可用负载均衡

    http://blog.chinaunix.net/uid-25266990-id-3989321.html 在测试了Nginx+Keepalived的负载均衡后,也对Haproxy+Keepaliv ...

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

    实验环境及软件版本:CentOS版本: 6.6(2.6.32.-504.el6.x86_64)nginx版本: nginx-1.6.3keepalived版本:keepalived-1.2.7 主LB ...

  3. nginx+keepalived+tomcat实现主从高可用负载均衡

    设备: 1.准备四台虚拟机,两台tomcat,两台nginx 2.两台tomcat配置相同,测试页不同 两台Tomcat配置完全相同.只有测试页面不同 安装jdk和tomcat [root@local ...

  4. Lvs+Keepalived+Bind+web构建高可用负载均衡系统

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://hatech.blog.51cto.com/8360868/1417899 --- ...

  5. LVS+keepalived DR模式配置高可用负载均衡集群

    实验环境 LVS-Master 10.0.100.201 VIP:10.0.100.203 LVS-Slave       10.0.100.204 WEB1-Tomcat 10.0.2.29 gat ...

  6. Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群

    ------------------------------------- 一.前言 二.MySQL Cluster基本概念 三.环境 四.配置 1.LB-Master及LB-Backup配置 2.M ...

  7. Linux下Keepalived+LVS-DR模式配置高可用负载均衡集群

    一.环境说明:     操作系统:Centos-6.5_x86_64    keepalived软件安装在node2和node3机器上.     实际安装之前,先关闭keepalived节点(node ...

  8. Keepalived+LVS(dr)高可用负载均衡集群的实现

    一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2 ...

  9. Keepalived+Nginx实现高可用负载均衡集群

    一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+nginx双主高可用负载均衡集群及LAMP应用keepalived-1 ...

随机推荐

  1. babel的使用以及安装配置

    简介 babel是一个广泛使用的转码器,可以将ES6代码转化为ES5代码,从而在现有环境执行,这意味着,你可以现在就用ES6编写程序,而不用担心现有环境是否支持. 安装及配置 npm install  ...

  2. linux 设置git记住密码

    linux下: 1.在~/下, touch创建文件 .git-credentials, 用vim编辑此文件,输入: https://{username}:{password}@github.com 注 ...

  3. mongodb数据库集合操作

    1:更新update update() 方法用于更新已存在的文档.语法格式如下: db.collection.update( <query>, <update>, { upse ...

  4. 基于按annotation的hibernate主键生成策略

    基于按annotation的hibernate主键生成策略 博客分类: Hibernate HibernateJavaJPAOracleMySQL  这里讨论代理主键,业务主键(比如说复合键等)这里不 ...

  5. 杨氏矩阵C++实现

    何为杨氏矩阵?这个网上的介绍很多,下面给出杨氏矩阵搜索算法: #include <iostream> using namespace std; // 杨氏矩阵查找算法 ], int N, ...

  6. linux下 signal信号机制的透彻分析与各种实例讲解

    转自:http://blog.sina.com.cn/s/blog_636a55070101vs2d.html 转自:http://blog.csdn.net/tiany524/article/det ...

  7. July 06th 2017 Week 27th Thursday

    Knowledge is the antidote to fear. 知识可以解除恐惧. Fear always steps from unknown things. Once we know wha ...

  8. 随机以及时间相关函数——C语言描述

    随机相关的函数 头文件 stdlib.h 相关函数 :rand .srand rand( rand C++ Reference ) 函数声明:int rand( void ); rand函数返回一个位 ...

  9. 支持FreeMarker需要哪些JAR包?

    FreeMarker所需的全部jar包,Jar包:struts2-core-2.0.11.2.jar,xwork-2.0.5.jar,ognl-2.6.11.jar,freemarker-2.3.8. ...

  10. 【转】python通过文件头判断文件类型

    刚刚看到一个好玩的程序,拉过来.原文地址:https://www.ttlsa.com/python/determine-file-type-by-the-file-header/ 侵权删. ===== ...