WEB开发网
开发学院操作系统Linux/Unix Enterprise-Wide Unique 标识符 阅读

Enterprise-Wide Unique 标识符

 2009-07-12 08:34:21 来源:WEB开发网   
核心提示:简介在跨越多个数据中心的大型 IBM AIX 计算环境中,必须要实现业务连续性、灾难恢复、高可用性和虚拟化,Enterprise-Wide Unique 标识符,设计和部署大型环境的一个必要条件是,要确保关键的配置参数具有 Enterprise-Wide unique (EWU) 标识符,无法获得数据中心自动化过程所需

简介

在跨越多个数据中心的大型 IBM AIX 计算环境中,必须要实现业务连续性、灾难恢复、高可用性和虚拟化。设计和部署大型环境的一个必要条件是,要确保关键的配置参数具有 Enterprise-Wide unique (EWU) 标识符。EWU 标识符可以消除重复的值,这些重复的值会破坏和拖延灾难恢复、高可用性和虚拟化过程。

EWU 标识符是指在整个企业范围内具有单一值的任何参数。这个标识符可以是字符串、数字或字母数字值。使用 EWU 标识符的目的是消除系统管理的所有方面涉及的冲突值和重复值。这包括普通操作、紧急操作、启动、关闭、自动或手工故障转移、灾难恢复或高可用性过程。为了决定哪些参数可能需要 EWU 标识符,需要建立关键配置参数的清单。关键配置参数包括:

用户名

用户 ID 号

组名

组 ID 号

集群 ID 号

资源组名

卷组名

逻辑卷名

文件系统挂装点目录名

数据库记录 ID 号

服务组名

HACMP 应用服务器名

应用程序启动和关闭脚本

错误号

前面的清单并不完整,只是提供一些示例。

Enterprise-wide unique 标识符

在试图实现 EWU 标识符时,大多数系统管理员遇到的一个问题是如何跟踪和记录它们。大多数系统管理员会创建一个数据库或电子表格,在其中映射和记录必须为所有位置和所有数据中心的所有 AIX 系统生成的数以千计的标识符。这种方法从一开始就注定了失败的结局。电子表格常常会过时、很不可靠,管理员无法确定电子表格是最新的,甚至无法确定它是正确的电子表格。电子表格不应该用来存储系统配置管理信息,但是这个问题留到另一篇文章中讨论。

在存储系统配置管理信息方面,数据库有许多与电子表格相同的问题,但是通常只有一个包含此类信息的数据库。因此,系统管理员至少能够确定他们访问的数据来自正确的位置,但是不一定能够确定信息是最新的。

最好的解决方案是不使用电子表格或数据库把 EWU 值映射到关键配置参数。最好的解决方案是,根据需要从关键配置参数动态地生成 EWU 值。这需要一种跨异类平台生成相同 EWU 值的机制。通过生成 EWU 值,就不再需要维护电子表格或数据库。对于跨 UNIX® 平台生成 EWU 值,可移植性最好的机制是 shell 脚本。

如果使用 shell 脚本生成 EWU 值,那么脚本必须能够接受任何输入字符串。必须允许用户选择输出值的格式和位数。使用 shell 脚本的原因是,能够在任何 UNIX 平台上为任何字符串生成相同的 EWU 标识符。例如,在需要获得一个用户名的 UID 号时,不需要在电子表格或数据库中查找,而是在任何 UNIX 系统上使用 EWU 值生成脚本生成它。

生成 EWU 值的脚本应该编写为一个函数,并把它包含在组织的标准 shell 函数集中。这使系统管理员能够轻松地把这个函数合并到自己的 shell 脚本中,确保以一致且可重复的方式生成 EWU 值。脚本函数应该能够以多种格式生成 EWU 值,比如十进制、二进制、八进制或十六进制。还必须能够选择输出位数,以便适应各种用途和应用程序的需要。

基数:

基数 16 - 十六进制 (0-f)

基数 10 - 普通计数数字 (0-9)

基数 8 - 八进制 (0-7)

基数 2 - 二进制 (0-1)

下面是使用 AIX 命令和语法计算 EWU 值的示例:

print "any string requiring an enterprise wide unique identifier" | cksum | 
awk '{ print $1 }' 
 
341023782 

使用前面生成的 CRC 校验和值计算 EWU 值:

