健康檢查工具
大約 4 分鐘
健康檢查工具
1. 概述
IoTDB 健康檢查工具是一個(gè)用于檢測(cè) IoTDB 節(jié)點(diǎn)運(yùn)行環(huán)境的工具。它可以幫助用戶在安裝部署數(shù)據(jù)庫(kù)前或運(yùn)行期間檢查節(jié)點(diǎn)的運(yùn)行環(huán)境,并獲取詳細(xì)的檢查結(jié)果。
2. 前置要求
Linux 系統(tǒng)
nc(netcat)工具:默認(rèn)已安裝,用戶需要有權(quán)限執(zhí)行。lsof或netstat:至少安裝其中一個(gè),用戶需要有權(quán)限執(zhí)行。
檢查相應(yīng)工具是否已安裝:
檢查
nc是否安裝:nc -h檢查
lsof是否安裝:lsof -v
Windows 系統(tǒng)
- PowerShell:默認(rèn)已啟動(dòng)。
3. 檢查項(xiàng)
- 檢查節(jié)點(diǎn)所在服務(wù)器的端口占用情況(windows/linux)
- 檢查當(dāng)前節(jié)點(diǎn)與集群中其他節(jié)點(diǎn)的端口連通性(windows/linux)
- 檢查系統(tǒng)中是否安裝了 JDK(java_home)(windows/linux)
- 檢查系統(tǒng)內(nèi)存分配情況,檢查 IoTDB 內(nèi)存分配情況(windows/linux)
- 檢查目錄訪問(wèn)權(quán)限(windows/linux)
- 檢查系統(tǒng)最大打開(kāi)文件數(shù)是否滿足要求(>= 65535)(僅 linux)
- 檢查系統(tǒng)是否禁用了 swap(windows/linux)
4. 使用方法
4.1 命令格式
health_check.sh/health_check.bat -ips<遠(yuǎn)程服務(wù)器IP+端口> , -o <all(default)/remote/local>4.2 參數(shù)說(shuō)明
| 參數(shù) | 說(shuō)明 | 是否必填 |
|---|---|---|
-ips | 遠(yuǎn)程服務(wù)器 IP 和端口,支持檢查多個(gè)服務(wù)器,格式如下:ip port1 port2,ip2 port2-1 port2-2 | 非必填 |
-o | 檢查參數(shù),可選值為local(本機(jī)檢查)、remote(遠(yuǎn)程服務(wù)器端口連接性檢查)、all(本機(jī)和遠(yuǎn)程服務(wù)器端口一起檢查),默認(rèn)值為all | 非必填 |
5. 使用方法
5.1 示例 1:檢查全部
health_check.sh/health_check.bat -ips 172.20.31.19 6667 18080,10.0.6.230 10311輸出結(jié)果:
Check: Installation Environment(JDK)
Requirement: JDK Version >=1.8
Result: JDK Version 11.0.21
Check: Installation Environment(Memory)
Requirement: Allocate sufficient memory for IoTDB
Result: Total Memory 7.8Gi, 2.33 G allocated to IoTDB ConfigNode, 3.88 G allocated to IoTDB DataNode
Check: Installation Environment(Directory Access)
Requirement: IoTDB needs data/datanode/data,data/datanode/consensus,data/datanode/system,data/datanode/wal,data/confignode/system,data/confignode/consensus,ext/pipe,ext/udf,ext/trigger write permission.
Result:
data/datanode/data has write permission
data/datanode/consensus has write permission
data/datanode/system has write permission
data/datanode/wal has write permission
data/confignode/system has write permission
data/confignode/consensus has write permission
ext/pipe has write permission
ext/udf has write permission
ext/trigger has write permission
Check: Network(Local Port)
Requirement: Port 16668 10730 11742 10750 10760 10710 10720 is not occupied
Result:
Port 16668 10730 11742 10750 10760 10710 10720 is free
Check: Network(Remote Port Connectivity)
Requirement: 172.20.31.19:6667 18080 ,10.0.6.230:10311 need to be accessible
Result:
The following server ports are inaccessible:
IP: 10.0.6.230, Ports: 10311
Check: System Settings(Maximum Open Files Number)
Requirement: >= 65535
Result: 65535
Check: System Settings(Swap)
Requirement: disabled
Result: disabled.5.2 示例 2:檢查本機(jī)
health_check.sh/health_check.bat -o local輸出結(jié)果:
Check: Installation Environment(JDK)
Requirement: JDK Version >=1.8
Result: JDK Version 11.0.21
Check: Installation Environment(Memory)
Requirement: Allocate sufficient memory for IoTDB
Result: Total Memory 7.8Gi, 2.33 G allocated to IoTDB ConfigNode, 3.88 G allocated to IoTDB DataNode
Check: Installation Environment(Directory Access)
Requirement: IoTDB needs data/datanode/data,data/datanode/consensus,data/datanode/system,data/datanode/wal,data/confignode/system,data/confignode/consensus,ext/pipe,ext/udf,ext/trigger write permission.
Result:
data/datanode/data has write permission
data/datanode/consensus has write permission
data/datanode/system has write permission
data/datanode/wal has write permission
data/confignode/system has write permission
data/confignode/consensus has write permission
ext/pipe has write permission
ext/udf has write permission
ext/trigger has write permission
Check: Network(Local Port)
Requirement: Port 16668 10730 11742 10750 10760 10710 10720 is not occupied
Result:
Port 16668 10730 11742 10750 10760 10710 10720 is free
Check: System Settings(Maximum Open Files Number)
Requirement: >= 65535
Result: 65535
Check: System Settings(Swap)
Requirement: disabled
Result: disabled.5.3 示例 3:檢查遠(yuǎn)程
health_check.sh/health_check.bat -o remote -ips 172.20.31.19 6667 18080,10.0.6.230 10311輸出結(jié)果:
Check: Network(Remote Port Connectivity)
Requirement: 172.20.31.19:6667 18080 ,10.0.6.230:10311 need to be accessible
Result:
The following server ports are inaccessible:
IP: 10.0.6.230, Ports: 103116. 常見(jiàn)問(wèn)題
6.1 如何調(diào)整內(nèi)存分配
- 修改
confignode-env.sh中的MEMORY_SIZE - 修改
datanode-env.sh中的MEMORY_SIZE
6.2 如何修改最大打開(kāi)數(shù)文件
- 設(shè)置系統(tǒng)最大打開(kāi)文件數(shù)為 65535,以避免出現(xiàn) "太多的打開(kāi)文件 "的錯(cuò)誤。
#查看當(dāng)前限制
ulimit -n
# 臨時(shí)修改
ulimit -n 65535
# 永久修改
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
#退出當(dāng)前終端會(huì)話后查看,預(yù)期顯示65535
ulimit -n6.3 如何禁用 Swap 及禁用原因
- 禁用原因:IoTDB 使用 Swap 會(huì)導(dǎo)致性能下降,建議禁用。
- 禁用方式:
echo "vm.swappiness = 0">> /etc/sysctl.conf
# 一起執(zhí)行 swapoff -a 和 swapon -a 命令是為了將 swap 里的數(shù)據(jù)轉(zhuǎn)儲(chǔ)回內(nèi)存,并清空 swap 里的數(shù)據(jù)。
# 不可省略 swappiness 設(shè)置而只執(zhí)行 swapoff -a;否則,重啟后 swap 會(huì)再次自動(dòng)打開(kāi),使得操作失效。
swapoff -a && swapon -a
# 在不重啟的情況下使配置生效。
sysctl -p
# 檢查內(nèi)存分配,預(yù)期 swap 為 0
free -m