前后端集群搭建全流程

73次阅读
没有评论

前后端集群搭建全流程

前后端集群搭建全流程

环境准备

节点 ip 职责
db02 10.0.0.52/172.16.1.52 数据库 mysql-8.0
web01 10.0.0.7/172.16.1.7 前端 nginx
web02 10.0.0.8/172.16.1.8 前端 nginx
web03 10.0.0.9/172.16.1.9 后端 jdk+nginx+tomcat
web04 10.0.0.10/172.16.1.10 后端 jdk+nginx+tomcat
lb01 10.0.0.5/172.16.1.5 负载均衡 nginx+keepalived
lb02 10.0.0.6/172.16.1.6 负载均衡 nginx+keepalived

部署数据库

  • db02节点部署数据库

二进制安装mysql-8.0.28

[root@db02 ~]# ls mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 
mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz

mkdir -p /app/tools/  && mkdir -p /app/data/3306

tar -xvf mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz -C /app/tools/

ln -s /app/tools/mysql-8.0.28-linux-glibc2.12-x86_64 /app/tools/mysql

#安装依赖
yum install ncurses ncurses-devel libaio libaio-devel openssl openssl-devel openssh wget -y 

#添加虚拟用户
useradd -s /sbin/nologin -M mysql
#设置配置文件
cat >/etc/my.cnf<<EOF

[mysqld]

user=mysql basedir=/app/tools/mysql/ datadir=/app/data/3306/ port=3306 socket=/tmp/mysql.sock

[client]

socket=/tmp/mysql.sock EOF chown mysql:mysql /etc/my.cnf chown -R mysql:mysql /app/data/3306 chown -R root:root /app/tools/mysql #配置PATH环境变量 echo ‘export PATH=/app/tools/mysql/bin:$PATH’ >> /etc/profile source /etc/profile #初始化,–initialize-insecure设置没有密码 mysqld –initialize-insecure –user=mysql \ –basedir=/app/tools/mysql/ –datadir=/app/data/3306/ echo $? cat >/usr/lib/systemd/system/mysqld.service<<EOF [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql Type=notify TimeoutSec=0 OOMScoreAdjust=-1000 ExecStart=/app/tools/mysql/bin/mysqld –defaults-file=/etc/my.cnf $MYSQLD_OPTS EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE = 65536 Restart=on-failure RestartPreventExitStatus=1 Environment=MYSQLD_PARENT_PID=1 PrivateTmp=false EOF #设置开机自启服务 systemctl daemon-reload systemctl enable mysqld systemctl start mysqld #检查端口和服务,3306和mysql ss -lntup ps -ef | grep mysql mysql_secure_installation #用于设置root密码,清理用户和清理临时库 #登录数据库 mysql -uroot -p123

创建库,用户,授权用户

create database xzs charset utf8mb4;

create user xzs@'172.16.1.%' identified with mysql_native_password by '123';

grant all on xzs.* to xzs@'172.16.1.%';

flush privileges;

exit

#远程测试
mysql -uxzs -p123 -h 172.16.1.52
[root@db02 ~]# unzip xzs-sql-v3.9.0.zip 
Archive:  xzs-sql-v3.9.0.zip
  inflating: xzs-mysql.sql           
  inflating: xzs-postgresql.sql 

#导入数据库
mysql -uroot -p123 xzs <xzs-mysql.sql

前端部署

==web01,web02==

部署nginx-1.28

vim /etc/yum.repos.d/nginx.repo
------------------------------------

[nginx-stable]

name=nginx stable repo baseurl=http://nginx.org/packages/centos/8/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true yum install -y nginx systemctl enable –now nginx nginx -v ps -ef | grep nginx ss -lntup | grep nginx mkdir -p /app/code/xzs/ ls /app/code/xzs/frontend/ admin student

  • 配置前端nginx,web01,web02
[root@web01 ~]# cat /etc/nginx/conf.d/xzs.song.com.conf 
server{
  listen 80;
  server_name admin.song.com;
  root /app/code/xzs/frontend/admin/;
  location / {
  index index.html;
  }
  location /api {
  proxy_pass http://10.0.0.4:8000;
  }
}

server{
  listen 80;
  server_name stu.song.com;
  root /app/code/xzs/frontend/student/;
  location / {
  index index.html;
  }
  location /api {
  proxy_pass http://10.0.0.4:8000;
  }
}

nginx -t
systemctl reload nginx

后端部署

==web03,web04同步操作==

部署nginx-1.28

vim /etc/yum.repos.d/nginx.repo
------------------------------------

[nginx-stable]

