CentOS上部署Redis及其哨兵(Sentinel)模式

架構:說明我這里是偽集群的,redis 在同一臺機器,Sentinel 只有一個,也存在單點故障問題

只能當作開發環境使用,要滿足生產至少是下面這種架構?

+-------------------+      +-------------------+      +-------------------+
|  Sentinel 1       |      |  Sentinel 2       |      |  Sentinel 3       |
|  (Monitoring)     |<---->|  (Monitoring)     |<---->|  (Monitoring)     |
+-------------------+      +-------------------+      +-------------------+|                          |                          |v                          v                          v
+-------------------+      +-------------------+      +-------------------+
|  Redis Master     |<---->|  Redis Slave 1    |<---->|  Redis Slave 2    |
|  (Port: 6379)     |      |  (Port: 6380)     |      |  (Port: 6381)     |
+-------------------+      +-------------------+      +-------------------+

安裝Shell 腳本:

記得賦予可執行權限:chmod +x redis_sentinel_manager.sh

?

#!/bin/bash# =============================================================================
# Script Name: redis_sentinel_manager.sh
# Version: v1.4 (Enhanced stop function using ps/kill)
# Description: A script to install and manage Redis Sentinel mode on CentOS 7/8
# Author: ldj
# Creation Date: 2025-07-31
# =============================================================================# 全局變量
REDIS_VERSION="7.0.14"
REDIS_PORT1=6379
REDIS_PORT2=6380
REDIS_PORT3=6381
SENTINEL_PORT=26379
REDIS_DIR="/usr/local/redis"
DATA_DIR="/var/lib/redis"
LOG_DIR="/var/log/redis"
REDIS_PASSWORD="redis123456"  # 建議設置強密碼# 檢查權限
if [ "$(id -u)" -ne 0 ]; thenecho "請使用root權限運行此腳本"exit 1
fi# 顯示使用說明
usage() {echo "使用方法:"echo "$0 <install|uninstall|start|stop>"echo ""echo "功能說明:"echo "  install   - 安裝Redis哨兵模式"echo "  uninstall - 卸載Redis及相關文件"echo "  start     - 啟動Redis服務"echo "  stop      - 停止Redis服務"
}# 檢查Redis實例和Sentinel是否正在運行
check_running() {if pgrep -f "redis-server" > /dev/null; thenecho "[$(date +'%Y-%m-%d %H:%M:%S')] 發現Redis實例正在運行,請先停止所有Redis實例和服務后再進行安裝。"exit 1fiif pgrep -f "redis-sentinel" > /dev/null; thenecho "[$(date +'%Y-%m-%d %H:%M:%S')] 發現Sentinel正在運行,請先停止Sentinel服務后再進行安裝。"exit 1fi
}# 安裝函數
install() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] 開始安裝Redis哨兵模式..."# 檢查是否有正在運行的Redis實例或Sentinelcheck_running# 創建目錄mkdir -p $REDIS_DIR $DATA_DIR $LOG_DIRmkdir -p $DATA_DIR/$REDIS_PORT1mkdir -p $DATA_DIR/$REDIS_PORT2mkdir -p $DATA_DIR/$REDIS_PORT3mkdir -p $DATA_DIR/sentinel# 安裝依賴echo "[$(date +'%Y-%m-%d %H:%M:%S')] 安裝編譯依賴..."yum install -y wget gcc make tcl || { echo "安裝依賴失敗"; exit 1; }# 下載編譯Rediscd $REDIS_DIR || { echo "無法進入目錄 $REDIS_DIR"; exit 1; }echo "[$(date +'%Y-%m-%d %H:%M:%S')] 下載Redis $REDIS_VERSION..."wget https://download.redis.io/releases/redis-$REDIS_VERSION.tar.gz || { echo "下載Redis失敗"; exit 1; }tar xzf redis-$REDIS_VERSION.tar.gz || { echo "解壓Redis失敗"; exit 1; }cd redis-$REDIS_VERSION || { echo "無法進入Redis源碼目錄"; exit 1; }# 編譯 (在源碼根目錄)echo "[$(date +'%Y-%m-%d %H:%M:%S')] 編譯Redis..."make || { echo "編譯Redis失敗"; exit 1; }# ========== 關鍵修復:正確安裝所有二進制文件 ==========# 直接在 src 目錄執行 make install,這是標準做法echo "[$(date +'%Y-%m-%d %H:%M:%S')] 安裝Redis二進制文件 (server, cli, sentinel)..."cd src || { echo "無法進入 src 目錄"; exit 1; }make install || { echo "安裝二進制文件失敗"; exit 1; }# 驗證 redis-sentinel 是否安裝成功if ! command -v redis-sentinel &> /dev/null; thenecho "致命錯誤: redis-sentinel 安裝失敗,未找到可執行文件。"exit 1fiecho "[$(date +'%Y-%m-%d %H:%M:%S')] redis-sentinel 安裝驗證通過。"# ============================================================# 可選:運行測試 (在源碼根目錄)echo "[$(date +'%Y-%m-%d %H:%M:%S')] 運行測試驗證安裝..."cd .. # 回到源碼根目錄make test || echo "[$(date +'%Y-%m-%d %H:%M:%S')] 測試運行完成 (可能存在非致命錯誤,但核心功能應正常)。"# ==================== 關鍵修改:配置并啟動 Redis 實例 (注意順序!) ====================echo "[$(date +'%Y-%m-%d %H:%M:%S')] 配置并啟動 Redis 實例..."# --- 步驟 1: 配置并啟動 主節點 (REDIS_PORT1) ---echo "[$(date +'%Y-%m-%d %H:%M:%S')] 配置主節點 (端口: $REDIS_PORT1)..."cat <<EOF > $REDIS_DIR/redis-$REDIS_PORT1.conf
port $REDIS_PORT1
bind 0.0.0.0
dir $DATA_DIR/$REDIS_PORT1
pidfile /var/run/redis-$REDIS_PORT1.pid
logfile "$LOG_DIR/redis-$REDIS_PORT1.log"
daemonize yes
appendonly yes
requirepass $REDIS_PASSWORD
masterauth $REDIS_PASSWORD
EOF# 啟動主節點redis-server $REDIS_DIR/redis-$REDIS_PORT1.conf || { echo "啟動主節點 $REDIS_PORT1 失敗"; exit 1; }echo "[$(date +'%Y-%m-%d %H:%M:%S')] 主節點 (端口: $REDIS_PORT1) 已啟動。"# --- 步驟 2: 配置并啟動 從節點 (REDIS_PORT2 和 REDIS_PORT3) ---for PORT in $REDIS_PORT2 $REDIS_PORT3; doecho "[$(date +'%Y-%m-%d %H:%M:%S')] 配置從節點 (端口: $PORT)..."cat <<EOF > $REDIS_DIR/redis-$PORT.conf
port $PORT
bind 127.0.0.1
dir $DATA_DIR/$PORT
pidfile /var/run/redis-$PORT.pid
logfile "$LOG_DIR/redis-$PORT.log"
daemonize yes
appendonly yes
requirepass $REDIS_PASSWORD
masterauth $REDIS_PASSWORD
replicaof 127.0.0.1 $REDIS_PORT1
EOFdone# 啟動從節點sleep 2 # 給主節點一點時間完全啟動for PORT in $REDIS_PORT2 $REDIS_PORT3; doredis-server $REDIS_DIR/redis-$PORT.conf || { echo "啟動從節點 $PORT 失敗"; exit 1; }echo "[$(date +'%Y-%m-%d %H:%M:%S')] 從節點 (端口: $PORT) 已啟動。"done# --- 步驟 3: 配置并啟動 Sentinel ---echo "[$(date +'%Y-%m-%d %H:%M:%S')] 配置Sentinel..."cat <<EOF > $REDIS_DIR/sentinel.conf
port $SENTINEL_PORT
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile "$LOG_DIR/sentinel.log"
dir $DATA_DIR/sentinelsentinel monitor mymaster 127.0.0.1 $REDIS_PORT1 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster $REDIS_PASSWORD
EOF# 啟動Sentinelecho "[$(date +'%Y-%m-%d %H:%M:%S')] 啟動Sentinel..."redis-sentinel $REDIS_DIR/sentinel.conf || { echo "啟動Sentinel失敗"; exit 1; }echo "[$(date +'%Y-%m-%d %H:%M:%S')] Sentinel 已啟動。"# 防火墻配置 (略,保持不變)echo "[$(date +'%Y-%m-%d %H:%M:%S')] 配置防火墻規則..."if systemctl is-active --quiet firewalld; thenfirewall-cmd --permanent --add-port=$REDIS_PORT1/tcpfirewall-cmd --permanent --add-port=$REDIS_PORT2/tcpfirewall-cmd --permanent --add-port=$REDIS_PORT3/tcpfirewall-cmd --permanent --add-port=$SENTINEL_PORT/tcpfirewall-cmd --reload && echo "[$(date +'%Y-%m-%d %H:%M:%S')] 防火墻規則已配置。"elseecho "[$(date +'%Y-%m-%d %H:%M:%S')] 防火墻服務(firewalld)未運行,跳過防火墻配置。"fiecho "[$(date +'%Y-%m-%d %H:%M:%S')] 安裝完成!"echo "請使用 'redis-cli -p $SENTINEL_PORT' 連接 Sentinel 并檢查狀態。"echo "例如: redis-cli -p $SENTINEL_PORT -a $REDIS_PASSWORD"echo "在 Sentinel CLI 中執行: SENTINEL masters"
}# 卸載函數
uninstall() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] 卸載Redis及相關文件..."# 停止服務stop# 刪除文件rm -rf $REDIS_DIR $DATA_DIR $LOG_DIRecho "[$(date +'%Y-%m-%d %H:%M:%S')] 卸載完成!"
}# 啟動函數
start() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] 啟動Redis服務..."for PORT in $REDIS_PORT1 $REDIS_PORT2 $REDIS_PORT3; doredis-server $REDIS_DIR/redis-$PORT.conf || { echo "啟動Redis實例 $PORT 失敗"; exit 1; }doneredis-sentinel $REDIS_DIR/sentinel.conf || { echo "啟動Sentinel失敗"; exit 1; }echo "[$(date +'%Y-%m-%d %H:%M:%S')] Redis服務已啟動。"
}# 停止函數
stop() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] 停止Redis服務..."# 逐個殺死 Redis 實例for PORT in $REDIS_PORT1 $REDIS_PORT2 $REDIS_PORT3; do# 查找進程pids=$(ps aux | grep -E "redis-server.*127.0.0.1:$PORT|redis-server.*:$PORT" | grep -v grep | awk '{print $2}')if [ ! -z "$pids" ]; thenecho "正在強制停止端口 $PORT 的 Redis 實例 (PID: $pids)..."# 直接發送 SIGKILL (-9),強制終止kill -9 $pidselseecho "端口 $PORT 的 Redis 實例未找到。"fidone# 停止 Sentinelsentinel_pids=$(ps aux | grep "redis-sentinel" | grep -v grep | awk '{print $2}')if [ ! -z "$sentinel_pids" ]; thenecho "正在強制停止 Sentinel (PID: $sentinel_pids)..."# 直接發送 SIGKILL (-9),強制終止kill -9 $sentinel_pidselseecho "Sentinel 實例未找到。"fiecho "[$(date +'%Y-%m-%d %H:%M:%S')] Redis服務已停止。"
}# 根據參數執行操作
case $1 ininstall)install;;uninstall)uninstall;;start)start;;stop)stop;;*)usageexit 1;;
esac

