centos环境配置记录

(Tomcat + MySQL + Redis的配置,以及连通性测试)

写在前面:
其实大概半年前就已经配置好了Tomcat跟MySQL,项目也部署好了,能够正常的运行。但自从8月底的时候加上了redis,就开始出现了问题。从那时候开始,服务器的CPU一直停留在100,似乎是MySQL与Redis之间出现了冲突。但我当时装了好了Redis,大概只是简单学习了几天就搁置了,所以等到我意识到服务器出现问题的时候,已经是9月下旬的时候了。(中途域名拿去网站备案了,所以项目也是一直搁置的。但中途在研究MySQL的锁机制的时候,确实已经觉得服务器出现了问题,时不时会掉线)对于问题的排查,持续了一整天都没有解决,使用TOP命令,会发现CPU idle space是0,要么是0,要么是100,两个数字之间刷新,但下面的所有进程,就没有CPU超过5%的进程。除了top,诸如netstat,vmstat,df -h,uptime,等等的各种命令都尝试过了,还是没有找出问题。倒是发现在/var/crash中出现了高达25G的系统崩溃碎片,删除了也未果。甚至,一怒之下把这个基础的服务器升级了(1核2G,直接升级为4核8G),结果还是显示100。。说实话,我就那么一个项目,能够把这种升级后的配置也用到CPU100,唯一的可能也只是出现了deadlock了吧。但我排查了许久都失败了,服务器上的数据库也崩溃了无法访问,而且我对于数据库也没有备份的习惯(以后一定要对数据库进行定时备份)。导致只好先对这个出了问题的系统进行snapshot,等待以后需要那部分数据,或者有时间的时候,再回去排查问题吧,至少也要把那部分数据拿回来。
然后呢,就是直接把系统重装了,那么就需要重新配置一遍环境。其实因为之前配置这三个的时候都比较轻松,所以心里觉得应该很快能解决的。但没想到遇到了各种各样的问题,所以这次把整个成功的配置过程都写出来记录,包括中间出现了错误如何解决等等。

最后,在不同的系统之间,在不同的软件安装包之间,都存在差异,而这种差异可能会导致安装的时候也会面临不同的问题,所以仅供参考本文列出的服务器系统版本,以及安装包的版本。
本文的主要内容:安装Tomcat,MySQL,Redis的过程,本地连接访问Tomcat,MySQL,Redis的过程。Spring项目整合MySQL并发布的过程(Redis目前只做了连通性测试,还没有整个到项目中)
服务器系统版本:CentOS 7.6 64位

step1:服务器安装Tomcat并在本地执行连通性测试
这一步其实很简单,但我当中出现了一个比较stupid的错误,导致也卡了很久。总的步骤也很简单:到官网下载RPM包,解压,进入bin目录执行startup.sh即可启动Tomcat,然后在本地进行连通性测试(也就是打开xxx.xxx.xx.xx:8080看是否会出现初始页面而已)。
安装完了之后,我还想把tomcat放到Linux的系统服务中(也就是把tomcat的启动脚本拷贝一份放到/etc/init.d/中,然后进行一系列操作诸如chkconfig命令等等),但我尝试过了之后失败了,想想其实服务器也很少关闭,而且只要记住Tomcat的路径就好,我的是放在/usr/local/tomcat下,想处理的时候直接进去该目录执行相关的.sh脚本就好。于是这部分pass。
然后连通性分析,第一次的时候就失败了。然后网上都说开通端口,防火墙配置等等的就好,这部分也不难,很快就解决了,在本地也成功看到了Tomcat的初始页面。
接下来关键的点就来了,我把本地的war项目复制到了webapps文件夹下,然后关闭tomcat之后重新执行,发现连初始页面都看不到了。当时可能比较晚了,所以我也没想清楚,通过netstat,ps等命令发现tomcat的关闭,开启都存在问题,于是觉得可能还是端口的问题等等的。通过了一顿蜜汁操作之后还是无法访问。当时都怀疑人生了(为什么刚刚还能访问初始页面,突然就不行了?沃不服!)然后到了第二天再redo一次才顿悟,应该是war出现了问题,所以tomcat的开启跟关闭出现了错误,然后才导致了初始页面也无法访问的情况(因为之前的war一直是可以访问的,所以也没考虑这一点)。所以我把webapps下的war给删掉了,包括war解压后的文件夹,再restart一次tomcat,发现确实就可以访问初始页面了。所以:如果tomcat可以正常开启,但加入了错误的war之后,是会导致tomcat也出错的(我开始以为应该是其他项目会可用,只有该自定义war不可用才对,但事情并不是如此)。出错原因也很显然,服务器重装了,MySQL也没了,那么项目指向了MySQL就无法访问了,自然也就全部出错了。所以我得先把MySQL安装好,然后再在本地的项目连通数据库,到时候再进行打包,放置到webapps下,应该就可以成功运行了。


