關於takin-data,你想知道的都在這裡(一)啟動命令篇

數列科技發表於2021-09-06

透過 docker 部署體驗 takin 的小夥伴都應該知道,在安裝部署手冊( )中有提到:在啟動 surge-deploy 任務前,需要將啟動命令中的 ip 引數替換為 docker 容器所在宿主機的 ip,很多小夥伴都在這裡踩過坑,有忘了修改的,有改錯的,還有不知道怎麼修改的,這些都會導致各種小夥伴們在體驗產品的過程中,遇到各種各種的問題。像這樣:


應用 agent 日誌中提示找不到日誌節點


關於takin-data,你想知道的都在這裡(一)啟動命令篇


還有像這樣:


小夥伴滿心歡喜壓測完,卻發現請求流量明細真空


關於takin-data,你想知道的都在這裡(一)啟動命令篇


其實這些,都跟 surge-deploy 任務是否正確啟動有著很大的關係,今天就來給大家說一說 surge-deploy 配置啟動命令的正確姿勢!


首先,在安裝完映象進入容器中,我們能看到這樣的目錄結構(當前目錄為/data 目錄):


關於takin-data,你想知道的都在這裡(一)啟動命令篇


如果發現自己的目錄結構和圖上有區別的小夥伴請不要著急,初次安裝映象需要一定的初始化時間,一些檔案可能還未被解壓出來,這個時間一般是 10 分鐘左右~


和圖上目錄結構一致的小夥伴們,恭喜你們,你們離成功又更近了一步啦!我們看到資料夾中有一個 install.sh 檔案,透過 vi 命令開啟:


關於takin-data,你想知道的都在這裡(一)啟動命令篇


我們看到在行尾處(綠色框框出來的)就是我們的 surge-deploy 啟動命令了,這個時候大家可以把這個命令複製一下,後續我們修改就要用到啦。


nohup java -jar surge-deploy-1.0-jar-with-dependencies.jar '{"172.17.0.2":"192.168.1.138"}' > surge.out  2>&1 &首先我們分析一下這個命令,nohup xxxxx,在 linux 中 nohup 命令用於不結束通話地執行命令,而學過 java 的小夥伴都知道 java -jar 用於啟動一個 jar 包,而這裡的 surge-deploy-1.0-jar-with-dependencies.jar 就是我們提供的 jar 包,然後我們先忽略那串令人頭疼的 ip 配置,我們看到在後面是:


> surge.out  2>&1 &


在 linux 中> 符號用作輸出符,這裡的意思就是將 java -jar 啟動的日誌輸出到 surge.out 檔案,所以大家如果想要檢視 surge-deploy 的執行日誌,就可以檢視 surge.out 檔案啦,再往後,我們看到有一個 2>&1, 2>1? 2 當然大於 1,為什麼還要 &?哈哈,這裡其實不是大於符號,在 linux 中,2 代表錯誤輸出,1 代表標準輸出,這裡的含義就是將錯誤輸出重定向到標準輸出,簡單理解,就是錯誤日誌和正常日誌都被輸出到一起!


細心的小夥伴發現了,為什麼末尾還有一個 &,這個 &怎麼就跟我們過不去了!哈哈,這裡不能怪 &,他的作用可重要。前面我們說到 nohup 代表不結束通話地執行命令,但是這個操作仍是在前臺執行的,我們不能一直盯著他不做其他事呀,所以 &就和 nohup 巧妙的結合起來了,他們在一起,就代表這個命令將會在後臺默默地執行,誰也干擾不了,像不像海枯石爛?


題外話,我們總結一下,整體的啟動命令的含義就是靜默啟動 surge-deploy 任務,並將所有日誌輸出到 surge.out 檔案。是不是很簡單?有人問:不是還有那串煩人的 ip 嗎?哈哈是的,其實這裡不配置 ip 也是可以的,為什麼呢,這裡就要解釋下 surge-deploy 在 takin 產品中的作用了。


