Nginx反向代理,负载均衡,redis session共享,keepalived高可用

Posted 夏蝉冬雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx反向代理,负载均衡,redis session共享,keepalived高可用相关的知识,希望对你有一定的参考价值。

 

nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换。

tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群。

redis服务器一台,用于session的分离共享。

nginx主服务器:         192.168.19.134

nginx备服务器bak:   192.168.19.135

redis服务器:            192.168.19.136

tomcat1项目服务器1: 192.168.19.137

tomcat2项目服务器2: 192.168.19.138

 

用winScp将jdk1.8传到2台tomcat服务器的/usr/local/中,然后对每台服务器进行

cd /usr/local/      #打开目录
tar -zxvf jdk-8u45-linux-x64.tar.gz    #解压

vi ~/.bashrc   配置环境变量

export JAVA_HOME=/usr/local/jdk1.8.0_45   如果jdk路径不同只将JAVA_HOME改变,其他的变量依赖于java_home,所有只需改动java_home的路径即可.
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH

source ~/.bashrc   #让环境变量生效
java -version       #检查是否安装成功
javac -version     ##检查是否安装成功

 

用winSCP将网上下载的Tomcat上传到/usr/local/

cd /usr/local/   #打开目录

tar -zxvf apache-tomcat-7.0.73.tar.gz #解压

cd apache-tomcat-7.0.73  进入目录
./bin/startup.sh      #启动Tomcat

 

vim /etc/sysconfig/iptables  

#设置防火墙,开通80和8080端口,如果想方便也可以直接关闭防火墙,但最好一个个设置,这里的配置重启后依然有效.

#在配置redis共享的时候,出了一些问题,然后我把防火墙暂时关了,免得影响测试.因为我不确定是否是防火墙的原因导致远程访问redis失败.这个后续再说.

#增加以下两条就可以开放两个端口

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 

service iptables restart  #编辑完防火墙后记得重启生效
service iptables stop  #单次关闭防火墙有效 ,重启失效
chkconfig iptables off #永远关闭防火墙

/etc/init.d/iptables stop  #或者是这样暂时关闭防火墙
/etc/init.d/iptables status #检查防火墙的状态

用eclise新建一个动态web工程,

打包成一个war包上传到tomcat目录中,用作测试

 

cd /usr/local/apache-tomcat-7.0.73/conf/  #进入Tomcat目录
vim server.xml    #编辑tomcat的配置文件,增加工程,加入jvmRoute用来给nginx做两台服务器的识别

         #在两台tomcat的server.xml文件,Host标签中添加:<Context path="" docBase="testproject"/>

         #,path标识访问路径,docBase为项目名,表示访问项目

 

 


 

好像仅仅新增也是可以的.138的直接新增

#重启tomcat
cd /usr/local/apache-tomcat-7.0.73
./bin/shutdown.sh   #关闭Tomcat

./bin/startup.sh  #启动Tomcat

 

没有启动Tomcat的时候是这样的:

 

 启动后的是这样的:

 

 把两台Tomcat装完后测试一下

测试成功,两天服务器成功安装完成.

然后聚焦到nginx的配置安装.

 

 为134 135 安装nginx

上传nginx到这两台服务器,安装的过程之前的博客有,不再说了,nginx的配置文件我花了两天一个个试........

以前装完总是403我都崩溃了啊啊,现在完全没问题了呀,大部分的配置都很容易了....入门花了好多力气的感觉....

cd /usr/local/nginx  
./sbin/nginx  #启动nginx的命令

./sbin/nginx -s stop #关闭命令

 

装完之后先访问ip看看是否能出现页面,如果没有的话一般是防火墙的问题.

然后在nginx.conf中配置反向代理

 

 

这些是必须配置的.

其中ip_hash的功能是

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

 

配置成功后访问nginx的ip可以访问到其中一台的Tomcat

初步完成了反向代理的功能

后续的静态图片访问等在nginx中的配置还需要实践一下

 

在136 安装redis

 安装过程参考博客

安装完成后配置

daemonize  no #为在前台运行,yes为在后台运行

bind 127.0.0.0 改为 bind 0.0.0.0

启动的时候需要


./src/redis-server redis.conf

 

带配置文件启动,不然读不到新配的配置文件,我在这个地方改了配置,但是在远程连接redis的时候总是提示失败

,感觉上似乎没有更改配置文件,在带配置文件启动后就可以远程访问了.在这个问题上我找了很久,找不到为什么远程访问不了.

 

 

tomcat与redis集成实现session共享:

在这里我遇到了包的错误,网上找的包很多都有问题,启动Tomcat的时候提示找不到类,

因为这个问题出现的时候redis还没有解决远程访问的问题,所以我一开始我以为是redis的问题,所以

就把防火墙先关闭了看看,然后问题依然存在.所以并不是这个问题.

后来想到应该先解决启动报错的问题先.所以一直在网上找,后台试了很多个答案后是不行

直到后来找到这个后把Tomcat中的包换掉后查看Tomcat日志看到能成功运行,问题解决.

链接:tomcat7和redis的sessoin共享问题处理

后来因为redis不能远程访问,所以在135(nginx+bak)的服务器上安装了redis,用来测试136 中redis的远程访问的问题

后来试了好多次

 

命令:

./src/redis-cli -h  192.168.19.136 -p 6379  -a test #远程访问redis,-a是加密码访问,需要在redis服务器上配置requirepass 密码

./src/redis-cli -p 6379 shutdown  #关闭

./src/redis-server  #启动,这里最好带配置文件启动,好像会有很怪异的问题

./src/redis-cli -h 192.168.19.136 -p 6379 #不带密码远程访问,

 

 我的过程是在135中尝试远程访问136,不断更改配置文件进行测试,直到成功,然后Tomcat也能正常访问了

测试:访问nginx后能出来138的页面,后来关掉138这台服务器后session没有变化,代表session已经缓存在redis上了

以上是关于Nginx反向代理,负载均衡,redis session共享,keepalived高可用的主要内容,如果未能解决你的问题,请参考以下文章

Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分

通过Nginx+tomcat+redis实现反向代理 负载均衡及session同步

Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第一部分(LAMP)

Nginx+Tomcat反向代理之负载均衡,redis存放session,keepalived暂未搭建

利用nginx自带的反向代理以及轮询功能实现应用的负载均衡

Nginx反向代理实现负载均衡配置图解