多台服务器下的痛苦人生

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

那么问题来了?这么多服务多机器下,如何快速定位一个 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. Java设计模式(四)——再谈观察者模式

    在本系列的上一篇文章中,我们讨论了JDK对于观察者模式的一套实现.今天我们将要从另一个角度来探索Tomcat中是如何利用观察者模式加载各个组件.不过今天的任务不是解释Tomcat,所以我会单独把重点抽 ...

  2. LeetCode 228. Summary Ranges (总结区间)

    Given a sorted integer array without duplicates, return the summary of its ranges. Example 1: Input: ...

  3. asp.net 第三方UI控件 Telerik KendoUI 之 TreeVIew 的用法记录

    一.前台显示 备注:一次性取出所有节点 function loadTreeData() { $.ajax({ type: 'POST', url: '@(Html.UrlHref("Scri ...

  4. 【问题排查】fastjson线上排坑记

    前言 版本上线时发现fastjson的toString方法的返回的字符串与与之前版本的toString方法返回的字符串不相同,这导致依赖toString进行md5计算所得到的结果不相同,更进一步导致其 ...

  5. 1_ROS学习

    1_搭建树莓派环境 树莓派是一个嵌入式计算机,专门用来做嵌入式开发的.我们组上用的树莓派是raspberry pi 3 mode B,5V供电,最大电流不超过2A: 我们需要在树莓派上安装上操作系统. ...

  6. Swift 之Protocol在cocoa中的使用范例搜集(一)

    protocol Reusable: class { static var reuseIndentifier: String {get} static var nib: UINib? {get} } ...

  7. Akka(35): Http:Server side streaming

    在前面几篇讨论里我们都提到过:Akka-http是一项系统集成工具库.它是以数据交换的形式进行系统集成的.所以,Akka-http的核心功能应该是数据交换的实现了:应该能通过某种公开的数据格式和传输标 ...

  8. git使用教程之了解git

    1.理解git快照 快照的作用就相当于将旧文件所占的空间保留下来,并且保存一个引用,而新文件中会继续使用与旧文件内容相同部分的磁盘空间,不同部分则写入新的磁盘空间.git有一个HEAD指针,这个指针可 ...

  9. css设置黑体宋体等(转)

    代码如下: .selector{ font-family:"Microsoft YaHei",微软雅黑,"MicrosoftJhengHei",华文细黑,STH ...

  10. arrow functions 箭头函数

    ES6里新增加的,与普通方法不同的地方 1.this 的对象在定义函数的时候确定了,而不是在使用的时候才决定 2.不可以使用 new  ,也就不能当构造函数 3.this 的值一旦确定无法修改     ...