如何在多台服务器上运行相同命令

2023-12-07 0 739
目录
  • PSSH
    • 安装
    • 使用
      • (1)、定义一个文件,写入需要操作的机器,如pssh-hosts
      • (2)、pssh执行命令
      • (3)、参数含义
      • (4)、pscp从96.54拷贝文件到其他机器
      • (5)、pslurp从其它机器下载文件到本地
      • (6)、pnuke 杀死远程主机上的进程
      • (7)、prsync跟rsync使用差不多,略过。
  • ansible
    • 安装
      • 使用
        • (1)、安装完后,在/etc/ansible/目录下生成三个主要的文件或目录
        • (2)、添加节点,在/etc/ansible/hosts文件中添加需要被管理的服务器节点
        • (3)、建立互信环境
        • (4)、测试连通性
        • (5)、处理[WARNING]: sftp transfer mechanism failed
        • (6)、ansible命令构成
        • (7)、playbook

    PSSH

    全称是parallel-ssh,基于Python编写的并发在多台服务器上批量执行命令的工具。包括pssh,pscp,prsync,pnuke和pslurp。该项目包括psshlib,可以在自定义应用程序中使用。它相当于ansible的简化版,执行起来速度比ansible快,支持文件并行复制,远程命令执行,杀掉远程主机上的进程,杀手锏是文件并行复制。 主要用法: pssh命令 在远程主机上执行本地命令或者脚本 pscp命令 将本地文件拷贝至多个远端主机 pslurp命令 从多台远程机器拷贝文件到本地 pnuke命令 在远端主机杀进程 prsync命令 使用rsync协议从本地计算机同步到远程主机

    安装

    yum install epel-release
    yum install pssh

    使用

    (1)、定义一个文件,写入需要操作的机器,如pssh-hosts

    vim pass-hosts

    然后写入需要控制的机器

    192.168.96.54:22
    192.168.96.60:22
    192.168.96.244:22

    (2)、pssh执行命令

    pssh -h pssh-hosts -l root -i \”echo \”Hello World\”\”
    # 因为已经是互信环境,所以不需要输入密码

    如何在多台服务器上运行相同命令

    (3)、参数含义

    -h -–hosts 主机文件列表,内容格式[user@]host[:port]
    -l -–user 登录使用的用户名
    -p -–par 并发的线程数【可选】
    -t –timeout 超时时间【可选】
    -v –verbose 输出详细信息【可选】

    仅包含在pslurp里的

    -L –localdir 下载文件的保存目录

    (4)、pscp从96.54拷贝文件到其他机器

    pscp.pssh -h pssh-hosts -l root pssh-hosts /tmp
    # 拷贝pssh-hosts文件到其他机器的/tmp目录
    # pscp从本地拷贝到远程,所以先写本地的某个文件或目录,再写远程的目录

    如何在多台服务器上运行相同命令

    (5)、pslurp从其它机器下载文件到本地

    例如,先创建一个脚本,并将其传入到每个机器上,获取每个机器的hostname并写入到一个文件,然后将每个机器上的该文件下载到本地。

    准备:

    如何在多台服务器上运行相同命令

    在使用pssh执行脚本后,将每个机器的hostname写入到本地的某个文件了

    如何在多台服务器上运行相同命令

    最后使用pslurp将其拷贝到本地的某个目录

    如何在多台服务器上运行相同命令

    pslurp -h pssh-hosts -L /a /tmp/1.txt 1.txt
    # 将每个节点上的/tmp/1.txt下载到本地的a目录里
    # pslurp从远程下载到远程,所以先写远程的某个文件或目录,再写本地的目录

    如何在多台服务器上运行相同命令

    (6)、pnuke 杀死远程主机上的进程

    例如杀死每个机器的nginx进程查看每个节点的nginx的状态

    如何在多台服务器上运行相同命令

    执行命令

    查看效果

    如何在多台服务器上运行相同命令

    (7)、prsync跟rsync使用差不多,略过。

    ansible

    安装

    先搜索仓库里的ansible源

    如何在多台服务器上运行相同命令

    然后安装centos提供的ansible源

    如何在多台服务器上运行相同命令

    然后每个机器安装ansible。(其实只需在管理主机上安装,都安装只是为了方便换其他机器后使用)

    如何在多台服务器上运行相同命令

    如何在多台服务器上运行相同命令

    使用

    (1)、安装完后,在/etc/ansible/目录下生成三个主要的文件或目录

    如何在多台服务器上运行相同命令

    • ansible.cfg: Ansible的配置文件
    • hosts:登记被管理的主机
    • roles:角色项目定义目录,主要用于代码复用

    (2)、添加节点,在/etc/ansible/hosts文件中添加需要被管理的服务器节点

    pssh -h pssh-hosts -i \”printf \'[cluster]\\n192.168.96.54\\n192.168.96.60\\n192.168.96.244\\n\’ > /etc/ansible/hosts\”
    pssh -h pssh-hosts -i \”cat /etc/ansible/hosts\”

    如何在多台服务器上运行相同命令

    这里将三个节点放入cluster组中,后面执行命令时可指定针对某个组执行。

    (3)、建立互信环境

    ssh-keygen -t rsa -b 4096
    ssh-copy-id root@192.168.96.54

    (4)、测试连通性

    针对cluster组里的机器执行ping命令

    ansible cluster -m ping

    如何在多台服务器上运行相同命令

    若要针对所有组的机器执行命令,则使用all即可。

    ansible all -m ping

    如何在多台服务器上运行相同命令

    (5)、处理[WARNING]: sftp transfer mechanism failed

    修改sshd_config

    改sshd_config文件,取消注释Subsystem

    如何在多台服务器上运行相同命令

    修改ansible配置文件,添加scp_if_ssh=True

    如何在多台服务器上运行相同命令

    在执行时已经没有warning了

    如何在多台服务器上运行相同命令

    (6)、ansible命令构成

    ansible的命令格式为, ansible 主机群组名 -m 命令模块名 -a “批量执行的操作”

    常用模块

    • ping模块
    • command/shell模块,两者区别是shell支持管道,command不支持管道操作

    ansible all -m command -a \’hostname\’

    如何在多台服务器上运行相同命令

    ansible all -m shell -a \’hostname | grep 54\’

    如何在多台服务器上运行相同命令

    script脚本模块

    ansible all -m script -a \’/tmp/test.sh\’
    # 无需将脚本拷贝到其他节点

    如何在多台服务器上运行相同命令

    copy模块,相当于scp

    ansible all -m copy -a \”src=/tmp/test.sh dest=/tmp/\”
    # 将本节点的该路径的脚本拷贝到其他机器的tmp目录下

    如何在多台服务器上运行相同命令

    如何在多台服务器上运行相同命令

    • user/group模块
    • git模块
    • file模块
    • service模块
    • yum模块
    • cron模块

    其他模块不再一一列举,可通过ansible-doc 模块名查看具体用法例如: ansible-doc yum

    如何在多台服务器上运行相同命令

    (7)、playbook

    playbook即剧本,由一个或多个play组成,play的功能就是为归为一组的主机编排要执行的一系列task,其中每一个task就是调用Ansible的一个命令模块。

    playbook的核心元素包括:

    • hosts:执行任务的主机,可以是主机组
    • tasks:要执行的任务列表
    • variables:内置变量或自定义的变量
    • templates:使用模板语法的文件,通常为配置文件
    • handlers:和notify结合使用,由特定条件触发,一般用于配置文件变更触发服务重启
    • tags:标签,可在运行时通过标签指定运行playbook中的部分任务
    • roles:定义可重用的任务和变量集合。

    没用过。

    参考资料:https://www.cnblogs.com/spec-dog/p/12736447.html

    自定义脚本

    一个最简单的脚本的方式

    #!/bin/bash
    # 要执行的命令
    COMMAND=\”ls -l\”
    # 集群中所有节点的 IP 地址
    NODES=(\”192.168.1.101\” \”192.168.1.102\” \”192.168.1.103\”)
    # 在所有节点上执行命令
    for NODE in \”${NODES[@]}\”
    do
    echo \”Executing command on node $NODE…\”
    ssh $NODE $COMMAND
    done

    到此这篇关于如何在多台服务器上运行相同命令的文章就介绍到这了,更多相关多台服务器运行相同命令内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!

    收藏 (0) 打赏

    感谢您的支持,我会继续努力的!

    打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
    点赞 (0)

    悠久资源 服务器其它 如何在多台服务器上运行相同命令 https://www.u-9.cn/server/qita-server/120218.html

    常见问题

    相关文章

    发表评论
    暂无评论
    官方客服团队

    为您解决烦忧 - 24小时在线 专业服务