name=nginx stable repo baseurl=http://nginx.org/packages/centos/8/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true yum install -y nginx systemctl enable –now nginx nginx -v ps -ef | grep nginx ss -lntup | grep nginx

部署jdk

#yum源部署

yum list | grep openjdk


yum install -y java-11-openjdk-devel java-11-openjdk

java -version


yum install -y java-1.8.0-openjdk-devel java-1.8.0-openjdk

#设置优先级jdk-11
update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-11.0.28.6-1.p01.ky10.x86_64/bin/java 200

update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-11-openjdk-11.0.28.6-1.p01.ky10.x86_64/bin/javac 200
#设置优先级jdk-1.8.0
update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.462.b08-4.p01.ky10.x86_64/bin/java 100


update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.462.b08-4.p01.ky10.x86_64/bin/javac 100


#上传jdk文件
#二进制部署jdk
mkdir -p /usr/local/jdk

tar -xvf openjdk-21.0.1_linux-x64_bin.tar.gz -C /usr/local/jdk/

tar -xvf openjdk-17.0.1_linux-x64_bin.tar.gz -C /usr/local/jdk/

cd /usr/local/jdk/

mv jdk-21.0.1 jdk21
mv jdk-17.0.1 jdk17
update-alternatives --install /usr/bin/java java /usr//jdk/jdk21/bin/java


#切换版本jdk
update-alternatives --config java

部署tomcat-9

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.111/bin/apache-tomcat-9.0.111.tar.gz

tar -xf apache-tomcat-9.0.111.tar.gz -C /app/tools/

chown -R root:root /app/tools/apache-tomcat-9.0.111/

ln -s /app/tools/apache-tomcat-9.0.111 /app/tools/tomcat

root@web03 /app/tools]# cat /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat 9.0 by song
After=network.target

[Service]
Type=forking
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target

systemctl daemon-reload 
systemctl enable --now tomcat

部署maven

下载maven地址

[root@web03 ~]# ll apache-maven-3.9.11-bin.tar.gz 
-rw-r--r-- 1 root root 9160848 11月  3 12:15 apache-maven-3.9.11-bin.tar.gz

tar -xvf apache-maven-3.9.11-bin.tar.gz  -C /app/tools/

ln -s /app/tools/apache-maven-3.9.11 /app/tools/maven

echo 'export PATH=/app/tools/maven/bin/:$PATH' >>/etc/profile

source /etc/profile

#检查版本
mvn --version

部署node.js-16

上传文件node-v16.19.1-linux-x64.tar.xz

[root@web03 ~]# ls node-v16.19.1-linux-x64.tar.xz 
node-v16.19.1-linux-x64.tar.xz

tar -xf node-v16.19.1-linux-x64.tar.xz -C /app/tools/

chown -R root:root /app/tools/node-v16.19.1-linux-x64/

[root@web03 ~]# cd /app/tools/
[root@web03 /app/tools]# ln -s node-v16.19.1-linux-x64 node

[root@web03 ~]# tail -1 /etc/profile
export PATH=/app/tools/node/bin/:$PATH

source /etc/profile

[root@web03 ~]# npm --version
8.19.3
[root@web03 ~]# node --version
v16.19.1

#配置npm下载源
npm config set registry https://registry.npmmirror.com

[root@web03 ~]# cat ~/.npmrc 
registry=https://registry.npmmirror.com/

编译部署学之思

在线考试系统: 学之思开源考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序,能覆盖到pc机和手机等设备。 支持多种部署方式:集成部署、前后端分离部署、docker部署

  • 上传xzs-mysql-master.zip
[root@web03 ~]# ls xzs-mysql-master.zip 
xzs-mysql-master.zip

[root@web03 ~]# du -sh xzs-mysql-master.zip 
215M    xzs-mysql-master.zip

#解压目录
unzip xzs-mysql-master.zip

#前端编译
mkdir -p /app/code/xzs/{frontend,backend}

cd xzs-mysql-master/source/vue/xzs-admin/
npm config set sass_binary_site https://registry.npmmirror.com
npm install --registry https://registry.npmmirror.com 
npm run build

cp -rp admin /app/code/xzs/frontend/


cd xzs-mysql-master/source/vue/xzs-student
npm config set sass_binary_site https://registry.npmmirror.com

npm install --registry https://registry.npmmirror.com 

npm run build

cp -rp student /app/code/xzs/frontend/

#后端编译
 cd /root/xzs-mysql-master/source/xzs/

mvn clean package

[root@web03 ~/xzs-mysql-master/source/xzs]# cd target/

cp xzs-3.9.0.jar /app/code/xzs/backend/

cp classes/application-prod.yml /app/code/xzs/backend/


