多台服务器下的痛苦人生

分布式架构下的系统,可以说每个服务都是分别部署在多台服务器上的,有的甚至还需要多机房,在这种架构下可以说可以很好的做到了易扩展、容灾等功能。推荐的服务部署为一服务多机器、一机器一服务、多机器多机房,上线之前做好压测,留有一定的水位线。以此作为此类服务的容量配置标准,服务压力上涨之后,按标准配置加机器即可,这是目前我们系统服务部署原则。

那么问题来了?这么多服务多机器下,如何快速定位一个 Bug 呢?
例如我们定位到 bug 来自某一个服务,这时候这个服务后端有 5 台服务器做负载。常规操作是,我们依次登录到这 5 台服务器上去查询服务日志,定位该操作具体在哪一台执行,运气好的话,你登录的第一台就找到问题,如果你运气差的话,呵呵,你可能会查询了前 4 台的机器都没有找到问题,偏偏在最后一台机器上找到了问题原因。
当然,你可能会说,既然你们分布式架构了,为什么没有做集中日志处理?这个今天不重要,其实我们有日志中心的。

Polysh 是个什么鬼?

Polysh is a tool to aggregate several remote shells into one. It is
used to launch an interactive remote shell on many machines at once.
It is written in Python and requires Python ≥ 2.4.

官网简介的上面一段话很清楚了,它是用来在一台机器上可以连接多台机器后,然后一条命令可以发送到多台机器执行后并在这一台机器上显示结果。可以说就是分布式架构下,一个服务部署在多台机器下的运维必备利器。

Polysh 安装及配置

首先 python 版本要大于等于 2.4。
1. 登录机器,找到一个合适的文件目录
下载安装文件,解压文件。
wget http://guichaz.free.fr/polysh/files/polysh-0.4.tar.gz
tar -zxvf polysh-0.4.tar.gz

2. 进入解压后的文件目录,安装
cd polysh-0.4
python setup.py install --home=~/polysh
这里命令是安装 polysh 到当前用户的主目录。

3.添加 polysh 执行目录到环境变量
echo "export PATH=~/polysh/bin:$PATH" >> ~/.bash_profile
echo "export PYTHONPATH=~/polysh/lib/python/:$PYTHONPATH" >> ~/.bash_profile
或者你打开文件自行添加:vim ~/.bash_profile;
最后要执行如下命令要使配置生效:source ~/.bash_profile

到这里的话,我们安装就算完成了。当然你可以接着配置免密登录,这里不再演示,就是使用 ssh-keygen 的命令创建公钥,然后把公钥内容添加到目标机器。

Polysh 的使用

使用起来非常简单,直接输入你想登录到的线上机器名即可。
举个栗子:我们有十台机器,机器名分别为 mafly01、mafly02,到 mafly10 这样,输入 polysh 'mafly0{1,2}' 命令后,即可登录到服务所部署的 mafly01、mafly02 两台机器,然后可以像以前一样输入你想执行的命令即可,这时候就是操作两台服务器哦。
当然,polysh 支持多种登录姿势,全凭自己高兴,例如:

  1. polysh mafly0{1,2}
  2. polysh mafly01 mafly03
  3. polysh 'mafly0<1-4>' gg-mafly01 gg-order01
  4. polysh gg-{mafly01,order01} mafly01

总结

有了这个利器后,对多个服务器的操作简直是流畅到不行,尤其是你的机器名特别长的情况下,你再也不用记复杂的机器名了,完全就是解放了自己。我就重新写了脚本,简化了机器名。

当然,对于机器特别多,超过五台以上就不建议使用了,还有对性能有影响的命令也不建议使用,最方便的场景可能就是查日志、看下磁盘、同步修改机器时间这些小操作。

