文章目錄
參考:《官方部署文檔》https://github.com/vearch/vearch/blob/master/docs/Deploy.md
1 部署
1.1 安裝 vearch
在24
和107
兩臺機器上分別 安裝vearch 及其環境。
安裝參考:《圖像檢索引擎vearch安裝與測試使用
》:https://blog.csdn.net/u012052268/article/details/103264626
其中 在第1.3.2節的時候,不要直接運行bash run_docker.sh
, 因爲多臺機器運行,config文件需要改變了。
1.1.1 編譯Vearch_evn
cd vearch/cloud/
bash compile_env.sh
離線不能用?
1.1.2 編譯Vearch
cd vearch/cloud/
bash compile.sh
1.1.3 創建vearch可運行鏡像
bash build.sh
離線不能用??
1.1.4 分佈式部署配置文件
在cloud
文件夾內創建 config2master.toml
。配置好兩個主機sever地址。
內容爲:
[global]
name = "vearch"
data = ["datas/"]
log = "logs/"
level = "debug"
signkey = "vearch"
skip_auth = true
# if you are master you'd better set all config for router and ps and router and ps use default config it so cool
[[masters]]
name = "m1"
address = "192.168.1.1"
api_port = 8817
etcd_port = 2378
etcd_peer_port = 2390
etcd_client_port = 2370
[[masters]]
name = "m2"
address = "192.168.1.2"
api_port = 8817
etcd_port = 2378
etcd_peer_port = 2390
etcd_client_port = 2370
[router]
port = 9001
skip_auth = true
[ps]
rpc_port = 8081
raft_heartbeat_port = 8898
raft_replicate_port = 8899
heartbeat-interval = 200 #ms
raft_retain_logs = 10000
raft_replica_concurrency = 1
raft_snap_concurrency = 1
注意,要把192.168.1.1 和 192.168.1.2 更改爲自己的服務器地址24
,107
。
1.1.5 啓動運行veach
nohup docker run --net=host -v $PWD/config2master.toml:/vearch/config.toml ansj/vearch:0.2 all &
tail -100f nohup.out
千萬注意!!!:
- vearch兩臺機器必須在幾秒內 同時啓動,才能鏈接成功(2臺都是master)
- 107服務器 由於網段原因,必須關閉瀏覽器代理 才能訪問。
- 由於是在docker中啓動,所以:“容器與宿主機”以及“容器與局域網內其他機器” 直接通訊默認是關閉的。 所以,如過想要通過docker運行,就必須加上這個參數:
--net=host
來把容器與宿主機的網絡直接等同 ;而且加上這個參數後,就不用-p
映射端口了
參考《Docker容器訪問宿主機網絡》:https://jingsam.github.io/2018/10/16/host-in-docker.html
最後,
- 打開瀏覽器訪問
http://172.21.30.24:8817/_cluster/stats
和http://10.200.61.107:8817/_cluster/stats
驗證集羣狀態; - 並通過
nohup.out
觀察集羣心跳數據。
1.1.6 vearch運維:
- 觀察系統有沒有在運行vearch:
ps -ef | grep vearch # 查看進程
netstat -nap | grep 8817 # 查看端口占用
docker ps -a # 查看有沒有vearch容器在運行
- 關閉在運行的vearch:
docker ps -a # 查看有沒有vearch容器在運行
docker stop xxxxxx # 停止vearch容器
docker rm xxxxx # 刪除vearch容器
- 啓動 vearch容器
nohup docker run --net=host -v $PWD/config2master.toml:/vearch/config.toml ansj/vearch:0.2 all &
tail -100f nohup.out
1.2 運行圖像搜索插件
1.2.1 安裝運行環境
這裏會調用 python環境 以及訓練好的VGG16模型。 所以需要安裝一些python包,提前安裝好的可以忽略:
- shortuuid
- opencv-python-4.1.1.26
- opencv-python_headless (一定要裝,否則會報
ImportError: libSM.so.6
錯誤) - msgpack
- torch1.2 (一定要在官網 安裝cpu版本啊 血的教訓)
- torchvision 0.4 (一定要在官網 安裝cpu版本啊 血的教訓)
- pytorch官網上下載的
vgg16.pth
放到~/.cache/torch/checkpoints/
裏面 - 下載yolov3.weights 放入
/home/CVpy36/xuqingtang/vearch/plugin/model/
1.2.2 修改配置文件
修改配置文件..../vearch/plugin/src/config.py
把服務器ip地址修改爲 24 和107(端口不變)
1.2.3 啓動圖像搜索插件
以上環境準備好了,啓動圖片插件(雖然叫插件,但是爲封裝的flask藉口去調用vearch各種服務)
cd /home/vearch/vearch/plugin
# 直接運行
./bin/run.sh image運行
# 或者使用nohup
nohup ./bin/run.sh image &
tail -100f nohup.out
看到 ↓ 信息就成功了(nohup.out中不顯示錯誤就行):
load model success
1.2.4 image插件運維
- 觀察有沒有在運行image插件:
netstat -nap | grep 4101 # 查看端口占用
- 關閉在運行的image插件:
kill -9 xxpidxx
- 啓動 image插件
nohup ./bin/run.sh image &
tail -100f nohup.out
2 驗證分佈式性能
2.1 庫級別驗證
2.1.1 建立圖片數據庫 與 表
在A服務器上建立圖片數據庫 與 表,觀察B服務上的庫狀態。
代碼參見:ShangHuRuWangImageRetrieval_vearch_docker/vearcDbOperation.py
- 檢查集羣健康性,觀察集羣心跳數據是否正常;
- 對24服務器 進行建庫/建表操作;
- 查詢數據庫狀態:
- 24服務器 包含剛剛建立的庫和表;✅
- 107服務器 包含剛剛建立的庫和表;✅
2.1.1 刪除圖片數據庫 與 表
在A服務器上刪除圖片數據庫 與 表,觀察B服務上的庫狀態。(暫不驗證)
2.2 數據級別驗證
2.2.1 插入數據驗證
在A服務器上建立圖片數據庫 與 表,觀察B服務上的庫狀態。
代碼參見:ShangHuRuWangImageRetrieval_vearch_docker/imageRetrievalWithVearchPlugin.py
插入A測試B:
- 檢查集羣健康性,觀察集羣心跳數據是否正常;
- 對24服務器 進行
批量插入
多張斑馬
照片操作;✅ - 查詢數據庫狀態:
- 24 服務器 包含剛剛插入的圖片;✅
- 107服務器 包含剛剛插入的圖片;✅
插入B測試A:
- 檢查集羣健康性,觀察集羣心跳數據是否正常;
- 對107服務器 進行
批量插入
多張身份證
照片操作;✅ - 查詢數據庫狀態:
- 107服務器 搜索出剛剛插入的圖片;✅
- 24 服務器 搜索出剛剛插入的圖片;✅
2.2.2 刪除數據驗證
插入A測試B:
- 檢查集羣健康性,觀察集羣心跳數據是否正常;
- 對24服務器 進行
刪除
某張營業
照片操作;✅ - 查詢數據庫狀態:
- 24 服務器 查不到剛刪的圖片;✅
- 107服務器 查不到剛刪的圖片;✅