环境描述:虚拟机准备两台,一台作为nginx服务器+mysql服务器,IP为:192.168.20.68;另外一台作为2台Tomcat服务器,IP为:192.168.20.69。客户端发来请求,首先由nginx处理,如果为静态内容直接由nginx响应,将结果直接给客户端;如果为动态内容,则由nginx反代至后端的Tomcat服务器。
一、优化步骤
1.1. 配置yum仓库
rm -f /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
1.2. 安装基础软件包
yum install net-tools vim tree htop iftop \
iotop lrzsz sl wget unzip telnet nmap nc psmisc \
dos2unix bash-completion bash-completion-extras sysstat \
rsync nfs-utils httpd-tools -y
1.3.关闭防火墙firewalld
systemctl disable firewalld
systemctl stop firewalld
1.4. 关闭selinux
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
1.5. 调整单个进程最大能打开文件的数量
echo '* - nofile 65535' >> /etc/security/limits.conf
2. 基于优化后的虚拟机进行克隆
连接克隆(需要依赖于母体)
完整克隆(完完全全的复制一份,占用磁盘空间)
2.1. 对新克隆后的主机进行如下操作:
修改主机名 hostnamectl set-hostname backup
修改IP地址 sed -i 's#200#41#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
删除UUID:sed -i '/UUID/d' /etc/sysconfig/network-scripts/ifcfg-eth[01]
重启服务器
3.密钥对的生成
ssh-keygen
3.1. 一键非交互式创建密钥(可用于自动化部署的)的方法
ssh-keygen -t dsa -P '' -f ~/.ssh/id_rsa > /dev/null 2>&1
或
echo -e "\n" | ssh-keygen -t dsa -N ""
3.2.分发公钥
ssh-copy-id -i ~/.ssh/id_rsa.pub IP
//在IP为192.168.20.68的服务器上安装和配置nginx关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
二、创建系统用户nginx
useradd -r -M -s /sbin/nologin nginx
1.1. 安装依赖环境
yum -y install pcre-devel openssl openssl-devel gd-devel
yum -y groups install 'Development Tools'
1.2. 创建日志存放目录
mkdir -p /var/log/nginx
chown -R nginx.nginx /var/log/nginx/
1.3. 下载nginx
cd /usr/src/
[root@server src]# wget http://nginx.org/download/nginx-1.14.0.tar.gz
1.4. 编译
[root@server ~]# cd /usr/src/
[root@server src]# ls
debug kernels nginx-1.14.0.tar.gz
[root@server src]# tar xf nginx-1.12.0.tar.gz
[root@server src]# cd nginx-1.14.0
[root@server nginx-1.14.0]# ls
auto CHANGES.ru configure html man src
CHANGES conf contrib LICENSE README
[root@server nginx-1.14.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log
1.5. 安装
[root@server nginx-1.14.0]# make -j 2 && make install
1.6. nginx安装后配置配置环境变量
[root@server nginx-1.14.0]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@server nginx-1.14.0]# source /etc/profile.d/nginx.sh
//注:
[root@nginx-server nginx-1.12.0]# echo $PATH
/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
1.7. 启动nginx
[root@server nginx-1.14.0]# nginx
[root@server nginx-1.14.0]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
三、安装mysql
1.1. 安装依赖包
[root@server ~]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel
1.2. 创建用户和组
[root@server ~]# groupadd mysql
[root@server ~]# useradd -r -g mysql -s /sbin/nologin mysql
1.3. 下载二进制格式的mysql软件包
[root@server ~]# cd /usr/src/
[root@server src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
1.4. 解压软件至/usr/local
[root@server src]# tar xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@server src]# cd /usr/local/
[root@server local]#ln -sv mysql-5.7.32-linux-glibc2.12-x86_64/ mysql
mysql -> mysql-5.7.32-linux-glibc2.12-x86_64/
[root@server local]# ll
lrwxrwxrwx. 1 root root 36 9月 6 17:30 mysql -> mysql-5.7.22-linux-glibc2.12-x86_64/
1.5. 修改目录/usr/local/mysql的属主属组
[root@server local]# chown -R mysql.mysql /usr/local/mysql
[root@server local]# ll /usr/local/mysql -d
lrwxrwxrwx. 1 mysql mysql 36 9月 6 17:30 /usr/local/mysql -> mysql-5.7.22-linux-glibc2.12-x86_64/
1.6. 添加环境变量
[root@server local]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@server local]# source /etc/profile.d/mysql.sh
[root@server local]# echo $PATH
/usr/local/mysql/bin:/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
1.7. 建立数据存放目录
[root@server local]# mkdir -p /opt/data
[root@server local]# chown -R mysql.mysql /opt/data/
[root@server local]# ll /opt/
总用量 0
drwxr-xr-x. 2 mysql mysql 6 9月 6 17:34 data
1.8. 初始化数据库
[root@server local]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/
1.9. 配置mysql
[root@server local]# ln -sv /usr/local/mysql/include/ /usr/local/include/mysql
"/usr/local/include/mysql" -> "/usr/local/mysql/include/"
[root@server local]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
[root@server local]# ldconfig -v
1.10. 生成配置文件
[root@mysql-server local]# cp /etc/my.cnf /etc/my.cnf.bak
[root@server local]# cat > /etc/my.cnf <<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
EOF
1.11. 配置服务启动脚本
[root@server local]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@server local]# sed -ri 's#^(basedir=).*#\1/usr/local/mysql#g' /etc/init.d/mysqld
[root@server local]# sed -ri 's#^(datadir=).*#\1/opt/data#g' /etc/init.d/mysqld
1.12. 启动mysql
[root@server local]# service mysqld start
Starting MySQL.Logging to '/opt/data/server.err'.
... SUCCESS!
[root@server local]# ps -ef | grep mysql
root 42077 1 0 17:57 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/opt/data --pid-file=/opt/data/mysql.pid
mysql 42255 42077 15 17:57 pts/2 00:00:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/opt/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=server.err --pid-file=/opt/data/mysql.pid --socket=/tmp/mysql.sock --port=3306
root 42291 4672 0 17:57 pts/2 00:00:00 grep --color=auto mysql
[root@server local]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 80 :::3306 :::*
1.13. 修改密码,使用临时密码登录
[root@server local]# mysql -uroot -p
Enter password:
mysql> set password = password('server123');
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> \q
Bye
四、Tomcat安装
//在虚拟机配置两台tomcat项目部署
1. 关闭防火墙和selinux
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# setenforce 0
[root@server ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
2. Java环境安装
2.1. 安装jdk环境
https://blog.csdn.net/ajavaer/article/details/85107097?ops_request_misc=&request_id=&biz_id=102&utm_term=lnmt+redis&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-.pc_search_result_before_js&spm=1018.2226.3001.4187
[root@server ~]# mkdir /home/java/jdk
[root@server home]# cd /home/java/jdk
2.2. 将压缩包进行解压
[root@server jdk]# tar -zxvf jdk-8u191-linux-i586.tar.gz
2.3. 进行环境配置
vi /etc/profile
export JAVA_HOME=/home/java/jdk/jdk1.8.0_201
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java -version
3. tomcat部署
3.1. 下载tomcat
[root@server ~]# cd /usr/src/
[root@server src]# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.29/bin/apache-tomcat-9.0.29.tar.gz
3.2. 创建tomcat存放目录
[root@server src]# cd /usr/local/
[root@server local]# mkdir tomacat{1,2}
[root@server local]# ls
bin games lib libexec sbin src tomacat2
etc include lib64 nginx share tomacat1
3.3. 将tomcat解压存放目录
[root@server local]# cd /usr/src/
[root@server src]# ls
apache-tomcat-9.0.8.tar.gz debug kernels
[root@server src]# tar xf apache-tomcat-9.0.8.tar.gz -C /usr/local/tomacat1
[root@server src]# tar xf apache-tomcat-9.0.8.tar.gz -C /usr/local/tomacat2
3.4. 创建软连接
[root@server src]# cd /usr/local/tomacat1
[root@server tomacat1]# ln -s apache-tomcat-9.0.8/ tomcat1
[root@server tomacat1]# ll
总用量 0
drwxr-xr-x. 9 root root 160 9月 5 21:52 apache-tomcat-9.0.8
lrwxrwxrwx. 1 root root 20 9月 5 21:54 tomcat1 -> apache-tomcat-9.0.8/
[root@server tomacat1]# cd /usr/local/tomacat2
[root@server tomacat2]# ln -s apache-tomcat-9.0.8/ tomcat2
[root@server tomacat2]# ll
总用量 0
drwxr-xr-x. 9 root root 160 9月 5 21:52 apache-tomcat-9.0.8
lrwxrwxrwx. 1 root root 20 9月 5 21:55 tomcat2-> apache-tomcat-9.0.8/
3.5. 创建测试目录并创建测试文件
[root@server ~]# mkdir /usr/local/tomacat1/tomcat1/webapps/test
[root@server ~]# mkdir /usr/local/tomacat2/tomcat2/webapps/test
[root@server ~]# cd /usr/local/tomacat1/tomcat1/webapps/test
[root@server test]# vi index.jsp
<html>
<head>
<title>test page</title>
</head>
<body>
<%
out.println("Hellow World");
%>
</body>
</html>
[root@server test]# cd /usr/local/tomacat2/tomcat2/webapps/test
[root@server test]# vi index.jsp
<html>
<head>
<title>test page</title>
</head>
<body>
<%
out.println("8888888888");
%>
</body>
</html>
3.6. 修改tomcat2的端口,否则端口起冲突。配置文件为:server.xml
[root@server ~]# cd /usr/local/tomacat2/tomcat2/
[root@server tomcat2]# ls
bin lib logs RELEASE-NOTES temp work
conf LICENSE NOTICE RUNNING.txt webapps
[root@server tomcat2]# cd conf/
[root@server conf]# ls
catalina.policy jaspic-providers.xsd tomcat-users.xsd
catalina.properties logging.properties web.xml
context.xml server.xml
jaspic-providers.xml tomcat-users.xml
[root@server conf]# vi server.xml
[root@server conf]# /usr/local//tomacat1/tomcat1/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomacat1/tomcat1
Using CATALINA_HOME: /usr/local/tomacat1/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomacat1/tomcat1/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomacat1/tomcat1/bin/bootstrap.jar:/usr/local/tomacat1/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@server conf]# /usr/local//tomacat2/tomcat2/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomacat2/tomcat2
Using CATALINA_HOME: /usr/local/tomacat2/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomacat2/tomcat2/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomacat2/tomcat2/bin/bootstrap.jar:/usr/local/tomacat2/tomcat2/bin/tomcat-juli.jar
Tomcat started.
//输入192.168.20.69:8080 访问
配置nginx
//输入192.168.20.69:8080/test 访问
//第二台tomcat
//输入192.168.20.69:8081访问
3.7. 在nginx配置文件修改配置文件,配置负载均衡和两个tomcat的反向代理
sendfile on;
keepalive_timeout 65;
upstream web { //添加此内容,实现负载均衡
server 192.168.228.30:8080;
server 192.168.228.30:8081;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~* \.(jsp|do)$ { \\添加此行内容,实现动静分离
proxy_pass http://web;
}
3.8. 检查语法并加载nginx
[root@server local]# vim /usr/local/nginx/conf/nginx.conf
[root@server local]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server local]# nginx -s reload
五、安装Redis
5.1. 下载redis安装包
[root@server ~]# mkdir /home/redis
[root@server ~]# cd /home/redis
[root@server redis]# wget http://download.redis.io/releases/redis-4.0.6.tar.gz
5.2. yum安装gcc依赖
yum install gcc
5.3. 解压压缩包
[root@server redis]# tar -xzvf redis-4.0.6.tar.gz
5.4. 编译安装
[root@server redis]# cd redis-4.0.6/
[root@server redis-4.0.6]# make MALLOC=libc
5.5. 将redis目录下的文件加到/usr/local/bin目录
[root@server redis-4.0.6]# cd src && make install
5.6. 修改redis的启动方式为后台启动,打开redis配置文件
[root@server redis-4.0.6]# vi /home/redis/redis-4.0.6/redis.conf
将
daemonize no
修改为
daemonize yes
5.7. 在配置文件redis.conf中,默认的bind 接口是127.0.0.1,也就是本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接,如果需要修改支持远程连接,则修改配置文件的bind 127.0.0.1改为bind 0.0.0.0
//修改完配置文件后,启动redis
cd /home/redis/redis-4.0.6/src
[root@server src]# ./redis-server ../redis.conf
------------当你发现自己的才华撑不起野心时,那就沉下心来学习吧!-------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构