Nginx+Tomcat+Keepalived+Memcache负载均衡动离分离技术

一、概述

Nginx 作负载均衡器的优点许多,简单概括为:

①实现了可弹性化的架构,在压力增大的时候可以临时添加Tomcat服务器添加到这个架构里面去;

②upstream具有负载均衡能力,可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器;

Keepalived 可实现 Nginx负载均衡器双机互备,任意一台机器发生故障,对方都能够将虚拟IP接管过去。

Memcache可以实现Tomcat服务器的Sission共享整个拓补如下:

注意:

1、由于服务器有限,IP相同的为同一台机。只是端口不一样。

2、mysql部分本文不再描述,请看之前的文章MYSQL +
MHA +keepalive + VIP安装配置
.

二、环境

?





1

2

3

4

服务器:192.168.1.201
安装软件:Keepalived1、Memcache1、Nginx1(反向代理)

服务器:192.168.1.205
安装软件:Keepalived2、Memcache2、Nginx2(反向代理)

服务器:192.168.1.231
安装软件:Tomcat1、Nginx1(静态处理)

服务器:192.168.1.232
安装软件:Tomcat2、Nginx2(静态处理)

三、Nginx的安装

1、下载最新有稳定包:

?





1

shell>wget http://nginx.org/download/nginx-1.4.7.tar.gz

2、安装相关组件

?





1

2

3

4

5

6

7

8

9

#先安装环境

shell>yum -y install gcc openssl-devel zlib-devel pcre-devel

shell>yum -y install gcc gcc-c++ autoconf automake         //安装编译gcc环境

shell>useradd -s /sbin/nologin -M nginx        //添加nginx 用户,没有登录shell,没有家目录.

shell>wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.zip //下载依赖组件,当然还有其它组件。

shell>unzip pcre-8.35.zip

shell>cd pcre-8.35

shell>./configure --prefix=/opt/pcre/

shell>make && make install

 注意:可能还有其它组件要安装,请看:Linux Nginx 安装配置

3、安装Nginx

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

shell>tar -zxvf nginx-1.4.7.tar.gz

shell>#./configure \

  --prefix=/opt/nginx \                             //安装路径

  --sbin-path=/usr/sbin/nginx \                           //可执行文件路径

  --conf-path=/etc/nginx/nginx.conf \                //默认为<prefix>/conf/nginx.conf 最好定义到/etc下

  --pid-path=/var/run/nginx/nginx.pid  \                  //pid文件存放位置,后面将会用到

  --error-log-path=/var/log/nginx/error.log \             //错误日志文件,默认为<prefix>/logs/error.log

  --http-log-path=/var/log/nginx/access.log \             //访问日志,默认为<prefix>/logs/access.log

  --lock-path=/var/lock/nginx.lock \          

  --user=nginx \

  --group=nginx \

  --with-http_stub_status_module \                        //以取得一些nginx的运行状态

  --with-http_ssl_module \                                //支持https加密连接

  --with-http_gzip_static_module \                        //静态缓存模块

  --with-http_realip_module  \                            //让Nginx透明获取客户端IP

  --http-client-body-temp-path=/var/tmp/nginx/client/ \   //指定http客户端请求缓存文件存放目录

  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \          //指定http反向代理缓存文件存放目录

  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/         //指定FastCGI缓存文件存放目录

   --with-pcre=/opt/pcre/

shell>make

shell>make install

 注意:./configure 中很多注解,执行时多注意。

4、让Nginx以服务形式启动

vim /etc/init.d/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

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

#!/bin/bash

# nginx Startup script for
the Nginx HTTP Server

# it is v.0.0.2
version.

# chkconfig: - 85
15

# description: Nginx is a high-performance web and proxy server.

#              It has a lot of features, but it‘s not for
everyone.

# processname: nginx

# pidfile: /var/run/nginx.pid

# config: /usr/local/nginx/conf/nginx.conf

nginxd=/usr/sbin/nginx

nginx_config=/etc/nginx/nginx.conf

nginx_pid=/var/run/nginx/nginx.pid

RETVAL=0

prog="nginx"

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no"
] && exit 0

[ -x $nginxd ] || exit 0

# Start nginx daemons functions.

start() {

if [ -e $nginx_pid ];then

   echo "nginx already running...."

   exit 1

fi

   echo -n $"Starting $prog: "

   daemon $nginxd -c ${nginx_config}

   RETVAL=$?

   echo

   [ $RETVAL = 0
] && touch /var/lock/subsys/nginx

   return
$RETVAL

}

