内容


IBM System p 集群节点的快速发现与管理

Comments

在 Serive Network 中,设置一台管理服务器 MS (Management Server),通过 MS 中植入的 OpenSLP 工具以及定制的脚本,可以动态发现和高效管理集群中的所有节点。

SLP 是 IETF 标准协议,广泛用于网络服务的动态发现。IBM System p 集群中的所有节点,包括 Frame BPAs,CEC FSPs 以及 HMCs,均支持 SLP 协议。

建立 Service Network

在 HMC-Attached System p 集群中,管理员首先要将 HMCs 与 CEC FSPs 或者 Frame BPAs 通过以太网连接起来。然后,管理员需要登录某个 HMC,将 CEC FSPs 和 Frame BPAs 的 IP 地址,手动添加至 HMC。当集群中的节点增加或者减少时,管理员都要相应地调整以太网,同时登录 HMC 进行相关的增加或者删除操作。

当集群规模较小时,这种方法是可行的。但是当集群规模扩大时,需要更改的节点增多,或者 HMC 需要移交,管理员的操作难度就会加大,管理效率就会降低。

如果可以在 HMCs 与 CEC FSPs 或者 Frame BPAs 连接的以太网中设置一台管理服务器(MS),并且在 MS 上启用 DHCP 服务。通过 MS,管理员可以快速的执行以下任务:

(1)动态发现集群中的节点:HMCs,CEC FSPs 和 Frame BPAs。

(2)快速建立或者删除 HMCs 与 CEC FSPs 或者 Frame BPAs 之间的链接。

那么管理员就可以通过这个独立的以太网对整个集群进行快速而且高效的管理。本文将这个独立的集群管理网络称之为 Service Network。

图 1.Service Network 拓扑结构
图 1.Service Network 拓扑结构
图 1.Service Network 拓扑结构

Service Network 将 MS 和 IBM System p 集群中的所有节点通过交换机连接起来,构成一个独立的以太网。在 MS 上构建 DHCP 服务,当集群中的节点(比如 HMCs,Frame BPAs 以及 CEC FSPs)连接至 Service Network 时,将会获得一个 IP 地址。

一般来说,HMC 有两个集成网口,eth0 和 eth1。可以将 eth0 用于连接 Service network,将 eth1 用于连接公网。对于 Frame BPA,可以只将一个端口(比如 SideA)连接至 Service Network;但通常情况下,管理员会将两个端口 SideA 和 SideB 一并连接至 Service Network。另外,HMC 本身也提供 DHCP 服务,为了保证 Service Network 的稳定性,建议将 DHCP 服务放置于 MS 上。通过 Service Network,所有的节点之间均可互相通信。

在 MS 上启动 DHCP 服务

在 MS 上,当 DHCP 服务配置成功之后,将 Service Network 中的各个节点顺序加电或者重启,所有的 HMCs,BPAs 和 FSPs 将会获得同网段的网络地址。当加电或者重启完成后,可以在 MS 上查验各个节点获得的 IP 地址。

动态发现集群中的节点

SLP 简介

SLP 是 IETF 标准协议 , 广泛用于网络服务的动态发现。作为客户端,SLP 可以使用服务类型或者属性来查找服务;作为服务提供者,SLP 可以在网络中广播自己的特色服务。

在 SLP 中有三种角色:UA(User Agent, 用户代理),SA(Service Agent, 服务代理),DA(Directory Agent, 目录代理 )。

UA 是 SLP 中的客户端,它可以根据服务的类型和属性,在网络中查找符合条件的服务。SA 是 SLP 中的服务器端,它提供了它所代理的服务的基本信息,并与 UA 与 DA 交互。DA 是一个可选的角色,它提供了一种集中式目录服务,SA 可以在上面注册服务,UA 可通过 DA 来查询,拥有 DA 就意味着不必每个 SA 都需要广播服务。这样 UA 与 SA 可以不必直接通信,在大型网络中可以有效降低网络流量。

OpenSLP 简介

OpenSLP 是 SLP 的一个开放源码实现,包含了用户可编写的 SA 和 UA 使用的 API 库。另外还提供了一个 DA,名为 slpd,配置文件为 /etc/slpd.conf。

