nginx+keepalived+tomcat+memcached服务器集群搭建

来源:互联网 发布:淘宝代销退货流程 编辑:程序博客网 时间:2024/05/01 09:35

服务器集群结构


整个架构的核心思想就是每个功能节点都不是单一节点,都存在一个备份节点,当主节点挂掉,备份节点可继续使用,以保证系统的整体可用性。

通过Keepalived使一个虚拟IP 192.168.1.160同时指向两个机器,任何一个机器挂掉,都不影响使用该ip继续访问另外一台机器的Nginx。

每个Nginx负载两个tomcat,每个tomcat使用两个memcached。

环境:

所有环境使用vmware虚拟机测试

ubuntu:12.04

jdk:1.8

tomcat:apache-tomcat-7.0.68(tomcat版本不能超过7.0.68,memcached插件暂不支持更高版本的tomcat)

nginx:nginx-1.9.9

memcached:1.4.31

keepalived:1.2.23

先安装一个虚拟机做为虚拟机1(IP:192.168.1.107),在虚拟机1上安装全部所需软件后,由虚拟机1复制出虚拟机2(IP:192.168.1.108)。

以下配置都是最简配置,仅验证架构的可行性,没有考虑性能优化。

安装memcached

先装memcached依赖 lievent官网:http://libevent.org/

tar zxvf libevent-2.0.22-stable.tar.gz

cd libevent-2.0.22-stable/

sudo ./configure –prefix=/usr/local

sudo make

sudo make install

编译安装memcached服务官网:http://memcached.org/downloads

tar zxvf memcached-1.4.31.tar.gz

cd memcached-1.4.31/

sudo ./configure–prefix=/usr/local/memcached –with-libevent=/usr/local

sudo make

sudo make install

启动

sudo /usr/local/memcached/bin/memcached -d-m 64 -u root -p 11111

测试,在其他机器上执行如下

telnet 192.168.1.107 11111

连接成功,表示安装没问题

 

安装jdk:

下载地址:

http://www.Oracle.com/technetwork/Java/javase/downloads/index.html

安装

sudo tar zxvf jdk-8u101-Linux-x64.tar.gz

安装成功后,修改环境变量

sudo nano /etc/profile

在文件的最后添加如下信息:

#这里是你安装的JDK所在的位置

export JAVA_HOME=/home/test/server/jdk1.8.0_101

export PATH=JAVAHOME/bin:PATH

exportCLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

使配置生效

source /etc/profile

测试

java -version

输出如下表示jdk安装正确

Java version “1.8.0_101”

Java(TM) SE Runtime Environment (build1.8.0_101-b13)

Java HotSpot(TM) 64-Bit Server VM (build25.101-b13, mixed mode)

 

安装tomcat

下载地址:

http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.68/bin/

安装

sudo tar zxvf apache-tomcat-7.0.68.tar.gz

修改apache-tomcat-7.0.68/bin/ catalina.sh

sudo nano catalina.sh

在注释结束后的第一行添加下面内容

JAVA_HOME=/home/test/server/jdk1.8.0_101

#下面一行在手动启动tomcat时不添加也没问题

#但在开机自启时如果没有这一行,日志有中文乱码的问题

JAVA_OPTS=”-Dfile.encoding=UTF-8-Duser.country=CN -Duser.language=zh”

启动tomcat

sudo ./startup.sh

浏览器中测试:http://192.168.1.107:8080

显示正常的tomcat首页则tomcat启动正常

 

Session测试

此处测试不使用memcached时的session情况

测试jsp页面代码如下:

[java] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <%  
  2. String sessionId = session.getId();  
  3. System.out.println(”每个Tomcat日志输出相同的sessionId,sessionId =” + sessionId);  
  4. String userName = (String)session.getAttribute(”name”);  
  5. if (userName == null ||userName.equals(“”)) {  
  6.          session.setAttribute(”name”,sessionId);  
  7. else {  
  8.          out.println(”name=”+ userName);  
  9. }  
  10. %>  
<%String sessionId = session.getId();System.out.println("每个Tomcat日志输出相同的sessionId,sessionId =" + sessionId);String userName = (String)session.getAttribute("name");if (userName == null ||userName.equals("")) {         session.setAttribute("name",sessionId);} else {         out.println("name="+ userName);}%>

测试地址:http://192.168.1.107:8080/sessiontest/sessiontest.jsp

查看tomcat日志输出:


配置tomcat使用memcached保存session

下载需要的jar包放到tomcat/lib目录,jar包版本需保持一致,相关jar包已打包。

下载地址:http://download.csdn.net/detail/patch/9621603

asm-5.0.4.jar

kryo-3.0.3.jar

kryo-serializers-0.34.jar

memcached-session-manager-1.9.2.jar

memcached-session-manager-tc7-1.9.2.jar

minlog-1.3.0.jar

msm-kryo-serializer-1.9.2.jar

objenesis-1.2.jar

reflectasm-1.11.1.jar

spymemcached-2.10.3.jar

修改tomcat/conf/context.xml文件,增加如下内容:

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

   memcachedNodes=”n1:192.168.1.107:11111 n2:192.168.1.108:11111” 

    sticky=”false” 

   sessionBackupAsync=”false” 

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

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

/>

此时每次访问可能都会报一个找不到n2的异常,这是因为暂时只有一台测试机器,两台机器都配置完成后就不会出现该问题。

重启tomcat,通过浏览器访问测试页面

测试地址:http://192.168.1.107:8080/sessiontest/sessiontest.jsp

查看tomcat日志输出:


安装nginx

下载地址:

http://nginx.org/download/

安装

sudo tar zxvf nginx-1.9.9.tar.gz

cd nginx-1.9.9/

sudo ./configure –without-http_rewrite_module–without-http_gzip_module

sudo make

sudo make install

安装成功之后,nginx放置在/usr/local/nginx目录下,主要的配置文件为conf目录下的nginx.conf,

nginx的启动文件在sbin目录下的nginx文件。

启动Nginx

sudo /usr/local/nginx/sbin/nginx

测试:http://192.168.1.107/,显示nginx界面则表示安装成功

修改nginx配置文件,添加如下内容,修改位置见下图


重启nginx

sudo ./nginx -s reload

测试:http://192.168.1.107/sessiontest/sessiontest.jsp

 

安装keepalived

虚拟IP准备

sudoifconfig eth0:0 192.168.1.160 netmask 255.255.255.0

通过以上方式修改的虚拟ip在机器重启后会丢失,可通过修改/etc/network/interfaces文件进行设置,修改后内容如下:

auto lo

iface loinet loopback

 

auto eth0

iface eth0inet dhcp

 

auto eth0:0

ifaceeth0:0 inet static

address192.168.1.160

netmask255.255.255.0

修改后重新启动网络:

sudo/etc/init.d/networking restart

 

更新依赖包

sudoapt-get install openssl

sudoapt-get install libssl-dev

安装keepalived

下载地址:http://keepalived.org/

tar -zxvf keepalived-1.2.23.tar.gz

cd keepalived-1.2.23/

sudo ./configure–prefix=/usr/local/keepalived

sudo make && sudo make install

新建文件/etc/keepalived/keepalived.conf,内容如下:

[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. vrrp_script chk_nginx {  
  2.     script ”/etc/keepalived/check_nginx.sh”  
  3.     interval 2  
  4.     weight 2  
  5. }  
  6.   
  7. global_defs {  
  8.     notification_email {  
  9.           
  10.     }  
  11. }  
  12. vrrp_instance VI_1 {  
  13.     state MASTER  
  14.     interface eth0  
  15.     virtual_router_id 52   
  16.     mcast_src_ip 192.168.1.107  
  17.     priority 20  
  18.     advert_int 1  
  19.       
  20.     authentication {  
  21.         auth_type PASS  
  22.         auth_pass 123456  
  23.     }  
  24.     track_script {  
  25.         chk_nginx  
  26.     }  
  27.     virtual_ipaddress {  
  28.         192.168.1.160  
  29.     }  
  30. }  
vrrp_script chk_nginx {    script "/etc/keepalived/check_nginx.sh"    interval 2    weight 2}global_defs {    notification_email {    }}vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 52     mcast_src_ip 192.168.1.107    priority 20    advert_int 1    authentication {        auth_type PASS        auth_pass 123456    }    track_script {        chk_nginx    }    virtual_ipaddress {        192.168.1.160    }}

新建文件/etc/keepalived/check_nginx.sh,内容如下:

[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. #!/bin/bash  
  2. if [ `ps -C nginx –no-header |wc -l` -eq 0 ];then  
  3.     killall -TERM keepalived  
  4. fi  
#!/bin/bashif [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    killall -TERM keepalivedfi

因为是脚本文件,修改文件属性,使文件具有可执行属性

sudo chmod +x/etc/keepalived/check_nginx.sh

启动keepalived

sudo /usr/local/keepalived/sbin/keepalived

测试

停掉nginx看三个keepalived进程是否还存在

sudo killall -TERM nginx

可以看到三个keepalived进程也自动停止。

通过浏览器访问测试页面

测试地址:http://192.168.1.160/sessiontest/sessiontest.jsp

设置所有安装软件开机自动启动

sudo nano /etc/rc.local

修改后内容如下:

sudo /usr/local/memcached/bin/memcached -d-m 8 -u root -p 11111

sudo/home/test/server/apache-tomcat-7.0.68/bin/startup.sh

sudo /usr/local/nginx/sbin/nginx

sudo /usr/local/keepalived/sbin/keepalived

exit 0

 

 

至此,单个机器的配置完成。

复制虚拟机1文件做为虚拟机2。

修改虚拟机2上的keepalived文件,只修改三个位置

sudo nano /etc/keepalived/keepalived.conf


通过浏览器访问测试页面

测试地址:http://192.168.1.160/sessiontest/sessiontest.jsp

至此全部配置完成,关闭任何一个nginx、tomcat、memcached,都不影响正常访问


0 0