# Stop nginx daemons functions.

stop() {

        echo -n $"Stopping $prog: "

        killproc $nginxd

        RETVAL=$?

        echo

        [ $RETVAL = 0
] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid

}

# reload nginx service functions.

reload() {

    echo -n $"Reloading $prog: "

    #kill -HUP `cat ${nginx_pid}`

    killproc $nginxd -HUP

    RETVAL=$?

    echo

}

# See how we were called.

case "$1"
in

start)

        start

        ;;

stop)

        stop

        ;;

reload)

        reload

        ;;

restart)

        stop

        start

        ;;

status)

        status $prog

        RETVAL=$?

        ;;

*)

        echo $"Usage: $prog {start|stop|restart|reload|status|help}"

        exit 1

esac

exit $RETVAL

注意:nginx各文件的安装路径要与实际安装的一致。

?





1

2

3

保存nginxd脚本,赋予执行权限,添加服务和开机启动

#chmod +x /etc/init.d/nginx

#chkconfig --add nginx

5、启动

?





1

2

3

shell>service nginx start

shell>service nginx restart

shell>service nginx stop

访问:http://127.0.0.1/      

注意:iptables 是否开放80端口

6、Nginx 负载均衡的配置

vim /etc/nginx/nginx.conf

(1)、在http{}中增加:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

gzip  on;

 gzip_min_length  1100;

 gzip_buffers     4
8k;

 gzip_types       text/plain text/css application/x-javascript image/bmp application/javascript;

 upstream tomcat_server{  #tomcat负载均衡配置

       server 192.168.1.231:8080
weight=1

       server 192.168.1.232:8080
weight=1;

 }

 upstream nginx_server { #nginx负载均衡配置

       server 192.168.1.231
weight=1;

       server 192.168.1.232
weight=1;

 }

(2)、在http中的server如下:

?





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

46

47

48

49

50

51

52

53

server {

        listen       80;

        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        <span style="color: rgb(255, 0, 0);">location ~ .*\.    (htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$  {

           expires      30d;

           proxy_pass http://nginx_server;   #反向代理,静态的由nginx来处理。

        }</span>

       <span style="color: rgb(255, 0, 0);"> location ~ .*\.(js|css)?$ {

           expires      1h;

           proxy_pass http://nginx_server;   #反向代理,静态的由nginx来处理。

        }

     

        location / {

           proxy_set_header  Host $host;

           proxy_set_header  X-Real-IP  $remote_addr;

           proxy_pass http://tomcat_server; #反向代理,其它的由tomcat来处理。

        }</span>

       

        #error_page  404             
/404.html;

        # redirect server error pages to the static
page /50x.html

        #

        error_page   500
502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

       # proxy the PHP scripts to Apache listening on 127.0.0.1:80

        #

        #location ~ \.php$ {

        #    proxy_pass   http://127.0.0.1;

        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #

        #location ~ \.php$ {

        #    root           html;

        #    fastcgi_pass   127.0.0.1:9000;

        #    fastcgi_index  index.php;

        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

        #    include        fastcgi_params;

        #}

        # deny access to .htaccess files, if
Apache‘s document root

        # concurs with nginx‘s one

        #

        #location ~ /\.ht {

        #    deny  all;

        #}

}

7、反射代理两台(192.168.1.201\205)Nginx 配制如上。

8、静态处理两台(192.168.1.231\232)Nginx  不用配置第6步:Nginx 负载均衡的配置就可以了。

四、Keepalived安装 

1、Keepalived安装部分参考:MYSQL +
MHA +keepalive + VIP安装配置(三)-----keepalived安装配置

注意:只安装在192.168.1.201\205两台服务器上。

2、Keepalived配置,这里实现两台互为热备。为了不浪费资源,提供了两个VIP(207\208)可以同时执行两个项目。

(1)、服务器:192.168.1.201的配制如下:

?





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

46

47

48

49

50

51

52

53

54

55

56

57

58

59

! Configuration File for
keepalived

global_defs {

   notification_email {

     licm@hyxt.com

   }

   notification_email_from sunney888@qq.com

   smtp_server smtp.qq.com

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

vrrp_script check_nginx {

   script "/root/check_nginx.sh"

   interval 2

   weight 2

}

vrrp_sync_group VG1 {

     group {

          VI_1

     }

}

vrrp_instance VI_1 {

    state MASTER

    interface
eth1

    virtual_router_id 61

    mcast_src_ip 192.168.1.201

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.1.208

    }

    track_script {

      check_nginx

    }

}

vrrp_instance VI_2 {

    state SLAVE

    interface
eth1

    virtual_router_id 60

    mcast_src_ip 192.168.1.201

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.1.207

    }

    track_script {

      check_nginx

    }

}

