day48-考試系統項目集群部署

1. ?考試系統項目集群架構圖

負載均衡

說明

7層負載

通過nginx對http請求進行轉發(uri,ua,類型)

4層負載

對端口負載均衡(后端)

2. 📝環境準備

角色

主機

ip

負載均衡

lb01/lb02

172.16.1.5/172.16.1.6

前端web集群

web01/web02

172.16.1.7/172.16.1.8

后端web集群

web03/web04

172.16.1.9/172.16.1.10

數據庫

db02

172.16.1.52

3. 🔐部署數據庫(db02)

3.1. 安裝數據庫

1.解壓,環境準備
mkdir -p /app/tools/   /app/data/3306/
tar xf 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/mysql2.安裝依賴
yum install ncurses ncurses-devel libaio-devel openssl openssl-devel -y#3.配置文件,用戶
useradd -s /sbin/nologin  -M mysql 4.設置配置文件
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

3.2. 數據庫基礎配置

5.修改配置和數據目錄的所有者.
chown mysql.mysql /etc/my.cnf  
chown -R mysql.mysql /app/data/3306
chown -R root.root  /app/tools/mysql/6.配置PATH環境變量
echo 'export PATH=/app/tools/mysql/bin:$PATH' >>/etc/profile
source /etc/profile
#7.檢查 不提示命令找不到就是正常的.
mysql -V

3.3. 初始化數據庫

#8.初始化
mysqld --initialize-insecure --user=mysql \
--basedir=/app/tools/mysql/ --datadir=/app/data/3306/
echo $?--initialize-insecure   以不安全方式初始化,root空密碼,不加這個選項就是安全,創建root隨機密碼.--user=mysql 用戶
--basedir=/app/tools/mysql/ 安裝目錄
--datadir=/app/data/3306/   指定數據目錄
與配置文件中一致.

3.4. 設置開機自啟動

9.拷貝已經準備好的啟動管理文件
cp /app/tools/mysql/support-files/mysql.server  /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld10.修改啟動腳本中的basedir和datadir
#basedir=
#datadir=sed -i  '/^basedir=/s#basedir=#basedir=/app/tools/mysql/#g'  /etc/init.d/mysqld 
sed -i  '/^datadir=/s#datadir=#datadir=/app/data/3306/#g'  /etc/init.d/mysqld 11.檢查 
egrep '^basedir=|^datadir=' /etc/init.d/mysqld
basedir=/app/tools/mysql/
datadir=/app/data/3306/12.開機自啟動服務,運行服務 (有些提示可以忽略)
#/etc/init.d/mysqld  start  (備用)systemctl enable mysqld
systemctl start mysqld13.檢查
ps -ef | grep mysql
ss -lntup | grep mysql

4. 🚀啟動jar項目(web03/web04)

  • 準備application-prod.yml文件(正式環境)
  • 準備xzs-3.9.0.jar
1.先手動前臺運行.
mkdir -p /app/code/exam/backend/
cd /app/code/exam/backend/ java -jar  xxx.jar 2.前臺運行
java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.9.0.jar
xxxx=prod  === 讀取application-prod.yml配置文件
xxxx=dev   === 讀取application-dev.yml配置文件3.后臺運行
nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.9.0.jar &

4.1. 🔄開機自啟動(web03/web04)

  • 步驟
1.書寫jar包管理腳本
bash /server/scripts/exam.sh start
運行nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.9.0.jar >/dev/null 2>&1 &bash /server/scripts/exam.sh stop
關閉指定的服務bash /server/scripts/exam.sh restart
先關閉然后再啟動服務bash /server/scripts/exam.sh status
檢查是否運行2.systemctl調用腳本
[Unit]
Description=exam
After=network.target 
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=bash /server/scripts/exam.sh start
ExecStop=bash /server/scripts/exam.sh stop
[Install]
WantedBy=multi-user.target
  • 腳本
