多台服务器下的痛苦人生

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

那么问题来了?这么多服务多机器下,如何快速定位一个 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. PyCharm 2017 官网 下载 安装 设置 配置 (主题 字体 字号) 使用 入门 教程

    一.安装 Python 3.6 首先,要安装好 Python 3.6.如果你还没有安装,可以参考咪博士之前的教程 Python 3.6.3 官网 下载 安装 测试 入门教程 (windows) 二.官 ...

  2. ubuntu16.04, Matlab2016b caffe编译安装

    在Ubuntu上编译安装caffe还是个比较蛋疼的事,有时候会莫名其妙的碰到很多库的问题,这篇文章就把我在Ubuntu上编译安装caffe的过程和遇到的问题大致记录一下. 1.安装opencv htt ...

  3. [译]ASP.NET Core 2.0 会话状态

    问题 如何在ASP.NET Core 2.0中存储会话状态? 答案 创建一个空项目,修改Startup类的ConfigureServices()方法,添加会话状态服务和它后台的存储服务: public ...

  4. LeetCode 136. Single Number (落单的数)

    Given an array of integers, every element appears twice except for one. Find that single one. Note:Y ...

  5. spark streaming 实例

    spark-streaming读hdfs,统计文件中单词数量,并写入mysql package com.yeliang; import java.sql.Connection; import java ...

  6. rwx对于文件和目录的意义

    1.对于文件 r:可读. w:可以编辑,可以修改. x:可以执行.在windows中,可执行指的是.exe,.bat等这些后缀结尾的文件,在linux没有这种限制. 2.对于目录 r:表示可以用ls命 ...

  7. 0_Simple__cdpSimplePrint + 0_Simple__cdpSimpleQuicksort

    CUDA动态并行的简单实践,以及利用CUDA动态并行实现快排算法(有单线程的递归调用) ▶ 源代码:动态并行递归调用线程块 #include <iostream> #include < ...

  8. 关于easyui隐藏后数据不能刷新??

    原因是div用display属性隐藏后不能重新加载table数据 解决方法:使用hide()方法在初始化时隐藏 $("#two").hide(); //点击按钮隐藏与显示表单域 $ ...

  9. 注销/etc/passwd带来的系统登陆不上

    今天在修改虚拟机密码上的时候,将/etc/passwd中root所在的哪行注销掉了,想象是注销了,root登陆时应该不要输入密码,结果是系统进度条走到最后的时候 进入不了系统了. 结果去普及了下/et ...

  10. JS是按值传递还是按引用传递?【转载】

    最近遇到个有趣的问题:“JS中的值是按值传递,还是按引用传递呢?” 在分析这个问题之前,我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference). ...