国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

CloudStack怎么添加KVM主機

發(fā)布時(shí)間:2021-08-17 12:35 來(lái)源:億速云 閱讀:0 作者:chen 欄目: 服務(wù)器 歡迎投稿:712375056

本篇內容主要講解“CloudStack怎么添加KVM主機”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“CloudStack怎么添加KVM主機”吧!

主要流程

一、添加主機的代碼入口是AddHostCmd的execute方法

接著(zhù)調用LibvirtServerDiscoverer類(lèi)的find方法

而在find方法中先通過(guò)SSH連接到對應的主機(我這里agentIp是172.16.65.135)sshConnection = new com.trilead.ssh3.Connection(agentIp, 22);

然后利用剛剛建立的連接在主機上執行啟動(dòng)agent命令SSHCmdHelper.sshExecuteCmd(sshConnection, setupAgentCommand + parameters, 3);

setupAgentCommand = "cloudstack-setup-agent"

該命令在135主機上執行完之后會(huì )啟動(dòng)一個(gè)相應的JAVA進(jìn)程

二、稍微分析一下該進(jìn)程的啟動(dòng)命令:關(guān)于jsvc.exec可以參考官方的解釋http://commons.apache.org/proper/commons-daemon/jsvc.html

一句話(huà)概況jsvc就是讓你非常方便簡(jiǎn)單的Linux環(huán)境下啟動(dòng)JAVA應用,跟我們一般用java xxx啟動(dòng)應用的效果是一樣的,而后面的-cp很容易聯(lián)想到是classpath的意思

再仔細看一下后面classpath中的jar包中包含了cloud-agent-4.3.2.jar,所以該進(jìn)程的啟動(dòng)入口也就是com.cloud.agent.AgentShell的main方法

三、 我們稍微離開(kāi)主機上發(fā)生的事情再回到管理節點(diǎn)來(lái)看

通過(guò)SSH執行完啟動(dòng)agent命令之后CS執行的是HostVO connectedHost = waitForHostConnect(dcId, podId, clusterId, guid); 

注意此時(shí)數據的host表中還沒(méi)有關(guān)于該主機的記錄

而waitForHostConnect方法中是一個(gè)_waitTime*2也就是10次的循環(huán),每次循環(huán)中間讓線(xiàn)程sleep30秒,

也就是總共5分鐘來(lái)等待其他線(xiàn)程來(lái)將該主機的記錄插入host表中,如果超過(guò)5分鐘都沒(méi)有拿到connectedHost就直接返回Null

四、 接下來(lái)我們關(guān)心的就是數據是怎樣插入host表的

讓我們把目光再次回到主機agent身上,看看JAVA進(jìn)程啟動(dòng)之后發(fā)生了什么事情

通過(guò)查看日志文件/var/log/cloudstack/agent/agent.log(此處是在主機172.16.65.135上的文件)

再結合AgentShell這個(gè)類(lèi)的代碼總結一下agent進(jìn)程在啟動(dòng)之后的運行流程如下:

創(chuàng )建一個(gè)Agent對象Agent agent = new Agent(this, localAgentId, resource); 注意 Agent 中有一個(gè)NioConnection _connection;實(shí)例化為一個(gè)NioClient

然后就是NioClient的初始化init方法

這里利用的是JAVA的NIO來(lái)進(jìn)行通訊,具體的解釋可以參考我的另一篇文章https://my.oschina.net/abelgroup/blog/849680

第一步就是建立跟管理節點(diǎn)也就是172.16.60.197的連接,如日志所示

連接上之后就是創(chuàng )建一個(gè)ServerHandler的Task放到線(xiàn)程池來(lái)執行

接著(zhù)執行sendStartup(link)方法,該方法主要就是利用link來(lái)發(fā)送一個(gè)StartupRoutingCommand到管理節點(diǎn)

五、現在我們又回到管理節點(diǎn)來(lái)繼續處理剛剛從agent中發(fā)送過(guò)來(lái)的StartupRoutingCommand這個(gè)命令

我們知道在CS中有一個(gè)AgentManagerImpl的實(shí)例對象,該對象持有一個(gè)NioServer,監聽(tīng)的端口8250正好是agent建立連接的端口

NioServer通過(guò)一個(gè)死循環(huán)來(lái)監聽(tīng)事件,當agent發(fā)送數據過(guò)來(lái)之后會(huì )執行NioConnect的read方法protected void read(final SelectionKey key) 

接著(zhù)創(chuàng )建一個(gè)AgentHandler的Task,然后執行它的processRequest方法

然后通過(guò)一個(gè)HandleAgentConnectTask的Task來(lái)執行handleConnectedAgent方法

該方法主要做的事情包括:createHostVOForConnectedAgent創(chuàng )建一個(gè)HostVo,host數據的插入也是在這個(gè)方法中執行

然后是createAttacheForConnect也就是為這個(gè)主機創(chuàng )建一個(gè)attach并交給attachManagerImpl來(lái)管理

接著(zhù)是方法notifyMonitorsOfConnection,就是通知主機所有的Monitor來(lái)processConnect

其中包括StoragePoolMonitor,這個(gè)Monitor處理的是將所有該新主機可以利用的存儲池跟該主機進(jìn)行連接,此處不展開(kāi)

所有這些處理完之后就執行agentStatusTransitTo(host, Event.Ready, _nodeId);將主機狀態(tài)改為UP

當主機狀態(tài)為UP之后前面第三步中的waitForHostConnect方法就能順利的拿到數據了

到這里添加主機的任務(wù)基本上也算成功了

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

中文在线网在线中文| 亚洲AV乱码一区二区三区香蕉| 亚洲国产精品成人精品无码区在线| 精品国产18久久久久久| 在线精品亚洲一区二区| 亚洲爆乳少妇无码激情|