?

?重新運行:?./redis_sentinel_manager.sh install

驗證:

?第一步:確認進程都在跑

ps -ef | grep redis
  • 3 個 Redis 實例(1 主 2 從)起來了。
  • 1 個 Sentinel 也起來了。 ??服務啟動成功!

第二步:連上 Sentinel,問它“主節點是誰?”

redis-cli -p 26379
SENTINEL get-master-addr-by-name mymaster

這說明:

  • Sentinel 正在監控一個叫?mymaster?的主節點。
  • 當前主節點是?127.0.0.1:6379。 ??哨兵在正常工作!

?

第三步:寫個數據,看能不能讀到(功能測試)

1.連主節點寫數據:

redis-cli -p 6379> AUTH redis123456
> SET name ldj
> exit

2.連從節點讀數據:?

redis-cli -p 6380
> AUTH redis123456
> GET name

如果返回 "ldj",說明主從數據同步正常

?

補充:

部署方式(生產推薦)

方法工具說明
1. 容器化部署(推薦)Docker + Docker Compose / Kubernetes用容器封裝 Redis 和 Sentinel,配置集中管理,啟動快,環境一致
2. 配置管理工具Ansible / SaltStack / Puppet編寫 Playbook,一鍵在多臺機器部署,保證配置一致性
3. 云服務商托管阿里云 Redis / AWS ElastiCache / Azure Cache完全托管,自動故障轉移、備份、監控,最省心