表 1. OpenSLP API 库的主要函数:

函数含义
SLPOpen 打开一个 OpenSLP API 实例
SLPClose 关闭一个 OpenSLP API 实例
SLPReg 注册一个服务和 URL
SLPDereg 为服务注销一个 URL
SLPFindSrvs 查找已注册的给定服务类型的服务
SLPFindSrvTypes 查找为某个范围注册的所有服务类型

除了 API 库之外,OpenSLP 还提供了 slptool,可以交互执行大部分的 SLP 功能,对于快速的注册或者查找服务非常有用。

slptool 的用法也比较简单,命令行语法:

 #slptool [options] command-and-arguments

options 是可选参数,command-and-arguments 是用于注册或者查询的参数。

在本文中,我们主要使用 slptool 的查询功能。

例如,要查询已注册目标服务器的服务,我们可以使用:

 #slptool findsrvs service:myserv

要查询已注册目标服务器的服务类型,我们可以使用:

 #slptool findattrs service:myserv

MS 上使用 slptool 动态获取节点信息

IBM System p 集群中的所有节点,HMCs、Frame BPAs 和 CEC FSPs 均支持 SLP 协议。

在 Service Network 中,管理员更关心如何获取节点信息。集群中的节点相当于 SLP 中的 SA 或者 DA,MS 相当于 UA。那么在 MS 上,可以使用 OpenSLP 提供的 slptool 动态查找所有的节点信息。

