1、安装jdk:
下载:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
// 1、获取到下载链接,直接在虚拟机中下载
wget https://download.oracle.com/otn/java/jdk/8u281-b09/89d678f2be164786b292527658ca1605/jdk-8u281-linux-x64.tar.gz
或者:
yum search java|grep jdk // 找到可以安装的jdk
yum install 上面命令jdk名称
或者
rpm -ivh 下载的jdk
// 2、解压
tar -zxvf jdk-8u281-linux-x64.tar.gz
// 3、配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_281
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
// 4、使配置生效
source /etc/profile
2、安装reids
下载: https://download.redis.io/releases/
2.1单节点redis
// 1、检查gcc
gcc -v
// 安装gcc
yum install gcc-c++
// redis6版本,gcc的版本需高于5.3, 升级gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
#注意:scl命令启用只是临时的,推出xshell或者重启就会恢复到原来的gcc版本。
#如果要长期生效的话,执行如下:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
// 1、下载redis-6.2.1
// 2、编译
cd /usr/local/redis-6.2.1 && make
// 3、安装redis
cd /usr/local/redis-6.2.1
mkdir redis
chmod 775 redis
make install PREFIX=/usr/local/redis // 指定目录安装
// 4、修改redis为后台启动(守护模式)
cp /usr/local/redis-6.2.1/redis.conf /usr/local/redis // 将配置文件中daemonize 值为yes
// 5、启动redis
./usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
// 6、打开redis连接,
./redis-cli 或./redis-cli -c -p 6379
ping // 出现PONG说名启动成功
2.2 redis集群
1、redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
2、要保证集群的高可用,需要每个节点都有从节点,也就是备份节点3、reids版本>5.xxx后,不需要安装ruby,可以直接使用redis-cli搭建集群。对于低版本的redis,在使用集群方式部署时,redis官方提供了redis集群方式的工具:redis-trib.rb,位于xxx/redis-5.0.3/src目录下,它是用ruby写的一个程序,所以需要集群方式部署redis之前,需要安装Ruby环境。
1、创建redis-cluster,将redis复制到此目录下
mkdir -p /usr/local/redis-cluster
cp /usr/local/redis/bin/ /usr/local/redis-cluster/redis-7001
cp /usr/local/redis/bin/ /usr/local/redis-cluster/redis-7001
...
另外三台虚拟机做同样操纵
2、删掉快照文件
rm -rf /usr/local/redis/bin/dump.rdb
3、修改配置文件redis.conf
port 7001
bind 172.20.10.12 #主机IP
requirepass 123456 #密码
daemonize yes #守护进程(后台启动)
pidfile /var/run/redis_7001.pid
cluster-enabled yes #开启集群
cluster-config-file nodes_7001.conf #集群配置文件名
cluster-node-timeout 15000 #集群节点之间多少毫秒无法连接后判定节点挂掉
appendonly no #持久化
dir ./data/ #数据存储目录
logfile ./redis.log #日志存储目录
4、每台服务器上按照第三步配置,修改成对应服务器ip和redis端口
5、制作启动脚本
vi cluster_start.sh
cd redis-7001
./redis-server redis.conf
cd ../redis-7002
./redis-server redis.conf
6、制作关闭脚本
vi cluster_stop.sh
pgrep redis-server | xargs -exec kill -9
7、设置防火墙,开放7001,7002端口
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=7002/tcp --permanent
firewall-cmd --zone=public --add-port=17001/tcp --permanent
firewall-cmd --zone=public --add-port=17002/tcp --permanent
firewall-cmd --permanent --zone=public --list-ports #查看
firewall-cmd --reload
注意:redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口
集群总线端口为redis客户端连接的端口 + 10000
如redis端口为6379
则集群总线端口为16379
故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口
总线端口一定要放开,不然会一直停留在 Waiting for the cluster to join ....阶段,也不会报错
8、创建redis集群
// --replicas 1 表示每个主数据库拥有从数据库个数为1。前3个代表3个master,后3个代表3个slave。通过该方式创建的带有从节点的机器不能够自己手动指定主节点
./redis-cli --cluster create 192.168.1.5:7001 192.168.1.6:7001 192.168.1.7:7001 192.168.1.5:7002 192.168.1.6:7002 192.168.1.7:7002 --cluster-replicas 1
9、查看集群信息
./redis-cli -c -h 192.168.1.5 -p 7001
cluster info
cluster nodes
10、测试
登录集群内任意redis
./redis-cli -c -h 192.168.1.5 -p 7001
set key1 val1
./redis-cli -c -h 192.168.1.7 -p 7002
get key1 # 得到结果: val1
3、安装nginx
3.1 gcc
GCC编译器是Linux下最常用的C/C++编译器,它以gcc命令的形式呈现
gcc -v
yum install gcc c++ // 未检测到版本信息则用此命令在线安装
3.2 PCRE
PCRE(Perl Compatible Regular Expressions)是一个轻量级的Perl函数库,包括 perl 兼容的正则表达式库。它比Boost之类的正则表达式库小得多。PCRE十分易用,同时功能也很强大,性能超过了POSIX正则表达式库和一些经典的正则表达式库。
rpm -qa pcre // 检测是否安装,已安装会显示版本号
yum install -y pcre pcre-devel // 未安装则在线安装
3.3 zlib
zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。截至2007年3月,zlib是包含在Coverity的美国国土安全部赞助者选择继续审查的开源项目。zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
rpm -qa zlib
yum install -y zlib zlib-devel
3.4 OpenSSL
openssl是多功能命令工具,用于生成密钥,创建数字证书,手动加密解密数据。nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
rpm -qa openssl
yum install -y openssl openssl-devel
3.5 安装nginx
下载离线安装包,ftp上传到服务器
cd /usr/local
tar -xzvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure // 进入nginx解压包根目录,执行配置命令
make // 编译
make install //安装
安装过程中,会打印出安装的目录及配置文件目录
3.6 启动nginx
cd /usr/local/nginx/sbin
./nginx // 启动,默认端口80
./nginx -s stop //停止
./nginx -s reload //重启
ps -ef | grep nginx // 如果能看到两个相邻ID的进程,说明启动成功
启动成功后,用浏览器访问,会进入下面这个页面, 如:192.168.1.5:80 (80可以省略)
此处如果进入不了此页面,检查服务器防火墙有没有开发80端口:
firewall-cmd --permanent --list-ports // 查看防火墙开放的端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
/usr/local/nginx/conf/nginx.conf配置文件说明:
#user nobody; // 所属用户,搭建环境测试时可以改成root,防止出现一些501之类的相应
worker_processes 1; #工作进程:数目。根据硬件调整,通常等于cpu数量或者2倍cpu数量。
#错误日志存放路径
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; # nginx进程pid存放路径
events {
worker_connections 1024; # 工作进程的最大连接数量
}
http {
include mime.types; #指定mime类型,由mime.type来定义
default_type application/octet-stream;
# 日志格式设置
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main; #用log_format指令设置日志格式后,需要用access_log来指定日志文件存放路径
sendfile on; #指定nginx是否调用sendfile函数来输出文件,对于普通应用,必须设置on。
如果用来进行下载等应用磁盘io重负载应用,可设着off,以平衡磁盘与网络io处理速度,降低系统uptime。
#tcp_nopush on; #此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用
#keepalive_timeout 0; #keepalive超时时间
keepalive_timeout 65;
#gzip on; #开启gzip压缩服务
#虚拟主机, 可以有多个
server {
listen 80; #配置监听端口号
server_name localhost; #配置请求服务的主机名、域名或者连接,可以有多个,用空格隔开
#charset koi8-r; #字符集设置
#access_log logs/host.access.log main; # 运行日志的打印位置,main为日志输出格式,在上面的log_format处定义
location / { # 请求过滤重定向,可以有多个
root html;
index index.html index.htm;
}
#错误跳转页
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
# root html; #根目录
# fastcgi_pass 127.0.0.1:9000; #请求转向定义的服务器列表
# fastcgi_index index.php; # 如果请求的Fastcgi_index URI是以 / 结束的, 该指令设置的文件会被附加到URI的后面并保存在变量$fastcig_script_name中
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl; #监听端口
# server_name localhost; #域名
# ssl_certificate cert.pem; #证书位置
# ssl_certificate_key cert.key; #私钥位置
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5; #密码加密方式
# ssl_prefer_server_ciphers on; # ssl_prefer_server_ciphers on; #
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
搭建Ruoyi前后端分离项目时的配置:
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream ruoyi {
server 192.168.1.6:8080 weight=5;
server 192.168.1.7:8080 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
root /opt/workspace/ruoyi-ui/dist;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_pass http://ruoyi/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}