?

補充:使用docker-compose 安裝

redis-docker-compose.yml

version: '3.8'services:redis-master:image: redis:6.0container_name: redis-mastercommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]volumes:- ./redis-master.conf:/usr/local/etc/redis/redis.conf- redis-data-master:/datanetworks:- redis-netports:- "6379:6379"redis-slave-1:image: redis:6.0container_name: redis-slave-1command: ["redis-server", "/usr/local/etc/redis/redis.conf"]volumes:- ./redis-slave-1.conf:/usr/local/etc/redis/redis.conf- redis-data-slave-1:/datanetworks:- redis-netports:- "6380:6379"depends_on:- redis-masterredis-slave-2:image: redis:6.0container_name: redis-slave-2command: ["redis-server", "/usr/local/etc/redis/redis.conf"]volumes:- ./redis-slave-2.conf:/usr/local/etc/redis/redis.conf- redis-data-slave-2:/datanetworks:- redis-netports:- "6381:6379"depends_on:- redis-mastersentinel-1:image: redis:6.0container_name: sentinel-1command: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]volumes:- ./sentinel-1.conf:/usr/local/etc/redis/sentinel.confnetworks:- redis-netports:- "26379:26379"depends_on:- redis-mastersentinel-2:image: redis:6.0container_name: sentinel-2command: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]volumes:- ./sentinel-2.conf:/usr/local/etc/redis/sentinel.confnetworks:- redis-netports:- "26380:26379"depends_on:- redis-mastersentinel-3:image: redis:6.0container_name: sentinel-3command: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]volumes:- ./sentinel-3.conf:/usr/local/etc/redis/sentinel.confnetworks:- redis-netports:- "26381:26379"depends_on:- redis-mastervolumes:redis-data-master:redis-data-slave-1:redis-data-slave-2:networks:redis-net:driver: bridge

