A. 查看bgppeer沒有顯示鄰居
A:BGP鄰居無法建立是指BGP鄰居狀態無法到達Established狀態。
本類故障的常見原因主要包括:
BGP報文轉發不通。
ACL過濾了TCP的179埠。
鄰居的Router ID沖突運辯。
配置的鄰居的AS號錯誤。
用Loopback口建立鄰居時沒有配置peer connect-interface命令。
用Loopback口建立EBGP鄰居未配置peer ebgp-max-hop命令。
peer valid-ttl-hops配置錯誤。
對端發送的路由數量是否超過peer route-limit命令設定的值襪指。
對端配置了peer ignore命令。
兩端的地址族不匹配。
故障排查處理:
步驟 1 使用ping命令檢測BGP鄰居之間是否可以Ping通
如果可以Ping通,則說明BGP鄰居之間有可達的路由並且鏈路傳輸也沒有問題
請使用命令ping–a source-ip-address –s packetsize host來檢測兩端的互通性,因為帶源地址可以同時檢測兩端路旁好缺由是否正常,指定ping的位元組可以檢查大包在鏈路上傳輸是否正常。
如果不能Ping通,請參見19.2.6.x.x Ping不通問題的定位思路檢查兩端的路由表中是否存在對端路由
B. ospf命令格式簡寫
OSPF協議配置命令解析
⼀,ospf命令
命令功能
ospf命令⽤來創建並運⾏OSPF進程。
undo ospf命令⽤來關閉OSPF進程。
預設情況下,系統不運⾏OSPF協議,即不運⾏OSPF進程。
2.命令格式
ospf I process-id I router-id router-id]
undo ospf (process-id)
3.參數說明
ospf命令參數說明如表2.2所⽰
process-id OSPF進程號 整數形式,取值范圍是1~6555預設值是1
router-id router-id Router ID 點分⼗進制格式
4.使⽤實例
運⾏OSPF協議
⼆,area命令
1.命令功能
area命令⽤來創建OSPF區域,並進⼊OSPF區域視圖。
undo area命令⽤來刪除指定區域。
預設情況塌握下,系統未創建OSPF區域。
2.命令格式
area (area-id)
undo area (area-id)
3.參數說明
area-id 指定區域的標識。其中區域號 area-id是可以是0的稱為⾻⼲區域 可以是⼗進制整數或點分⼗進制格式。採取整數形式時,取值范圍是0~4294967295
4.使⽤實例
進⼊OSPF區域視圖
三,network命令
network命令⽤來指定運⾏OSPF協議的接⼝和接⼝所屬的區域
1.命令功能
undo network命令⽤來刪除運⾏OSPF協議的接⼝。
預設情況下,此接⼝不屬於任何區城。
2.命令格式
network (network-address wildcard-mask)
undo network (network-address wildcard-mask)
3.參數說明
network-address 接⼝所在的⽹段地址 點分⼗進制格式
wildcard-mask P地址的反碼,相當於將P地址的掩碼反轉(0變1,1變0)。 點分⼗進制格式
例如0.0.0.255表⽰掩碼長度24位
4.使⽤實例
指定運⾏OSPF協議的接⼝的主IP地址位於⽹段192.168.1.0/24,接⼝所在的Area1D為2。
四,ospf dr-priority命令
1.命令功能
ospf dr-priority命令⽤來設置接⼝在選舉DR時的優先順序。
undo ospf dr-priority命令⽤來恢復其預設值。
預設情況下,優先順序為1。
2.命令格式
ospf dr-priority (priority)
undo ospf dr-priority
3.參數說明
ospf dr-priority命令參數說戚衫舉明
prority 接⼝在選舉DR或BDR時的優先順序。其值越⼤,優先順序越⾼。 整數形式,取值范圍是0~255 4.使⽤實例
設置接⼝G0/0/0在選舉DR時的優先順序為8
五,ink-peer命令
1.命令功能
vink-peer命令⽤來創建並配置虛連接。
undo vlink-peer命令⽤來刪除虛連接或恢復虛連接的參數為預設值。
預設情況下,OSPF不配置虛連接
2.命令格式
vlink-peer (router-id)
undo vlink-peer (router-id)
3.參數說明
vink-peer命令參數
vink-peer命令參數說明
router-id 指定建⽴虛連接的對端路由器ID
4.使⽤實例
創建虛連接,對端設備|D為10.1.1.1。
六,stub命令
1.命令功能
stub命令⽤來將⼀個區域設置為Stub區域。
undo stub命令⽤來取消這種設置
預設情況下,沒有區域被設置為Stub區域
2.命令格式
stub【 no-summary I default-route-advertise】
undo stub
3.參數說明
stub命令參數說明
no-summary 禁⽌ABR向Stub區域內發送 Summary LSA
default-route-advertise 在ABR上配置產⽣預設的Type-3 LSA到Stub區域
4.使⽤實例
將OSPF區域1設置為Stub區域。
七,nssa命令
1,命令功能
nssa命令⽤來配置OSPF區域為NSSA區域
undo nssa命令⽤來取消NSSA區域,恢復OSPF區域為普通區域
預設情況下,OSPF沒有區域被設置成NSSA區域。
2.命令格式
nssa {default-route-advertise| no-summary}
undo nssa
3.參數說明
nssa命令參數說明
default-route-advertise 在高碧ASBR上配置產⽣預設的Type7LSA到NSA區域
no-summary 禁⽌ABR向NSSA區域內發送 Summary LSAS
4.使⽤實例
將OSPF區域1設置為Stub區域。將區域1配置成NSSA區域
⼋,import- route命令
1.命令功能
import-route命令⽤來引⼊其他路由協議學習到的路由信息
undo import-route命令⽤來刪除引⼊的外部路由信息。
預設情況下,不引⼊其他協議的路由信息
2.命令格式
import-route {direct | rip 【process-id-rip 】I static I ospf 【process-id-ospf】}【cost cost】undo import-route {direct | rip 【process-id-rip 】 I static I ospf【 process-id-ospf 1】}
3.參數說明
mport-route命令參數說明
direct 引⼊的源路由協議為Dect協議
rip 引⼊的源路由協議是R|P
process-id-rip 引⼊RP路由協議的進程號 整數形式,取值范圍是1~65535預設值是1
static 引⼊的源路由協議是 Static
OSPF 引⼊的源路由協議是OSPF
process-id-ospf 引⼊OSPF路由協議的進程號 整數形式,取值范圍是1~65535,預設值是1
cost cost 指定路由開銷值 整數形式,取值范圍是0~16777214。預設值是1
4.使⽤實例
指定引⼊Type2的RP進程40的路由,路由標記為33,開銷值為50
九,abr- summary命令
1.命令功能
abr- summary命令⽤來在區域邊界路由器(ABR)上配置路由聚合。
undo abr-summary命令⽤來取消在區域邊界路由器上進⾏路由聚合的功能。
預設情況下,區域邊界路由器不對路由聚合。
2.命令格式
abr-summary ip-address mask
undo abr-summary ip-address mask
3.參數說明
abr-summary命令參數說明
ip-address 指定聚合路由的P地址 點分⼗進制形式
mask 指定聚合路由的P地址的掩碼 點分⼗進制形式
4.使⽤實例
將OSPF100的區域1中兩個⽹段10.42.10.0和10.42.110.0的路由聚合成⼀條聚合路由10.42.0.0向其
他區域發布。
⼗, authentication-mode命令
1.命令功能
authentication-mode命令⽤來指定OSPF區域所使⽤的驗證模式及驗證⼝令。
undo authentication-mode命令⽤來取消該區域已配置的驗證模式
預設情況下,沒有配置區域驗證模式
2命令格式
authentication-mode {md5 I hmac-md5 I hmac-sha256 }[ key-id( plain plain-text I 【 cipher 】
cipher-text )}
undo authentication-mode
3.參數說明
authentication-mode命令參數
simple 使⽤簡單驗證模式。預設情況下, simple驗證模式默認是 Cipher類型。
plain 明⽂⼝令類型。此模式下只能鍵⼊明⽂⼝令,在查看配置⽂件時以明⽂⽅式顯⽰⼝令。
plain-text指定明⽂驗證字 字元串形式,可以為字母或數字,區分⼤⼩寫,不⽀持空格。當認證模式為 simple時,長度為1~8;
認證模式為MD5、 HMAC-MD5、 HMAC-SHA256時,長度為1~255。
cipher 密⽂⼝令類型。可以鍵⼊明⽂或密⽂⼝令,但在查看配置⽂件時均以密⽂⽅式顯⽰⼝令 對於MDS/ HMAC-MD5/ HMAC-SHA256驗證模式當此參數預設時,默認為 Cipher類型。
cipner-rext 指定密⽂驗證字 字元串形式, 可以為字母或數字,區分⼤⼩寫,不⽀持空格。當認證模式為 simple時,長度為1-8的明⽂或48、24或者32的密⽂;認證模式為MD5,HMAC-MD5、 HMAC-SHA256時,長度為1-255的明⽂或20-392的密⽂
md5 使⽤MD5密⽂驗證模式
hmac-md5 使⽤ HMAC MD5密⽂驗證模式
hmac-sha256 使⽤ HMAC-SHA256驗證模式
ey-id 接⼝密⽂驗證的驗證字標識符,必須與對端的驗證字標識符⼀致 整數形式,取值范圍是1-255
4.使⽤實例
指定OSPF區域0使⽤ HMAC-MD5密⽂驗證模式,密碼為 galaxy
¥
5.9
網路文庫VIP限時優惠現在開通,立享6億+VIP內容
立即獲取
OSPF協議配置命令解析
OSPF協議配置命令解析
⼀,ospf命令
命令功能
ospf命令⽤來創建並運⾏OSPF進程。
undo ospf命令⽤來關閉OSPF進程。
預設情況下,系統不運⾏OSPF協議,即不運⾏OSPF進程。
2.命令格式
ospf I process-id I router-id router-id]
undo ospf (process-id)
第 1 頁
3.參數說明
ospf命令參數說明如表2.2所⽰
process-id OSPF進程號 整數形式,取值范圍是1~6555預設值是1
router-id router-id Router ID 點分⼗進制格式
4.使⽤實例
運⾏OSPF協議
⼆,area命令
1.命令功能
C. 什麼情況下用peer命令
由於Peer.exe默認占宴擾用的是80埠,所以安裝WEB伺服器軟體(IIS/Apache等)的時候會啟動報錯,使用任務管理器結束peer.exe即可,另外同時可以去掉啟動項中的
命令行:C:\Program Files\GridService\peer.exe -n Grid
注冊表路徑:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
apache突物拿然間莫名其妙的無法啟動,查看埠佔用情況
在開始菜單->運行 中輸入cmd,調出命令行,輸入
netstat -anb
看到一個叫peer.exe的進程佔用了80埠,在運行中輸入msconfig 查看 啟動項
看到有C:\Program Files\GridService\peer.exe啟動,再到網上查看信息,發現是某個網盤的http進程,竟然流氓的佔用了web程序員罩祥搭的80埠。
殺掉該進程(1696為pid那個數字)
ntsd -c q -p 1696
同時在msconfig 查看 啟動停止該程序啟動。
這樣apache就可以啟動了。
D. Fabric源碼分析之Peer鏈碼安裝
environment:
fabric v1.4.2
在Fabric中交易的處理過程,客戶端將提案首先發送到背書節點,背書節點檢提案的合法性。如果合法的話,背書節點將通過交易所屬的鏈碼臨時執行一個交易,並執行背書節點在本地持有的狀態副本。
Chaincode應該僅僅被安裝於chaincode所有者的背書節點上,鏈碼運行在節點上的沙盒(Docker容器)中,並通過gRPC協議與相應的Peer節點進行交互,以使該chaincode邏輯對整個網路的其他成員保密。
請務必在一條channel上每一個要運行你chaincode的背書節點枯滾上安裝你的chaincode
其他沒有chaincode的成員將無權成為chaincode影響下的交易的認證節點(endorser)。也就是說,他們不能執行chaincode。不過,他們仍可以驗證交易並提交到賬本上。
ChainCode要在區塊鏈網路中運行,需要經過鏈碼安裝和鏈碼實例化兩個步驟。
鏈碼的安裝涉及到3個服務,分別是client,peer背書節點和LSCC容器
主要流程:
以下是在客戶端執行 "peer chaincode install ..." 的業務流程圖:
客戶端執行鏈碼安裝命令:
客戶端的整個流程切入點為 fabric/peer/main.go 的 main 函數
然後繼續找到 peer/chaincode/chaincode.go
繼臘悶續找到 peer/chaincode/install.go 的 installCmd 函數,可以看出 chaincodeInstall 為主要的入口函數
我們進去看看 InitCmdFactory 做了什麼,位置在 peer/chaincode/common.go
返回了 ChaincodeCmdFactory 的結構體,定義為:
找到定義 genChaincodeDeploymentSpec
先看 getChaincodeSpec ,位於 peer/chaincode/common.go
封裝返回 ChaincodeSpec 結構體
剛才生成的 ChaincodeSpec 作為 getChaincodeDeploymentSpec 函數的輸入參數,返回 ChaincodeDeploymentSpec 結構體
CreateInstallProposalFromCDS 位於 protos/utils/proutils.go
調用 createProposalFromCDS
從結構體 ChaincodeInvocationSpec 可以看到用戶鏈碼安裝需要調用到系統鏈碼 lscc
通過 CreateProposalFromCIS=>CreateChaincodeProposal=>
再看 函數
最後返回 Proposal 結構體,定義見 protos\peer\proposal.pb.go
到這里 install 調用的 CreateInstallProposalFromCDS 完畢,返回 Proposal 結構體
關系有點復雜,給出輪敗彎一個類圖能看得清晰點
回到 install ,看 GetSignedProposal 對剛創建的提案結構進行簽名
函數位於 protos/utils/txutils.go
返回 SignedProposal 結構體,定義位於 protos/peer/proposal.pb.go
提案簽名完後 install 調用 ProcessProposal 發送提案到peer節點進行處理,參數帶了 SignedProposal 結構體
接下來client端就等到peer的 proposalResponse
當client調用了 ProposalResponse 消息就發送到peer背書節點,也就是走peer節點背書提案流程.
要看安裝鏈碼前做了什麼,直接看 peer節點背書提案流程 就好。
我們從 core/endorser/endorser.go 的 callChaincode=>Execute 函數開始講
在 core/chaincode/chaincode_support.go 找到 Execute
主要看 Invoke :
根據之前的信息,我們調用的是 lscc 來安裝鏈碼,所以在peer啟動的時候已經初始化 lscc 鏈碼容器了,所以回直接返回 handler 對象,後面的語句就不說了,在啟動鏈碼容器的章節再詳細研究。
接著我們看 execute 函數,調用 createCCMessage 創建一個 ChaincodeMessage結構體消息 . Execute 負責把消息發送出去
在 core/chaincode/handler.go 找到 Execute
這里關鍵是 h.serialSendAsync(msg) 語句,功能是把包裝好的信息以grpc協議發送出去,直接就等返回結果了。
至此 Execute 調用的 Invoke 就在等返回結果,結果返回就調用 對鏈碼結果進行處理
peer發送的信息哪去了呢?
我們定位到 code/chaincode/shim/chaincode.go ,我們看到兩個入口函數 Start 和 StartInProc , Start 為用戶鏈碼的入口函數,而 StartInProc 是系統鏈碼的入口函數,他們同時都調用了 chatWithPeer ,因為我們調用的是lscc,就看 StartInProc
chatWithPeer就是開啟grpc的接收模式在等到節點發來信息,接收到信息後就調用 handleMessage 處理信息。
因為我們信息類型為 ChaincodeMessage_TRANSACTION ,所以我們在 core/chaincode/shim/handler.go 順著 handleMessage=>handleReady 扎到 handleTransaction
其中關鍵語句 res := handler.cc.Invoke(stub) ,這語句是調用相應鏈碼的 Invoke 函數,所以我們找到 core/scc/lscc/lscc.go 下的 Invoke 函數
進去 core/scc/lscc/lscc.go 的 Invoke 函數可以看到,這里有 "INSTALL", "DEPLOY", "UPGRADE" 等操作,我們只看 INSTALL 部分。
關鍵調用函數是 executeInstall
接著看 executeInstall
HandleChaincodeInstall 為處理statedb,而 PutChaincodeToLocalStorage 是把鏈碼文件安裝到本地文件目錄
鏈碼安裝到peer的默認路徑 /var/hyperledger/proction/chaincodes
到此鏈碼的安裝完畢
lscc鏈碼安裝完畢後,返回信息給peer節點,peer節點就給提案背書返回給client服務端,至此鏈碼安裝完畢。
github
參考:
5-ChainCode生命周期、分類及安裝、實例化命令解析
fabric源碼解讀【peer chaincode】:安裝鏈碼
Fabric1.4源碼解析:客戶端安裝鏈碼
E. mac開啟遠程登錄確訪問peer
Mac開啟遠程登錄之後,可通過屏幕共享等方式訪問其他設備。如果您要訪問其他設備,可以按照以下步驟操作:
1. 在訪問另一台Mac設備之前,需要確保兩個Mac設備在同一網路環境中,並且啟用了屏幕共享服務。可以在「系統偏好設置」中選擇「共享」,然後在左側窗格中啟用「屏幕共享前並」服務。
2. 需要知道另一台Mac設備的IP地址。可以在終端中使用「ifconfig」命令查看本地IP地址和路由器IP地址,也可以在System Preferences --> Network --> Wi-Fi 中看到IP地址。然後,將其輸入到「屏幕共享」窗口的「連接到」欄位中。
3. 如果連接要求授權,請提供另一台Mac設備的用戶名和密碼,這些信息必須擁有管理員前悔漏許可權。
4. 如果連接成功,將在您的Mac上顯示另一台Mac設備的桌面。此時慧爛,您可以像使用本地 Mac 一樣使用遠程 Mac。
F. 【網路工程師路由篇】BGP 入門實驗
R1、R2、R3屬於AS 123;R4屬於AS 400;
R1、R2、R3運行OSPF,運行OSPF的目的是為了打通AS 123內的路由;
R3-R4之間建立EBGP鄰居關系,R2不運行BGP;
R1-R3之間建立IBGP鄰居關系;
在R4上,將路由4.4.4.0/24發布到BGP。
R1的配置如下(省略介面IP地址的配置):
R2的配置比較簡單,就是運行OSPF而已,這部分配置不再贅備升述。
R3的配置如下:
R4的配置如下:
完成上述配置後,在R3上查看BGP路由表:
我們看到R3已經學習到了R4通告過來的BGP路由4.4.4.0/24。並且該條BGP路由的NextHop屬性值為10.1.34.4,這個下一跳地址是路由可達的。該條路由在R3的BGP路由表裡有「* >」 標記,其中「*」表示這條路由是可用的(valid),只有當BGP路由的NextHop為路由可達時,該BGP路由才會被視為可用;而「>」則表仿顫老示這條路由是被優選的路由,或者說是到達該目的網路的最優路由。
BGP路由的NextHop屬性是一個非常重要的屬性,它是所有BGP路由都會攜帶的路徑屬性,它指示了到達目的網路的下一跳地址。
在R3上查看路由表:
R3已經將到達4.4.4.0/24的BGP路由載入到了全局路由表中。
對於R3而言,到達4.4.4.0/24的路由已經被優選,接下來,它會將該路由通告給IBGP鄰居R1。
在R1上查看BGP路由表:
我們看到,R1的BGP路由表中已經出現了4.4.4.0/24路由,而這條路由的NextHop屬性值是10.1.34.4,但是R1在本地路由表中沒有到達10.1.34.4的路由,因此10.1.34.4不可達,如此一來,該BGP路由也就不可用了(在BGP路由表中沒有*號標記),既然不可用,自然就不能裝載進路由表中使用。
那麼怎麼解決這個問題呢?一個最簡單的方法是,為R1配置一條靜態路由:ip route-static 10.1.34.0 24 10.1.23.3,這樣一來R1的路由表裡就有了到達10.1.34.4的路由,那麼BGP路由4.4.4.0/24的下一跳地址就可達了,對應的BGP路由自然也就可用了。但是這種方法太「笨拙」。另一種方法是,在R3的OSPF進程中將10.1.34.0/24網段也注入進去,使得R1能夠通過OSPF學習到10.1.34.0/24路由,這種方法也是可行的。但是由於R3-R4之間的互聯鏈路被視為AS外部鏈路,因此10.1.34.0/24作為外部網段往往不會被宣告進AS內的IGP。那麼還有什麼其他辦法能解決這個問題么?
BGP路由器在向EBGP對等體發布某條路由時,會把該路由信息的下一跳屬性設置為本地與對端建立BGP鄰居關系的介面地址。如下圖所示,R4將4.4.4.0/24通告給R3時,下一跳為10.1.34.4,也就是R4的GE0/0/0介面地址。
BGP路由器將本地始發路由發布給IBGP對等體時,會把該路由信息的下一跳屬性設置為本地與對端建立BGP鄰居關系的介面地址。
BGP路由器在向IBGP對等體發布從EBGP對等體學來的路由時,並不改變該路由信息的下一跳屬性。
例如下圖所示,R3收到R4通告的EBGP路由,該路由的下一跳屬性值為10.1.34.4,它將該條路由通告給IBGP對等體R1的時候,路由的下一跳屬性值不會發生改變,仍然為10.1.34.4。
這就造成了我們上面所述的問題,由於R1沒有到達10.1.34.0/24的路由,因此下一跳地址10.1.34.4不可達,從而導致BGP路由4.4.4.0/24不可用。
還有一個方法可以解決這個問題:在R3上使用next-hop-local命令,可修改BGP路由的下一跳屬性值為自身。在下圖中,我們在R3上洞盯增加了peer 10.1.12.1 next-hop-local命令,那麼這樣一來,當R3再將EBGP路由通告給R1的時候,會將這些路由的下一跳屬性值修改為自己的更新源地址(10.1.23.3),而R1已經通過OSPF獲知到達10.1.23.0/24的路由,因此10.1.23.3是可達的。
完成配置後,我們在R1上查看BGP路由表:
可以手工指定用於建立BGP連接的源介面及源IP地址。命令如下:[Router-bgp] peer x.x.x.x connect-interface intf [ ipv4-src-address ]預設情況下,BGP使用報文的出介面作為BGP報文的源介面。當用戶完成peer命令的配置後,設備會在自己的路由表中查詢到達該對等體地址的路由,並從該路由得到出介面信息。如果peer命令中沒有指定介面(connect-interface)和IP地址(ipv4-src-address),那麼設備將會使用前述出介面和該介面的IP地址作為BGP報文的源介面和源地址。
為了使物理介面在出現問題時,設備仍能發送BGP報文,可將發送BGP報文的源介面配置成Loopback介面。在使用Loopback介面作為BGP報文的源介面時,必須確認BGP對等體的Loopback介面的地址是可達的。由於一個AS內往往會運行IGP協議,因此AS內的設備能夠通過該IGP協議獲知到達其他設備的Loopback介面的路由。在AS內部,IBGP鄰居關系通常基於Loopback介面建立。
EBGP鄰居之間通常使用直連介面的IP地址作為BGP報文源地址,如若使用環回介面建立EBGP鄰居關系,要配置peer ebgp-max-hop命令,允許EBGP通過非直連方式建立鄰居關系。
同樣是上面的環境,我們稍作變更,在R1及R3上創建loopback0,地址分別為1.1.1.1/32及3.3.3.3/32,然後設備各自將loopback0宣告進OSPF,使得彼此都能通過OSPF學習到對方的Loopback0路由。
我們修改BGP的配置,使得R1-R3之間的IBGP鄰居關系基於Loopback0來建立。
R1的關鍵配置如下:
R3的關鍵性配置如下:
注意,務必要將R1及R3的Loopback0介面激活OSPF。
經過前面的講解,我們的環境現在是這樣的:R1-R3之間建立了基於Loopback介面的IBGP鄰居關系;R3對R1配置了next-hop-local;R3與R4之間仍然維持基於直連介面的EBGP鄰居關系;R4在BGP中發布路由4.4.4.0/24。
現在R1是能夠學習到BGP路由4.4.4.0/24的,並且該路由也是被優選的,此時這條路由會被R1裝載進全局路由表使用,但是,這是不是意味著R1就能夠ping通4.4.4.4了呢?經過測試你可能會發現:無法ping通?因為數據包在R2這里就被丟棄了,R2並沒有運行BGP,因此它無法學習到BGP路由4.4.4.0/24。
怎麼才能讓R1 ping通4.4.4.4呢?方法之一是在R3上將BGP路由重發布進OSPF,使得R2能夠通過OSPF學習到BGP路由4.4.4.0/24,但是這種方法存在一定的風險,因為我們知道BGP承載的前綴數量往往是非常龐大的;另一種方法是,讓R2也運行BGP,並與R1、R3建立IBGP鄰居關系,這樣一來問題就解決了。那麼BGP鄰居關系就變成了如下圖所示。具體配置此處不再贅述。
通常情況下,EBGP鄰居之間必須具有直連的物理鏈路,EBGP鄰居關系也將基於直連介面來建立,如果不滿足這一要求,則必須使用peer ebgp-max-hop命令允許它們之間經過多跳建立TCP連接。
peer ebgp-max-hop命令用來配置允許BGP同非直連網路上的對等體建立EBGP連接,並同時可以指定允許的最大跳數。命令格式如下:[Router-bgp] peer ipv4-address ebgp-max-hop [ hop-count ]
如上圖所示,R1及R2要基於Loopback口建立EBGP鄰居關系。這種情況也屬於EBGP鄰居之間不基於直連介面建立鄰居關系的場景,必須配置peer ebgp-max-hop命令。圖中R1與R2之間的兩條物理鏈路是為了冗餘性考慮。R1的關鍵配置如下:
R2的關鍵配置如下:
BGP鄰居表
BGP表
查看BGP條目的詳細信息:
路由表,display ip routing-table
G. etcd的proxy Mode
etcd可以作為透明代理運行。這樣做可以輕松地在您的基礎架構中發現etcd,因為它可以作為本地服務在每台機器上運行。在這種模式下,etcd充當反向代理並將客戶端請求轉發到活動的etcd集群。 etcd代理不參與etcd集群的一致復制,因此既不增加韌性,也不會降低etcd集群的寫入性能。
etcd目前支持兩種代理模式:readwrite和readonly。默認模式是readwrite,它將讀取和寫入請求轉發給etcd集群。只讀etcd代理僅將讀取請求轉發給etcd集群,並將HTTP 501返回給所有寫入請求。
代理將定期清理群集成員列表,以避免將所有連接發送給單個成員。
etcd代理使用的成員列表是在cluster裡面通知的client的地址。這些client的URL在每個etcd集群成員的 advertise-client-urls 選項中指定。
一個etcd代理檢查頌碼幾個命令行選項來發現它的對等URL。按照優先順序,這些選項是 discovery , discovery-srv 和 initial-cluster 。 initial-cluster 選項設置為逗號分隔的一個或多個臨時使用的etcd對等URL列表,以便發現永久群集。(這個設置和static的配置的集群一樣)
在以這種方式建立對等URL列表之後,代理從第一可到達對等端檢索客戶端URL的列表( 向cluster發送request,選擇第一個response的對端Ip )。這些客戶端URL由advertise-client-urls選項指定給etcd對等方。代理然後每隔30秒繼續連接到第一個可訪問的etcd集群成員,以刷新客戶端URL列表。(防止數據一致發給一個node)
etcd代理不需要給予 advertise-client-urls 選項,因為它們從集群中檢索此配置。這意味著必須為每個代理正確設置 initial-cluster ,而 advertise-client-urls 選項在非代理的節點上要保證設置的正確性。 否則,對任何etcd代理的請求將被不正確地轉發。
請特別注意,不要將advertise-client-urls選項設置為指向代理自身的URL,因為這樣的配置將導致代理進入循環,直到資源耗盡為止將請求轉發給自身。 要糾正這兩種情況,請停止etcd並使用正確的URL重新啟動它。
下面的命令來聲明etcd啟動peer和proxy的不同:
總結一下etcd的 proxy的啟動和peer的發現步驟:
始野模哪終首先啟動etcd集群成員(非proxy),然後任意的proxies。 代理必須能夠到達群集成員以檢索其配置,如果沒有這種條件,那麼將會嘗試連接。 在任何代理之前啟動成員可確保代理可以在稍後啟動時發現客戶端URL。
要以代理模式啟動etcd,您需要提供三個標志: proxy,listen-client-urls和initial-cluster (或者 discovery )。
要啟動一個readwrite代理,請設置-proxy on;要啟動只讀代理,請設置-proxy readonly。
代理將監聽listen-client-urls並將請求轉發到從初始集群或發現url中發現的etcd集群。
靜態配置proxy的時候只需要指定 initial-cluster 就行
如果你的etcd cluster 使用的是discovery service的部署方式,那麼你也可以用discovery的方式啟動proxy。
用discovery service啟動proxy需要指定discovery 標志。proxy會一直等待etcd cluter的建立完成。然碼正後開始轉發請求信息。
如果你cluster用的是discovery service模式,那麼如果真實的節點的數目大於你配置的數目。那麼多餘的節點會自動變成readwrite的proxy模式。比如你配置的url的數量為5,但你有10個節點,那麼其它5個會自動變為proxy的mdoe。當然你也可以使用 discovery-fallback='exit' 來關閉這個功能。
proxy不參加etcd的同步,任何時候etcd都不會去主動把自己變為etcd的一個成員。如果你想添加proxy到etcd,需要下面四個步驟
假設你有一個成員的cluster和一個proxy,信息如下:
當你完成下面操作,集群將變為兩個成員的集群。
首先你需要用etcdctl 來增加一個成員到cluster裡面,它會輸出對應新cluster數目的正確的配置信息:
停止proxy,我們可以擦出硬碟上的信息,然後重新導入新的配置。
如果用的systemd啟動的etcd
最後,重新啟動etcd用最新的配置:
如果你用systemd跑的etcd,那麼你可以編輯service 文件來得到正確的配置。然後使用下面命令
etcd可以作為透明代理運行。這樣做可以輕松地在您的基礎架構中發現etcd,因為它可以作為本地服務在每台機器上運行。在這種模式下,etcd充當反向代理並將客戶端請求轉發到活動的etcd集群。 etcd代理不參與etcd集群的一致復制,因此既不增加韌性,也不會降低etcd集群的寫入性能。
etcd目前支持兩種代理模式:readwrite和readonly。默認模式是readwrite,它將讀取和寫入請求轉發給etcd集群。只讀etcd代理僅將讀取請求轉發給etcd集群,並將HTTP 501返回給所有寫入請求。
代理將定期清理群集成員列表,以避免將所有連接發送給單個成員。
etcd代理使用的成員列表是在cluster裡面通知的client的地址。這些client的URL在每個etcd集群成員的 advertise-client-urls 選項中指定。
一個etcd代理檢查幾個命令行選項來發現它的對等URL。按照優先順序,這些選項是 discovery , discovery-srv 和 initial-cluster 。 initial-cluster 選項設置為逗號分隔的一個或多個臨時使用的etcd對等URL列表,以便發現永久群集。(這個設置和static的配置的集群一樣)
在以這種方式建立對等URL列表之後,代理從第一可到達對等端檢索客戶端URL的列表( 向cluster發送request,選擇第一個response的對端Ip )。這些客戶端URL由advertise-client-urls選項指定給etcd對等方。代理然後每隔30秒繼續連接到第一個可訪問的etcd集群成員,以刷新客戶端URL列表。(防止數據一致發給一個node)
etcd代理不需要給予 advertise-client-urls 選項,因為它們從集群中檢索此配置。這意味著必須為每個代理正確設置 initial-cluster ,而 advertise-client-urls 選項在非代理的節點上要保證設置的正確性。 否則,對任何etcd代理的請求將被不正確地轉發。
請特別注意,不要將advertise-client-urls選項設置為指向代理自身的URL,因為這樣的配置將導致代理進入循環,直到資源耗盡為止將請求轉發給自身。 要糾正這兩種情況,請停止etcd並使用正確的URL重新啟動它。
下面的命令來聲明etcd啟動peer和proxy的不同:
總結一下etcd的 proxy的啟動和peer的發現步驟:
始終首先啟動etcd集群成員(非proxy),然後任意的proxies。 代理必須能夠到達群集成員以檢索其配置,如果沒有這種條件,那麼將會嘗試連接。 在任何代理之前啟動成員可確保代理可以在稍後啟動時發現客戶端URL。
要以代理模式啟動etcd,您需要提供三個標志: proxy,listen-client-urls和initial-cluster (或者 discovery )。
要啟動一個readwrite代理,請設置-proxy on;要啟動只讀代理,請設置-proxy readonly。
代理將監聽listen-client-urls並將請求轉發到從初始集群或發現url中發現的etcd集群。
靜態配置proxy的時候只需要指定 initial-cluster 就行
如果你的etcd cluster 使用的是discovery service的部署方式,那麼你也可以用discovery的方式啟動proxy。
用discovery service啟動proxy需要指定discovery 標志。proxy會一直等待etcd cluter的建立完成。然後開始轉發請求信息。
如果你cluster用的是discovery service模式,那麼如果真實的節點的數目大於你配置的數目。那麼多餘的節點會自動變成readwrite的proxy模式。比如你配置的url的數量為5,但你有10個節點,那麼其它5個會自動變為proxy的mdoe。當然你也可以使用 discovery-fallback='exit' 來關閉這個功能。
proxy不參加etcd的同步,任何時候etcd都不會去主動把自己變為etcd的一個成員。如果你想添加proxy到etcd,需要下面四個步驟
假設你有一個成員的cluster和一個proxy,信息如下:
當你完成下面操作,集群將變為兩個成員的集群。
首先你需要用etcdctl 來增加一個成員到cluster裡面,它會輸出對應新cluster數目的正確的配置信息:
停止proxy,我們可以擦出硬碟上的信息,然後重新導入新的配置。
如果用的systemd啟動的etcd
最後,重新啟動etcd用最新的配置:
如果你用systemd跑的etcd,那麼你可以編輯service 文件來得到正確的配置。然後使用下面命令
H. peer在拓撲里怎麼ping通
peer在拓撲里怎咐早么ping通
在拓撲里,可以通過路由器或交換機來臘簡旦實現peer之間的ping。首先,要將兩個peer都連接到路由器或輪擾交換機上;然後配置好相應的IP地址、子網掩碼以及路由表信息;最後使用Ping命令嘗試ping通對方即可。
I. 魔獸世界表情命令都有什麼誰能給我說一下
/Agree (同意)
/Amaze (吃驚)
/Angry (憤怒)
/Apologize (道歉)
/Applaud (喝彩)
/Applause (鼓掌)
/Beckon (招收)
/Beg (乞求)
/Belch (響嗝)
/Bite (啃咬)
/Bleed (流血)
/Blink (眨眼)
/Blood (流血)
/Blow (喘氣)
/Blush (臉紅)
/Boggle (猶豫)
/Bonk (巨響)
/Bored (無聊)
/Bounce (彈跳)
/Bow (鞠躬)
/BRB (即回)
/Burp (打嗝)
/Bye (再見)
/Cackle (尖笑)
/Calm (鎮靜)
/Cat (貓)
/Catty (陰險)
/Cheer (歡呼)
/Chew (咀嚼)
/Chicken (小雞)
/Chuckle (咯咯地笑)
/Clap (鼓掌)
/Cold (感冒)
/Comfort (安慰)
/Confused (煩惱)
/Congrats (恭喜)
/Congratulate (慶賀)
/Cough (咳嗽)
/Cower (退縮)
/Crack (響指)
/Cringe (奉承)
/Cry (哭泣)
/Cuddle (擁抱)
/Curiouse (好奇)
/Curt
/Curtsey (女子,屈膝禮)
/Dance (跳舞)
/Disappointed (失望銷皮)
/Doh (巨響)
/Doom (厄運)
/Drink (飲)
/Drool (流口水)
/Duck (鴨子)
/Eat (吃)
/Eye (注視)
/Farewell (辭別)
/Fart (放屁)
/Fear (害怕)
/Feast (宴會)
/Fidget (煩躁)
/Flap (學小雞拍打翅膀)
/Flex (炫耀力量)
/Food (飲食)
/Frown (皺眉)
/Gasp (喘氣)
/Gaze (凝視)
/Giggle (傻笑)
/Glad (高興)
/Glare (怒視)
/Gloat (心滿意足)
/Goodbye (再見)
/Greet (致意)
/Greetings (問候)
/Grin (咧嘴笑)
/Groan ( *** )
/Grovel (趴)
/Guffaw (狂笑)
/Hail (萬歲)
/Happy (開心)
/Hello (問好)
/Hi (嗨)
/Hug (擁抱)
/Hungry (飢餓)
/Impatient (不耐煩)
/Insult (侮辱)
/Introce (介紹)
/JK (玩笑)
/Kiss (飛吻)
/Kneel (下跪)
/Knuckles (響指)
/Lavish (慷慨)
/Lay (躺下)
/Laydown (掘正躺下)
/Lick (舔舌)
/Lie (撒謊)
/Liedown (躺下)
/Listen (聆聽)
/Mad (瘋狂)
/Massage ( *** )
/Moan (嗚咽)
/Mock (嘲笑)
/Moon (裸臀)
/Mourn (哀悼)
/No (不)
/Nod (點頭)
/Nosepick (挖鼻)
/Panic (恐慌)
/Peer (偷窺)
/Peon (苦力)
/Pest (驅逐)
/Pick (拾取)
/Plead (辯護)
/Point (指向判斗悔)
/Poke (撥開)
/Ponder (沉思)
/Pounce (突襲)
/Praise (稱贊)
/Pray (祈禱)
/Purr (咕嚕咕嚕叫)
/Puzzled (迷惑)
/Question (提問)
/Raise (舉手)
/Rdy (就緒)
/Ready (就緒)
/Rear (搖臀)
/Roar (咆哮)
/Rude (粗魯)
/Salute (敬禮)
/Scratch (抓癢)
/Sexy (性感)
/Shake (顫抖)
/Shimmy (擺動)
/Shindig (狂歡)
/Shiv
/Shiver (打顫)
/Shoo (驅趕)
/Shrug (聳肩)
/Shy (害羞)
/Sigh (嘆息)
/Sit (坐下)
/Slap (拍手)
/Sleep (睡覺)
/Smell (嗅)
/Smirk (假笑)
/Snarl (怒罵)
/Snicker (竊笑)
/Sniff (吸氣)
/Snub (責罵)
/Sob (哭泣)
/Soothe (安慰)
/Sorry (對不起)
/Spit (吐唾沫)
/Spoon (擁抱)
/Stare (凝視)
/Stink (臭味)
/Strong (強壯)
/Strut (炫耀)
/Surprised (驚訝)
/Surrender (投降)
/Talk (交談)
/TalkEx (興奮)
/TalkQ (彷徨)
/Tap (踱著腳等待)
/Taunt (嘲弄)
/Tease (取笑)
/Thank (感謝)
/Thanks (感謝)
/Thirsty (渴望)
/Threat (威脅)
/Tickle (瘙癢)
/Threaten (恐嚇)
/Tired (疲勞)
/TY (感謝)
/Veto (否決)
/Victory (勝利)
/Volunteer (自願)
/Wave (揮手)
/Weep (哭泣)
/Wele (歡迎)
/Whine (抱怨)
/Whistle (口哨)
/Wicked (淘氣)
/Wickedly (頑皮)
/Work (工作)
/Wrath (憤怒)
/Yawn (呵欠)
/Yay (因高興而歡呼)
很簡單 你可以點選魔獸自帶的系統設定 就是和天賦 地下城查詢器 個人屬性介面在一起的那個動作條 之後螢幕中間會出現紅色橫條選項 上面有按鍵設定 還有一種方法 是按ESC 也會出現紅色橫條選項 之後選擇按鍵設定就行了 希望能幫到你
呵呵,剛剛才去收集了一套魔獸指令的大全,就派上用場了~~~。放我的部落格里,去看吧~~~~ :blog.ttbuy../user1/bourgeois/archives/2006/706.
魔獸世界表情大全
英文命令 中文命令 描述(無選定物件) 對選定物件
/agree /贊同 o o 你表示贊同。 你贊同(目標)的觀點。
/amaze /驚奇 o o 你感到很驚奇! (目標)讓你感到很驚奇!
/angry /憤怒 o 你憤怒地揮起拳頭。 你憤怒地向(目標)揮起拳頭。.
/apologize /抱歉 o o 你向大家表示道歉。對不起! 你向(目標)表示道歉。對不起!
/applaud /鼓掌 x x 你大聲喝彩。真棒! 你向(目標)大聲喝彩。真棒! .............................
:blog.sina../s/blog_4da726a101009tng.
說實在的,技術這玩意,不是看個視訊就能有所長進的...多參加實戰比什麼都強。競技場里最重要的是意識。先鍛煉一下你的意識吧...
使用許可權:所有使用者
使用方式:ln[options]sourcedist
說明:Linux/Unix檔案系統中,有所謂的連結(link),我們可以將其視為檔案的別名,連結可分為兩種:硬連結(hardlink)與軟連結(symboliclink) 希賽上有篇文章寫了這個
坑吧我就要任務
不知道你說的假貨哪一種假呢?
絕對仿TBC
出生0J 100倍經驗 自己慢慢到70 然後慢慢刷牌子吧 人蠻多的
世界盃SF
到NGA里 那裡有很多劇情帝 開個百家講壇都行了
J. Hyperledger Fabric first-network的初始化啟動流程(二)
Build Your First network提供了一個 fabric 的示例網路。該示例網路中由兩個組織構成,每個組織維護兩個 peer 節點,演示了基於鏈碼查詢2個賬戶余額與轉賬操作。
first-network 中有一個啟動腳本 byfn.sh,利用構建的 Docker 鏡像快速啟動網路。該腳本會啟動一個 orderer 節點和四個歸屬兩個不同組織的 peer 節點,還將啟動一個cli運行腳本,它將 peer 節點加入通道(Channel)、部署和實例化鏈碼,並根據已部署的鏈碼驅動交易執行,以下是byfn.sh的幫助文檔。
執行./byfn.sh up -o etcdraft啟動腳本,指定使用raft共識演算法
通過cryptogen工具生成組織成員關系和身份證書、密鑰等文件。調用configtxgen工具生成節點與通道配置文件,包括Orderer節點上系統通道的創世區塊文件genesis.block,新建應用通道的配置交易文件channel.tx、組織錨節點配置更新交易文件Org1MSPanchors.tx與Org2MSPanchors.tx等。
用戶執行network_setup.sh腳本啟動Fabric網路,該腳本調用networkUp函數,該命令會檢查網路實體的證書是否生成,如果沒有則首先生成相關證書目錄。
generateCerts主要執行了cryptogen generate --config=./crypto-config.yaml
根據crypto-config.yaml生成網路成員組織結構和對應的身份證書、簽名私鑰等文件,並保存到默認的crypto-config目錄,身份證書等文件在對應的目錄msp/ 中,TLS證書與密鑰文件保存到tls/ 中。
crypto-config.yaml主要包含的fabric排序節點證書配置以及fabric組織證書配置。
Template 模板定義節點的配置模式
Specs 另外一種配置模式
Count 節點總數
Hostname 全限定域名 命名格式
Domain 域名
Users 添加到管理員的用戶帳戶數
採用Specs模式配置了5個排序節點
採用Template模式配置了兩個組織,每個組織2套公私鑰和證書,包含普通User數量為1
ordererOrganizations目錄 :包含Orderer組織類型的身份證書.pem文件、簽名私鑰文件 _sk文件、TLS證書(證書.crt文件和密鑰.key文件)
peerOrganizations目錄 :包含Peer組織類型的身份證書.pem文件、簽名私鑰文件 _sk文件、TLS證書(證書.crt文件和密鑰.key文件)
這些文件通過docker-compose工具,基於docker-compose-cil.yaml、docker-compose-base.yaml等配置文件,將目錄作為掛載卷到容器的指定目錄。
調用replacePrivateKey基於docker-compose-e2e-template.yaml文件創建新的配置文件docker-compose-e2e.yaml。進入Org1組織的CA目錄,獲取私鑰文件名作為PRIV_KEY,替換docker-compose-e2e.yaml文件的CA1_PRIVATE_KEY。同理替換CA2_PRIVATE_KEY。
執行generateChannelArtifacts函數,使用configtxgen工具基於configtx.yaml創建節點與通道配置文件,包括Orderer通道的創世區塊,應用通道配置配置交易文件channel.tx,錨節點配置更新交易文件Org1MSPanchors.tx和Org2MSPanchors.tx
Orderer系統通道的創世區塊
執行configtxgen命令,創建Orderer創世區塊文件genesis.block
新建應用通道的配置交易文件
執行configtxgen命令,創建應用通道的配置交易文件channel.tx,後續執行peer channel create讀取文件。
錨節點配置更新交易文件
執行configtxgen命令,創建錨節點配置更新交易文件Org1MSPanchors.tx和Org2MSPanchors.tx,後續執行peer channel update進行更新。
返回到network_setup.sh腳本,判斷是否啟用了CouchDB標志位(默認關閉),使用docker-Compose工具執行docker-Compose-cil.yaml文件,啟動Fabric網路。
繼續分析network_setup.sh腳本,默認COMPOSE_FILES是docker-compose-cli.yaml文件,當設置了kafka共識或者raft共識,則使用對應的yaml文件。
Orderer節點繼承了docker-compose-base.yaml中的orderer.example.com配置屬性,Orderer節點容器啟動時執行如下命令
docker-compose-cil.yaml文件
繼續追蹤base/docker-compose-base.yaml,找到orderer.example.com服務,掛載目錄和暴露7050埠。
orderer的配置還是引入peer-base.yaml中的orderer-base服務
4個Peer節點繼承了docker-compose-base.yaml中對應容器名稱的配置屬性,Peer節點容器啟動時執行如下命令
docker-compose-cil.yaml文件中Peer節點配置。
docker-compose-base.yaml文件中Peer節點的配置。
引入peer-base.yaml中的peer-base服務
docker-compose-cil.yaml文件中CLI客戶端配置。啟動完 orderer 節點、peer 節點和 CLI 容器之後,實際是調用 script.sh 腳本,該腳本是在 CLI 容器中執行,CLI 容器其實就是用戶客戶端,只不過是命令行客戶端,運行在容器中。默認情況下CLI 的身份是 admin.org1,連接 peer0.org1 節點,執行 script.sh 腳本
script.sh腳本順序執行默認的測試流程,包括創建新的應用通道、添加節點、更新錨節點、安裝鏈碼、實例化鏈碼、調用鏈碼、查詢鏈碼等操作。
Fabric要求創建、加入與更新通道的許可權必須具有通道組織的管理員身份。調用setGlobals設置全局環境變數,CLI客戶端能夠靈活切換指定容器的管理員角色,可以直接連接並操作指定的Peer節點,先切換到Peer0/Org1節點。
接著採用Org1管理員身份執行peer指令,將通道配置文件Channel.tx發送給Orderer節點,創建mychananel的應用通道。如果創建成功,則返回一個創世區塊block,它會存儲在 peer 節點的文件系統中,包含 channel.tx 指定的通道配置信息。
遍歷所有節點,調用setGlobals切換指定節點,執行peer指令,將Org1組織包含的Peer0/Org1和Peer1/Org1節點加入mychananel應用通道,將創世區塊mychananel.block設置成命令行參數。Org2組織類似。
joinChannelWithRetry 函數中的 setGlobals 是設置 CLI 容器的環境變數的函數。例如:setGlobals 1 2 設置 CLI 的身份為 admin.org2,連接 peer1.org2 節點。
使用 peer channel join 命令讓節點加入通道,$CHANNEL_NAME.block 就是前面創建通道成功時返回的區塊,該區塊在上面 org1.peer0 創建通道時保持在 CLI 容器內,所以能直接使用。節點成功加入通道後會創建 CHANNEL_NAME.block 開頭的鏈。
一個組織只能有一個錨節點,節點加入通道後才能進行更新,連續兩次調用updateAnchorPeers,更新兩個組織的錨節點配置,用Org1管理身份更新Peer0/Org1的配置,並指定錨節點配置更新文件Org1MSPanchors.tx,Org2組織同理。
連續兩次調用installChaincode分別在Peer0/Org1和Peer2/Org2中安裝chaincode_example02鏈碼,並將鏈碼命名為「mycc」且版本1.0,如果鏈碼安裝成功,在指定安裝目錄/var/hyperledger/proction/chaincodes下存在name.version的鏈碼文件。
實例化鏈碼必須在安裝過鏈碼的節點上進行,同一個通道內所有節點上相同的實例化數據在通道賬本中是共享的,用戶只需要在任意一個Peer節點上成功執行一次實例化鏈碼操作,並通過排序打包後將實例化數據廣播到其他節點上,通道內所有合法節點都可以訪問該鏈碼的實例化數據。
實例化將鏈碼添加到通道上,啟動目標節點的容器,初始化與鏈碼相關的初始值,這里的初始值為 ["a","100","b","200"]。」實例化「 過程會產生鏈碼的容器,例如: dev-peer0-org1.example.com-mycc-1.0 。實例化過程需要指定背書策略,通過 -P 參數設置,這里的策略定義為 AND ('Org1MSP.peer','Org2MSP.peer') ,表示任何交易必須要有 org1 和 org2 節點的共同背書。
Peer0/Org1上調用鏈碼查詢函數chaincodeQuery和鏈碼調用函數chaincodeQuery。查看A的余額,並從賬戶A中向賬戶B中轉賬10元。
Peer3/Org2上安裝鏈碼,執行查詢A的余額,檢查余額是否為90元,如果是說明轉賬成功。