(2)、服务器:192.168.1.205的配制如下:

?





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

46

47

48

49

50

51

52

53

54

55

56

57

! Configuration File for
keepalived

global_defs {

   notification_email {

     licm@hyxt.com

   }

   notification_email_from sunney888@qq.com

   smtp_server smtp.qq.com

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

vrrp_script check_nginx {

   script "/root/check_nginx.sh"

   interval 2

   weight 2

}

vrrp_sync_group VG1 {

     group {

          VI_1

     }

}

vrrp_instance VI_1 {

    state MASTER

    interface
eth0

    virtual_router_id 60

    mcast_src_ip 192.168.1.205

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.1.207

    }

    track_script {

      check_nginx

    }

}

vrrp_instance VI_2 {

    state SLAVE

    interface
eth0

    virtual_router_id 61

    mcast_src_ip 192.168.1.205

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

  }

    virtual_ipaddress {

        192.168.1.208

    }

    track_script {

      check_nginx

    }

}

注意:这不说明每个参数的意义,请查看: MYSQL +
MHA +keepalive + VIP安装配置(三)-----keepalived安装配置
 只是配置不一样。

五、Tomcat安装

1、Tomcat下载,下载最新的吧。

?





1

2

shell>http://apache.fayea.com/apache-mirror/tomcat/tomcat-7/v7.0.53/bin/apache-tomcat-7.0.53.tar.gz

shell>tar -zxvf apache-tomcat-7.0.53.tar.gz

注意:这里解压就可以不用安装。

2、启动与停止

?





1

2

shell>/usr/local/apache-tomcat-7.0.53/bin/startup.sh

shell>/usr/local/apache-tomcat-7.0.53/bin/shutdown.sh

注意:tomcat默认端口是8080,确保 iptable是否开通端口。

当然你也可以配置成以服务的形式来启动/停止。这不在处理。

六、Memcache安装与配置

1、memcache安装,详细安装请看这:linux MemCache安装手册 这不在说明。

服务器(192.168.1.201/205)安装方法一样。

注意:memcache默认端口是11211,确保 iptable是否开通端口。

2、memcache的启动

?





1

2

3

4

5

6

7

8

9

10

11

12

13

/usr/local/bin/memcached -d -m 50
-u root -l 192.168.1.201
-p 11211 -c 2048 -P /tmp/memcached.pid

没错误提示的话,证明安装成功并且启动了Memcached服务了。

Memcached基本说明:

启动参数:

-d选项是启动一个守护进程,

-m是分配给Memcache使用的内存数量,单位是MB

-u是运行Memcache的用户

-l是监听的服务器IP地址

-p是设置Memcache监听的端口

-c选项是最大运行的并发连接数,默认是1024

-P是设置保存Memcache的pid文件

结束Memcached进程使用如下语句:

kill `cat /tmp/memcached.pid`

3、memcache测试连接

?





1

telnet 192.168.1.201
11211 连接成功后

七、配置session共享

1、tomcat的context.xml

vim /usr/local/apache-tomcat-7.0.53/conf/context.xml

增加如下内容:

?





1

2

3

4

5

6

7

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

    memcachedNodes="n1:192.168.1.201:11211,n2:192.168.1.205:11211"

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

    sessionBackupAsync="false"

    sessionBackupTimeout="1800000"

    copyCollectionsForSerialization="false"

    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>

 注意:memcachedNodes是memcached的节点。可以有多点。

2、增加jar包

(1)、下载包,地址:http://repo1.maven.org/maven2/de/javakaffee/msm/

?





1

2

3

4

5

6

7

memcached-session-manager-1.8.1.jar

memcached-session-manager-tc7-1.8.1.jar

msm-flexjson-serializer-1.8.1.jar

msm-javolution-serializer-1.8.1.jar

msm-kryo-serializer-1.8.1.jar

msm-serializer-benchmark-1.8.1.jar

