• LVS负载均衡+动静分离+高可用(nginx+tomcat+keepalived)


    		<div id="content-index" class="content-index" style="margin:0 0 10px 10px;float:right;"><div class="content-index-title">文章目录</div><span class="content-index-toctoggle">[<a id="content-index-togglelink" href="javascript:content_index_toggleToc()">隐藏</a>]</span>
    

    一、环境介绍

    基于LVS(linux virtual server)linux虚拟服务器的http集群搭建
    环境:使用VMware pro10,CentOS6.5
    一共使用4台虚拟机,两台安装Ngnix,两台安装tomcat
    这四台服务器的作用分别是:其中一台nginx作为主服务器,另一台nginx_bk作为备用服务器,然后两台安装tomcat的虚拟机作为调度服务器。
    安装并克隆虚拟机后,将四台虚拟机重新命名,分别命名为nginx, nginx_bk,server1,server2:

    四台虚拟机的ip地址分别如下:

    centOS_nginx 192.168.20.2.135
    centOS_nginx_bk 192.168.20.2.139
    CentOS_server1 192.168.20.2.134
    CentOS+server2 192.168.20.2.137
    

    二、环境安装

    1、安装JDK

    四台虚拟机均安装JDK,因安装过程是一样的,所以此处只截图一台虚拟机jdk安装过程。
    首先查看jdk版本,centos默认安装openJDK:

    检查可用的JDK版本:
    [图片上传失败…(image-2ebecc-1512133579646)]

    卸载原来openJDK

    再次查看,已经卸载成功:

    开始安装JDK,到oracle官网下载liunx jdk包,解压到当前目录下
    解压好,进入目录查看:

    配置JDK环境变量,修改/etc/profile

    使环境变量生效:

    参看结果:

    此时可以看到jdk已经安装成功
    这边liun下jdk的安装有很详细教程,可以去网上搜

    2.两台服务器安装tomcat

    下载tomcat,解压到/opt目录
    解压后查看:

    Root权限进入/bin目录,启动tomcat

    配置防火墙端口:


    重新加载防火墙配置:


    启动tomcat访问,首页访问成功:

    至此,tomcat安装完成,另一台server虚拟机可克隆该台虚拟机来实现。

    3、nginx安装

    下载nginx,解压到/usr/local目录下,解压后查看:

    进入解压目录执行./configure命令进行安装
    出现错误及解决方法:
    错误1:

    原因:缺少gc++
    解决:

    错误2:

    解决:

    错误3:

    解决:

    解决上述错误后,再执行安装命令:

    查看nginx进程号:

    启动nginx

    关闭nginx命令是./nginx -s stop
    默认端口是80,此时可在网页访问到:

    至此,Nginx安装完成。

    4、keepalive安装

    Keepalived是一个基于VRRP协议来实现的服务高可用方案,作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
    Keepalived实现服务的高可用(HA),应用已经非常广泛,很多软件都会和他搭配使,比如LVS,Nginx,Redis
    下载keepalie,解压到/opt/keepalive目录下
    安装依赖插件:

    yum install -y gcc openssl-devel popt-devel
    

    编译安装:

    ./configure –prefix=/usr/local/keepalive
    Make
    Make install
    

    编译之后的配置:

    获得权限:

    修改/etc/init.d/keepalived文件,将默认路径改成当前alive安装路径

    即默认为前一行注释掉的路径,改为下一行,指向了正确的配置文件位置。

    配置环境变量

    建立软连接:

    修改/usr/local/keepalive/etc/sysconfig/keepalived文件,修改正确的启动参数

    启动Keepalived

    设置keepalived服务为开机自启动

    至此keepalived安装配置成功,另一两台nginx_bk可以克隆该台虚拟机。


    其实在centos下可以直接用yum install keepalived来安装。默认安装路径为/etc/keepalived
    用yum来装比较方便

    三、负载均衡

    现在有两台服务器192.168.204.134和192.168.204.137,服务器上各有一台tomcat,端口均为8080,在192.168.204上有Nginx
    修改nginx安装目录中conf目录下的nginx.conf文件
    主要配置信息如下:

    补充知识了解:
    nginx负载均衡到多台服务器上时,默认采用轮询策略:
    常见策略:
    1、轮询
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    2、weight
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,数字越大命中率越高。
    例如:轮询几率是2:1
    upstream bakend {
    server 192.168.0.14 weight=2;
    server 192.168.0.15 weight=1;
    }
    2、ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    例如:
    upstream bakend {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
    }
    

    启动两台tomcat,重新启动nginx,访问192.168.204.135就会随机访问192.168.204.134和192.168.204.137
    测试:
    在两台tomcat服务器下webapps目录下创建文件夹21751152,新建index.html文件,index.html文件内容分别如下:
    Server1下index.html文件:

    Server2下index.html文件:

    首先测试在两台tomcat服务器下本地能访问这两个页面:
    Server1下:

    Server2下:

    可以看到两台服务下均可正常访问
    然后在安装Nginx服务器下测试:


    可以看到,在nginx服务器下,在网页中每次刷新都会随机访问到两台Tomcat服务器中的任意一台,可以看出,已经完成了负载均衡的效果。

    四、动静分离

    为了提高网站的响应速度,减轻程序服务器(tomcat)的负载,对于js,css,图片等静态文件可以在nginx反向代理服务器中进行缓存,这样浏览器在请求一个静态资源的时候,代理服务器就可以直接处理,而不用将请求转发给后端服务器。而用户请求的动态文件比如jsp则会转发给tomcat服务器处理,这就是动静分离,也是反向服务器的一个重要作用。
    在server1这台服务器webapp/21751152目录下建index.jsp文件:
    Index.jsp内容如下:

    然后进行Nginx.conf配置文件的修改:
    主要修改内容如下:

    Root /usr/local/webapps 这段代码的意思是指定Nginx访问的目录,即静态资源所在的目录。

    Expires 30d.指这些资源文件在客户端浏览器的缓存时间,30d值30天,1h指一小时
    开始测试:
    首先在server1本地进行测试,页面可以正常访问:

    然后在nginx服务器下进行测试:

    可以看到,向日葵这张图片作为静态文件,没被加载出来。这是因为静态资源访问请求已经被Nginx拦截,由Nginx进行处理。但是Nginx服务器的 /usr/local/webapps 目录下并没有图片资源,所以图片没有加载出来。index.jsp页面能够显示,说明动态的请求已经转发到了Tomcat,Tomcat对index.jsp进行了解析。
    在Nginx服务器 /usr/local/webapps 目录下放置图片文件,将tomcat上把21751152/img/flower.jpg整个目录拷贝到其中。然后再次刷新。


    此时,图片就被加载出来了。至此,可以看出已经Nginx已经实现了动静分离的功能。
    在配置动静分离后,用户请求你定义的静态资源,默认会去nginx的发布目录请求,而不会到后端请求,这样可以提高网站响应速度,减轻真实Web服务器的负载压力。
    不过在开发环境下,为了便于开发,咱们的静态资源和代码还是放在一起的,等开发测试完成,才会将完成的完整程序部署到生成环境上,然而程序代码和静态资源是分别放置到不同的服务器上的。

    五、keepalive高可用

    编辑ngin服务器的keepalived.conf文件,keepalived.conf文件如下图所示:


    画出红线部分是主要需要注意的地方
    备份的nginx_bk配置文件与此类似
    需要注意的以下几个点:
    需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致
    配置文件如下:


    注:在主备机中vip应设置一致

    1、遇到的问题1及解决过程

    用keepalived方式在主nginx服务器中添加了虚拟Ip,但是用ip addr查看发现仍然只有一个IP地址,即keepaLived.cof文件里面配置的vip没有起到效果

    解决问题过程:
    (1)尝试一:
    可能是keepalived没有安装成功,所以采用yum重新安装keepalived
    但是重装后还是发现VIP没有生效。
    (2)最终解决:
    后来在同学的提醒下,发现是自己的keepalived服务没有启动好,nginx服务也需要重启。这两个服务启动好后,就可以了。
    开始测试:
    在两台nginx和nginx_bk服务器中keepalived服务和nginx服务都开启的情况下:
    首先测试nginx的IP:

    可以看到在Nginx中已经有虚拟ip了
    而在Nginx_bk服务器中:

    可以看到没有绑定虚拟ip
    访问192.168.204.177


    这是访问虚拟ip地址,发现也被转发到了Nginx主机192.168.204.135指向的tomcat服务器上,同时也是随机分配到了两天Tomcat服务器上,即实现了负载均衡。

    2、遇到的问题2及解决过程

    Nginx主从机器没有顺利切换
    在模仿Nginx主机宕机过程中:
    用service keepalived stop 命令将Nginx主机服务的keepalived服务停止。

    可以看到虚拟ip就没有绑在主机上
    此时再去查看nginx_bk服务器,按道理来说此时Nginx_bk这台机器上应该会绑定vip,但实际查看的时候,发现并没有绑定过来
    解决过程:
    (1) 尝试1
    因为nginx_bk这台服务器是我克隆nginx主机这台虚拟机得到的,所以存在mac地址冲突问题,猜想可能是这个原因导致的无法主从切换。
    所以我对nginx_bk这台虚拟机重新生成了mac地址
    过程如下:
    首先关闭该虚拟机
    然后选中该虚拟机点击“设置”,选择“网络适配器”,“高级”

    然后点击“生成”

    这样就重新生成了一个MAC地址。
    然后对该虚拟重启后,重新启动keepalived,nginx等服务,发现还是无法正常切换
    (2) 尝试2
    因为我的几台虚拟机都没有设置静态IP,在同学的建议下,可能是没有设置静态IP导致的问题,所以我对nginx和nginx_bk这两台服务器都设置了静态ip,
    设置过程如下:
    Nginx主机:


    对Nginx_bk服务器静态地址设置与此类似

    如上设置了静态IP后,问题还是没有得到解决。
    但是在多次尝试中,意外发现,当把nginx_bk这台虚拟机的nginx服务关闭后,两台虚拟机之间的主从关系是能够体现的
    即当nginx主机中keepalive和nginx服务都正常开启的情况下,nginx主机下绑定了192.168.204.177这个Vip

    当nginx_bk主机中keepaliv服务正常开启的情况下,而nginx服务停止的情况下,该虚拟机是没有绑定虚拟ip的

    然后将nginx主机的keepalived服务停止时:

    如上两张图所示:
    主机下绑定的vip已经漂移到了nginx_bk这台主机上
    然后此时把nginx_bk这台主机上的nginx服务启动,发现在浏览器上访问vip地址时也顺利转发到了两台tomcat服务器上。

    这时再把nginx主机上的keepalive重新启动,同时关闭nginx_bk主机上的nginx服务

    此时nginx主机上又重新绑定了vip,同时网页也恢复了访问。
    再去查看nginx_bk主机情况:

    Nginx_bk上仍然定着vip,当把nginx主机重启后,在该虚拟机上通过vip也能访问到两台tomcat上的内容。

    所以在这种情况下相当于两台nginx都同时被作为了访问入口。
    最终我没有把该问题很好的解决掉,猜测的原因可能与Nginx有关。可能会在后期继续研究这个问题

    参考博客:
    http://www.cnblogs.com/mrlinfeng/p/6146866.html
    http://blog.csdn.net/u010028869/article/details/50612571
    上述的实现过程我主要参照了这两篇博客,感谢他们的无私分享。

    原文出处:简书 -> http://www.jianshu.com/p/4a32730f651d

  • 相关阅读:
    获取具体地址的经纬度
    git更换 拉取推送地址
    array_merge 优化调整
    重启电脑后,redis 6380端口关闭重启
    清空git默认的用户名和密码,
    对一个给定的二维数组按照指定的键值进行排序
    Vim编辑器-批量注释与反注释
    Linux信号处理
    Linux 进程间通信
    mkdir
  • 原文地址:https://www.cnblogs.com/jpfss/p/10183936.html
  • Copyright © 2020-2023  润新知