首页 > 数据库 > Oracle > 正文
3.5 多主机管理工具DCLI
2015-11-03 15:54:49     我来说两句      
收藏    我要投稿

随着云计算的盛行,在可预见的未来计算机集群的规模会变得越来越庞大。而在大型的数据中心,一个系统管理员/数据库管理员有可能需要同时管理几十上百台主机。例如要进行一些常规性的维护或配置工作,如果还使用原始的方式进行管理,这几乎是“不可能完成的任务了”。

很多有经验的系统管理员一定听说过大名鼎鼎的Puppet,Puppet是个非常强大的分布式主机管理工具,并且现在被广泛地应用在各大型的IT企业中,例如Dell、Twitter、Oracle、Citrix、Google、Wikipedia等,Google就曾经用它来管理几千台Mac桌面电脑。当然Oracle也在其企业级Linux发行版Oracle Linux中提供了一个类似的工具,即DCLI(分布式命令行Distributed command line interface),不过它远比puppet简单,无需系统的学习就能迅速掌握。Exadata的节点数众多,如果纯粹通过手工来管理不仅会过于繁琐,并且也很难使得配置达到整齐划一的效果,在这种情况下,使用Puppet这样的复杂的工具给人以用牛刀杀鸡的感觉,但DCLI就可以派上用场了。

为了说明DCLI的使用有多简单,以下举一个使用dcli来获取Exadata上所有的数据库节点和存储节点的系统时间的例子:

[root@dm01db01 ~]# /usr/local/bin/dcli -g /opt/oracle.SupportTools/onecommand/all_group -l root "date"
 dm01db01: Sat Jun  2 16:59:47 CST 2012
 dm01db02: Sat Jun  2 16:58:32 CST 2012
 dm01db03: Sat Jun  2 17:00:00 CST 2012
 dm01db04: Sat Jun  2 17:05:11 CST 2012
 dm01cel01: Sat Jun  2 16:59:48 CST 2012
 dm01cel02: Sat Jun  2 17:04:43 CST 2012
 dm01cel03: Sat Jun  2 17:03:08 CST 2012
 dm01cel04: Sat Jun  2 17:04:29 CST 2012
 dm01cel05: Sat Jun  2 17:04:23 CST 2012
 dm01cel06: Sat Jun  2 17:00:31 CST 2012
 dm01cel07: Sat Jun  2 17:04:11 CST 2012

但是,执行这个命令有几个前提条件:

需要预先配置各节点的用户ssh等效性。例如这里使用的是root用户执行命令,那么所有节点的root用户都需要配置ssh用户等效性;

需要一个group文件,例如在上面这条指令中对应的group文件是/opt/oracle.SupportTools/onecommand/all_group,这个文件中保存了需要执行这条命令节点的主机名或ip地址。在Exadata上,这些文件可以由dbm conf?igurator或者exaconf自动生成;

需要安装DCLI这个工具。在Exadata、Exalogic、Exalytics系统中都自带有这个工具。但是这个工具并不局限于用于Oracle自家的系统,拷贝到其他Linux上也能直接使用,只要安装了python运行环境就行。

首先可以通过使用Linux上的f?ile命令来查看这个文件的类型:

 [root@dm01db01 ~]# f?ile /usr/local/bin/dcli
/usr/local/bin/dcli: a python script text executable

不难发现,这个文件其实就是一个python脚本。打开这个文本文件,可以看到里面就提到了一些简单的用法以及其依赖关系——需要安装python 2.3以上的运行环境。

再来看一下其帮助的语法:

[root@dm01db01 ~]# dcli -h
Distributed Shell for Oracle Storage
This script executes commands on multiple cells in parallel threads.
The cells are referenced by their domain name or ip address.
Local f?iles can be copied to cells and executed on cells.
This tool does not support interactive sessions with host applications.
Use of this tool assumes ssh is running on local host and cells.
The -k option should be used initially to perform key exchange with
cells.  User may be prompted to acknowledge cell authenticity, and
may be prompted for the remote user password.  This -k step is serialized
to prevent overlayed prompts.  After -k option is used once, then
subsequent commands to the same cells do not require -k and will not require passwords for that user from the host.
Command output (stdout and stderr) is collected and displayed after the copy and command execution has f?inished on all cells.
Options allow this command output to be abbreviated.