?

配置文件示例

redis-master.conf

port 6379
bind 0.0.0.0
protected-mode yes
appendonly yes
requirepass yourStrongPassword!
masterauth yourStrongPassword!

redis-slave-1.conf?和?redis-slave-2.confyunx

port 6379
bind 0.0.0.0
protected-mode yes
appendonly yes
requirepass yourStrongPassword!
masterauth yourStrongPassword!
slaveof redis-master 6379

運行:

docker-compose -f redis-docker-compose.yml up -d

?

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

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

相關文章

《軟件測試與質量控制》實驗報告二 單元測試

目 錄 一、實驗學時 二、實驗目的 三、實驗環境 &#xff08;一&#xff09;硬件環境&#xff1a; &#xff08;二&#xff09;軟件環境&#xff1a; 四、實驗內容 1、實驗方案&#xff1a; 2、實驗步驟&#xff1a; 3、設計思路&#xff1a; 1、安裝JUnit和Eclemma…

k8s模式部署PolarDB-X

當前文檔適配PolarDB-X V2.4.0 版本 環境描述&#xff1a; 部署機&#xff08;ops&#xff09;1x2.2x.2x8.116&#xff0c;部署機需要可以訪問互聯網。使用ansible進行部署&#xff0c;自行安裝ansible。需要部署兩個k8s集群&#xff0c;分別在其上安裝一個polardb-x集群。 部…