surge-deploy 作為 takin-data 的執行模組,實際上是承擔了一個接收 linkAgent 推送日誌,並進行資料儲存和計算的角色。有人問它計算了什麼?在我們開源的第一個版本里,我們的鏈路梳理功能由於準備不充分,其實是並沒有開放出來的;而承擔鏈路梳理功能的,就是我們的 takin-data 模組!為我們的 takin 打 call!告訴大家一個好訊息,下個月我們就會發布開源第二次版本,而這次版本鏈路梳理功能就會隆重登場拉,這裡給大家劇透下,看張圖,提前體驗下我們強大的鏈路梳理功能:


關於takin-data,你想知道的都在這裡(一)啟動命令篇


應用呼叫關係一目瞭然有木有!!好了,言歸正傳,大家現在體會到 takin-data 模組的重要性了吧,回到那個 ip 上來,takin-data 目前是利用 netty 服務和 linkAgent 進行網路通訊,從而實現接收 linkAgent 傳輸過來的的日誌資訊,而我們作為服務端,需要對外暴露服務地址和埠。所以,目前我們是根據本機的 ip 地址進行服務註冊以及暴露的,但是由於我們的部署環境是在 docker 容器內部,所以獲取到的本機 ip 容器是 docker 網路卡虛擬生成的一個 ip,也就是引數中的 172.12.0.2。而對 docker 有一定了解的人肯定知道,透過在外網,我們是無法直接訪問 dockerip 的,需要用一些特殊手段來進行資料轉發。而這裡,我們就是透過 ip 對映的關係來實現資料轉發的。


而我為什麼說不配置這個 ip 也可以呢,那當然是將我們的 linkAgent 也起在容器內部啦,這樣就是容器內部的通訊,完全可以,沒問題。


但是!!!對於有些想要壓測自己應用的小夥伴來說,他們的應用可能在公司內網,可能在雲伺服器上,總而言之,肯定不在容器內,這種情況下預設的服務註冊就不能滿足我們的需求了。


於是,我們在啟動 surge-deploy 任務的時候透過傳入指定 ip 對映,來實現將實際可被外網訪問的 ip 註冊到服務上去,以達到資料通訊的目的。


有些小夥伴問:那我配置的外網的 ip,可我自己的 surge-deploy 不還是部署在容器內部嗎,不也沒用嗎?這就要說到 docker 的通訊機制了,細心的小夥伴可能發現我們在安裝映象時候追加了很多埠號,如下:


docker run -d -p 80:80 -p 2181:2181 -p 3306:3306 -p 6379:6379 -p 8086:8086-p 9000:9000 -p 10032:10032 -p 6628:6628 -p 8000:8000 -p 6627:6627 -p 8888:8888-p 29900-29999:29900-29999 registry.cn-hangzhou.aliyuncs.com/forcecop/forcecop:v1.0.0 大家看到很多-p 了吧,這種方式被稱作埠對映,什麼意思呢:就是將 docker 宿主機的埠和容器內部的埠號做一個繫結關係,當外部訪問了宿主機的 xxxx 埠,則請求將會被自動轉發到容器內部的 xxxx 埠。說到這裡,是不是各位小夥伴們都明白了!!!於是,我們就實現了外部資料的傳輸!


說到這裡,大家是不是對這個 ip 配置都瞭如指掌拉,我們總結下:如果是同一網路環境中的 linkAgent 和 surge-deploy 通訊,大家大可不必配置這個 ip 對映;如果 surge-deploy 部署在容器內部,那麼 ip 對映的左邊的 172.17.0.2 大家也不必修改,除非本機上執行了多個 docker 映象,導致 takin 映象的 dockerip 不是 172.17.0.2,那麼這個時候就需要進行修改了。關於 ip 對映的右邊,大家現在應該知道怎麼配置了吧,如果是內網環境通訊,配置 docker 宿主機的內網 ip 即可,如果是外網訪問,如阿里雲的機器想要訪問,那麼就應該配置 docker 宿主機的外網 ip。有的小夥伴不知道外網 ip 是什麼的,可以看一下百度百科的解釋。

想要了解更多開源產品資訊,掃碼小樹交流!


關於takin-data,你想知道的都在這裡(一)啟動命令篇


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004063/viewspace-2790660/,如需轉載,請註明出處,否則將追究法律責任。

相關文章