簡介
負載均衡
負載均衡建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
負載均衡(Load Balance)其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務
session共享
Session 是客戶端與服務器通訊會話跟蹤技術,服務器與客戶端保持整個通訊的會話基本信息
由於負載均衡會把任務分攤到不同的機器上,因此當用戶進行頁面刷新時會從機器A跳轉到機器B,此時用戶所進行的所有操作數據可能會丟失,因此需要通過集羣的session共享機制來實現數據跟蹤
前期準備
準備Centos7服務器,同步系統時間,配置IP地址和hostname,關閉防火牆和selinux
安裝openjdk
[root@localhost ~]# yum install java -y
#查看安裝情況
[root@localhost ~]# java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
部署Nginx
從官網下載yum源並安裝Nginx
[root@localhost ~]# yum install nginx -y
部署redis
#yum安裝redis
[root@localhost ~]# yum install redis -y
#配置
#設定爲後臺守護進程方式運行
daemonize yes
#設定登錄密碼(可選)
masterauth "your_password"
#啓動服務
[root@localhost ~]# systemctl start redis
部署Tomcat集羣
部署tomcat1
從Tomcat官網下載Tomcat7壓縮包並解壓
[root@localhost ~]# tar -zxvf apache-tomcat-7.0.104.tar.gz -C /usr/local/tomcat-7
在/usr/local/tomcat-7/lib文件夾中添加三個jar包實現連接redis和session共享
commons-pool-1.6.jar
jedis-2.0.0.jar
tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar
配置服務啓動文件
[root@localhost ~]# vi /usr/lib/systemd/system/tomcat7.service
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/usr/local/tomcat-7/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/local/tomcat-7
Environment=CATALINA_BASE=/usr/local/tomcat-7
ExecStart=/usr/local/tomcat-7/bin/startup.sh
ExecStop=/usr/local/tomcat-7/bin/shutdown.sh
User=root
Group=root
[Install]
WantedBy=multi-user.target
配置redis緩存
[root@localhost ~]# vi /usr/local/tomcat-7/conf/context.xml
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!--配置Redis緩存-->
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="127.0.0.1"
port="6379"
#redis有設置密碼登錄則需要填寫密碼
password="your_password"
database="0"
maxInactiveInterval="60" />
</Context>
編寫讀取redis緩存文件
[root@localhost ~]# vi /usr/local/tomcat-7/webapps/ROOT/session.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>shared session</title>
</head>
<body>
<br>session id=<%=session.getId()%>
<br>tomcat 1
</body>
</html>
啓動服務
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start tomcat7
部署tomcat2
#複製tomcat1文件夾
[root@localhost ~]# cp -r /usr/local/tomcat-7/ /usr/local/tomcat-7-8888/
修改配置文件
[root@localhost ~]# vi /usr/local/tomcat-7-8888/conf/server.xml
#修改三處端口號
<Server port="8015" shutdown="SHUTDOWN">
<Connector port="8888" protocol="HTTP/1.1"
<Connector protocol="AJP/1.3"
address="::1"
port="8019"
redirectPort="8443" />
配置服務啓動文件
[root@localhost ~]# vi /usr/lib/systemd/system/tomcat7-8888.service
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/usr/local/tomcat-7-8888/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/local/tomcat-7-8888
Environment=CATALINA_BASE=/usr/local/tomcat-7-8888
ExecStart=/usr/local/tomcat-7-8888/bin/startup.sh
ExecStop=/usr/local/tomcat-7-8888/bin/shutdown.sh
User=root
Group=root
[Install]
WantedBy=multi-user.target
修改讀取redis緩存的文件
[root@localhost ~]# vi /usr/local/tomcat-7-8888/webapps/ROOT/session.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>shared session</title>
</head>
<body>
<br>session id=<%=session.getId()%>
<br>tomcat 2
</body>
</html>
修改主頁顯示以示區分
[root@localhost ~]# vi /usr/local/tomcat-7-8888/webapps/ROOT/index.jsp
<span id="nav-home"><a href="${tomcatUrl}">Home-7-8888</a></span>
啓動服務
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start tomcat7-8888
部署tomcat3
#複製tomcat1文件夾
[root@localhost ~]# cp -r /usr/local/tomcat-7/ /usr/local/tomcat-7-9999/
修改配置文件
[root@localhost ~]# vi /usr/local/tomcat-7-9999/conf/server.xml
#修改三處端口號
<Server port="8025" shutdown="SHUTDOWN">
<Connector port="9999" protocol="HTTP/1.1"
<Connector protocol="AJP/1.3"
address="::1"
port="8029"
redirectPort="8443" />
配置服務啓動文件
[root@localhost ~]# vi /usr/lib/systemd/system/tomcat7-9999.service
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/usr/local/tomcat-7-9999/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/local/tomcat-7-9999
Environment=CATALINA_BASE=/usr/local/tomcat-7-9999
ExecStart=/usr/local/tomcat-7-9999/bin/startup.sh
ExecStop=/usr/local/tomcat-7-9999/bin/shutdown.sh
User=root
Group=root
[Install]
WantedBy=multi-user.target
修改讀取redis緩存的文件
[root@localhost ~]# vi /usr/local/tomcat-7-9999/webapps/ROOT/session.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>shared session</title>
</head>
<body>
<br>session id=<%=session.getId()%>
<br>tomcat 3
</body>
</html>
修改主頁顯示以示區分
[root@localhost ~]# vi /usr/local/tomcat-7-9999/webapps/ROOT/index.jsp
<span id="nav-home"><a href="${tomcatUrl}">Home-7-9999</a></span>
啓動服務
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start tomcat7-9999
配置Nginx負載均衡
[root@localhost ~]# vi /etc/nginx/conf.d/default.conf
#配置tomcat集羣
upstream serverpool{
#默認情況下通過輪詢方式來調用tomcat集羣
server localhost:8080;
server localhost:8888;
server localhost:9999;
}
#配置服務
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://serverpool/;
}
}
啓動服務
[root@localhost ~]# systemctl start nginx
測試驗證
驗證負載均衡
瀏覽器訪問http://ip
點擊刷新
再次點擊刷新
測試session共享
瀏覽器訪問http://ip/session.jsp
點擊刷新
再次點擊刷新
查看redis數據庫記錄
[root@localhost ~]# redis-cli
127.0.0.1:6379> auth "your_password"
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> keys *
1) "C13930F70F4B33537E99140CFEDAC637"