Return values:
 0 -- f?ile or command was copied and executed successfully on all cells
 1 -- one or more cells could not be reached or remote execution
      returned non-zero status.
 2 -- An error prevented any command execution

Examples:
 dcli -g mycells -k
 dcli -c stsd2s2,stsd2s3 vmstat
 dcli -g mycells cellcli -e alter iormplan active
 dcli -g mycells -x reConf?ig.scl

usage: dcli [options] [command]

options:
  --version           show program's version number and exit
  -c CELLS            comma-separated list of cells
  -d DESTFILE         destination directory or f?ile
  -f FILE             f?ile to be copied
  -g GROUPFILE        f?ile containing list of cells
  -h, --help          show help message and exit
  -k                  push ssh key to cell's authorized_keys f?ile
  -l USERID           user to login as on remote cells (default: celladmin)
  -n                  abbreviate non-error output
  -r REGEXP           abbreviate output lines matching a regular expression
  -s SSHOPTIONS       string of options passed through to ssh
  --scp=SCPOPTIONS    string of options passed through to scp if different
                      from sshoptions
  -t                  list target cells
  -v                  print extra messages to stdout
  --vmstat=VMSTATOPS  vmstat command options
  -x EXECFILE         f?ile to be copied and executed

从上述帮助选项可知:dcli命令常用到的选项包括-g、-l、-x、-r等。-g表示后面跟的是group文件,-l跟执行的用户,-x表示执行这个文本文件,-r表示使用正则表达式排除某个关键字。

以下简单举几个例子来说明如何使用DCLI工具。

查看所有数据库节点上Oracle数据库的PSU版本:

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/all_group -l oracle \
 "/u01/app/oracle/11.2.0.3/dbhome_1/Opatch/opatch lsinventory -bugs_f?ixed | grep -i 'DATABASE PSU' "

查看所有存储节点上不属于RECO磁盘组的grid disk:

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/cell_group -l root -r "reco" "cellcli -e list griddisk"

部署一个脚本/usr/local/monitoring/script.sh到所有的db节点执行:

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/dbs_group -l root -x /usr/local/monitoring/script.sh

使用vmstat查看所有存储节点的内存使用状况,采样频率为5秒一次,一共需要采样5次:

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/cell_group  --vmstat="-a 5 5"

在节点1生成rsa密钥,然后将其推送到其他数据库节点,使得数据库一节点可以不输入密码访问其他所有db节点:

[root@dm01db01 ~]# ssh-keygen –t rsa
[root@dm01db01 ~]#dcli -g /opt/oracle.SupportTools/onecommand/all_group  -k

以上的例子只是用于简单介绍dcli的用法,如果觉得这个命令行太长,可以进入到对应group文件所在的目录然后执行,就可以不用输入绝对路径,甚至可以使用Linux上的alias命令将其简化为ddb、dcell、dall等。

总之,DCL工具I还是非常强大的,Exadata用户几乎可以只在数据库节点一就能完成大量平时重复无聊的工作而无需频繁切换节点。如果能用好DCLI工具,无疑可以大大减轻Exadata管理员的工作负担。但是需要注意的是,因为这种命令是在多节点分布式执行,所以其影响的范围是非常广的,为了避免误操作,如果要执行的任务是非检查性质的,就需要特别谨慎。

笔者曾经遇到某个客户执行了一条这样的语句(这条命令危害非常大,这里只是举例说明,切不可放到生产环境中执行!),结果导致数据库无法启动,最后只能完全重装GI和rdbms。

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/dbs_group  -g root "chown -R  oracle:oinstall  /u01/app"
[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/dbs_group  -g root "chomod -R 775 /u01/app"

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.4.7 ASM与IDP
下一篇:3.6 存储管理工具CellCLI
相关文章
图文推荐
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站