清单 1. 使用 slptool 发现新版本 HMC (V7.3.5.0 及其以上版本)
 # slptool findsrvs 
 service:management-software.IBM:hardware-management-console 
 service:management-software.IBM:hardware-management-console:
                                        //192.168.0.230,5040 
 service:management-software.IBM:hardware-management-console:
                                        //fe80::21a:64ff:fe79:d258/64,65535 
 service:management-software.IBM:hardware-management-console:
                                        //fe80::21a:64ff:fe79:d25a/64,65535 
 service:management-software.IBM:hardware-management-console:
                                        //192.168.0.221,9900 

 # slptool findattrs 
 service:management-software.IBM:hardware-management-console 
 (type=hardware-management-console),(level=3),(machinetype-model=7042CR4), 
 (serial-number=069037B),(name=cdlhmc4),(uuid=402c67c72375b6016a80001a647aad46),
 (ip-address=192.168.0.230,10.0.0.4,
fe80::21a:64ff:fe7a:ad46/64,fe80::21a:64ff:fe7a:ad48/64),(web-url=),
(mtms=7042CR4*069037B),(web-management-interface=true),
(secure-web-url=https://cdlhmc4.clusters.com),(cimom-port=),(secure-cimom-port=5989) 

 (type=hardware-management-console),(level=3),(machinetype-model=7042CR4),
 (serial-number=066F61B),(name=cdlhmc3),(uuid=4041fc8e666bb6013d58001a6479d258),
 (ip-address=192.168.0.221,10.0.0.1, 
 fe80::21a:64ff:fe79:d258/64,fe80::21a:64ff:fe79:d25a/64),(web-url=),
 (mtms=7042CR4*066F61B),(web-management-interface=true),
(secure-web-url=https://cdlhmc3.clusters.com:8443),(cimom-port=),(secure-cimom-port=5989)
清单 2. 使用 slptool 发现低版本 HMC (V7.3.5.0 以下的版本)
 # slptool findsrvs 
 service:management-software.IBM:hardware-management-console: 
 service:management-software.IBM:hardware-management-console://9.114.47.187,3852 
 (type=hardware-management-console),(level=3),(machinetype-model=7310CR4), 
 (serial-number=101292B),(name=e108v3hmc01.ppd.pok.ibm.com), 
 (uuid=b9e325690eb23d569d21087ab25891df),(ip-address=9.114.47.187,192.168.0.187, 
 10.0.0.187), (web-url=),(mtms=7310CR4*101292B),(web-management-interface=true),
 (secure-web-url=https://e108v3hmc01.ppd.pok.ibm.com:8443),(cimom-port=),
 (secure-cimom-port=5989),0 
 service:management-software.IBM:hardware-management-console://9.114.47.187,3852 
 (type=hardware-management-console),(level=3),(machinetype-model=7310CR4),
 (serial-number=101292B),(name=e108v3hmc01.ppd.pok.ibm.com),
 (uuid=b9e325690eb23d569d21087ab25891df), 
 (ip-address=9.114.47.187,192.168.0.187,10.0.0.187),(web-url=),(mtms=7310CR4*101292B),
 (web-management-interface=true),
 (secure-web-url=https://e108v3hmc01.ppd.pok.ibm.com:8443),
 (cimom-port=),(secure-cimom-port=5989),0
清单 3. 使用 slptool 发现 BPA
 # slptool findsrvs 
 service:management-hardware.IBM:bulk-power-controller 
 service:management-hardware.IBM:bulk-power-controller://192.168.0.45,65535
(type=bulk-power-controller),(serial-number=99200G1),(machinetype-model=9A00-100),
(fru-serial-number=0),(name=Server-9A00-100-SN99200G1),(frame-number=0),(cage-number=0),
(ip-address=192.168.0.45,10.0.0.239),(web-url=https://192.168.0.45:473),(slot=0),
(bpc-machinetype-model=9A00-100),(bpc-serial-number=99200G1),
(Image=fips350/b1014p_0943.350),(cimom-namespace=),(secure-cimom-port=),
(firmware-image-info=EP350_034),(mtms=9A00-10099200G1),
(MicroActiveCodeImage=EP350_034),(MicroInactiveCodeImage=EP350_034),(level=3),0 

 service:management-hardware.IBM:bulk-power-controller://192.168.0.247,65535
(type=bulk-power-controller),(serial-number=99200G1),(machinetype-model=9A00-100),
(fru-serial-number=0),(name=Server-9A00-10099200G1_A),(frame-number=0),
(cage-number=0),(ip-address=192.168.0.247,10.0.0.231),
(web-url=https://192.168.0.247:473),(slot=1),(bpc-machinetype-model=9A00-100),
(bpc-serial-number=99200G1),(Image=fips350/b1014p_0943.350),(cimom-namespace=),
(secure-cimom-port=),(firmware-image-info=EP350_034),(mtms=9A00-10099200G1),
(MicroActiveCodeImage=EP350_034),(MicroInactiveCodeImage=EP350_034),(level=3),0
清单 4. 使用 slptool 发现 FSP
 #  slptool findsrvs 
 service:management-hardware.IBM:cec-service-processor 
 service:management-hardware.IBM:cec-service-processor://30.0.0.169,65535(
 type=cec-service-processor), (serial-number=10F0C43), (machinetype-model=8234-EMA),
  (fru-serial-number=YL10D8317144), (name=), (frame-number=0), (cage-number=0),
   (ip-address=30.0.0.169,10.0.0.245), (web-url=https://30.0.0.169:473), (slot=1),
    (bpc-machinetype-model=0), (bpc-serial-number=0), (Image=fips350/b1016a_0943.350),
     (cimom-namespace=root/ibmsd), (secure-cimom-port=5989), 
     (firmware-image-info=EM350_036), (mtms=8234-EMA10F0C43),
      (MicroActiveCodeImage=EM350_036), (MicroInactiveCodeImage=EM350_031), (level=3),0 
 service:management-hardware. IBM:cec-service-processor://192.168.0.232,65535(
 type=cec-service-processor), (serial-number=027ACA4),(machinetype-model=9125-F2A),
 (fru-serial-number=YH10HA93J00X),
 (name=fsp1),(frame-number=1),(cage-number=6),(ip-address=192.168.0.232,10.0.0.242),
 (web-url=https://192.168.0.232:473),(slot=1),(bpc-machinetype-model=9A00-100), 
 (bpc-serial-number=99200G1),(Image=fips350/b1027a_0943.350),(cimom-namespace=),
 (secure-cimom-port=),(firmware-image-info=ES350_038),(mtms=9125-F2A027ACA4),
 (MicroActiveCodeImage=ES350_038),(MicroInactiveCodeImage=ES350_036),(level=3),0

创建自动化脚本

由上面的示例可以看出,slptool 可以快速地动态发现集群中的所有节点;但是 slptool 所输出的信息较多,不太方便管理员分析关键信息。可以在 MS 上创建一个自动化脚本,只输出一些重要的信息。例如:MTMS,HostName,IP address 和 Frame number。

清单 5. slptool 自动化脚本
 #!/usr/bin/perl 

 use strict; 

 # 定义 HMC,CEC 和 BPA 的动态发现命令
 my @HMC_DISC_CMD = (
 "slptool findattrs service:management-software. IBM:hardware-management-console", 
"slptool findsrvs ser-vice:management-software. IBM:hardware-management-console:"
                         ); 
 my @CEC_DISC_CMD = (
 "slptool findattrs ser-vice:management-hardware. IBM:cec-service-processor", 
"slptool findsrvs ser-vice:management-hardware. IBM:cec-service-processor"
                         ); 
 my @BPA_DISC_CMD = ( 
 "slptool findsrvs ser-vice:management-hardware. IBM:bulk-power-controller"
                         ); 
 my %allhmc; 
 my %allcec; 
 my %allbpa; 

 disc_hmc(); 
 disc_cec(); 
 disc_bpa(); 

 # 定制脚本执行后的输出格式

 my $formatstr = "%-10s  %-12s  %-15s  %-20s  %-30s  %-12s  %-12s\n"; 
 printf ($formatstr, "device", "type-model", "serial-number", 
 "hostname", "ip-address", "frame-number", "cage-number"); 

 # 根据格式打印输出结果
 foreach my $hmcinfo (values %allhmc) { 
 printf($formatstr,"HMC",$$hmcinfo{"machinetype-model"}, 
 $$hmcinfo{"serial-number"},$$hmcinfo{"name"}, $$hmcinfo{"ip-address"}); 
 } 

 foreach my $cecinfo (values %allcec) { 
 printf($formatstr,"CEC",$$cecinfo{"machinetype-model"}, 
 $$ce-cinfo{"serial-number"},$$cecinfo{"hostname"}, 
 $$cecinfo{"ip-address"},$$cecinfo{"frame-number"}, 
 $$cecinfo{"cage-number"}); 
 } 

 foreach my $bpainfo (values %allbpa) { 
 printf($formatstr,"BPA",$$bpainfo{"machinetype-model"},
  $$bpainfo{"serial-number"},$$bpainfo{"hostname"}, $$bpainfo{"ip-address"},
  $$bpainfo{"frame-number"}, $$bpainfo{"cage-number"}); 
 } 

 # 动态发现 HMC 
 sub disc_hmc 
 { 
 my @allout; 
 # 执行 HMC 发现命令后,收集所有输出结果
 foreach my $cmd (@HMC_DISC_CMD) { 
    # Execute the command 
        my @output = `$cmd`; 
        @allout = ( @allout, @output ); 
 } 
    chomp @allout; 

  
    # 分析每一行输出结果,抽取关键信息
    foreach my $line (@allout) { 
        my %kv; 
        if ( $line =~ /type=hardware-management-console/ ) { 
            # Extract all “key=value” pairs and keep them in a hash 
            foreach my $item (split /\),/, $line) { 
                if ( $item =~ /\(*(\S+)=(\S*)\)*/ ) { 
                     $kv{$1} = $2; 
                } 
            } 
            # Use “type-model*serial-number” as the key 
            $allhmc{"$kv{'machinetype-model'}*$kv{'serial-number'}"} = \%kv; 
        } 
        #while ( my ($key, $value) = each %kv){ 
        #    print "$key => $value\n"; 
        #} 
    } 
 } 

 # 动态发现 CEC 
 sub disc_cec 
 { 
    my @allout; 
    # 执行 CEC 发现命令后,收集所有的输出结果
    foreach my $cmd (@CEC_DISC_CMD) { 
        my @output = `$cmd`; 
        @allout = ( @allout, @output ); 
    } 
    chomp @allout; 

     # 分析每一行输出结果,抽取关键信息
    foreach my $line (@allout) { 
        my %kv; 
        if ( $line =~ /type=cec-service-processor/ ) { 
            foreach my $item (split /\),/, $line) { 
                if ( $item =~ /\(*(\S+)=(\S*)\)*/ ) { 
                     $kv{$1} = $2; 
                } 
            } 
       $allcec{"$kv{'machinetype-model'}*$kv{'serial-number'}"}= \%kv; 
        } 
    } 
 } 

 # 动态发现 BPA 
 sub disc_bpa 
 { 
    my @allout; 
     # 执行 BPA 发现命令后,收集所有的输出结果
    foreach my $cmd (@BPA_DISC_CMD) { 
        my @output = `$cmd`; 
        @allout = ( @allout, @output ); 
    } 
    chomp @allout; 

    # 分析每一行输出结果,抽取关键信息
    foreach my $line (@allout) { 
        my %kv; 
        if ( $line =~ /type=bulk-power-controller/ ) { 
            foreach my $item (split /\),/, $line) { 
                if ( $item =~ /\(*(\S+)=(\S*)\)*/ ) { 
                     $kv{$1} = $2; 
                } 
            } 
       $allbpa{"$kv{'machinetype-model'}*$kv{'serial-number'}"}= \%kv; 
        } 
    } 
 }
清单 6. 运行 slptool 自动化脚本显示结果
 # ./nodedis_script 
 device  type-model  serial-number  hostname  ip-address  frame-number  cage-number 
 HMC 7042CR4 1050FBB e108m6hmc02  9.114.47.221,10.0.0.1 
 HMC 7310CR4 101292B e108v3hmc01  9.114.47.187,10.0.0.2 
 CEC 9125-F2A 0262662       10.0.0.233,192.168.200.244   1    4 
 CEC 9125-F2A 027ACB4       10.0.0.247,192.168.200.231   1    7 
 CEC 9125-F2A 027ACA4       10.0.0.242,192.168.200.232   1    6 
 CEC 8234-EMA 10F0C43       10.0.0.245,30.0.0.169        0    0 
 CEC 8204-E8A 06AD9A2       10.0.0.253,169.254.3.14      0    0 
 BPA 9A00-100 99200G1       10.0.0.239, 192.168.200.45   0    0

管理集群中的节点

在 Service Network 中,当管理员利用 slptool 动态发现 HMCs,Frame BPAs 和 CEC FSPs 节点之后,管理员可以根据实际的需求灵活地创建某个 HMC 与 Frame BPAs 或者 CEC FSPs 之间的链接。当 Frame BPAs 或者 CEC FSPs 节点发生变化时,管理员可以重设或者删除链接;当 HMC 发生变化时,管理员可以将现有的链接移交至另外一台 HMC;或者将一个 Frame BPA 或者 CEC FSP 节点同时链接至不同的两个 HMC,实现 HMC fail over 的功能。

节点的管理功能主要包括以下两个方面:

  1. 建立或删除 Frame BPAs 与 HMCs 之间的链接
  2. 建立或删除 CEC FSPs 与 HMCs 之间的链接

在对节点进行管理之前,管理员可以在 MS 上通过 SSH 登录某个 HMC,利用 HMC 提供的命令来实现管理功能。

SSH 登录 HMC

在 MS 上,管理可以手动登录 HMC,但每次均需要输入密码比较麻烦。本文介绍了 MS 与 HMC 之间通过交换密钥的方式实现 SSH 自动登录。

首先在 MS 上创建 RSA 密钥对。

清单 7. 创建 RSA 密钥对
 #rm -f ~/.ssh/id_rsa*;ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" 
 Generating public/private rsa key pair. 
 Your identification has been saved in /root/.ssh/id_rsa. 
 Your public key has been saved in /root/.ssh/id_rsa.pub. 
 The key fingerprint is: 
 ed:61:83:c7:c4:b5:d8:f7:f1:21:f7:7a:9a:0b:db:4d root@MS

该命令将在 ~/.ssh/ 目录下生成一对公钥和密钥。

清单 8. 查看 RSA 密钥对
 # ls -al ~/.ssh/id_dsa* 
 -rw------- 1 root root 1192 2009-10-15 22:41 id_dsa 
 -rw-r--r-- 1 root root 1115 2009-10-15 22:41 id_dsa.pub 

 #cat ~/.ssh/id_rsa.pub 
 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArz+xFZyQcvfPG5+47JjmN9yBhphS/La0IMwSkdNS/
 YSSmReEGdmHEyZgWzGyJREMy1VnufoGlngPUSIgYvS2UViKMEmdYFxelVkUXEBwc+utRR2sUgdE4M
 khMTO9obONIfMC05HqBejnf5ZfeQOf8SOXssEkwqGj/VVhS1SrNkmAhvC1+9m9ZXr4EE9KhEkCAgGg
 5LXFBY29D30fluroQcGBYVXmPxhHiolfog6/M3Mx373xM7kgOw9MpQ/JcuD28DfpsX8f3lK3zvXqwB
 Nqqq3McINQQulIbr+w3kMvjI8S6vWhot0WLAEiKWVu4lF8RSAlFh6c+pcdbNAzAa9Ukw== root@MS

在 HMC 上用命令' kauthkeys -a ''string of id_rsa.pub'' ' 将 MS 上生成的公钥添加至 HMC 的公钥授权文件 $HOME/.ssh/authorized_keys2。

清单 9. HMC 添加公钥
 HMC:~>mkauthkeys -a 
"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArz+xFZyQcvfPG5+47JjmN9yBhphS/La0IMwSkdNS/
YSSmReEGdmHEyZgWzGyJREMy1VnufoGlngPUSIgYvS2UViKMEmdYFxelVkUXEBwc+utRR2sUgdE4Mk
hMTO9obONIfMC05HqBejnf5ZfeQOf8SOXssEkwqGj/VVhS1SrNkmAhvC1+9m9ZXr4EE9KhEkCAgGg5
LXFBY29D30fluroQcGBYVXmPxhHiolfog6/M3Mx373xM7kgOw9MpQ/JcuD28DfpsX8f3lK3zvXqwBN
qqq3McINQQulIbr+w3kMvjI8S6vWhot0WLAEiKWVu4lF8RSAlFh6c+pcdbNAzAa9Ukw== root@MS"

设置完成后,当管理员从 MS 通过 SSH 登录到 HMC 时,就不用输入密码。管理员可以在 HMC 上根据自己的需求将某个 Frame BPA 或者 CEC FSP 链接过来。

清单 10. HMC 管理 Frame BPAs 或者 CEC FSPs 节点的方法
 # 添加 Frame BPA 示例
 HMC: ~ > mksysconn --ip 10.0.0.239 -r frame – passwd abc123 

 # 添加 CEC FSP 示例
 HMC: ~ > mksysconn --ip 10.0.0.253 -r sys --passwd abc123 

 # 查看链接的状态 示例
 HMC:~> lssysconn -r all 
 resource_type=sys,type_model_serial_num=8204-E8A*06AD9A2, 
 sp=primary,sp_phys_loc=U78A0.001.DNWGPVZ-P1,ipaddr=10.0.0.253,
 alt_ipaddr=unavailable,state=Connected 

 resource_type=sys,type_model_serial_num=9125-F2A*0262662, 
 sp=primary,sp_phys_loc=U78A1.001.9920361-P1,ipaddr=10.0.0.233,
 alt_ipaddr=unavailable,state=Connected 

 resource_type=frame,type_model_serial_num=9A00-100*99200G1, 
 side=a,ipaddr=10.0.0.239,alt_ipaddr=unavailable,state=Connected 

 resource_type=frame,type_model_serial_num=9A00-100*99200G1,side=b, 
 ipaddr=10.0.0.240,alt_ipaddr=unavailable,state=Connected 

 # 重设某个链接 示例
 HMC: ~ >rmsysconn -o reset --ip 10.0.0.253 

 # 删除某个链接 示例
 HMC: ~ >rmsysconn -o remove --ip 10.0.0.253

小结

本文介绍了在 HMC-Attached System p 集群中,创建 Service Network,利用 OpenSLP 快速发现 HMCs,Frame BPAs 和 CEC FSPs 节点的方法。通过 Service Network,管理员还可以快速灵活地对节点进行管理。这些方法可以帮助管理员快速有效地实施大规模集群。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=478075
ArticleTitle=IBM System p 集群节点的快速发现与管理
publish-date=03292010