多服务器操作利器 - Polysh的更多相关文章

  1. php的redis 操作类,适用于单台或多台、多组redis服务器操作

    redis 操作类,包括单台或多台.多组redis服务器操作,适用于业务复杂.高性能要求的 php web 应用. redis.php: <?php /* redis 操作类,适用于单台或多台. ...

  2. SQL Server 跨服务器操作

    Ø  简介 在工作中编写 SQL 时经常会遇到跨库或跨服务器操作,比如查询时,通过 A 服务器的某张表关联 B 服务器某张表,进行连接查询.或者从另一台服务器中的数据,对当前数据库中的数据进行 CRU ...

  3. 连接Linux服务器操作Oracle数据库

    连接Linux服务器操作Oracle数据库   由于项目已经上线,现场的数据库服务器不允许直接用Oracle的客户端plsqldev.exe来连接,只能通过Linux服务器的命令来操作. 以下是用Se ...

  4. Redis服务器操作

    [Redis服务器操作] 1.TIME 返回当前服务器时间. 2.DBSIZE 返回当前数据库的 key 的数量. 3.LASTSAVE 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 U ...

  5. 服务器操作nginx相关操作命令

    服务器操作nginx相关操作命令 登录服务器: ssh root@0.0.0.0 -p 22100 启动nginx: /usr/local/nginx/sbin/nginx 查看nginx是否启动 p ...

  6. SQL Server跨服务器操作数据库

    今天给大家来分享一下跨服务器操作数据库,还是以SQL Server的管理工具(SSMS)为平台进行操作. 什么是跨服务器操作? 跨服务器操作就是可以在本地连接到远程服务器上的数据库,可以在对方的数据库 ...

  7. 多服务器终端交互利器--polysh和atnodes到高逼格日志中心

    最近博客更新的少了,相对而言,我在自己的个人公众号里还是挺活跃的,大家可以扫描旁边的二维码,或者微信搜索公众号:“编程一生”加关注. 在分布式的年代,一个应用需要部署到多台服务器上.那么要查看日志文件 ...

  8. ubuntun安装ssh,并远程链接服务器操作

    SSH是一种以安全.加密方式连接远程主机或服务器的方法.SSH服务器接受从有SSH的客户机的连接,允许操作者象在本地一样地登录系统.你可以用SSH从远程运行shell和X程序. (1)安装SSH服务器 ...

  9. Java项目部署服务器操作

    有 2个工具需要下载,我使用的是 xshell(操作Linux命令),xftp5(操作文件传输) 需要知道服务器 ip ,账号,密码 xshell连接时,协议选择SSH连接,其他正常输入. xftp5 ...

随机推荐

  1. Windows 10「设置」应用完整MS-Settings快捷方式汇总

    分类 设置名称 快捷方式 系统 显示 ms-settings:display 通知和操作 ms-settings:notifications 平板电脑模式 ms-settings:tabletmode ...

  2. JavaScript中的数值转换

    在JavaScript中,有3个函数可以把非数值转换为数值 1.Number()函数 Number()可以用于任意数据类型. 转换规则如下. 如果是Boolean值,true和false将分别被转换为 ...

  3. 【转】RAM 大全-DRAM, SRAM, SDRAM的关系与区别

    http://blog.csdn.net/huleide/article/details/5506698 ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是R ...

  4. SGU 223 Little Kings(状压DP)

    Description 用字符矩阵来表示一个8x8的棋盘,'.'表示是空格,'P'表示人质,'K'表示骑士.每一步,骑士可以移动到他周围的8个方格中的任意一格.如果你移动到的格子中有人质(即'P'), ...

  5. LeetCode 643. Maximum Average Subarray I (最大平均值子数组之一)

    Given an array consisting of n integers, find the contiguous subarray of given length k that has the ...

  6. [Scikit-learn] 4.4 Dimensionality reduction - PCA

    2.5. Decomposing signals in components (matrix factorization problems) 2.5.1. Principal component an ...

  7. 用ajax的同步请求解决登陆注册需要根据服务器返回数据判断是否能提交的问题

    最近在写www.doubilaile.com的登陆注册.需要用ajax请求服务器判断用户名是否存在,用户名和密码是否匹配,进而提交数据.碰到的问题是异步请求都能成功返回数据,但是该数据不能作为紧接着的 ...

  8. Leetcode题解(33)

    113. Path Sum II 题目 分析: 主要考察二叉树深度优先遍历(DFS),递归调用当前节点的左右结点即可,代码如下(copy网上): /** * Definition for binary ...

  9. IdentityServer4实现Token认证登录以及权限控制

    相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的:小菜学习编程-IdentityServer4 晓晨Master:Ide ...

  10. Python爬虫入门:综述

    大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...