导航:首页 > 程序命令 > peer命令

peer命令

发布时间:2023-04-27 19:14:05

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命令的详细用法

使用许可权:所有使用者
使用方式:ln[options]sourcedist
说明:Linux/Unix档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,连结可分为两种:硬连结(hardlink)与软连结(symboliclink) 希赛上有篇文章写了这个

魔兽世界谁能给我一万金

坑吧我就要任务

我想开家名牌包店,谁能给我说一下,都有什么世界名牌呢

不知道你说的假货哪一种假呢?

谁能给我推荐个魔兽世界SF

绝对仿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元,如果是说明转账成功。

阅读全文

与peer命令相关的资料

热点内容
基于单片机饮水机温度控制系统的设计 浏览:455
c中委托被编译后的结构 浏览:152
飞燕app怎么注销账号 浏览:895
cad命令缩小 浏览:154
linux发展史 浏览:629
服务器选用什么CPU比较好 浏览:334
明星怎么宣传安卓 浏览:953
8255芯片编程 浏览:65
java文件bat运行 浏览:747
java常见笔试 浏览:529
360程序员模式 浏览:363
AQS算法的查询树构造 浏览:329
小猪微信营销源码 浏览:12
阿里云服务器能连接打印机吗 浏览:175
命令行参考 浏览:281
怎么初步认识编程 浏览:208
为什么程序员都喜欢谷歌 浏览:891
压缩性骨拆能自愈吗 浏览:277
安卓怎么设置游戏画面 浏览:114
k线上写字源码 浏览:457