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)