[root@web03 /app/code/xzs]# ls
backend  frontend
[root@web03 /app/code/xzs]# ls frontend/
admin  student
[root@web03 /app/code/xzs]# ls backend/
application-prod.yml  xzs-3.9.0.jar

[root@web03 /app/code/xzs/backend]# cat application-prod.yml 
server:
  port: 8000
  undertow:
    io-threads: 16
    worker-threads: 4000
    buffer_size: 1024
    direct-buffers: true
  compression:
    enabled: true
    min-response-size: 1
logging:
  path: /app/code/xzs/backend/

spring:
  datasource:
    url: jdbc:mysql://172.16.1.52:3306/xzs?useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&allowMultiQueries=true
    username: xzs
    password: 123
    driver-class-name: com.mysql.cj.jdbc.Driver

[root@web03 /app/code/xzs/backend]# java -Duser.timezone=Asia/Shanghai -Dspring.profiles.active=prod  -jar xzs-3.9.0.jar

浏览器访问10.0.0.9:8000

学生端:student 密码:123456

后台:admin 密码:123456

前后端集群搭建全流程
  • web03传web04文件
scp -r xzs root@10.0.0.10:`pwd`

scp -rp frontend root@10.0.0.7:`pwd`
scp -rp frontend root@10.0.0.8:`pwd`
  • 书写启动jar包脚本
vim /server/scripts/xzs_status.sh 
-------------------------------------------
#!/bin/bash
##############################################################
# File Name: install_tomcat.sh
# Version: V1.0
# Author: song
# Organization: 
# Description:
##############################################################
#vars
function redecho(){
  str=$*
  echo -e "\E[0;31m${str}\E[0m"
}
function greenecho(){
  str=$*
  echo -e "\E[1;32m${str}\E[0m"
}
function yellowecho(){
  str=$*
  echo -e "\E[1;33m${str}\E[0m"
}
function blueecho(){
  str=$*
  echo -e "\E[1;34m${str}\E[0m"
}

#错误处理函数(执行命令失败时退出)
error_exit(){
  redecho "Error: $1"
  exit 1
}

service=xzs-3.9.0.jar
dir=/app/code/xzs/backend/
choose=$1
port=8000
log_file=${dir}xzs.log
start='java -Duser.timezone=Asia/Shanghai -Dspring.profiles.active=prod -jar xzs-3.9.0.jar'
time=`date +%F_%T`


pid=`ps -ef | grep -w "${start}" | grep -v grep | awk '{print $2}'`
pid_cnt=`ps -ef | grep -w "${start}" | grep -v grep | awk '{print $2}'|wc -l`


logmsg(){
  msg="$*"
  echo "$*" >>${log_file}
}



ngxweb_start(){
   if [ ! -d ${dir} ];then
        redecho "目录不存在"
        exit 1
    fi


   if [ -n ${pid}  ];then
     cd ${dir}
     nohup  java -Duser.timezone=Asia/Shanghai -Dspring.profiles.active=prod -jar ${service} >/dev/null 2>&1 &
      if [ $? -eq 0 ];then
      greenecho "启动${service}成功"
        else
          redecho "启动${service}失败"
        fi
   fi
}

ngxweb_stop(){
    if [ -n ${pid}  ];then
      kill ${pid} 
      greenecho "关闭${service}成功"
    fi
}

ngxweb_restart(){
    ngxweb_stop
    sleep 1
    ngxweb_start
}


ngxweb_status(){
    if [ ${pid_cnt} -ne 0 ];then
     echo "running [ok] [${pid}] $service"
     logmsg "running [ok] [${pid}] [${time}] $service"
  else
     echo "running [Failed] [${pid}] $service"
     logmsg "running [Failed] [${pid}] [${time}] $service"
    fi

}

case "$choose" in
    start) ngxweb_start ;;
    stop) ngxweb_stop ;;
    restart) ngxweb_restart;;
    status) ngxweb_status;;
    *) echo input error
esac
-------------------------------------------
#测试脚本是否成功
bash /server/scripts/xzs_status.sh start

#书写systemctl文件
[root@web03 ~]# cat /usr/lib/systemd/system/xzs.service
[Unit]
Description=apache tomcat by song
After=network.target

[Service]
Type=forking
ExecStart=bash /server/scripts/xzs_status.sh start
ExecStop=bash /server/scripts/xzs_status.sh stop
[Install]
WantedBy=multi-user.target


systemctl daemon-reload
systemctl start xzs.service
  • 部署nginx配置文件,web03,web04