d输出值中的位数
b计数基数(十进制、十六进制、八进制、二进制)
c校验和值
m以计数基数的输出位数次方为分母,对 CRC 校验和值取模数

基数 10(十进制):

   
d=4 
c = 341023782 
m = c % 10**d 
m = 3782 

基数 16(十六进制):

d = 4 
m = c % 16**d 
m = 39976 = 9C26 HEXADECIMAL 

基数 8(八进制):

d = 4 
m = c % 8**d 
m = 3110 = 6046 OCTAL 

基数 2(二进制):

d = 4 
m = c % 2**d 
m = 6 = 0110 BINARY 

下面是以 Korn Shell 93 语法计算基数 16(十六进制)EWU 值的代码:

#!/usr/bin/ksh93  
d=4     
b=16      
v="any string requiring an enterprise wide unique identifier"  
c=$( print -- ${v} | cksum | awk '{ print $1 }' )  
(( m = c % b**d ))   
print -- "ibase=10; obase=${b}; ${m}" | bc 
9C26 

下面是以 Korn Shell 93 语法计算基数 10(十进制)EWU 值的代码:

#!/usr/bin/ksh93  
d=4 
b=10 
v="any string requiring an enterprise wide unique identifier" 
c=$( print -- ${v} | cksum | awk '{ print $1 }' ) 
(( m = c % b**d )) 
print -- "ibase=10; obase=${b}; ${m}" | bc 
3782 
  

下面是以 Korn Shell 93 语法计算基数 8(八进制)EWU 值的代码:

#!/usr/bin/ksh93 
d=4  
b=8  
v="any string requiring an enterprise wide unique identifier" 
c=$( print -- ${v} | cksum | awk '{ print $1 }' ) 
(( m = c % b**d )) 
print -- "ibase=10; obase=${b}; ${m}" | bc 
6046 
  

下面是以 Korn Shell 93 语法计算基数 2(二进制)EWU 值的代码:

#!/usr/bin/ksh93 
d=4    
b=2   
v="any string requiring an enterprise wide unique identifier" 
c=$( print -- ${v} | cksum | awk '{ print $1 }' ) 
(( m = c % b**d )) 
print -- "ibase=10; obase=${b}; ${m}" | bc 
110 

下面解释一下使用 CRC 校验和命令计算 EWU 值所需的各个成分:

校验和:

为用户通过命令行提供的每个字符串计算 CRC 校验和。

分母:

这是根据计数基数和输出值所需的位数计算出来的。这个值也是使用计数基数和输出值的位数能够生成的惟一输出值的总数。

模数:

校验和值除以分母值的余数。这是代表用户通过命令行提供的字符串的十进制惟一值。

ewuid:

按照所需的输出计数基数和输出字符数转换后的 EWU 值。

前面的技术可以为任何用户提供的字符串生成惟一的标识符;但是,在每次需要 EWU 值时都执行这一系列命令比较麻烦。幸运的是,有一个使用此技术的脚本,可以使用它以各种计数基数生成 EWU 标识符,同时允许用户选择所需的输出位数。此脚本称为 mkewuid,可以从 这里 获得。

下面是 mkewuid Korn Shell 脚本函数产生的用法信息:

Generate an Enterprise Wide Unique (EWU) identifier 
value for any given input string of characters. For 
example, this script can be used to generate an 
Enterprise Wide Unique UID number for any given user 
name. The output value may be calculated in a user 
selectable format and number of digits. 
 