msm-xstream-serializer-1.8.1.jar

  (2)、javolution-5.4.3.1.jar、spymemcached-2.8.4.jar这两个包要另外下载。

(3)、把下载的这9个包放到两台tomcat服务器上的lib目录下。

九、测试

把马有安装的服务都启动。把一个要测试的项目同时放到。两个tomcat服务器上及两个Nginx静态处理服务器上。访问VIP:http://192.168.1.207/项目名称。

注意:

1、测试方法先确证两台tomcat的项目能用他自己的IP能正常访问。

2、再访问VIP:http://192.168.1.207/项目名称。测试一下图片、JS及JSP是从哪个服务器上调用的。

3、时间有限这不把测试有具体内容放出来。

十、完成

写的比较急。如有不正确之处请指出。让我们一起学习。谢谢。

 

  

 

Nginx+Tomcat+Keepalived+Memcache负载均衡动离分离技术,布布扣,bubuko.com

时间: 2024-08-10 15:10:16

Nginx+Tomcat+Keepalived+Memcache负载均衡动离分离技术的相关文章

Nginx+Tomcat+Keepalived+Memcache 负载均衡动静分离技术

一.概述 Nginx 作负载均衡器的优点许多,简单概括为: ①实现了可弹性化的架构,在压力增大的时候可以临时添加Tomcat服务器添加到这个架构里面去; ②upstream具有负载均衡能力,可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器: Keepalived 可实现 Nginx负载均衡器双机互备,任意一台机器发生故障,对方都能够将虚拟IP接管过去. Memcache可以实现Tomcat服务器的Sission共享整个拓补如下: 注意: 1.由于服务器有限,IP相同的为同一台机.只是端

Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享

CentOS安装Nginx?:http://centoscn.com/CentosServer/www/2013/0910/1593.html CentOS安装Tomcat?:http://blog.csdn.net/zhuying_linux/article/details/6583096 CentOS安装Redis?:http://www.cnblogs.com/zhuhongbao/archive/2013/06/04/3117997.html 多个Tomcat负载均衡实例:可在服务器上复

【转】搭建nginx+tomcat+Java的负载均衡环境

一.简介: Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱.虽然Tomcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多. 二.下载安装: 下载nginx http://nginx.org/en/download.html 下载解压后放到C:\nginx-1.0.4(官网这样要求的,不知道放其它盘有没有问题) 启动nginx.exe,然后在浏览器输入127.0.0.1即可 配置自己的项目测试 第二环节我们使用了默认

Nginx+Tomcat搭建高性能负载均衡集群(转)

一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2: 3.然后修改这两个Tomcat的启动端口,分别为18080和28080,下面以修改第一台Tomcat为例,打开Tomcat的conf目录下的server.xml

【转载】Nginx+Tomcat搭建高性能负载均衡集群

最近对负载均衡比较感兴趣,研究了公司的负载均衡的配置,用的是阿里的SLB,相当于不用运维,只需要在后台进行简单的配置就能完成Tomcat的负载均衡,索性在网上找了几篇文章去尝试搭建一个集群,然而很多都是过时了或者不全,最后找到一个测试过能成功的文章. 一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为a

Nginx+Tomcat搭建高性能负载均衡集群

一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2: 3.然后修改这两个Tomcat的启动端口,分别为18080和28080,下面以修改第一台Tomcat为例,打开Tomcat的conf目录下的server.xml

LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置(DR模式,一个VIP,多个端口)

一.概述 LVS作用:实现负载均衡 Keepalived作用:监控集群系统中各个服务节点的状态,HA cluster. 配置LVS有两种方式: 1. 通过ipvsadm命令行方式配置 2. 通过Redhat提供的工具piranha来配置LVS 软件下载: ipvsadm下载地址: http://www.linuxvirtualserver.org/software/kernel-2.6/ Keepalived下载地址: http://www.keepalived.org/software/ 安装

Nginx+Tomcat多实例负载均衡

业务需求 1.在一台服务器上创建3个Tomcat实例 2.Nginx服务器负责调度Tomcat服务器 3.它的域名是:tomcat.zjzd.cn 1.IP地址规划 172.16.30.1     Nginx 172.16.30.2     Tomcat 172.16.30.254   Windows 172.16.30.2 Tomcat 2.安装JDK并配置环境 #/etc/init.d/iptables stop #setenforce 0 #wget http://download.ora

Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/53535435 Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而N