[root@web03 ~]# cat /etc/nginx/conf.d/xzs.song.com.conf 
server{
  listen 80;
  server_name admin.song.com;
  location /api {
   proxy_pass http://localhost:8000;
  }
}
server{
  listen 80;
  server_name stu.song.com;
  location /api {
   proxy_pass http://localhost:8000;
  }
}


nginx -t
systemctl reload nginx

windows hosts文件解析

10.0.0.9 admin.song.com stu.song.com

浏览器访问域名

前后端集群搭建全流程
[root@web03 /etc/nginx/conf.d]# scp * root@10.0.0.10:`pwd`

[root@web03 /server/scripts]# scp xzs_status.sh root@10.0.0.10:`pwd`

[root@web04 /etc/nginx/conf.d]# systemctl reload nginx

用web04的ip,域名访问一下

前后端集群搭建全流程

部署负载均衡

==lb01,lb02同步==

部署nginx-1.28

vim /etc/yum.repos.d/nginx.repo
------------------------------------

[nginx-stable]

name=nginx stable repo baseurl=http://nginx.org/packages/centos/8/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true yum install -y nginx systemctl enable –now nginx nginx -v ps -ef | grep nginx ss -lntup | grep nginx mkdir -p /app/code/xzs/ ls /app/code/xzs/

部署keepalived

yum install -y keepalived

systemctl enable --now keepalived

cp /etc/keepalived/keepalived.conf{,.bak}

配置L4负载均衡

  • lb01,lb02
[root@lb01 ~]# cat /etc/nginx/nginx.conf 
#在最下面添加
stream {
    log_format l4 '$remote_addr [$time_local] "$protocol" '
                      '$status $bytes_sent $bytes_received $session_time ';
    include /etc/nginx/l4/*.conf;
}

mkdir -p /etc/nginx/l4/
#配置4层负载
[root@lb01 ~]# cat /etc/nginx/l4/xzs.song.com.conf 
  upstream xzs_pools{
    hash $remote_addr consistent;
    server 10.0.0.9:8000;
    server 10.0.0.10:8000;
  }


  server{
   listen 8000;
   access_log /var/log/xzs-access.log l4;
   error_log /var/log/xzs-error.log notice;
   proxy_pass xzs_pools;
  }

nginx -t
systemctl reload nginx

配置L7负载均衡

  • lb01,lb02
[root@lb01 ~]# cat /etc/nginx/conf.d/xzs.song.com.conf 
upstream xzs_l7_pools{
  server 10.0.0.7:80;
  server 10.0.0.8:80;
}
server{
  listen 80;
  server_name admin.song.com;
  location / {
  proxy_pass http://xzs_l7_pools;
  proxy_set_header Host $http_host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Real-Ip  $remote_addr;
  }
}
server{
  listen 80;
  server_name stu.song.com;
  location / {
  proxy_pass http://xzs_l7_pools;
  proxy_set_header Host $http_host;  
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Real-Ip  $remote_addr;
  }
}


nginx -t
systemctl reloa

lb01配置高可用

  • 安装keepalived
yum install -y keepalived

systemctl enable --now keepalived
  • 配置keepalived
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id lb01  
}
#定义监控脚本
vrrp_script check_ngx.sh{
   script /server/scripts/check_ngx.sh
   interval 2  #每2秒执行一次
   user root   #执行用户root
   weight 1   #权重
}

vrrp_instance vip_3 {    
    state MASTER    
    interface ens33
    virtual_router_id 51 
    priority 100    
    advert_int 1        
    authentication {   
        auth_type PASS
        auth_pass 1111  
    }
    virtual_ipaddress {         
10.0.0.3 dev ens33 label ens33:0  
    }
    #调用脚本
    track_script{
    check_ngx.sh
    }
}

vrrp_instance vip_4 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 60
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    10.0.0.4 dev ens33 label ens33:1
    }
    #调用脚本
}

systemctl restart keepalived

lb02配置高可用

[root@lb02 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   router_id lb02 #修改主机名
}
vrrp_instance vip_3 {    
    state BACKUP   #声明备节点
    interface ens33
    virtual_router_id 51 
    priority 50  #设置优先级
    advert_int 1        
    authentication {   
        auth_type PASS
        auth_pass 1111  
    }
    virtual_ipaddress {
10.0.0.3 dev ens33 label ens33:0  
    }
}

vrrp_instance vip_4 {
    state MASTER   #声明主节点
    interface ens33
    virtual_router_id 52
    priority 100  #设置优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    10.0.0.4 dev ens33 label ens33:1
    }
}

systemctl restart keepalived

最终成果

前后端集群搭建全流程
正文完
 0
评论(没有评论)

这是一个shf的网站

近期评论

您尚未收到任何评论。