step2:服务器安装MySQL并且在本地执行连通性分析
我是参照这一篇文章来执行的:https://blog.csdn.net/u013541411/article/details/89516575
其实安装MySQL应该也是一个很简单的流程,但因为第一天的时候,被Tomcat的错误搞到不明所以,还以为是MySQL的问题,也进行了很多无用的排查。所以问题的定位也是非常的关键。
但还好这篇文章确实还是可行的,除了在安装server的时候其实还要安装一个其他的软件,但问题不大。错误信息CV一下,答案就出来了。
然后本地连通性,排查了好久都不行,最后才发现,是服务器的安全组没有开通3306端口号。第一天的时候很轻松就连通了,因为当时还没有设置安全组。之后安全组设置了开放3306端口号之后就成功了连通。然后对项目执行了连通性测试,也是可行的。再打包,放置到webapps,成功执行。


step3:服务器安装Redis并且在本地执行连通性分析
参照文章:https://www.cnblogs.com/zuidongfeng/p/8032505.html
这篇文章是确实可行的,唯一要注意的点是,它的当前目录并不是root,而且存在变化,要看清楚。比如第一条命令是在/usr/local下执行的,如果在root下执行,还得对tar指定解压路径。
关于安装到系统服务:第一次的时候我是在root下面tar的,导致有点乱。于是我删掉了重来,第二次在usr/local下开始执行,最后一步差点就成功了。在使用systemctl status redisd查看的时候,发现状态是active(exited),这种其实有点贼,虽然算是启动成功,但其实跟失败没有区别,所以千万不要看到绿色就觉得是no problems。当然了,在status下面可以看到错误信息:
/var/run/redis_6379.pid exists, process is already running or crashed
这个的原因是,如果redis没有正确的关闭(比如直接rm -rf,kill -9等等),那么该文件还是会存在的,导致第二次执行的时候就会出错。这时候要做的也是很简单,先stop/kill等等,再删掉:
rm -rf /var/run/redis_6379.pid
然后再start,执行status查看,状态改成了active(running),看来是成功执行了,那么使用redis-cli测试一下,确实可行。
接下来对redis增加密码,也是出错了许久。其实添加密码都不难,但是在restart / stop, start的时候都出现了问题。无论是restart还是stop,命令都会卡住,只能ctrl + C。那么显然,就是Redis没有正确关闭了,于是就又会出现上面的问题,又要再rm一次。关键是再次成功启动,发现密码还是没有。仔细一想才明白,上面那篇文章,conf文件并不是redis文件夹下的conf,而是拷贝了一个副本,存到了/etc/redis中,名为6379.conf,所以我们需要改的是6379.conf的内容,也不是Redis文件夹下的redis.conf。改了之后,确实就成功添加了密码。而且还有一点很关键,添加了密码之后,Redis的关闭是存在问题的。比如之前没有密码,直接systemctl stop redisd即可,而有了密码就不能直接这样。这时候我们需要先进入redis-cli,auth(已经有了密码),然后执行:shutdown。在redis-cli里关闭Redis连接,然后quit回到命令行,最后再执行systemctl stop redisd。这时候我们就能成功地退出,然后start也可以成功执行,密码也成功添加了。(退出redisd服务前先进入redis-cli执行shutdown)
(或者直接: redis-cli shutdown)
最后是连通性分析,也是折腾了许久。首先是给安全组增加6379端口,还有各种防火墙配置,开放端口等等,发现都不行。最后是参考这篇文章的第二点:https://www.jianshu.com/p/2fa4622fc1d3
在配置文件里,默认只能本地访问(127.0.0.1),把该行注释掉,就成功连通了。

直到这里,三个服务都成功配置,并且能够连通。


step4: URL路径简化
其实主要就是tomcat的配置文件罢了。之前一直偷懒,感觉能这样就这样,直到今天一定要改,才去花时间搞好了。所幸也不难,估计也就花了一个小时,但还是记录一下。
首先就是端口号,web一般默认都是80端口,直接把项目的端口号改为80,就不需要端口了。当然,应该是可以换端口号,然后设置其他默认端口号的,懒得深究。
接着就是省略项目名,其实对于docBase跟appBase我还是不太懂,目前来看,大概就是。appBase就是项目解压的路径,也就是tomcat就是从这里面寻找项目的。然后docBase就是我们想要的,增加了一个Context标签,附上docBase属性,就使得默认项目是webapps/xxx,而不是webapps
最后就是默认的主页,其实我也知道是welcome-list,可是有点奇怪的是,我在最上面写了我的目的网址,可他还是优先访问最下面的index.jsp。不是很懂这个优先级,最后直接索性把下面的全部注释掉,只留下我的mainPage.html。然后也成功了,最后,只需要输入自己的域名,就能直接进入我的网站主页。


总结:最关键的还是要懂得原理。处理Redis问题的时候显然比前两者快,因为真的动脑子了。
一开始修改了redis.conf,发现redis-cli里根本没有改变密码,然后联想到启动redis的脚本(也就是拷贝到/etc/init.d/的redisd脚本),原本应该是要指定配置参数的,但并不需要,应该是直接写到了代码里。于是查看了一下脚本的代码,才意识到,代码里的conf并不是redis.conf,然后就修改了正确的conf文件。

-------------本文结束感谢您的阅读-------------