0.環(huán)境準(zhǔn)備:
centos7.2,nginx-1.10.1,apache-tomcat-8.5.16 *2
1.nginx安裝拱镐;
可以直接yum install nginx 油湖,也可以wget?http://nginx.org/download/nginx-1.13.12.tar.gz
tar zxvf nginx.tar.gz;
解壓后如圖连茧;
./configure&&make&&make install,安裝nginx巍糯,成功后如圖:
個(gè)人習(xí)慣拷貝sbin下的nginx可執(zhí)行文件到外面 方便執(zhí)行:cp sbin/nginx ./startnginx
然后寫個(gè)腳本用來(lái)關(guān)閉nginx:
很簡(jiǎn)單的幾句話啸驯,分別是ps -ef 查進(jìn)程,awk截取進(jìn)程id祟峦,然后kill掉
2.安裝tomcat
這邊省略安裝步驟罚斗,在tomcat的webapps/ROOT下更改index.jsp ,給2個(gè)tomcat不同標(biāo)識(shí)宅楞,比如tomcat1针姿,tocmat2這樣,然后啟動(dòng)兩個(gè)tomcat(自行更改端口等)
3.使用nginx做反向代理
nginx做單個(gè)tomcat代理:
上面配置即厌衙,監(jiān)聽80端口距淫,當(dāng)訪問路徑匹配到pro,則代理到本機(jī)9999端口的pro項(xiàng)目婶希;
nginx做多臺(tái)tomcat代理
這邊需要使
用一個(gè)http節(jié)點(diǎn)下的屬性叫upstream榕暇,如圖:
然后我們就可以將訪問請(qǐng)求代理到這個(gè)upstream,
當(dāng)請(qǐng)求到達(dá)nginx 喻杈,則會(huì)分發(fā)到upstream彤枢,從而實(shí)現(xiàn)負(fù)載均衡。
這么看來(lái)nginx的tomcat負(fù)載實(shí)現(xiàn)要比apache容易的多筒饰,但是這邊集群重要的問題:session共享沒有解決
4.springboot钉汗,redis實(shí)現(xiàn)session共享
加入依賴
在application.properties中加入redis連接配置:
spring.redis.hostName=localhost
spring.redis.port:6379?
spring.redis.password:bc3b50ed11cf496027ace0bda20b53e1694639fca14d405b44503e57e52ce397?
spring.redis.pool.max-active: 8
spring.redis.pool.max-wait: -1
spring.redis.pool.max-idle: 8
spring.redis.pool.min-idle: 0
新建RedisConfig.java,創(chuàng)建redistemplate實(shí)例
package com.zz.utils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
@EnableAutoConfiguration
@EnableRedisHttpSession
public class RedisConfig {
private static Logger logger = Logger.getLogger(RedisConfig.class);
@Value("${spring.redis.hostName}")
private String host;
@Value("${spring.redis.password}")
private String password;
@Bean
@ConfigurationProperties(prefix = "spring.redis.pool")
public JedisPoolConfig getRedisConfig() {
JedisPoolConfig config = new JedisPoolConfig(); return config; }
@Bean
public JedisConnectionFactory getConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setHostName(host);
factory.setPassword(DES3.decrypt(password));
factory.setUsePool(true);
JedisPoolConfig config = getRedisConfig();
factory.setPoolConfig(config);
logger.info("JedisConnectionFactory bean init success.");
return factory; }
@Bean
public RedisTemplate getRedisTemplate() {
JedisConnectionFactory factory = getConnectionFactory(); logger.info(this.host+","+factory.getHostName()+","+factory.getDatabase()); logger.info(this.password+","+factory.getPassword()); logger.info(factory.getPoolConfig().getMaxIdle()); RedisTemplate template = new StringRedisTemplate(getConnectionFactory()); return template; }}
這邊注解@EnableRedisHttpSession用來(lái)開啟spring session支持
然后我們來(lái)驗(yàn)證session共享是否生效:
偷懶不想寫頁(yè)面洒沦,在controller里寫2個(gè)方法诵叁,一個(gè)setsession冈欢,一個(gè)get:
@ResponseBody
@RequestMapping("test")
public String test(HttpServletRequest req) {
req.getSession().setAttribute("123123","asdasd"); return "success";
}
@ResponseBody
@RequestMapping("test2")
public String test2( HttpServletRequest req) {
String s = (String) req.getSession().getAttribute("123123");
System.out.println("-------------------------"+s); return s;
}
這樣我們只要訪問test,然后訪問test2看日志便可知道session共享是否實(shí)現(xiàn)谬晕,運(yùn)行如圖所示式镐,2個(gè)服務(wù)日志輪流打印: