多台服务器下的痛苦人生

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

那么问题来了?这么多服务多机器下,如何快速定位一个 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. 三种方式设置特定设备UWP XAML view

    开发者可以设置UWP特定设备xaml view,在桌面,手机,Iot,这个对于设置对不同设备的不同屏幕有用.我们可以使用RelativePanel,VisualStateTriggers,但是这样我们 ...

  2. JavaScript函数之作用域 / 作用链域 / 预解析

    关于作用域和作用链域的问题,很多文章讲的都很详细,本文属于摘录自己觉得对自己有价值的部分,留由后用,仅供参考,需要查看详细信息请点击我给出的原文链接查看原文件 做一个有爱的搬运工~~ -------- ...

  3. Volley图片加载并加入缓存处理(转自http://blog.csdn.net/viewhandkownhealth/article/details/50957024)

    直接上代码  两种方式 ImageView 和NetworkImageView 如有问题或者好的建议.意见 欢迎大家加入技术群(群号: 387648673 ) 先自定义全局Application 获取 ...

  4. [js插件开发教程]实现一个比较完整的开源级选项卡插件

    在这篇文章中,我实现了一个基本的选项卡功能:请猛击后面的链接>>   [js插件开发教程]原生js仿jquery架构扩展开发选项卡插件. 还缺少两个常用的切换(自动切换与透明度渐变),当然 ...

  5. spring框架应用系列一:annotation-config自动装配

    本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7716678.html 解决问题 通过spring XML配置文件, ...

  6. 【前端】Require.js使用方法总结

    一.为什么要使用require.js 首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长:其次,由于js文件之间存在依赖关系,因此必须严格保证加载 ...

  7. ASP.NET MVC 分页问题

    在使用Ajax.Pager进行分页的时候需要注意一下几个方面: 1.一定要引入jquery.unobtrusive-ajax.min.js这个js: 2.一定要在页面中使用注册分页器,注册方法:@{H ...

  8. LeetCode 371. Sum of Two Integers (两数之和)

    Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...

  9. JPA的一对多映射(双向)关联

    实体Customer:用户. 实体Order:订单. Customer和Order是一对多关系.那么在JPA中,如何表示一对多的双向关联呢? JPA使用@OneToMany和@ManyToOne来标识 ...

  10. HDU1222Wolf and Rabbit(GCD思维)

    Wolf and Rabbit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...