在服务端3上进行同样的配置也可以用scp把服务端2上java和tomcat目录传过去如下
[root@server2local]# scp -r java/ tomcat/ 172.25.29.3:/usr/local/
在进行系统环境里加上java的配置启动tomcat即可
3.Nginx添加sticky (服务端1)
1.nginx负载均衡已经配置好了
在前面的博客里已经写过nginx源码安装这里就不再重复了也可以参考前面的博客
[root@server1~]# cd /usr/local/lnmp/nginx/conf
[root@server1conf]# vim nginx.conf
20 upstream wen {
21 server 172.25.29.2:8080; #轮询机制
22 server 172.25.29.3:8080;
23 }
49 location / {
50 root html;
51 index index.html index.jspindex.php index.htm; #默认发布目录
52 }
68 location ~ \.jsp$ {
69 proxy_pass ;
70 }
[root@server1conf]# nginx -t #检测
nginx:the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx:configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
[root@server1conf]# nginx -s reload #刷新
测试 172.25.29.1
172.25.29.1/test.jsp
刷新之后
也就是server2 和server3相互交替
2.改变负载均衡机制为sticky
由于nginx是轮询机制如果在访问页面如填写信息时突然卡住刷新之后就会跳到另一个server上就得重新开始填写。但是Nginx里有很多算法其中的ip_hash也可以防止这些问题。使用ip_hash有一个问题是当客户端和服务器之间使用cdn内容分发系统高速缓存时客户端的访问到达cdn由cdn访问服务器识别的ip是cdn的ip那么将集中于访问后台的一台服务器(x相当于DDOS攻击)会加速服务器的损坏。那么为了防止这些问题就有用下面的算法sticky不是nginx里自带的nginx-sticky-module为 nginx 的第三方模块,使 nginx 支持 sticky 模式,所以需要将包加入配置、重新编译、安装nginx
1.重新源码安装nginx添加一个模块
[root@server1local]# nginx -s stop #关闭nginx
[root@server1mnt]# tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz #解压
[root@server1mnt]# ls
nginx-1.8.1.tar.gz
nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d
nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz
[root@server1nginx-1.8.1]# make clean #清除上一次的缓存文件
rm-rf Makefile objs
[root@server1nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx #重新配置--with-http_ssl_module--with-http_stub_status_module--add-module=/mnt/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d
[root@server1nginx-1.8.1]# make #编译、链接
[root@server1nginx-1.8.1]# make install #安装
[root@server1nginx-1.8.1]#cd /usr/local/lnmp/nginx/conf
[root@server1conf]# vim nginx.conf
18 upstream westos{
19 sticky; #使用sticky
20 server 172.25.29.2:8080;
21 server 172.25.29.3:8080;
[root@server1local]# nginx -t #检测nginx文件里是否有错误
nginx:the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx:configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
[root@server1local]# nginx #启动
2.测试
测试 172.25.29.1/test.jsp
刷新之后结果不变还是
4交叉存储避免单点故障添加memcached服务端2
配置好之后如果一台服务器宕机了那么这台服务器正在运行的业务将直接结束正在存储的数据丢失。为了防止这些问题Tomcat1将session存储到Tomcat2的memcached中当Tomcat2的memcached不可用时Tomcat1将session存储到自己的memcached上Tomcat2则正好相反。使用这种配置就避免了单点故障。
1.安装、开启memcached、写测试页
[root@server2ROOT]# yum install -y memcached #安装memcached
[root@server2ROOT]# /etc/init.d/memcached start #开启memcached
Startingmemcached: [ OK ]
[root@server2tomcat]# bin/shutdown.sh #关闭Tomcat
[root@server2ROOT]# vim test.jsp #写一个jsp的测试页面
1 <%@ page contentType="text/html;charset=GBK" %>
2 <%@ page import="java.util.*"%>
3<html><head><title>Cluster AppTest</title></head>
4 <body>
5 Server Info:
6 <%
7 out.println(request.getLocalAddr() + ": " + request.getLocalPort()+"<br>");% >
8 <%
9 out.println("<br> ID " + session.getId()+"<br>");
10 String dataName =request.getParameter("dataName");
11 if (dataName != null &&dataName.length() > 0) {
12 String dataValue =request.getParameter("dataValue");
13 session.setAttribute(dataName, dataValue);
14 }
15 out.print("<b>Sessionlist</b>");
16 Enumeration e =session.getAttributeNames();
17 while (e.hasMoreElements()) {
18 String name = (String)e.nextElement();
19 String value =session.getAttribute(name).toString();
20 out.println( name + " = " +value+"<br>");
21 System.out.println( name + " = "+ value);
22 }
23 %>
24 <form action="test.jsp"method="POST">
25 name:<input type=text size=20name="dataName">
26 <br>
27 key:<input type=text size=20name="dataValue">
28 <br>
29 <input type=submit>
30 </form>
31 </body>
32 </html>