Docker一鍵安裝中間件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)腳步

1、Docker安裝RocketMq

2、Docker安裝Nginx

3、Docker安裝MySql

4、Docker安裝Minio

5、Docker安裝jenkins

?6、Docker安裝Redis

1、Docker安裝RocketMq

#!/bin/bash# 定義變量
NAMESRV_CONTAINER="rocketmq-namesrv"
BROKER_CONTAINER="rocketmq-broker"
DASHBOARD_CONTAINER="rocketmq-dashboard"
IMAGE_ROCKETMQ="m.daocloud.io/docker.io/apache/rocketmq:5.2.0"  # 修改為5.2.0版本
IMAGE_DASHBOARD="m.daocloud.io/docker.io/apacherocketmq/rocketmq-dashboard:latest"
NAMESRV_PORT=9876
BROKER_PORT=10911
DASHBOARD_PORT=8111# 獲取宿主機IP(最佳實踐方式)
HOST_IP=$(ip route get 1 | awk '{print $7;exit}')# 宿主機目錄設置
HOST_DATA_DIR="/work/docker/rocketmq"
HOST_CONF_DIR="$HOST_DATA_DIR/conf"
HOST_STORE_DIR="$HOST_DATA_DIR/store"
HOST_LOGS_DIR="$HOST_DATA_DIR/logs"# 清理環境
echo "正在徹底清理舊環境..."
docker rm -f "$NAMESRV_CONTAINER" "$BROKER_CONTAINER" "$DASHBOARD_CONTAINER" 2>/dev/null
docker network rm rocketmq-net 2>/dev/null
rm -rf "$HOST_DATA_DIR"# 創建目錄結構
echo "初始化目錄..."
mkdir -p "$HOST_CONF_DIR" "$HOST_STORE_DIR"/{commitlog,consumequeue,index} "$HOST_LOGS_DIR"/{namesrv,broker}
chmod -R 777 "$HOST_DATA_DIR"  # 臨時放寬權限用于調試# 生成Broker配置文件(適配5.2.0版本)
cat > "$HOST_CONF_DIR/broker.conf" <<EOF
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=${HOST_IP}:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/store/commitlog
autoCreateTopicEnable=true
listenPort=10911
enableControllerMode=false  # 5.x新增參數
EOF# 生成ACL配置文件(5.x版本需要)
cat > "$HOST_CONF_DIR/plain_acl.yml" <<EOF
accounts:- accessKey: rocketmqsecretKey: 12345678whiteRemoteAddress:admin: true
EOF# 創建專用網絡
docker network create rocketmq-net# 啟動NameServer(5.2.0版本參數)
echo "啟動NameServer..."
docker run -d \--name "$NAMESRV_CONTAINER" \--network rocketmq-net \--hostname namesrv \--restart=always \-p "$NAMESRV_PORT:9876" \-v "$HOST_LOGS_DIR/namesrv:/home/rocketmq/logs" \-e "JAVA_OPT_EXT=-Xms512m -Xmx512m -Drocketmq.namesrv.remoting.debug=true" \"$IMAGE_ROCKETMQ" \sh mqnamesrv# 等待初始化(延長等待時間)
echo "等待NameServer初始化..."
sleep 20# 啟動Broker(5.2.0版本啟動命令)
echo "啟動Broker..."
docker run -d \--name "$BROKER_CONTAINER" \--network rocketmq-net \--privileged \--restart=always \-p 10909:10909 \-p 10911:10911 \-p 10912:10912 \-v "$HOST_CONF_DIR/broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf" \-v "$HOST_CONF_DIR/plain_acl.yml:/home/rocketmq/rocketmq-5.2.0/conf/plain_acl.yml" \-v "$HOST_STORE_DIR:/home/rocketmq/store" \-v "$HOST_LOGS_DIR/broker:/home/rocketmq/logs" \-e "JAVA_OPT_EXT=-Xms2g -Xmx2g -Xmn512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4" \"$IMAGE_ROCKETMQ" \sh -c "mqbroker -n $HOST_IP:9876 -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf 2>&1 | tee /home/rocketmq/logs/broker.log"# 啟動Dashboard(最新版)
echo "啟動Dashboard..."
docker run -d \--name "$DASHBOARD_CONTAINER" \--network rocketmq-net \--restart=always \-p "$DASHBOARD_PORT:8080" \-e "JAVA_OPTS=-Drocketmq.namesrv.addr=${HOST_IP}:9876 -Drocketmq.config.aclEnabled=true" \"$IMAGE_DASHBOARD"# 驗證部署
echo -e "\n====== 部署驗證 ======"
echo "1. 檢查Broker日志(等待30秒...)"
sleep 30
docker logs "$BROKER_CONTAINER" | grep -A 10 "boot success" || {echo "Broker啟動失敗,關鍵錯誤:"docker logs "$BROKER_CONTAINER" | grep -E "ERROR|error|fail" | tail -20exit 1
}echo "2. 集群狀態檢查:"
docker exec "$BROKER_CONTAINER" sh mqadmin clusterList -n "$HOST_IP:9876" || {echo "集群狀態檢查失敗"exit 1
}echo -e "\n====== 訪問信息 ======"
echo "Dashboard: http://${HOST_IP}:${DASHBOARD_PORT} (admin/123456)"
echo "NameServer: ${HOST_IP}:${NAMESRV_PORT}"
echo "數據目錄: $HOST_DATA_DIR"
echo "Broker日志: docker logs -f $BROKER_CONTAINER"