Flask + YARA-Python*實現文件掃描功能

以下是一個 完整的 Web API 示例&#xff0c;使用 Flask YARA-Python 實現文件掃描功能&#xff0c;支持上傳文件并返回 YARA 規則匹配結果。 ? 功能說明 提供一個 /scan 接口&#xff0c;支持文件上傳使用預加載的 YARA 規則進行掃描返回 JSON 格式的匹配結果支持多規則、可…

WinForm之NumericUpDown控件

NumericUpDown&#xff08;數字上下控件&#xff09;是 WinForm 中專門用于輸入和調整數值的控件&#xff0c;它結合了文本框和上下按鈕&#xff0c;用戶可通過點擊按鈕或直接輸入來設置數值&#xff0c;且能嚴格限制數值范圍&#xff08;最小值、最大值&#xff09;和步長&…

一文讀懂K8S kubectl 命令,運維小白必看!

一、Kubectl 是什么? Kubectl 是 Kubernetes(簡稱 K8S)集群的命令行工具,它就像是一把萬能鑰匙,讓我們可以與 K8S 集群進行交互,輕松管理集群中的各種資源,像是 Pod、Service、Deployment 等等。通過向 K8S API 發送 REST 請求,kubectl 實現了對集群資源的增刪改查等操…

髖臼方向的定義與測量-I

近期看到關于髖臼方向不同應用場景下的不同定義&#xff0c;覺得特別有意思&#xff0c;但是&#xff0c;原文是影印本&#xff0c;不太方便實用屏幕取詞翻譯&#xff0c;且一些專業術語也不太好理解。 因此&#xff0c;我將原文和翻譯整理了一些&#xff0c;不對的地方&#x…

Python爬蟲實戰:研究mahotas庫,構建圖像獲取及處理系統

一、引言 (一)研究背景 在信息爆炸的時代,圖像作為一種直觀、豐富的信息載體,其數量在互聯網上呈現指數級增長。這些圖像數據涵蓋了自然景觀、動植物、工業產品等多個領域,為模式識別、機器學習等研究提供了寶貴的數據源。特別是在植物學研究領域,葉片圖像包含了豐富的…

【04】海康相機C#開發——VS 在編譯時,提示“Files的值“+亂碼情況解決辦法’ ,C#項目打開編譯時報錯:Files 的值“IGEF‘,

文章目錄C#項目打開&#xff0c;用VS 在編譯時編譯時報錯&#xff1a;Files 的值“亂碼&#xff1b; 有的編譯器會顯示&#xff1a;Files的值“IGEF 以上報錯都為同一種錯誤&#xff0c;.net中的配置文件亂碼導致的&#xff1a; 找到項目目錄下的“..\obj\Debug\”的文件夾中…

MySQL隱式轉換陷阱:從錯誤查詢案例解析索引失效與數據類型匹配

開始之前&#xff0c;先問個問題問題&#xff1a;mysql 數據類型是date &#xff0c;怎么寫查詢條件索引有效&#xff1f; ——下面帶著疑問看下去。 一、mysql-8.隱式轉換導致索引失效或查出不符合where條件結果 今天在執行一條sql語句時候&#xff0c;where條件寫錯了&#x…

【sklearn(01)】數據集加載、劃分,csv文件創建,特征工程,無量綱化

目錄sklearn數據集玩具數據集現實世界數據集加載玩具數據集獲取現實世界數據集本地csv數據創建csv文件pandas加載csv數據集劃分特征工程步驟特征工程APIDictVectorizer 字典列表特征提取APICountVectorizer 文本特征提取API英文文本提取中文文本提取TfidfVectorizer TF-IDF文本…

docker desktop入門(docker桌面版)(提示wsl版本太低解決辦法)

參考文章&#xff1a;Docker Desktop Engine Stopped原因分析&#xff08;docker桌面停止&#xff09;WSL沒裝或沒更新 文章目錄Docker Desktop入門指南1. Docker Desktop簡介2. 安裝Docker Desktop2.1 系統要求2.2 下載和安裝3. 配置Docker Desktop修改默認存儲路徑4. 運行你的…

