【高并发篇】tengine/nginx+keepalived+memcached搭配的相关配置总结

一、安装及基本的使用
1.安装tomcat
2.准备工作
关闭防火墙 service iptables stop 或者永久关闭 chkconfig iptables off
3.配置请求的过滤,请求的为serverlet的动态资源。
vi nginx.conf 新增如下配置,注意加粗部分是对应这下面的upstream的名字。
location ~* .(jsp|do|action)$ {
proxy_pass http://Chenshi;
index index.jsp;
}
然后在tomcat的server.xml上配置服务器的路径
参见官网1配置单个服务器
配置多个服务器
具体配置如下:
一、单个
upstream Chenshi {
server 192.168.159.40:8080 weight=5;
# server backend2.example.com:8080;
}
server {
listen 80;
server_name localhost;
注意加粗的部分要相同。
然后重新加载service tengine reload
开启192.168.159.40:8080 此服务。
然后访问:192.168.159.36/index.jsp 即可访问tomcat的index。此时Tomcat的静态资源是无法访问。
亦可用其他内容替换index.jsp内容。访问的时候把index.jsp替换掉就行。
二、多个
拷贝原来的tomcat 使用:cp -a tomcat7/ tomcat7-2/
修改server.xml中的端口号。一共三处。

22 <Server port="8005" shutdown="SHUTDOWN">
71 <Connector port="8080" protocol="HTTP/1.1"
93 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

然后启动此tomcat,再启动原来的tomcat,可使用:[root@node00 tomcat7]# bin/startup.sh
查看日志是否启动成功:[root@node00 tomcat7]# tail -100 logs/catalina.out
再修改tengine的配置文件:
41 upstream Chenshi {
42 server 192.168.159.40:8080 weight=5;
43 server 192.168.159.40:8081 weight=5;
44 # server backend2.example.com:8080;
45 }
复制42行,使用yyp复制并粘贴到下一行。
然后service tengine reload 。为了区分2个tomcat 。修改tomcat7-2的test1.jsp的内容。这样再访问地址:http://192.168.159.36/test1.jsp 的时候,就会在2个tomcat下切换。
注意:36的ip是配置的tengine的。40则是放Tomcat的机器。

二、tengine对tomcat进行监控
原生的nginx功能做的比较简答,只是统计了数字。而tengine则做的很好,健康检查参见官网

http {
    upstream cluster1 {
        # simple round-robin
        server 192.168.0.1:80;
        server 192.168.0.2:80;
        **check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;**
    }
可在HEAD后加 /check.jsp 加上检查页面。
然后把官网下面的这个检查结果拿过来。 
   location /status {
        check_status;
        access_log   off; 
  }  

再重新加载配置; service tengine reload
再访问:http://192.168.159.36/status
这里写图片描述
再弄死一台tomcat.[root@node00 bin]# ./shutdown.sh 刷新测试
当fall counts达到5次的时候就会警告。5次是check interval=3000 rise=2 fall=5 timeout=1000 type=http;这里配置的fall的数值。
这里写图片描述

三、tengine统一session【memcached】
首先可以想到用:一致的会话保持,其含义为,一次的会话内,把请求只转发到一个tomcat上。但是一次的会话内tomcat挂掉了。则需要转到其他的tomcat上。如何session一致性,可复制session数据到不同服务器,但是会造成资源浪费,同样的数据存了三份。此时 可以想到用专门的服务器去存session数据(缓存服务器,用redis、memcached),session问题要注意,sessionid是由时间戳生成的。因此要办证每个服务器上的时间必须一致。(时间相差不能超过30s,不然md5生成的会话id就会有问题)这里介绍下如何设置多台服务器时间一致。用xshell
这里写图片描述

此外还需要考虑单点故障问题。
统一session可用memcached或者redis等缓存服务器。明显区别,memcached目前还不是分布式的。而redis是分布式的。
安装memcached
1、安装memcached
2、启动memcached
memcached -d -m 128m -p 11211 -l 192.168.197.128 -u root -P /temp/
-d:后台启动服务
-m:缓存大小
-p:端口
-l:IP
-P:服务器启动后的系统进程ID,存储的文件
-u:服务器启动是以哪个用户名作为管理用户
3、拷贝jar到tomcat的lib下
4、配置tomcat,每个tomcat里面的context.xml中加入:
备注:
yum -y memcached 安装完memcached后service memcached start
然后可使用netstat -ntpl 检查监听的端口情况。[n:数字显示 t:显示协议 p:显示进程 l:列表形式显示]
整合memcached和tomcat需要的过程如下:
主要的memcached官网的jar为:
memcached-session-manager-1.7.0.jar
memcached-session-manager-tc7-1.8.1.jar
其余为第三方。
这里写图片描述
将这些jar拷贝到tomcat下的lib下。然后修改配置文件。
vi /opt/tomcat7/conf/context.xml
可在末行新增如下内容:注意修改memcachedNodes的ip地址。

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
    memcachedNodes="Tc:192.168.159.36:11211" 
    sticky="false" 
    lockingMode="auto"
    sessionBackupAsync="false"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" 
/>

多台tomcat配置上述同样的信息。后进行测试。
可在Tomcat的Root下新建如下测试内容:

<%@page contentType="text/html;charset=UTF-8"%>
<%
String msg =(String) session.getAttribute("chenshi");
if(msg == null){
    session.setAttribute("chenshi","+");
    msg = "+";

}else{ 
    msg = msg+"+";
    session.setAttribute("chenshi",msg);
}
%>

<h1>tomcat1</h1>
<h2><%=session.getId() %></h2>
<h2>${chenshi}</h2>

这里写图片描述
第二行的session是不变的。第一行的tomcat2和tomcat1之间来回切换。第三行的“+”会不断地增加。说明2个服务器来回切换访问的时候session保持了一致。
其实配置很简单,只需要把jar放到tomcat的lib下。然后修改content.xml文件,新增新增内容解释如下:
memcachedNodes。此为主要修改的内容。写成被访问的带有memcached的服务器地址。sticky,会话保持与否。sessionBackupAsync,缓存文件备份。
最后既是测试类的写法。获取session就可以。看动态切换的时候sessionid是否变化了。不变说明统一了session。
四、tengine的单点故障问题处理
最直接的想法是复制多台tengine做备份。此时必须具备的条件:
1.ip相同
2.分发的服务器相同
3.相互之间知道谁死谁活
此时产生了新的一项技术,keepalived,为nginx提供高可用。其还可为其他的服务做高可用。keepalived内部提供了vrrp的协议,此协议可快速实现ip漂移。备:其实zookeeper也可以做高可用技术。它使用选举的方式。客户端不直接访问nginx 而是访问zookeeper(简称ZK),其在nginx上面再加一层。可以有多个ZK。自己先保证是高可用的。它们之间是同级的。多个ZK只要没都死就可用。ZK 会选举nginx,其实分布式的,重量级,nginx的高可用,keeperalived足够了。
4.keeperalived需要手写检查nginx的代码。
说明:这里写图片描述
vip是虚拟的ip是漂移的ip,客户端访问的时候不会直接访问固定ip,而是vip。主挂了,会走backup机器。第一次必须在master机器上绑定,除非它死了。一台master。多个backup。对于由哪个backup的接管,keeperalived有优先级。
keepalived环境准备:
1.yum -y install keepalived
2.cd /etc/keepalived
3.vi
配置文件说明:

global_defs {
      4    notification_email {
      5      acassen@firewall.loc
      6      failover@firewall.loc
      7      sysadmin@firewall.loc
      8    }
      9    notification_email_from Alexandre.Cassen@firewall.loc
     10    smtp_server 192.168.200.1
     11    smtp_connect_timeout 30
     12    router_id LVS_DEVEL
     13 }
  vrrp_instance VI_1 {
   state MASTER
     interface eth0
        virtual_router_id 51
      priority 100
       advert_int 1
        authentication {
            auth_type PASS
           auth_pass 1111
        }
       virtual_ipaddress {
        192.168.159.250/24 dev eth0 label eth0:1
       }
   }

因为keepalived没有通知nginx,因此不需要配置邮件相关的信息,只留下第12行,然后下面只需要设置virtual_ipaddress 即可。里面的配置规则为,ip+子网掩码 绑定对象 别名, eth0:1 为起的别名。
配置完成后开始写脚本检查监控nginx。
在home下新建 vi /home/nginx_check.sh

      2 #!/bin/bash
      3 request_code=`curl -o /dev/null -s -w %{http_code} http://192.168.159.36/index.html`
      4 
      5 if [ $request_code -eq 200 ];then
      6     sleep 2
      7 else
      8     killall keepalived
      9 fi

然后修改nginx_check.conf
修改的位置为:

    7 vrrp_script my_script {
      8     script "/home/nginx_check.sh"
      9     interval 3
     10 }   
     11 
     12 vrrp_instance VI_1 {

在vrrp_instance 上配置my_script 下配置脚本的路径。以及间隔时间。
然后最后再调用下

     26 track_script {
     27     my_script
     28 }

然后复制此项到新机器上:
scp keepalived.conf root@192.168.159.37:/etc/keepalived/
拷贝过去的需要修改主备关系。将下面的state MASTER 改为 BACKUP
id 是不变的。再改下prority 的值,
12 vrrp_instance VI_1 {
13 state MASTER
14 interface eth0
15 virtual_router_id 51
16 priority 100

然后在备机上装好tengine。此时可拷贝主机上的文件,包括安装文件和启动的服务文件。然后测试。
启动主机上的tengine和keepalived以及2个tomcat。然后查看主机上的ip。发现会多出一个eth0:1 的ip,这就是虚拟的ip.可通过访问次ip。达到和单独访问主备服务器一样的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值