2、Docker安裝Nginx

#!/bin/bash# 定義變量
CONTAINER_NAME="nginx"
IMAGE_NAME="m.daocloud.io/docker.io/nginx"
HTTP_PORT=80
HTTPS_PORT=443
TIMEZONE="Asia/Shanghai"# 宿主機目錄映射路徑
HOST_NGINX_CONF="/work/docker/nginx/nginx.conf"       # Nginx 主配置文件
HOST_CONF_D_DIR="/work/docker/nginx/conf.d"          # Nginx 額外配置文件目錄
HOST_LOGS_DIR="/work/docker/nginx/logs"              # 日志目錄
HOST_CERT_DIR="/work/docker/nginx/cert"              # 證書目錄
HOST_HTML_DIR="/work/projects/html"              # 靜態資源目錄# 創建宿主機目錄(如果不存在)
echo "檢查并創建宿主機目錄..."
mkdir -p "$(dirname "$HOST_NGINX_CONF")"
mkdir -p "$HOST_CONF_D_DIR"
mkdir -p "$HOST_LOGS_DIR"
mkdir -p "$HOST_CERT_DIR"
mkdir -p "$HOST_HTML_DIR"# 如果主配置文件不存在,則生成默認配置文件
if [ ! -f "$HOST_NGINX_CONF" ]; thenecho "生成默認 Nginx 配置文件到 $HOST_NGINX_CONF ..."cat <<EOF > "$HOST_NGINX_CONF"
user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/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  /var/log/nginx/access.log  main;sendfile        on;keepalive_timeout  65;include /etc/nginx/conf.d/*.conf;
}
EOF
fi# 檢查容器是否已經存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,嘗試刪除舊容器..."docker rm -f "$CONTAINER_NAME"
fi# 啟動 Nginx 容器
echo "正在啟動 Nginx 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \-p "$HTTP_PORT:80" \-p "$HTTPS_PORT:443" \-p 8090:8090 \-p 8091:8091 \-e "TZ=$TIMEZONE" \-v "$HOST_NGINX_CONF:/etc/nginx/nginx.conf" \-v "$HOST_CONF_D_DIR:/etc/nginx/conf.d" \-v "$HOST_LOGS_DIR:/var/log/nginx" \-v "$HOST_CERT_DIR:/etc/nginx/cert" \-v "$HOST_HTML_DIR:/usr/share/nginx/html" \"$IMAGE_NAME"# 檢查容器是否啟動成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "Nginx 容器已成功啟動!"echo "主配置文件: $HOST_NGINX_CONF"echo "額外配置目錄: $HOST_CONF_D_DIR"echo "日志目錄: $HOST_LOGS_DIR"echo "證書目錄: $HOST_CERT_DIR"echo "靜態資源目錄: $HOST_HTML_DIR"
elseecho "Nginx 容器啟動失敗,請檢查日志。"
fi

3、Docker安裝MySql

#!/bin/bash# 定義變量
CONTAINER_NAME="mysql"
IMAGE_NAME="m.daocloud.io/docker.io/mysql"
HOST_PORT=3306
CONTAINER_PORT=3306
MYSQL_ROOT_PASSWORD="chenmo@123"# 數據和配置文件的映射路徑
HOST_DATA_DIR="/work/docker/mysql"       # 宿主機的數據目錄
HOST_CONFIG_FILE="/work/docker/conf/my.cnf" # 宿主機的配置文件路徑# 創建宿主機目錄(如果不存在)
echo "檢查并創建宿主機目錄..."
mkdir -p "$HOST_DATA_DIR"
mkdir -p "$(dirname "$HOST_CONFIG_FILE")"# 檢查配置文件是否存在,如果不存在則生成默認配置文件
if [ ! -f "$HOST_CONFIG_FILE" ]; thenecho "生成默認 MySQL 配置文件到 $HOST_CONFIG_FILE ..."cat <<EOF > "$HOST_CONFIG_FILE"
[mysqld]
# MySQL 服務配置
user=mysql
port=$CONTAINER_PORT
bind-address=0.0.0.0
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-storage-engine=INNODB
max_connections=200
innodb_buffer_pool_size=512M# 日志配置
log-error=/var/log/mysql/error.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2# 數據持久化
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock[client]
port=$CONTAINER_PORT
default-character-set=utf8mb4[mysql]
default-character-set=utf8mb4
EOF
fi# 檢查容器是否已經存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,嘗試刪除舊容器..."docker rm -f "$CONTAINER_NAME"
fi# 啟動 MySQL 容器
echo "正在啟動 MySQL 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \-p "$HOST_PORT:$CONTAINER_PORT" \-v "$HOST_DATA_DIR:/var/lib/mysql" \-v "$HOST_CONFIG_FILE:/etc/mysql/my.cnf" \-e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD" \"$IMAGE_NAME"# 檢查容器是否啟動成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "MySQL 容器已成功啟動!"echo "數據目錄: $HOST_DATA_DIR"echo "配置文件: $HOST_CONFIG_FILE"echo "MySQL 根用戶密碼: $MYSQL_ROOT_PASSWORD"
elseecho "MySQL 容器啟動失敗,請檢查日志。"
fi

4、Docker安裝Minio

#!/bin/bash# 定義變量
CONTAINER_NAME="minio"
IMAGE_NAME="m.daocloud.io/docker.io/minio/minio"
API_PORT=9000
CONSOLE_PORT=9001
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="chenmo@123"# 數據和配置的映射路徑
HOST_DATA_DIR="/work/docker/minio/data"       # 宿主機的數據目錄
HOST_CONFIG_DIR="/work/docker/minio/config"   # 宿主機的配置目錄# 創建宿主機目錄(如果不存在)
echo "檢查并創建宿主機目錄..."
mkdir -p "$HOST_DATA_DIR"
mkdir -p "$HOST_CONFIG_DIR"# 檢查容器是否已經存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,嘗試刪除舊容器..."docker rm -f "$CONTAINER_NAME"
fi# 啟動 MinIO 容器
echo "正在啟動 MinIO 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \-p $API_PORT:9000 \-p $CONSOLE_PORT:9001 \-e "MINIO_ROOT_USER=$MINIO_ROOT_USER" \-e "MINIO_ROOT_PASSWORD=$MINIO_ROOT_PASSWORD" \-v "$HOST_DATA_DIR:/data" \-v "$HOST_CONFIG_DIR:/root/.minio" \"$IMAGE_NAME" server /data \--console-address ":$CONSOLE_PORT"# 檢查容器是否啟動成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "=============================================="echo "MinIO 容器已成功啟動!"echo "API 地址: http://服務器IP:$API_PORT"echo "控制臺地址: http://服務器IP:$CONSOLE_PORT"echo "訪問密鑰: $MINIO_ROOT_USER"echo "秘密密鑰: $MINIO_ROOT_PASSWORD"echo "數據目錄: $HOST_DATA_DIR"echo "配置目錄: $HOST_CONFIG_DIR"echo "=============================================="
elseecho "MinIO 容器啟動失敗,請檢查日志。"docker logs $CONTAINER_NAME
fi

5、Docker安裝jenkins

#!/bin/bash# 定義變量
CONTAINER_NAME="jenkins"
IMAGE_NAME="m.daocloud.io/docker.io/jenkins/jenkins:lts-jdk17"
HTTP_PORT=8080
AGENT_PORT=50000
JENKINS_ADMIN_USER="admin"
JENKINS_ADMIN_PASSWORD="chenmo@123"# 數據和配置的映射路徑
HOST_DATA_DIR="/work/docker/jenkins/data"       # 宿主機的數據目錄
HOST_CONFIG_DIR="/work/docker/jenkins/config"   # 宿主機的配置目錄# 創建宿主機目錄(如果不存在)
echo "檢查并創建宿主機目錄..."
mkdir -p "$HOST_DATA_DIR"
mkdir -p "$HOST_CONFIG_DIR"# 設置目錄權限(Jenkins在容器內使用1000用戶運行)
chown -R 1000:1000 "$HOST_DATA_DIR"
chown -R 1000:1000 "$HOST_CONFIG_DIR"# 檢查容器是否已經存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,嘗試刪除舊容器..."docker rm -f "$CONTAINER_NAME"
fi# 啟動 Jenkins 容器
echo "正在啟動 Jenkins 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \--user 1000 \-p $HTTP_PORT:8080 \-p $AGENT_PORT:50000 \-v "$HOST_DATA_DIR:/var/jenkins_home" \-v "$HOST_CONFIG_DIR:/var/jenkins_config" \-v /var/run/docker.sock:/var/run/docker.sock \"$IMAGE_NAME"# 檢查容器是否啟動成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "=============================================="echo "Jenkins 容器已成功啟動!"echo "Web 訪問地址: http://服務器IP:$HTTP_PORT"echo "初始管理員用戶名: $JENKINS_ADMIN_USER"echo "初始管理員密碼: 請查看以下初始密碼或使用您設置的密碼"echo "數據目錄: $HOST_DATA_DIR"echo "配置目錄: $HOST_CONFIG_DIR"echo "=============================================="echo "首次啟動可能需要一些時間初始化,請稍后訪問..."echo "獲取初始管理員密碼命令: docker exec $CONTAINER_NAME cat /var/jenkins_home/secrets/initialAdminPassword"
elseecho "Jenkins 容器啟動失敗,請檢查日志。"docker logs $CONTAINER_NAME
fi

?6、Docker安裝Redis

#!/bin/bash# 定義變量
CONTAINER_NAME="redis"
IMAGE_NAME="m.daocloud.io/docker.io/redis"
HOST_PORT=6379
CONTAINER_PORT=6379
REDIS_PASSWORD="chenmo@123"# 數據和配置文件的映射路徑
HOST_DATA_DIR="/work/docker/redis"       # 宿主機的數據目錄
HOST_CONFIG_FILE="/work/docker/conf/redis.conf" # 宿主機的配置文件路徑# 創建宿主機目錄(如果不存在)
echo "檢查并創建宿主機目錄..."
mkdir -p "$HOST_DATA_DIR"
mkdir -p "$(dirname "$HOST_CONFIG_FILE")"# 檢查配置文件是否存在,如果不存在則生成默認配置文件
if [ ! -f "$HOST_CONFIG_FILE" ]; thenecho "生成默認 Redis 配置文件到 $HOST_CONFIG_FILE ..."cat <<EOF > "$HOST_CONFIG_FILE"
# Redis 默認配置文件
bind 0.0.0.0
port $CONTAINER_PORT
requirepass $REDIS_PASSWORD
dir /data
appendonly yes
EOF
fi# 檢查容器是否已經存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,嘗試刪除舊容器..."docker rm -f "$CONTAINER_NAME"
fi# 啟動 Redis 容器
echo "正在啟動 Redis 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \-p "$HOST_PORT:$CONTAINER_PORT" \-v "$HOST_DATA_DIR:/data" \-v "$HOST_CONFIG_FILE:/usr/local/etc/redis/redis.conf" \"$IMAGE_NAME" \redis-server /usr/local/etc/redis/redis.conf# 檢查容器是否啟動成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "Redis 容器已成功啟動!"echo "數據目錄: $HOST_DATA_DIR"echo "配置文件: $HOST_CONFIG_FILE"
elseecho "Redis 容器啟動失敗,請檢查日志。"
fi

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

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

相關文章

WPF學習筆記(27)科學計算器

科學計算器1. 前端界面2. 功能代碼3. 效果展示1. 前端界面 <Window x:Class"Cal.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http:/…

【Linux系列】unzip file 命令

博客目錄掌握 unzip -o 命令&#xff1a;高效解壓并覆蓋文件的完整指南一、unzip 命令基礎二、-o 選項的核心作用三、典型應用場景四、與其他選項的組合使用五、注意事項與風險防范六、替代方案與高級技巧掌握 unzip -o 命令&#xff1a;高效解壓并覆蓋文件的完整指南 在日常的…

1965–2022年中國大陸高分辨率分部門用水數據集,包含:灌溉用水、工業制造用水、生活用水和火電冷卻

1965–2022年中國大陸高分辨率部門用水數據集 高質量用水數據集對推進變化環境下的水資源研究至關重要。然而&#xff0c;現有中國用水數據通常按行政區劃或流域匯總&#xff0c;時空分辨率不足&#xff0c;難以支撐人類用水模式及時空變化特征的精細化分析。為此&#xff0c;…

git中的指令解釋

在 Git 的 diff 輸出中&#xff0c;---、 和 ... 塊的含義如下&#xff1a; 1. --- a/1.py 和 b/1.py --- a/1.py&#xff1a;表示舊版本的文件路徑&#xff08;通常是工作目錄或上一次提交的版本&#xff09;。 b/1.py&#xff1a;表示新版本的文件路徑&#xff08;通常是暫存…

STM32實現四自由度機械臂(SG90舵機)多功能控制(軟件篇freertos)

書接上回的硬件篇STM32控制四自由度機械臂&#xff08;SG90舵機&#xff09;&#xff08;硬件篇&#xff09;&#xff08;簡單易復刻&#xff09;-CSDN博客 此時硬件平臺已經搭建完畢&#xff0c;軟件總共設計了三種模式&#xff0c;分別為 模式1&#xff1a;搖桿&藍牙模…

docker常用命令集(2)

接前一篇文章&#xff1a;docker常用命令集&#xff08;1&#xff09; 本文內容參考&#xff1a; Docker build 命令 | 菜鳥教程 docker基礎(二)之docker build-CSDN博客 Docker push 命令 | 菜鳥教程 Docker pull 命令 | 菜鳥教程 特此致謝&#xff01; 3. docker build …

舒爾特方格訓練小游戲流量主微信小程序開源

功能特點 游戲核心功能&#xff1a; 隨機生成55舒爾特方格 按順序點擊數字1-25 實時計時和嘗試次數統計 錯誤點擊反饋&#xff08;視覺和觸覺&#xff09; 數據統計&#xff1a; 記錄每次完成時間 保存歷史最佳成績 保存最近5次嘗試記錄 統計嘗試次數&#xff08;錯誤點擊&…

在Spring Boot 開發中 Bean 的聲明和依賴注入最佳的組合方式是什么?

在Spring Boot 開發中&#xff0c;社區和 Spring 官方已經形成了一套非常明確的最佳實踐。這個黃金組合就是&#xff1a; Bean 聲明&#xff1a;使用構造型注解&#xff08;Stereotype Annotations&#xff09;&#xff0c;如 Service, Repository, Component 等。依賴注入&…

Oxygen XML Editor 26.0編輯器

Oxygen XML Editor 26.0編輯器 歡迎使用Oxygen XML Editor 26.0編輯器準備工作安裝javajdk安裝jdk驗證Oxygen XML Editor 26.0安裝歡迎使用Oxygen XML Editor 26.0編輯器 準備工作安裝java Java官網下載地址:https://www.oracle.com/java/technologies/ Oxygen XML Editor 2…

AWS Lambda Container 方式部署 Flask 應用并通過 API Gateway 提供訪問

前言 一年前寫過一篇 Lambda 運行 Flask 應用的博文: https://lpwmm.blog.csdn.net/article/details/139756140 當時使用的是 ZIP 包方式部署應用代碼, 對于簡單的 API 開發用起來還是可以的, 但是如果需要集成到 CI/CD pipeline 里面就有點不太優雅. 本文將介紹使用容器方式…

React虛擬DOM的進化之路

引言 在Web前端開發中&#xff0c;用戶交互的流暢性和頁面性能一直是核心挑戰。早期&#xff0c;開發者直接操作真實DOM&#xff08;Document Object Model&#xff09;時&#xff0c;頻繁的重排&#xff08;reflow&#xff09;和重繪&#xff08;repaint&#xff09;導致性能…

(7)機器學習小白入門 YOLOv:機器學習模型訓練詳解

— (1)機器學習小白入門YOLOv &#xff1a;從概念到實踐 (2)機器學習小白入門 YOLOv&#xff1a;從模塊優化到工程部署 (3)機器學習小白入門 YOLOv&#xff1a; 解鎖圖片分類新技能 (4)機器學習小白入門YOLOv &#xff1a;圖片標注實操手冊 (5)機器學習小白入門 YOLOv&#xff…

初識MySQL(三)之主從配置與讀寫分離實戰

主重復制 主重復制原理master開啟二進制日志記錄slave開啟IO進程&#xff0c;從master中讀取二進制日志并寫入slave的中繼日志slave開啟SQL進程&#xff0c;從中繼日志中讀取二進制日志并進行重放最終&#xff0c;達到slave與master中數據一致的狀態&#xff0c;我們稱作為主從…

RabbitMQ面試精講 Day 2:RabbitMQ工作模型與消息流轉

【RabbitMQ面試精講 Day 2】RabbitMQ工作模型與消息流轉 開篇 歡迎來到"RabbitMQ面試精講"系列的第2天&#xff0c;今天我們將深入探討RabbitMQ的工作模型與消息流轉機制。這是面試中最常被問到的核心知識點之一&#xff0c;90%的RabbitMQ面試都會涉及消息流轉流程…

基于SpringBoot3集成Kafka集群

1. build.gradle依賴引入 implementation org.springframework.kafka:spring-kafka:3.2.02. 新增kafka-log.yml文件 在resource/config下面新增kafka-log.yml&#xff0c;配置主題與消費者組 # Kafka消費者群組 kafka:consumer:group:log-data: log-data-grouptopic:log-data: …

wpf Canvas 導出圖片

在WPF中將Canvas導出為圖片主要涉及以下關鍵步驟和注意事項: ?核心實現方法?使用RenderTargetBitmap將Canvas渲染為位圖,再通過PngBitmapEncoder保存為PNG文件。需注意臨時移除Canvas的布局變換(LayoutTransform)以避免渲染異常?1。示例代碼片段:CanvasExporter.cs pu…

lvs負載均衡實操模擬

目錄 一、配置準備 二、NET模式 修改LVS端 開啟路由 修改對內網卡 ens160 修改對外網卡 ens224 加載網卡配置文件 修改web1端 修改網卡信息 重啟網絡 檢測 配置web2 檢測 驗證配置是否正常 啟動nginx服務 驗證以上配置 添加lvs規則 驗證 三、DR模式 修改…

Spring Boot 是如何簡化 IoC 的配置的?

首先Spring Boot 并沒有發明新的 IoC 理論&#xff0c;它做的也不是替換掉 Spring IoC 容器。相反&#xff0c;Spring Boot 是 Spring IoC 思想的實踐者和簡化者。它通過**“約定優于配置”&#xff08;Convention over Configuration&#xff09;**的理念&#xff0c;將原本繁…

Go語言中的組合式接口設計模式

文章目錄Go語言中的組合式接口設計模式背景和需求組合式接口設計Go語言中的組合式接口設計模式 背景和需求 在微服務架構和復雜業務系統中&#xff0c;我們經常需要調用多個外部服務或內部模塊。傳統的做法是將所有方法都放在一個大接口中&#xff0c;但這種設計會導致接口臃…

React - createPortal

什么是createPortal&#xff1f;注意這是一個API&#xff0c;不是組件&#xff0c;他的作用是&#xff1a;將一個組件渲染到DOM的任意位置&#xff0c;跟Vue的Teleport組件類似。用法 import { createPortal } from react-dom;const App () > {return createPortal(<div…