《n8n基礎教學》第三節:模擬一個自動化場景

1、模擬場景Nathan &#x1f64b;是 ABCorp 的分析經理&#xff0c;他的工作是支持 ABCorp 團隊的報告和分析。作為一個真正的多面手&#xff0c;他還負責處理一些雜項任務。Nathan 做的一些事情是重復且枯燥的。他希望自動化其中一些任務&#xff0c;以避免精疲力竭。作為一名…

CodeRush AI 助手進駐 Visual Studio:AiGen/AiFind 亮相(三)

CodeRush 是專為 Visual Studio 打造的高效開發插件&#xff0c;通過集成 AI 驅動功能&#xff08;如自然語言生成代碼的 AiGen 和智能搜索邏輯的 AiFind&#xff09;、語音交互及深度重構工具&#xff0c;直接在 IDE 內無縫完成代碼生成、修改與導航&#xff0c;消除窗口切換與…

如何從頭開始搭建屬于自己的家用nas實現內網穿透訪問

最近我在家部署了群暉NAS923&#xff0c;從而實現內網穿透&#xff0c;下面寫一個新手向教程&#xff1a; 一、硬件安裝與初始化設置 1. 硬盤安裝&#xff08;已完成可跳過&#xff09; 群暉 923 支持 4 塊 3.5 英寸硬盤&#xff0c;開箱后取出硬盤架&#xff0c;將硬盤&am…

mysql 之多表

mysql之多表已知2張基本表&#xff1a;部門表&#xff1a;dept &#xff08;部門號&#xff0c;部門名稱&#xff09;;員工表 emp&#xff08;員工號&#xff0c;員工姓名&#xff0c;年齡&#xff0c;入職時間&#xff0c;收入&#xff0c;部門號&#xff09;CREATE table dep…

【Django】-6- 登錄用戶身份鑒權

一、&#x1f6e1;? Django 鑒權 & 登錄控制 Django 自帶的鑒權系統&#xff08;用戶身份管理小管家&#xff09;鑒權系統能干啥&#xff1f;Django 自帶的鑒權系統&#xff0c;就像一個 “用戶身份管家” &#xff0c;幫你管好這些事兒&#xff1a;功能類比加密存儲用戶密…

winscp 連openwrt 返回127錯誤碼

winscp 連openwrt 24.10返回127錯誤碼。找了許多原因也沒搞清為啥&#xff08;客戶端加密方式、winscp版本過低等都試過&#xff09;&#xff0c;用SecureFx試了一下&#xff0c;發現是openwrt 24.10固件沒有安裝Sftp服器&#xff0c;用下列命令安裝即可。opkg install openssh…

Python編程基礎與實踐:Python文件處理入門

Python文件處理實戰 學習目標 通過本課程的學習&#xff0c;學員將掌握如何在Python中打開、讀取、寫入和關閉文件&#xff0c;了解文本文件和二進制文件的區別&#xff0c;以及在文件處理中的一些最佳實踐。 相關知識點 Python文件處理 學習內容 1 Python文件處理 1.1 文件的基…

Corrosion2靶機

打開靶機信息收集&#xff1a;kali里使用arp-scan -l或者netdiscover發現主機使用nmap掃描端口nmap -sS -sV -T4 -n -p- 192.168.31.20開啟了22、80、8080端口 8080發現開啟了tomcat服務掃出了他的ip以及他開放的端口&#xff0c;我們接下來拿瀏覽器訪問一下兩個頁面都沒有什么…

編程與數學 03-002 計算機網絡 18_物聯網與網絡

編程與數學 03-002 計算機網絡 18_物聯網與網絡一、物聯網的基本概念&#xff08;一&#xff09;物聯網的架構與層次&#xff08;二&#xff09;物聯網的關鍵技術二、物聯網網絡的構建&#xff08;一&#xff09;物聯網網絡的通信協議&#xff08;二&#xff09;物聯網網絡的拓…