设为首页 收藏本站
查看: 1429|回复: 0

[经验分享] nginx+keepalived+tomcat之具体配置档

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-4 10:41:38 | 显示全部楼层 |阅读模式
  前沿知识点:


  •   nginx负责负载均衡(反向代理)

  •   msm(memcached session manager)负责缓存会话信息,从而实现会话保持

  所需包:


  •   nginx和memcached采用最新稳定版

  •   tomcat版本需要与msm版本一致,这里采用tomcat7

  •   msm包共计9个包,包名具体信息查看附件,msm的所有包放到$CATALINA_HOME/lib

  配置过程:
  nginx的配置信息如下-->






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




...



http {



    ...



    upstream tomcat {



        server node1:8080;



        server node2:8080;



#这里具体使用什么算法,暂定,不过我觉得ip_hash不好,会造成负载不均衡



    }



    server {



    ...



        location ~* ^/testapp {



            proxy_pass http://tomcat;



            proxy_redirect off;



            proxy_set_header X-real-ip $remote_addr;



            proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;



            proxy_set_header Host $host;



        }



    ...



    }



}
  

  tomcat的配置信息如下-->

  首先修改server.xml,在默认的host flag中添加context





1

2

3

4

5

6

7

8

9

10

11

12

13




...



    <host>



    ...



    <context path="/testapp" docbase="testapp/" />



    ...



    </host>



...
  
  其次修改context.xml,在默认的context flag中添加manager
  其中粘性session方式如下: Sticky 模式:tomcat 本地容器 session 为主session, memcached为备session。Request请求到来时, 判断tomcat容器是否发生变化,若变化(即原tomcat down掉),则从memcached加载备session到tomcat2,响应给客户端,请求结束后,重置session_id,并更新到memcached。
  






1

2

3

4

5

6

7

8

9




<Context>

  ...

  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

    memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"

   failoverNodes="n1"

    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

    />

</Context>


  
  非粘性session如下: Non-Sticky模式:tomcat session 为 中转session, memcached1 为主,memcached 2 为备session。Request请求到来时,从memcached 2加载备 session 到 tomcat,(另外,若只有一个memcached节点,或者memcached2 出错时,且tomcat本地容器中还没有session,则从memcached1加载主 session 到 tomcat),Request请求结束时,将tomcat session更新至 主memcached1和备memcached2,并且清除tomcat session 。以达到主备同步之目的,如下是non-sticky模式的响应流程图:(图片来源网络)。
  此模式下,基于session的验证码将无法使用,因为此模式下,第一次session是用本地,然后存放到mem1和mem2中,之后客户再次请求,则路由到了另外一台tomcat上,又因为是同一个session_id,所以使用的是mem1中,但是mem1中确是旧的session.(但是验证码要求每一次都不一样...)


  
  






1

2

3

4

5

6

7

8

9

10

11




<Context>

  ...

<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"

   memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"

   sticky="false"

   sessionBackupAsync="false"

   lockingMode="uriPattern:/path1|/path2"

   requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

   transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

   />

</Context>


  

  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




! Configuration File for keepalived



global_defs {

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

#<Spinestars

vrrp_script chk_keepalived_down {

    script "[ -f /var/run/keepaliveddown ] && exit 1 || exit 0"

    interval 2

    weight -2

}

#nginx_check_script

vrrp_script chk_nginx {

    script "killall -0 nginx && exit 0 || exit 1"

    interval 2

    weight -2

}

#/Spinestars>

vrrp_instance VI_1 {

    state MASTER

    interface eth1

    virtual_router_id 20

    mcast_src_ip 192.168.100.1

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.88.100.2

    }

    track_script {

    chk_nginx

    chk_keepalived_down

    }

}

  
  nginx动静分离配置:
  


...
#<Spinestars
upstream tomcat_servers {
        server node1:8080;
        server node2:8080;
}
server {
        listen      *:80;
        server_name  test.shop.com;
        root/var/www/shop;
        index index.html index.jsp index.htm;
#/Spinestars>

#<Spinestars
        location ~* \.(html|jpg|png|jpeg|css|gif|ico)$ {
           root /var/www;
        }
        location ~* \.(js|jhtml)$ {
                proxy_pass http://tomcat_servers;
                proxy_redirect off;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
        }
        if ( $host = 'test.shop.com' ){
                rewrite ^/$ http://test.shop.com/shop permanent;
        }
        #以下location是测试用的
        location ~* ^/testapp {
                proxy_pass http://tomcat_servers;
                proxy_redirect off;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
        }
#/Spinestars>
...
}  


来自为知笔记(Wiz)  




附件列表


  • memcached+msm+kryo.png
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109295-1-1.html 上篇帖子: VM虚拟机上 实现CentOS 6.X下部署LVS(NAT)+keepalived实现高性能高可用负载均衡 下篇帖子: 借助LVS+Keepalived实现负载均衡(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表