• 利用DCLI命令实现跨机器检查


    dcli介绍

         dcli 为Oracle Exadata Machine中提供的管理cell的工具,全名 Distributed Command Line Interface,在Exadata, Exalogic, Exalytics等系列一体机都自带这个工具, 该工具是一套python脚本,可以用文本工具直接查看编辑, 在当前的IT管理中批量管理几百台机器已不是什么稀奇的事, 所以在日常一些批量共性的常规检查和运维就需要一种维护工具自动实现或者叫自动化运维工具, 当前较流行的有puppet和ansible 产品,其中ansible是个很不错的工具,因为被监控端无需安装客户端,后期有时间再介绍。 同样dcli也是一个基于SSH协议,而且更佳轻量级,控制端一个dcli(python 脚本)和python环境 2.3以上,受控端不要任何客户端。 其实dcli可以很方便的移植到非Exadata机器上使用。
         dcli部署到其它非Exadata需要修改脚本中指定的默认用户celladmin为受控端一个共用的用户如oracle DB环境的oracle。如果有一点开发语言功底建议从头阅读一篇dcli脚本。

    • 1 dcli 脚本可以自已配置ssh互信,后期无密码执行
    • 2 dcli脚本也可以不配置SSH,使用 -l 选项指定用户名,交互输出密码
    • 3 dcli脚本可以远程执行系统自带的命令、文件目录操作、远程执行自定议shell
    • 4 控制端要有python环境 2.3以上,受控端可无。
    • 5 dcli可以使用dsa(非对称加密) 生成ssh key, 并把公钥通过SSH传递并追加到~/.ssh/authorized_keys中,实现ssh认证。
    • 6 可以自己根据需求修改dcli脚本, 该脚本的版权是oracle所有
      以上内容参考https://www.anbob.com/archives/2843.html

    dcli脚本介绍

         dcli本身为py脚本,通过pyinstaller打包为Linux可以执行文件,放置在/usr/local/bin目录下,既可以实现随时调用。以下是dcli的简单使用说明

    [root@19db1 ~]# dcli 
    Error: No command specified.
    Usage: dcli [options] [command]
    
    Options:
      --version            show program's version number and exit
      --batchsize=MAXTHDS  limit the number of target cells on which to run the
                           command or file copy in parallel
      -c CELLS             comma-separated list of cells
      -d DESTFILE          destination directory or file
      -f FILE              files to be copied
      -g GROUPFILE         file containing list of cells
      -h, --help           show help message and exit
      --hidestderr         hide stderr for remotely executed commands in ssh
      -k                   push ssh key to cell's authorized_keys file
      -l USERID            user to login as on remote cells (default: celladmin)
      --maxlines=MAXLINES  limit output lines from a cell when in parallel
                           execution over multiple cells (default: 100000)
      -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
      --serial             serialize execution over the cells
      --showbanner         show banner of the remote node in ssh
      -t                   list target cells
      --unkey              drop keys from target cells' authorized_keys file
      -v                   print extra messages to stdout
      --vmstat=VMSTATOPS   vmstat command options
      -x EXECFILE          file to be copied and executed
    [root@19db1 ~]# dcli  --version
    version 1.3
    [root@19db1 ~]# which dcli
    /usr/local/bin/dcli
    [root@19db1 host]# dcli -k -g /root/crmtest/host/host_all -l root <=====配置机器之间免密
    root@19db1's password:
    root@19db2's password:
    root@zsdb's password:
    19db1: ssh key added
    19db2: ssh key added
    zsdb: ssh key added
    [oracle@19db1 ~]$ dcli -g /home/oracle/crmtest/host/host_all -l oracle hostname    <======执行简单系统命令
    19db1-192.168.20.126: 19db1
    19db2-192.168.20.127: 19db2
    zsdb-192.168.20.43: zsdb
    [oracle@19db1 ~]$ dcli -g /home/oracle/crmtest/host/host_all -l oracle -x /tmp/test.sh <======执行shell脚本
    19db1-192.168.20.126: total        used        free      shared  buff/cache   available
    19db1-192.168.20.126: Mem:          16027        1837       12987          43        1203       13799
    19db1-192.168.20.126: Swap:         16383           0       16383
    19db2-192.168.20.127: total        used        free      shared  buff/cache   available
    19db2-192.168.20.127: Mem:          16027         219       15603          19         204       15510
    19db2-192.168.20.127: Swap:         16383           0       16383
    zsdb-192.168.20.43: total        used        free      shared  buff/cache   available
    zsdb-192.168.20.43: Mem:          11853        1348         291         978       10212        9119
    zsdb-192.168.20.43: Swap:          5119           2        5117
    [oracle@19db1 ~]$ dcli -g /home/oracle/crmtest/host/host_all -l oracle -f p2020.ora -d /tmp  <=====传输文件
    [oracle@19db1 ~]$ cd /tmp
    [oracle@19db1 tmp]$ ll /tmp/p2020.ora 
    -rw-r--r-- 1 oracle oinstall 1494 Jan 19 16:22 /tmp/p2020.ora
    

    dcli实现跨机器检查

    dcli放置到对应目录

    [root@19db1 ~]# cd /usr/local/bin/
    [root@19db1 bin]# ll dcli 
    -rwxrwxrwx 1 root root 48055 Jan 15 10:46 dcli
    

    准备hosts文件

    [oracle@19db1 crmtest]$ cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.20.126 19db1-192.168.20.126 19db1
    192.168.20.127 19db2-192.168.20.127 19db2
    192.168.20.43 zsdb-192.168.20.43 zsdb
    192.168.20.126 19db1
    [oracle@19db1 crmtest]$ more /home/oracle/crmtest/host/*
    ::::::::::::::
    /home/oracle/crmtest/host/host_19db1
    ::::::::::::::
    19db1-192.168.20.126
    ::::::::::::::
    /home/oracle/crmtest/host/host_19db2
    ::::::::::::::
    19db2-192.168.20.127
    ::::::::::::::
    /home/oracle/crmtest/host/host_19dball
    ::::::::::::::
    19db1-192.168.20.126
    19db2-192.168.20.127
    ::::::::::::::
    /home/oracle/crmtest/host/host_all
    ::::::::::::::
    19db1-192.168.20.126
    19db2-192.168.20.127
    zsdb-192.168.20.43
    ::::::::::::::
    /home/oracle/crmtest/host/host_zsdb43
    ::::::::::::::
    zsdb-192.168.20.43
    

    配置主机之间免密

    --生成公钥
    [oracle@19db1 .ssh]$ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/oracle/.ssh/id_rsa.
    Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:UTJfE6r9Miy8yN/UUJHVw7lPbWaWEHeRb9JqUipme+I oracle@19db1
    The key's randomart image is:
    +---[RSA 2048]----+
    |        o . ==++=|
    |         = o.+.=o|
    |        . o . ..*|
    |         + .  oo@|
    |        S o  o X.|
    |       . .++o o .|
    |        oo=ooo   |
    |     . . =oo.    |
    |      o.o.Eo     |
    +----[SHA256]-----+
    --传输公钥至所有机器
    [root@19db1 host]# dcli -k -g /home/oracle/crmtest/host/host_all -l oracle
    

    整理主机检查脚本

    [oracle@19db1 crmtest]$ more crmcheck.sh 
    #!/bin/bash
    pathpwd=$(cd `dirname $0`;pwd)
    cd $pathpwd
    tar -zcf `date -d "-1 day" "+%Y%m%d-%H%M%S"`.tgz log* --remove-files
    ## log format args
    log_prefix="log_crmcheck_"
    date_str="`date +%Y%m%d`"
    log_name=$pathpwd/$log_prefix$date_str".log"
    log_name_final=$pathpwd/$log_prefix$date_str"_final.log"
    anynowtime="date +'%Y-%m-%d %H:%M:%S'"
    ## check type program
    check_pro=""
    ## dcli hosts
    hosts_tomcat_single="host_19db1 host_19db2"
    hosts_tomcat_all="host_19dball"
    hosts_mservice_single="host_19db1 host_19db2 host_zsdb43"
    hosts_mservice_all="host_all"
    ## check process args
    tomcat_filter="LiveBOS_Tomcat9_Kirin_WH"
    mservice_filter="ams-server-esa-retailassessment-1.0.4-SNAPSHOT.jar ams-server-zy-1.0.1.jar cim-webapp-base-1.0.1.jar ams-server-co
    ntinuous-service-1.0.1.jar ams-server-cusgroup-base-1.0.1.jar ams-server-fuwu-product-1.0.1.jar ams-server-marketing-activity-1.0.1
    .jar ams-server-marketing-management-1.0.1.jar ams-server-product-adaptation-1.0.1.jar ams-server-product-financial-1.0.1.jar ams-s
    erver-report-center-1.0.1.jar ams-server-rest-rpc-0.0.1-SNAPSHOT.jar ams-server-salary-assessment-1.0.1.jar ams-server-staff-relati
    on-1.0.1.jar ams-server-task-center-1.0.1.jar ams-server-wm-research-0.1.jar ams-server-wm-portfolio-0.1.jar ams-server-wm-informat
    ion-1.0.1.jar ams-server-wm-base-1.0.1.jar ams-server-train-exam-1.0.1.jar ams-server-mot-base-1.0.1.jar ams-server-customer-senior
    -1.0.1.jar ams-server-esa-organizationassessment-1.0.4-SNAPSHOT.jar engineweb-1.0-SNAPSHOT.jar webapp-base-1.0.1.jar ams-server-cus
    tomer-base-1.0.1.jar ams-server-common-base-1.0.1.jar"
    ## date format
    NOW="echo [\`$anynowtime\`]"
    
    function recho
    {
        echo "`eval $NOW` $@"
    }
    function errorecho
    {
        echo -e "`eval $NOW`33[1m $@ 33[0m"
    }
    function readecho
    {
      while read line
        do
          echo "`eval $NOW` $line"
        done
    }
    function resultcheck
    {
       var1=$@
       var_hostname=`echo $var1|awk '{print $1}'`
       var_result=`echo $var1|awk '{print $3}'`
       if [ $var_result -eq "1" ]; then
         recho $var_hostname $check_pro" "$v_filter "is OK" |tee -a $log_name_final
       else
         errorecho $var_hostname $check_pro" "$v_filter "is not running!!" |tee -a $log_name_final
       fi
    }
    function writelog
    {
      while read line
        do
          echo "`eval $NOW` $line" >>$log_name
          resultcheck $line
        done
    }
    function headtitle
    {
        recho "--------------------------------------------"
        recho "---------  $1 check $2"
        recho "--------------------------------------------"
    }
    function check1
    {
        dcli -g $pathpwd/host/host_all -l root sh /tmp/test.sh |readecho
    }
    function check
    {
        #v_pro=$1
        v_host=$2
        v_filter=$3
        ##headtitle $v_pro "start"|tee -a $log_name $log_name_final
        dcli -g $pathpwd/host/$v_host -l oracle "ps -ef|grep $v_filter|grep -vE 'grep|xargs'|wc -l|xargs echo $v_filter"|writelog
        ##headtitle $v_pro "end" |tee -a $log_name $log_name_final
    }
    function execcheck
    {
        check_pro="Tomcat"
        for tomcat in $hosts_tomcat_all
        do
         headtitle $check_pro "start"|tee -a $log_name $log_name_final
         check $check_pro $tomcat $tomcat_filter
         headtitle $check_pro "end" |tee -a $log_name $log_name_final
        done
        check_pro="MService"
        for mservice in $hosts_mservice_single
        do
         headtitle $check_pro "start"|tee -a $log_name $log_name_final
         for filter in $mservice_filter
         do
           check $check_pro $mservice $filter
         done
         headtitle $check_pro "end" |tee -a $log_name $log_name_final
        done
    }
    
    execcheck
    

    执行效果

    [oracle@19db1 crmtest]$ more log_crmcheck_20210118_final.log 
    [2021-01-18 15:37:12] --------------------------------------------
    [2021-01-18 15:37:12] ---------  Tomcat check start
    [2021-01-18 15:37:12] --------------------------------------------
    [2021-01-18 15:37:13] 19db1-192.168.20.126: Tomcat LiveBOS_Tomcat9_Kirin_WH is not running!! 
    [2021-01-18 15:37:13] 19db2-192.168.20.127: Tomcat LiveBOS_Tomcat9_Kirin_WH is not running!! 
    [2021-01-18 15:37:13] --------------------------------------------
    [2021-01-18 15:37:13] ---------  Tomcat check end
    [2021-01-18 15:37:13] --------------------------------------------
    [2021-01-18 15:37:13] --------------------------------------------
    [2021-01-18 15:37:13] ---------  MService check start
    [2021-01-18 15:37:13] --------------------------------------------
    [2021-01-18 15:37:13] 19db1-192.168.20.126: MService ams-server-esa-retailassessment-1.0.4-SNAPSHOT.jar is not running!! 
    [2021-01-18 15:37:13] 19db1-192.168.20.126: MService ams-server-zy-1.0.1.jar is not running!! 
    [2021-01-18 15:37:13] 19db1-192.168.20.126: MService cim-webapp-base-1.0.1.jar is not running!! 
    [2021-01-18 15:37:14] 19db1-192.168.20.126: MService ams-server-continuous-service-1.0.1.jar is not running!! 
    [2021-01-18 15:37:14] 19db1-192.168.20.126: MService ams-server-cusgroup-base-1.0.1.jar is not running!! 
    [2021-01-18 15:37:14] 19db1-192.168.20.126: MService ams-server-fuwu-product-1.0.1.jar is not running!! 
    [2021-01-18 15:37:14] 19db1-192.168.20.126: MService ams-server-marketing-activity-1.0.1.jar is not running!! 
    [2021-01-18 15:37:15] 19db1-192.168.20.126: MService ams-server-marketing-management-1.0.1.jar is not running!! 
    [2021-01-18 15:37:15] 19db1-192.168.20.126: MService ams-server-product-adaptation-1.0.1.jar is not running!! 
    [2021-01-18 15:37:15] 19db1-192.168.20.126: MService ams-server-product-financial-1.0.1.jar is not running!! 
    [2021-01-18 15:37:16] 19db1-192.168.20.126: MService ams-server-report-center-1.0.1.jar is not running!! 
    [2021-01-18 15:37:16] 19db1-192.168.20.126: MService ams-server-rest-rpc-0.0.1-SNAPSHOT.jar is not running!! 
    [2021-01-18 15:37:16] 19db1-192.168.20.126: MService ams-server-salary-assessment-1.0.1.jar is not running!! 
    [2021-01-18 15:37:16] 19db1-192.168.20.126: MService ams-server-staff-relation-1.0.1.jar is not running!! 
    [2021-01-18 15:37:17] 19db1-192.168.20.126: MService ams-server-task-center-1.0.1.jar is not running!! 
    

    作者:bicewow —— bicewow

    出处:http://www.cnblogs.com/bicewow/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    [LeetCode]2. Add Two Numbers链表相加
    Integration between Dynamics 365 and Dynamics 365 Finance and Operation
    向视图列添加自定义图标和提示信息 -- PowerApps / Dynamics365
    Update the Power Apps portals solution
    Migrate portal configuration
    Use variable to setup related components visible
    Loyalty management on Retail of Dynamic 365
    Modern Fluent UI controls in Power Apps
    Change screen size and orientation of a canvas app in Power App
    Communication Plan for Power Platform
  • 原文地址:https://www.cnblogs.com/bicewow/p/14298612.html
Copyright © 2020-2023  润新知