初学linux系统管理3

发布时间:2019-09-12 07:54:32编辑:auto阅读(1738)

    在多台linux主机上执行相同的命令
    By tianjing on 2011 年 06 月 05 日

    有时候我们需要在若干台linux主机上执行相同的命令,或者安装相同的软件,可以使用如下两种方法:

    实验环境,有9台RHEL5.5_x64的主机,host表如下:

    test-1        10.9.1.1

    test-2         10.9.1.2

    test-3        10.9.1.3

    test-4         10.9.1.4

    test-5         10.9.1.5

    test-6         10.9.1.6

    test-7          10.9.1.7

    test-8          10.9.1.8

    test-login      10.10.1.1

    其中test-login为登陆节点,test-login到其他8台主机的ssh信任连接已经建立。

    方法一:

    for  i  in  {1..8}; do ssh test-$i ‘hostname; mkdir –p /root/test’; done

    如果ssh后面有多条命令要在远程主机上执行,必须用引号把所有的命令括起来,否则只会有第一条命令在远程主机上执行。

     

    方法二:

    安装tentakel, tentakel是一个可以在多台linux主机上执行相同命令的脚本。

    下载tentakel-2.2.tgz,解压后make && make install

    配制tentakel,把tentakel.conf.simple拷贝为/etc/tentakel.conf,编辑该配置文件:

    # first section: global parameters
    set ssh_path="/usr/bin/ssh"                  //设置ssh的路径
    set method="ssh"                                //设置命令使用的方法,先ssh到目标主机,然后执行相关的命令
    #set user="root"        # 设置ssh时使用的帐号,如果不指定,用户为使用tentakel的帐号
    #set format="%d %o\n"
    #set maxparallel="3"    # run at most 3 commands in parallel

    # second section: groups
    group default ()                            //默认的组,也可以使用-g参数指定不同的主机组
            @test

    group test ()
            +test-1
            +test-2
            +test-3
            +test-4
            +test-5
            +test-6
            +test-7
            +test-8

    group test-login ()
            +test-login

    group all ()
            @test
            @test-login

    上面这个配制文件定义了三个主机组,@test包括了test1-test8这8台节点,@test-login包括了test-login这台节点,@all包括了@test和@test-login这两个主机组,共9台节点。同时定义了默认主机组为@test。

    常用的参数:

    tentakel –l   列出可用的主机组

    tentakel –g groupname‘command’在groupname上执行command,command要用引号引起来。

    配置完成以后发现报错:

    tentakel –g test  ‘hostname’
    Traceback (most recent call last):
      File "/usr/local/bin/tentakel", line 42, in ?
        import lekatnet.error as error
    ImportError: No module named lekatnet.error

    原因是没有拷贝lekatnet文件:cp -r py/lekatnet/ /usr/lib/python2.4/site-packages/

    tentakel –g test ‘mkdir –p /root/test’

    sun grid engine简单使用
    1. 安装sge

    安装master节点:

    安装执行主机:

    1.配置主机的host表。

    2.把要安装的目标主机添加为管理主机: qconf –ah hkdev-4

    3.在目标节点上新建sgeadmin用户,拷贝整个安装包到目标主机

    4.配置service 端口:

       Vim /etc/service添加两行:

       sge_qmaster  50001/tcp
       sge_execd    50002/tcp

    5. 把头节点的/opt/gridengine拷贝到计算节点,运行./install_execd,默认安装即可。

    6. 设置环境变量vim /etc/profile.d/sge.sh

    SGE_ROOT=/home/sgeadmin/sgeroot; export SGE_ROOT

    ARCH=`$SGE_ROOT/util/arch`
    DEFAULTMANPATH=`$SGE_ROOT/util/arch -m`
    MANTYPE=`$SGE_ROOT/util/arch -mt`

    SGE_CELL=sgetest; export SGE_CELL
    SGE_CLUSTER_NAME=p50001; export SGE_CLUSTER_NAME
    unset SGE_QMASTER_PORT
    unset SGE_EXECD_PORT

    if [ "$MANPATH" = "" ]; then
       MANPATH=$DEFAULTMANPATH
    fi
    MANPATH=$SGE_ROOT/$MANTYPE:$MANPATH; export MANPATH

    PATH=$SGE_ROOT/bin/$ARCH:$PATH; export PATH
    # library path setting required only for architectures where RUNPATH is not supported
    case $ARCH in
    sol*|lx*|hp11-64)
       ;;
    *)
       shlib_path_name=`$SGE_ROOT/util/arch -lib`
       old_value=`eval echo ‘$’$shlib_path_name`
       if [ x$old_value = x ]; then
          eval $shlib_path_name=$SGE_ROOT/lib/$ARCH
       else
          eval $shlib_path_name=$SGE_ROOT/lib/$ARCH:$old_value
       fi
       export $shlib_path_name
       unset shlib_path_name old_value
       ;;
    esac
    unset ARCH DEFAULTMANPATH MANTYPE

     

    注意:1.sge整个安装包的用户和组权限应该是sgeadmin,sge目录应该保证其他用户可读。

            2.要求关闭防火墙或者打开端口,我选择了关闭防火墙

    2.添加队列:

    新建一个队列hiseq.q:

    [root@hkdevlogin-1 ~]# qconf -aq hiseq.q   //队列名

    qname                 hiseq.q   //队列名
    hostlist              @hiseqhosts  //主机组,定义这个队列中包含的所有主机
    seq_no                0

    slot                    100                      //可以使用的资源

    notify                00:00:60
    owner_list            NONE
    user_lists            dms                //用户列表,这个列表中的用户允许使用该队列,其他的用户不允许使用该队列
    xuser_lists           NONE

    qconf –sql 可以查看所有的队列

    [root@hkdevlogin-1 ~]# qconf -sql
    all.q
    hiseq.q
    prs.q

    qconf –sq  队列名  可以查看某一个队列的配置信息

    定义@hiseqhosts主机组:

    [root@hkdevlogin-1 ~]# qconf -mhgrp @hiseqhosts

    group_name @hiseqhosts
    hostlist hkdev-1.genomics.org.cn hkdev-2.genomics.org.cn\          //多个主机需要换行时需要加”\”

    hkdev-3.genomics.org.cn

    qconf –shgrpl 可以查看所有的主机组

    [root@hkdevlogin-1 ~]# qconf -shgrpl           
    @allhosts
    @hiseqhosts
    @prshosts

    qconf –shgrp 组名   可以查看某个主机组信息

    定义用户列表 dms:

    [root@hkdevlogin-1 ~]# qconf -mu dms         

    name    dms        //用户组名称
    type    ACL DEPT
    fshare  0
    oticket 0
    entries dms             //该用户组中的用户,多个用户用逗号隔开

    qconf  -sul  可以查看所有的用户组

    [root@hkdevlogin-1 ~]# qconf -sul           
    arusers
    deadlineusers
    defaultdepartment
    dms
    prs
    test

    qconf  -su  用户组名   可以查看某个用户组的信息

    [root@hkdevlogin-1 ~]# qconf -su prs
    name    prs
    type    ACL DEPT
    fshare  0
    oticket 0
    entries prs

    注 :要使用sge,必须在每个节点上都建立同一个帐号,相同的uid和gid

    查看队列中主机的情况:

    qselect –q  队列名称

    [root@hkdevlogin-1 ~]# qselect -q hiseq.q  
    hiseq.q@hkdev-2.genomics.org.cn
    hiseq.q@hkdev-1.genomics.org.cn
    hiseq.q@hkdev-3.genomics.org.cn

    3. qstat使用:

    qstat –f

    qstat –explain

    qstat –j jobid

    4. qmod使用:

    qmod –cq  队列名

    qmod -cj  job名

    5. 修改默认shell

       [root@hkdevlogin-1 ~]# qconf –mconf                 //编辑sge的配置文件

       login_shells                 bash,sh,ksh,csh,tcsh          //把默认shell改为bash

    [root@hkdevlogin-1 ~]# qconf -mq all.q                   //编辑队列配置文件

    shell                 /bin/bash                                      //把默认的shell改为bash

    6. 限制单个计算节点可以使用的资源

    [root@hkdevlogin-1 ~]# qconf -me hkdev-1

    hostname              hkdev-1.genomics.org.cn
    load_scaling          NONE
    complex_values        slots=24,virtual_total=32G             //这个值不设置的话默认可以使用的值为无限大,任务较多的时候容易把节点跑死掉。
    user_lists            NONE
    xuser_lists           NONE
    projects              NONE
    xprojects             NONE
    usage_scaling         NONE
    report_variables      NONE

    7. sge简单使用

    qsub –cwd –l vf=1G –q common.q –l h=compute-0-0 test.sh

    test.sh:

    #!/bin/bash

    #$ –S /bin/bash

    sleep 100;

    8. 启用-l vf参数

    [root@qcs script]# qconf –mc

    #name               shortcut   type        relop requestable consumable default  urgency
    #—————————————————————————————-

    virtual_free        vf         MEMORY      <=    YES         YES        0        0
    Posted in Linux Tagged sge

     

     

关键字