Linux下搭建Nginx+Keepalived+Redis+Tomcat实现session共享 、负载均衡、高可用
一、集群规划
ip | 安装的软件 |
192.168.52.128 | nginx keepalived jdk |
192.168.52.129 | nginx keepalived jdk |
192.168.52.130 | tomcat jdk redis-3.0.3 |
192.168.52.143 | tomcat jdk |
二、安装步骤
1、安装 jdk-8u11-linux-i586.tar.gz
(1)、在/usr/local/下新建一个java文件夹 命令mkdir /usr/local/java。
(2)、 把jdk-8u11-linux-i586.tar.gz放到/usr/local/java目录下 命令 mv jdk-8u11-linux-i586.tar.gz /user/local/java。
(3)、解压jdk-8u11-linux-i586.tar.gz 命令 tar -zxvf jdk-8u11-linux-i586.tar.gz。
(4)、配置java环境变量 命令 vi /etc/profile 添加内容 export JAVA_HOME=/usr/local/java/jdk
export PATH=$PATH:$JAVA_HOME/bin 保存退去 让刚才的设置立即生效 命令 source /etc/profile。
(5)、检查安装是否成功命令 java -version 出现如下图所示 表示安装成功。 其他3台机器操作一样。
2、安装nginx-1.8.0.tar.gz
(1)、把nginx-1.8.0.tar.gz放到/usr/local/java目录下 命令 mv nginx-1.8.0.tar.gz /user/local/java。
(2)、解压nginx-1.8.0.tar.gz 命令 tar -zxvf nginx-1.8.0.tar.gz。
(3)、 安装c环境 执行命令yum -y install gcc gcc-c++ autoconf make
(4)、安装nginx需要的环境 命令 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
(5)、检查nginx环境 命令 在niginx目录([[email protected] nginx-1.8.0]#)下输入 ./configure --prefix=/usr/local/java/nginx。
(6)、编译nginx 命令 在niginx目录([[email protected] nginx-1.8.0]#)下输入 .make && make install
(7)、启动nginx 在nginx/sbin目录([[email protected] sbin]#)下 输入 ./nginx
(8)、测试nginx是否安装成功 在浏览器中输入127.0.0.1 出现如下界面表示安装成功。
另一台机器安装nignx操作如上。
3、安装apache-tomcat-7.0.64
(1)、把apache-tomcat-7.0.64上去到 /usr/local/java目录下
(2)、在两台tomcat/webapps下新建一个test文件夹在test文件夹下建一个index.jsp文件
192.168.52.142 index.jsp文件内容如下
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
sessionID:<%=session.getId()%>
<br>
SessionIP:<%=request.getServerName()%>
<br>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 1111");
%>
192.168.52.143 index.jsp文件内容如下
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
sessionID:<%=session.getId()%>
<br>
SessionIP:<%=request.getServerName()%>
<br>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 222");
%>
4、tomcat集群配置
(1)、在两台机器上的nginx/conf/nginx.conf配置文件中加如下代码
(2)、测试安装是否成功 在两台安装nginx的机器的浏览器上分别输入127.0.0.1/test显示如下页面表示安装成。
刷新浏览器后显示如下图所示
5、安装Redis-3.0.3实现服务器间的session共享
(1)、下载redis 命令wget http://download.redis.io/releases/redis-3.0.3.tar.gz。
(2)、下载tcl 命令wget http://downloads.sourceforge.net/tcl/tcl8.5.9-src.tar.gz。
(3)、解压redis [[email protected] java]# tar -zxvf redis-3.0.3.tar.gz 。
(4)、解压tcl [[email protected] java]# tar -zxvf tcl8.5.9-src.tar.gz 。
(5)、在 tcl8.5.9/unix下执行命令[[email protected] unix]# ./configure。
(6)、编译 命令[[email protected] unix]# make && make install。
(7)、编译redis 命令[[email protected] redis-3.0.3]# make && make install。
(8)、执行命令 [[email protected] redis-3.0.3]# make test。
(9)、创建三个目录 命令mkdir -p /usr/local/java/redis/var , mkdir -p /usr/local/java/redis/etc,mkdir -p /usr/local/java/redis/bin。
(10)、把redis-3.0.3/src下的 redis-benchmark redis-check-aof redis-cli redis-server redis-check-dump 文件复制出来 命令 [[email protected] src]# cp -r redis-benchmark redis-check-aof redis-cli redis-server redis-check-dump /usr/local/java/redis/bin/
[[email protected] redis-3.0.3]# cp -r redis.conf /usr/local/java/redis/etc/
(11)、启动redis 命令 [[email protected] bin]# ./redis-server
(12)、测试安装是否成功。命令 [[email protected] bin]# ./redis-cli 输入命令127.0.0.1:6379>set aa 123后 在输入127.0.0.1:6379>get aa出现如图所示表示安装成功。
6、配置tomcat session共享
(1)、下载tomcat-redis-session-manager相应的jar包,主要有三个:
下载完成后拷贝到$TOMCAT_HOME/lib中。
(2)、修改两tomcat的context.xml
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.17.4"
port="6379"
database="0"
maxInactiveInterval="60" />
</Context>
(3)、测试 在nginx机器的浏览器上输入127.0.0.1/test
刷新
sessionid都一样表示配置成功。
7、安装keepalived 实现nginx的高可用
(1)、下载keepalived 命令wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz。
(2)、解压 keepalived 命令 [[email protected] java]# tar -zxvf keepalived-1.2.2.tar.gz 。
(3)、安装popt环境 命令 yum install popt-devel。
(4)、[[email protected] keepalived-1.2.2]# ./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.8.1.el6.x86_64。(不能直接复制粘贴这个命令 手动输入)
(5)、编译 命令[[email protected] keepalived-1.2.2]# make && make install。
(6)、ln -s /usr/local/sbin/keepalived /sbin/。(不能直接复制粘贴这个命令 手动输入)
(7)、分别修改两台机器的keepalived.conf文件 [[email protected] /]# vi /etc/keepalived/keepalived.conf。
主nginx的keepalived.conf内容如下
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER
}
vrrp_script chk_http_port {
script "/usr/local/java/check_nginx_pid.sh" #监控nignx服务的脚本文件
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth1 #这个要写机器的网卡名称
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.52.100 #虚拟ip地址
}
}
备nginx的keepalived.conf内容如下
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_BACKUP
}
vrrp_script chk_http_port {
script "/usr/local/java/check_nginx_pid.sh"
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth1 #这个要写机器的网卡名称
virtual_router_id 51
priority 90 #要小于主的值
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.52.100
}
}
(8)、在两台机器的/usr/local/java 的目录下建一个check_nginx_pid.sh文件 文件内容如下
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
(9)、测试
依次启动两个tomcat=》启动两个nginx=》启动两个keepalived
keepalived启动命令 service keepalived start | stop |restart 依次是启动 停止 重启keepalived
启动keepalived 输入命令 ip a 查看主机上是否有虚拟ip 192.168.52.100 如下图
通过虚拟ip192.168.52.100/test访问,看页面是不是轮询两个tomcat
将主机的nginx进程kill掉 通过虚拟ip192.168.52.100/test访问,看页面是不是还能轮询两个tomcat
ok!!!!!!
转载于:https://my.oschina.net/xiaozhou18/blog/785346