#1.vars
service=xzs-3.9.0.jar
dir=/app/code/exam/backend/
choose=$1
logfile=${dir}exam.log
time=`date +%F_%T`
jar_file=${dir}${service}#2.function
function srv_start() {pid=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}'`pidcount=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}' | wc -l`if [ -f ${jar_file} ];thenif [ -z ${pid} ];thencd ${dir}nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.9.0.jar >/dev/null 2>&1 &fielseexitfireturn $?
}function srv_stop() {pid=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}'`pidcount=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}' | wc -l`if [ ${pidcount} -gt 0 ];thenkill ${pid}fi
}function srv_restart() {srv_stopsleep 1srv_start
}function srv_status() {pid=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}'`pidcount=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}' | wc -l`if [ ${pidcount} -ge 1 ];thenecho -e "\E[1;32mrunning pid:[${pid}] ${service}\E[0m"elseecho -e "\E[1;31mstoped ${service}\E[0m"fi
}#3.case
case "${choose}" instart) srv_start ;;stop) srv_stop ;;restart) srv_restart ;;status) srv_status ;;*) echo input error
esac

5. 🍀接入4層負載均衡(lb01/lb02)

5.1. 檢查是否支持4層負載均衡

nginx -V |& grep stream
--with-stream

5.2. 負載均衡配置

1.修改yum源
vim /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2.安裝nginx
yum -y install nginx3.修改nginx配置文件
vim /etc/nginx/nginx.conf
stream {upstream exam_pools {server 10.0.0.9:8000;server 10.0.0.10:8000;hash $remote_addr consistent;}log_format basic '$remote_addr [$time_local] ''$protocol $status $bytes_sent $bytes_received ''$session_time';access_log /var/log/nginx-l4.log basic;server {listen 8000;proxy_pass exam_pools;}
}4.重啟nginx
nginx -t
systemctl enable nginx --now
systemctl reload nginx5.檢查
ss -lntup | grep 8000

6. 🌏部署前端web(web01/web02)

1.修改yum源
vim /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2.安裝nginx
yum -y install nginx3.修改配置文件
vim /etc/nginx/conf.d/exam.conf
server {listen 80;server_name admin.zhubl.xyz;root  /app/code/exam/front/admin/;location / {index index.html;}location /api/ {proxy_pass  http://10.0.0.4:8000;}
}server {listen 80;server_name student.zhubl.xyz;root  /app/code/exam/front/student/;location / {index index.html;}location /api/ {proxy_pass  http://10.0.0.4:8000;}
}4.創建目錄
mkdir /app/code/exam/front/5.拷貝前端代碼到站點目錄
unzip exam-web-前端.zip
mv exam-web-前端/* /app/code/exam/front/6.重啟nginx
nginx -t
systemctl enable nginx --now
systemctl reload nginx

7. 🍀接入7層負載(lb01/lb02)

1.修改yum源
vim /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2.安裝nginx
yum -y install nginx3.修改nginx配置文件
vim /etc/nginx/conf.d/exam.conf
upstream l7_pools {server 10.0.0.7:80;server 10.0.0.8:80;hash $remote_addr consistent;
}
server {listen 80;server_name admin.zhubl.xyz;location / {proxy_pass http://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 student.zhubl.xyz;location / {proxy_pass http://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;}
}4.重啟nginx
nginx -t
systemctl enable nginx --now
systemctl reload nginx

8. 🚀接入高可用(lb01)

1.安裝keepalived
yum -y install keepalived2.備份配置文件
cp /etc/keepalived/keepalived.conf{,.bak}3.修改配置文件
vim /etc/keepalived/keepalived.conf
global_defs {router_id lb01  
}
vrrp_script check_lb.sh {   script /server/scripts/check_lb.shinterval 2weight  1user root 
}vrrp_instance vip_3 {    state MASTER    interface ens33virtual_router_id 51 priority 100    advert_int 1        authentication {   auth_type PASSauth_pass 1111  }virtual_ipaddress { 10.0.0.3 dev ens33 label ens33:1}track_script  {check_lb.sh }
}vrrp_instance vip_4 {state BACKUPinterface ens33virtual_router_id 52priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.4 dev ens33 label ens33:2}
}4.編寫腳本
vim /server/scripts/check_lb.sh
#1.vars
count=`ps -ef | grep nginx | wc -l`#2.stop keepalived
if [ ${count} -eq 1 ];thensystemctl stop keepalived
fi5.重啟keepalived
systemctl restart keepalived.service

9. 🚀接入高可用(lb02)

1.安裝keepalived
yum -y install keepalived2.備份配置文件
cp /etc/keepalived/keepalived.conf{,.bak}3.修改配置文件
vim /etc/keepalived/keepalived.conf
global_defs {router_id lb02
}
vrrp_script check_lb.sh {script /server/scripts/check_lb.shinterval 2weight  1user root 
}vrrp_instance vip_3 {state BACKUPinterface ens33virtual_router_id 51priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3 dev ens33 label ens33:1}
}vrrp_instance vip_4 {state MASTERinterface ens33virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.4 dev ens33 label ens33:2}track_script  {check_lb.sh}
}4.編寫腳本
vim /server/scripts/check_lb.sh
#1.vars
count=`ps -ef | grep nginx | wc -l`#2.stop keepalived
if [ ${count} -eq 1 ];thensystemctl stop keepalived
fi5.重啟keepalived
systemctl restart keepalived.service

10. 🌏瀏覽器訪問

http://student.zhubl.xyz/ 學生端 student 123456
http://admin.zhubl.xyz/   管理端 admin   123456

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87758.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87758.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87758.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis+Caffeine雙層緩存策略對比與實踐指南

RedisCaffeine雙層緩存策略對比與實踐指南在高并發場景下&#xff0c;緩存是提升系統性能和并發處理能力的關鍵手段。常見的緩存方案包括遠程緩存&#xff08;如Redis&#xff09;和本地緩存&#xff08;如Caffeine&#xff09;。單層緩存各有優劣&#xff0c;結合兩者優勢的雙…

FastAPI+React19 ERP系統實戰 第02期

一、搭建環境 1.1 創建Python虛擬環境 切換Python版本: pyenv local 3.12創建虛擬環境: python -m venv venv激活虛擬環境: venv\Scripts\activate1.2 安裝FastAPI項目依賴 requirements.txt fastapi==0.109.1

百度AI文心大模型4.5系列開源模型評測,從安裝部署到應用體驗

2025年6月30日&#xff0c;百度突然宣布&#xff0c;將旗下最新的大語言模型文心大模型4.5&#xff08;ERNIE 4.5&#xff09;全系列開源&#xff0c;震動整個AI行業。百度在GitCode平臺上開源了文心大模型4.5系列&#xff0c;包括ERNIE-4.5-VL-424B-A47B-Base-PT等多個型號。此…

windows安裝maven環境

在maven官網下載安裝包 https://maven.apache.org/download.cgi 下載完成后安裝maven&#xff0c;一般下載編輯好的 創建個maven目錄解壓出來即可 配置環境變量 根據剛剛的安裝路徑&#xff0c;新建一個命名為MAVEN_HOME的系統變量 新建完成點開系統變量的Path項&#xff0c;…

MySQL(117)何進行數據庫安全加密?

數據庫安全加密是保護敏感數據免受未授權訪問的重要手段。以下是一個詳細深入的步驟&#xff0c;介紹如何進行數據庫安全加密&#xff0c;包括數據傳輸加密和數據存儲加密。 一. 數據傳輸加密 確保數據在傳輸過程中被加密&#xff0c;以防止中間人攻擊。我們以MySQL為例&#x…

工程化實踐——標準化Eslint、PrettierTS

前端工程化中的標準化工具&#xff08;如Prettier、ESLint、Husky等&#xff09;雖然大幅提升了開發效率和代碼質量&#xff0c;但在實際使用中也存在一些限制和挑戰。以下從工具特性、團隊協作、開發體驗等維度詳細分析常見限制&#xff0c;并以Prettier為核心舉例說明&#x…

應急響應靶場——web3 ——知攻善防實驗室

前景需要&#xff1a; 小苕在省護值守中&#xff0c;在靈機一動情況下把設備停掉了&#xff0c;甲方問&#xff1a;為什么要停設備&#xff1f;小苕說&#xff1a;我第六感告訴我&#xff0c;這機器可能被黑了。這是他的服務器&#xff0c;請你找出以下內容作為通關條件&#…

Ubuntu:Tomcat里面的catalina.sh

認識catalina.sh 1 啟動Tomcat catalina.sh start相當于startup.sh 2 停止Tomcat catalina.sh stop相當于shutdown.sh 3 前臺運行Tomcat 一般用于調試 catalina.sh run4 Tomcat腳本 編輯如下腳本run_tomcat.sh 里面的一些HOME位置改成自己的 #!/bin/shWORKDIR$(cd $(dirname $0…

【機器學習深度學習】模型微調時的4大基礎評估指標(1)

目錄 前言&#xff1a;基礎評估指標&#xff08;從 “對與錯” 到 “準與全”&#xff09; 一、基礎評估4大指標 二、類比理解 2.1 準確率&#xff08;Accuracy&#xff09;&#xff1a;整體對的比例 2.2 精確率&#xff08;Precision&#xff09;&#xff1a;你說是垃圾的…

關于 棧幀變化完整流程圖(函數嵌套)

一、什么是棧幀&#xff08;Stack Frame&#xff09; 當一個函數被調用時&#xff0c;會在棧上開辟一段空間&#xff0c;叫做 棧幀。 每個棧幀保存了&#xff1a; 函數的參數 返回地址&#xff08;從哪里跳回來&#xff09; 上一個棧幀的棧底指針&#xff08;保存調用者的 E…

new與malloc[c++面試系列]

new與malloc的區別new順從c的思想&#xff0c;在堆區申請一個對象&#xff0c;因此它會調用對象的構造函數進行初始化&#xff0c;它也應該調用構造函數&#xff1b;malloc在堆區申請一塊空間&#xff0c;用于存放資源new無需指定對象大小&#xff0c;可以自動計算對象大小進行…

Go語言的sync.Once和sync.Cond

一.sync.OnceOnce&#xff08;單次執行&#xff09;用途&#xff1a;確保某個操作只執行一次&#xff08;如初始化配置&#xff09;核心方法&#xff1a;Do(f func())&#xff1a;保證 f只執行一次package mainimport ("fmt""sync" )var (config map[strin…

java整合itext pdf實現自定義PDF文件格式導出

springBoot結合itext pdf實現自定義PDF文件格式導出背景需求&#xff1a;使用PDF導出指定人員對應周次的打卡記錄&#xff0c;每周對應星期幾打卡過就打“√”。如下圖&#xff1a;1、導入依賴導入itextpdf依賴<!-- itex PDF --> <dependency><groupId>…

從0開始學習計算機視覺--Day07--神經網絡

當我們輸入的變量是一個比較大的向量&#xff08;比如有4096項&#xff09;&#xff0c;函數是求返回輸入的最大值&#xff0c;要求的權重矩陣的梯度就是4096 * 4096的大小&#xff0c;而實際上我們的輸入往往都不只有一個向量&#xff0c;那如果向量有一百個的話&#xff0c;是…

MySQL存儲過程全解析

1、存儲過程的概念 存儲過程是事先經過編譯并存儲在數據庫中的一段sql語句的集合&#xff0c;調用存儲過程可以簡化應用開發人員的很多工作&#xff0c;減少數據在數據庫和應用服務器之間的傳輸&#xff0c;對于提高數據處理效率是很有好處。 2、存儲過程的優點 存儲過程是通…

后端密碼加密:守護用戶數據的鋼鐵長城

&#x1f512;“系統被拖庫了&#xff01;” 這可能是開發者最恐懼的噩夢。而當用戶密碼以明文暴露時&#xff0c;災難將席卷每個用戶——密碼重用的慣性會讓黑客輕松攻破他們在其他平臺的賬戶。作為后端開發者&#xff0c;我們握有守護用戶安全的第一道鑰匙&#xff1a;科學的…

Flutter 3.29+使用isar構建失敗

執行命令&#xff1a;flutter build apk --release 報錯 Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!FAILURE: Build failed with an exception. …

SQL 轉 Java 實體類工具

拿到數據庫建表語句后怎么高效寫 Java 實體類&#xff1f;這款工具直接幫你全自動生成&#xff01; 作為一名后端 Java 工程師&#xff0c;你是不是也經歷過以下情況&#xff1a; ? 拿到一份完整的建表 SQL&#xff0c;卻要手動寫 Java Bean ? 字段幾十個&#xff0c;嵌套復…

創客匠人視角下:創始人 IP 打造與知識變現的深度耦合路徑

在知識經濟蓬勃發展的當下&#xff0c;創始人 IP 打造與知識變現的融合已成為行業破局關鍵。創客匠人作為深耕知識付費賽道多年的服務平臺&#xff0c;其創始人老蔣提出的 “土壤構建能力” 理論&#xff0c;為理解這一融合邏輯提供了獨特視角。從本質來看&#xff0c;創始人 I…

【網絡協議安全】任務13:ACL訪問控制列表

目錄 一、概念 1、前言 2、應用場景 3、ACL分類 基于ACL標識方法的劃分 基于對IPv4和IPv6支持情況的劃分 基于ACL規則定義方式的劃分 4、ACL的基本原理 ACL的組成 ACL的匹配機制 5、ACL常用匹配原則 6、ACL常用的匹配項 生效時間段 IP承載的協議類型 源/目的IP…