Usage: ${1##*/} [-?vV] [-hdob] [-mM] [-c] [-p #] [-ul] [string...] 
 Where: 
  -h = Hexadecimal (Base 16) output value (default) 
  -d = Base 10 output value 
  -o = Octal (Base 8) output value 
  -b = Binary (Base 2) output value 
  -p # = Number of characters in output value     (default: 4) 
  -c = Display column headers in output (default: no headers) 
  -m = Minimize output 
  -M = Maximize output (default) 
  -u = Uppercase Enterprise Wide Unique output values 
  -l = Lowercase Enterprise Wide Unique output values (default)> 
  -v = Verbose mode - displays mkewuid function info 
  -V = Very Verbose Mode - debug output displayed 
  -? = Help - display this message 
  string = any alphanumeric string such as user names, group names, host names, 
    node names, etc. 
       (default: local node name ) 
Example Usage: 
 mkewuid -c -h -p 6 teststring1 
 
Example Output: 
 # string : base : cksum : denom: modulo : ewuid 
 teststring1:16:542276492:16777216:5405580:527b8c 
 

mkewuid 脚本函数为命令行上提供的每个字符串输出一个记录行。

为了适应应用程序和数据库的需求差异,mkewuid 脚本函数可以把输出值转换为全大写或全小写字符(分别使用命令行选项 -u 和 -l)。

mkewuid 脚本函数的默认输出记录包含五个字段,字段之间由冒号 (:) 分隔:

字段 1:用户在命令行上提供的字符串。

字段 2:用来计算 EWU 值的计数基数。

字段 3:用户提供的字符串的 CRC 校验和值。

字段 4:根据计数基数和 EWU 输出值所需的位数计算出来的分母。

字段 5:EWU 输出值。

一个命令行选项可以缩减输出记录,只显示在命令行上提供的每个字符串的 EWU 值。这个最简化选项是 -m;但是,这个脚本函数的默认行为是显示所有字段 (-M)。通常,在系统管理员编写的 shell 脚本中调用这个脚本函数,用它为单一字符串计算 EWU 值。然后,把输出赋值给一个 shell 变量,供 shell 脚本中的后续命令使??:

#!/usr/bin/ksh93 
... 
... 
... 
EWUID=$( mkewuid -d -p 7 -m  myusername ) 
... 
... 
... 

上面的示例演示如何使用 mkewuid 脚本函数动态地计算用户名的 UID 号。另外,因为这个脚本可以在任何系统上为相同的字符串生成相同的数字,所以不需要把 UID 号存储在电子表格或数据库中。

结束语

使用 mkewuid 这样的脚本生成 EWU 值有许多原因,这对现代数据中心环境的操作和管理非常重要。系统管理员必须通过一种一致、可重复且可移植的方法确保用惟一的值标识各种硬件、软件、设施、网络和人员资源。如果关键资源的标识值出现重复,就会在实现和实施业务连续性原则时造成严重的问题。灾难恢复和高可用性故障转移要求跨所有节点惟一地标识这些过程中涉及的资源。在故障转移(无论是自动的还是手工的)期间,花时间解决资源标识冲突会延长停机时间。通过用 EWU 值定义这些资源,可以在自动或手工故障转移、高可用性操作和灾难恢复测试或实现期间消除冲突。

使用标准化机制生成 EWU 值的另一个好处是,不再需要把这些值存储在电子表格或数据库中。对于存储这类数据来说,电子表格非常不可靠。管理员常常复制电子表格,对这个拷贝做修改,几天之后才把它复制回中心位置。在此期间,另一位管理员可能修改过电子表格,这些修改会被覆盖。更常见的情况是,没有及时更新电子表格,内容与最新数据不一致。用数据库存储这些信息也有同样的问题。数据常常是过时的,或者在紧急情况下需要数据时无法访问数据库。由于这些原因,必须避免用电子表格和数据库存储关键的配置信息。如果可能的话,应该以一致且可重复的方式动态地生成配置信息。

尽管编译的程序的运行速度通常比脚本快得多,但是对于生成 EWU 值的机制,速度并不是主要关注点。主要关注点是这种机制应该独立于平台,应该能够在系统之间方便地复制。编译的程序需要重新编译,才能迁移到另一个平台上,因此需要编译器。尽管可以为每个平台生成二进制代码,但是这需要更高的技能水平。在灾难恢复实现期间,可能找不到具备这种技能的人员。生成 EWU 值的最佳机制是使用 shell 脚本。

最后,动态地生成 EWU 值的最重要的原因是数据中心自动化。在实现数据中心自动化过程中,必须使用一致、可重复且可靠的机制支持 EWU 标识符。因为电子表格不可靠且不一致,所以绝对不能使用电子表格。数据库是可靠的,但是这要求部署过程能够访问数据库所在的网络,这个条件不一定成立。另外,在灾难恢复实现期间,很可能需要在恢复数据库之前执行自动部署。在这种情况下,无法获得数据中心自动化过程所需的关键配置信息。同样,最好的解决方案是尽可能动态地生成关键配置信息。

Tags:Enterprise Wide Unique

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接