
运维
文章平均质量分 54
Linux操作系统的各方面技能
Make Dream Happen
多年运维开发经验,擅长容器、自动化技术,全栈架构师。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
网盘搜索引擎原理大揭秘
引言:网盘搜索引擎是近年来非常流行的工具,最近在知乎上看到不上关于网盘引擎的帖子,笔者今天决定对网盘搜索引擎原理,技术做个大揭秘,一方面是对不熟悉搜索引擎原理的朋友做个答疑,二是指出各种引擎的优缺点以让朋友们今后在选择你钟爱的引擎时能够心中有数。目前国内外网盘搜索引擎实现原理大体就两种——爬虫程序爬取数据供搜索,调用google,bing三方接口搜索。前者的典型代表如比较流行的去转盘网,盘搜搜...原创 2019-02-16 18:24:14 · 13332 阅读 · 0 评论 -
Python调用shell的几种方式
1.cmd="someunixcommand"retcode=subprocess.call(cmd,shell=True)2.ssh=paramiko.SSHClient()ssh.connect(server,username=username,password=password)ssh_stdin,ssh_stdout,ssh_stderr=...原创 2015-05-12 17:19:36 · 111 阅读 · 0 评论 -
Python调用REST API接口的几种方式
背景相信做过自动化运维的同学都用过REST API接口来完成某些动作。API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课。正文本文主要介绍python中调用REST API的几种方式,下面是python中会用到的库。- urllib2- httplib2- pycurl- requests urllib2 - Sam...原创 2015-06-28 17:24:04 · 5327 阅读 · 0 评论 -
Linux leap second 问题导致的应用程序慢
leap second 是指Linux系统自动调整系统时间,这通常会发生在某个月的月末,很可能是6月和12月的月底,当leap second发生的时候可能会导致应用程序(Java)很繁忙,从而导致响应很慢。若如下命令返回中有leap=01,那么就意味着将会有leap second发生ntpq -c "lassoc" -c "mrv &1 &999 leap,srca...原创 2015-07-01 18:38:09 · 372 阅读 · 0 评论 -
Linux sssd 认证
sssd是一款用以取代ldap和AD的软件,配置比较简单。本文介绍如何在ldap客户端部署sssd,来启用ldap认证。- 安装sssdyum install sssdyum remove pam_ldap samba*yum remove pam_ldap samba*安装sssd,并卸载pam_ldap和samba相关的包- 配置/etc/sssd/sssd.c...原创 2015-07-02 16:54:08 · 6407 阅读 · 0 评论 -
Python记录日志的方法
日志不管对于开发或者运维都是一项非常重要的东西,它可以用来排错,解决故障,统计分析等。本文介绍python中的日志库的用法。导入日志库:import logging日志库的主要有以下方法: 获取日志名,比如 logging.getLogger(__name__) 定义Handler,比如 logging.FileHandler('/var/log/mess...原创 2015-07-08 17:46:08 · 485 阅读 · 0 评论 -
Hadoop集群硬盘故障分析与自动化修复
摘要硬盘在服务器中起着至关重要的作用,因为硬盘里面存储的是数据,随着制造业技术的提高,硬盘的类型也在逐渐的改变。对于硬盘的管理是IAAS部门的责任,但作为业务运维也需要懂得相关的技术。有的公司采用LVM来管理硬盘,这样做方便扩缩容,也有的公司直接用裸盘来存数据,这样做的好处是不会因LVM而损失掉一部分硬盘I/O速度。需要根据不同的场景采用不同的方式来管理。Hadoop集群中跑Datan...原创 2015-07-15 17:12:43 · 964 阅读 · 0 评论 -
Linux中的ipmitool工具的使用
本文介绍ipmitool工具的使用,这个命令主要是用来操作服务器硬件的,所以一般的业务运维很少会用它,但它的功能很强大,比如:能够硬重启服务器,重设BMC口,配置BMC口IP,进入grub环境,设置boot顺序,等等。在Centos和Redhat的大部分版本中都会默认安装它,所以它的实用性比较广。还有一个好处是用它可以制作远程管理服务器的运维自动化系统。- 打印console口的...原创 2015-07-16 18:24:15 · 1259 阅读 · 0 评论 -
Linux 硬盘故障案例分享
本文主要分享下服务器中硬盘发生故障后/var/log/messages 和/var/log/mcelog中会出现的具体日志以及对应的修复方法,随着案例的不断增多和丰富,最后我会归纳形成自动化脚本。当然其中会有很多硬盘有物理坏道,需要更换,这种就需要硬盘供应商去更换了,此处不在本文讨论范围。服务器型号:HP SE1170s硬盘型号:MB2000EAZNL故障1:...原创 2015-07-17 16:46:50 · 519 阅读 · 0 评论 -
vim技巧
列操作注释多行文本1. 使用vim打开要操作的文件2. Ctrl+V,进入VISUAL BLOCK模式3. 使用上下的方向键移动光标,选择你需要注释的行3. shift+i4. 输入注释符号 #5. esc,退出visual block模式,稍微等待一下(其他行的注释可能会有一些延迟),是不是已经将多行注释掉了啊?取消注释多行文本取消注释也类似,而且更简单一些,如下:...原创 2015-03-27 17:01:35 · 160 阅读 · 0 评论 -
strace用法
Examples:$stracephp2>&1|grepphp.iniopen("/usr/local/bin/php.ini",O_RDONLY)=-1ENOENT(Nosuchfileordirectory)open("/usr/local/lib/php.ini",O_RDONLY)=4lstat64("/usr/local/li...原创 2015-03-17 11:34:01 · 165 阅读 · 0 评论 -
服务器Raid卡电池自动充电
1 介绍服务器上的Raid卡电池,简称BBU,是个很重要的组件,它对于磁盘的I/O性能影响很大,但一般的BBU电量只能用90天,电用完后系统会自动给其充电,但因充电一般需要几个小时,在充电期间,Raid卡的cache状态是处于write through的,即不带缓存功能。所以为了保证服务器处于正常运行状态,就需要手工进行BBU的充放电,通常把充放电时间定在夜里面,也就是服务器负载最小的时候。...原创 2015-01-07 21:23:36 · 1628 阅读 · 0 评论 -
linux ssh 的几种验证方式
介绍本文说的SSH指的是OPENSSH这个开源软件,通过OPENSSH官网可发现,它在服务器上的使用率已经非常高了。运维人员、开发人员每天都在用它,但很多人对他的工作原理和认证方式不是很了解。正文SSH的认证方式可以概括有4种。1 PAM认证在配置文件/etc/ssh/sshd_config中对应参数:UsePAM2 公钥私钥认证在配置文件/et...原创 2015-01-17 19:53:31 · 468 阅读 · 0 评论 -
磁盘I/O很高的解决思路
介绍磁盘IO突然很高是运维人员经常碰到的问题,这是由于有大量的磁盘读和写造成的,通常发生在数据库身上,然而发生的场景各种各样。本文举几个例子阐述解决思路。正文找到是什么程序在大量的进行读写操作。可以通过监控软件(如zabbix)或工具(如atop)查看磁盘IO的历史记录。本文假设场景发生在xen虚拟机上,在母机上用iostat查看IO状态#iostat-xdk2...原创 2015-01-20 22:07:58 · 1506 阅读 · 0 评论 -
sed awk 实例分享
介绍做运维的应该经常用sed和awk等这些工具,但要想把他们用得好绝非易事,需要长时间的积累,本人积累了一些日常工作中用到的实例,本博客会持续更新。若读者有任何疑问可发表评论进行探讨。正文1 如何在shell中获取字符串string的长度echo${#string}2 替换文件text中一个或多个空格sed-i"s/\+/||/g"test注释:...原创 2015-01-24 22:17:24 · 146 阅读 · 0 评论 -
Python实现socket通信
介绍本文介绍如何用python脚本实现socket通信,在一台服务器上开一个端口监听,其他机器通过telnet连进来,模仿B/S模式进行通信。正文一共两个文件。webserver.pyimportsocketimportreimportosPORT=8080#CreateaServerSocketserversocket=socket.s...原创 2015-02-10 20:04:30 · 575 阅读 · 0 评论 -
Linux命令行快捷键
条目指示! 开始历史替换,除非后面跟着空格、制表符行结束、“ =”、或“(”!n 选择命令行n!-n 选择向后n 条命令(即倒数第 n条记录n>0)!! 前一条命令 同!-1!string 选择最近以string 开头的命令!?string? 选择最近包含string开头的命令^string1 ^string2 ^ 用sting1替换 string2后,重复执行上条...原创 2015-02-12 09:55:56 · 99 阅读 · 0 评论 -
Python调用shell的几种方式
1.cmd="someunixcommand"retcode=subprocess.call(cmd,shell=True)2.ssh=paramiko.SSHClient()ssh.connect(server,username=username,password=password)ssh_stdin,ssh_stdout,ssh_stderr=...原创 2015-02-15 15:17:59 · 190 阅读 · 0 评论 -
Ansible命令和Shell命令组合使用
ansible与shell命令嵌套使用实例1利用ansible的shell模块查看proc_nodemanager进程。ansible-inode-listall-mshell-a"foriin\`psaux|grepproc_nodemanager|grep-vgrep|awk'{print\$2}'\`;doecho\$i;...原创 2015-03-12 14:02:25 · 4839 阅读 · 0 评论 -
Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的分析与比较
本文主要讲解Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的作用以及不同之处。/etc/fstab运维都知道的文件,若想把mount的disk和dir设置为每次开机自动加载,那么就要把相关信息写到这个文件中。当用”mount -a“命令自动mount的时候,也会去读这个文件。例如:LABEL=/hadoop/9/hadoop/9ex...原创 2015-08-05 11:23:38 · 847 阅读 · 0 评论 -
Example of a full nat solution with QoS
I'm Pedro Larroy<piotr%member.fsf.org>. Here I'm describing a common set up where we have lots of users in a private network connected to the Internet trough a Linux router with a public ip add...原创 2015-08-21 17:54:17 · 141 阅读 · 0 评论 -
Linux定制history命令的输出格式
摘要运维同学们经常会用history命令来查看命令的历史记录,有时候是为了查找”犯罪证据“,但因为history命令输出默认只有ID和command,查找的同学还想知道命令对应的时间,有没有办法让时间也显示出来呢?办法是有的。本文主要讲讲相关的配置。正文以root用户登录服务器,在/etc/profile.d/下新建一个文件history_command.shvim /etc...原创 2015-09-11 17:49:06 · 695 阅读 · 0 评论 -
Python中API调用的几种类型
背景API是对APP的包装,也就是通常所说的接口,APP和APP间的互相调用,包括读取数据,修改数据等,就通过调用API来实现,API的好处显而易见,标准化,service化,外部用户看不到里面的复杂的东西。一个成熟的产品必须要有API来给其他应用提供接口。学习调用API是dev ops的必备技能,大家最熟悉的应该是REST API的调用吧,没错这是现在很通用很流行的一种API调用方式,还...原创 2016-06-26 12:14:19 · 500 阅读 · 0 评论 -
python抓取系统metrics吐给kafka
背景本篇介绍用python写脚本,抓取系统metrics,然后调用kafka client library把metrics吐给kafka的案例分享。对于用kafka的同学实用性很高。在运行本实例前需要先下载两个python库到本地 : six和kafka-python实例讲解cat config_system_metrics.json{ "env": { ...原创 2016-06-26 12:38:35 · 526 阅读 · 0 评论 -
Ansible批量执行命令慢的解决思路
背景做运维的同学很多都用过ansible吧,开源批量部署工具排名前三的:puppet, saltstack, ansible。ansible的特点是没有agent,采用ssh协议来通讯,轻量级,采用python编写,既可以写playbook,也可以做一些ad-hoc的批量命令执行操作。最近在两台ansible主机上执行ansible命令时发现对同样的客户机执行同样的命令,所用的时间相差...原创 2016-06-28 15:49:55 · 2986 阅读 · 0 评论 -
python使用unittest编写测试代码
背景做开发的朋友在写代码的同时一般都会写测试代码,这对于做运维的同学却很少用。今天我们就来写写测试代码,用unittest模块。实例演示cat test.pyimport unittestdef IsOdd(n): return n % 2 == 1class IsOddTests(unittest.TestCase): def setUp(sel...原创 2016-07-05 16:53:04 · 301 阅读 · 0 评论 -
Ansible ad-hoc的command和shell模块的区别
背景Ansible中有一个很重要的功能就是可以执行ad-hoc命令,可能有些人不懂ad-hoc这个词的意思,它表示即时的意思,或者说随意的意思。与之相对的是ansible playbook功能,playbook适用于批量部署环境,一般不用经常改动。而ad-hoc命令适用于业务变更等操作场景,比如批量部署一个配置文件,重启某个服务,安装一些包等。ad-hoc命令中有两个模块:comman...原创 2016-07-28 19:11:33 · 706 阅读 · 0 评论 -
Python中利用subprocess远程登陆执行命令
import subprocessimport os(rfd, wfd) = os.pipe()arg = "-d%d" % rfdtry: p = subprocess.Popen(["sshpass",arg,"ssh","-l","haohzhang","phxaishdc9dn1447.stratus.phx.ebay.com","ls"原创 2016-08-01 18:27:46 · 4084 阅读 · 0 评论 -
Python中select.select()文件句柄的问题
背景python中的select.select()函数调用了系统底层的select(),但是他有一个限制,就是当打开的文件句柄的数字达到1024后,就会出现下面的错误ValueError:filedescriptoroutofrangeinselect()原理分析这个值在select()中对应的是FD_SETSIZE,下面我们写一段脚步来证明#!/usr/bin/...原创 2016-08-19 20:24:02 · 818 阅读 · 0 评论 -
python中json和字符编码的转换
背景json是用来转换python object 和json format 的,字符编码有gb2312,gb18030/gbk,utf-8等。在 Python 中出现的 str 都是用字符集编码的 ansi 字符串。Python 本身并不知道 str 的编码,需要由开发者指定正确的字符集 decode。原理分析因为 Python 认为 16 位的 unicode 才是字符的唯一内码...原创 2016-09-13 14:04:33 · 1677 阅读 · 0 评论 -
python中多线程的使用
背景在实际编程过程中经常需要把任务包装成多进程或者多线程,多进程和多线程的区别在于多线程是内存共享、变量等共享的,多进程的进程间是独立运行的,所以创建多线程还是多进程取决于不同的需求。python中因为有全局锁的机制,所以在python中多线程跑的时候其实只是在用一个CPU,尽管如此,多线程跑还是比单线程跑要快很多。方法讲解以threading.Thread来说,在python中创...原创 2016-05-25 19:54:52 · 131 阅读 · 0 评论 -
Python子类和父类
背景写过程序的都知道类,就是面向对象的意思,编程的水平大致分为几个层次,基本语法,函数,面向对象,数据结构,架构,越往上水平越高。在创建类的时候,我们通常把具有相关性的函数包装为一个类,类也可以嵌套,叫父类和子类,尤其在python中,所有的对象都可以当成一个variable,下面给出一个类嵌套的例子。实例讲解class Metric(object):def __in...原创 2016-05-25 19:24:05 · 317 阅读 · 0 评论 -
RHEL/CentOS中静态路由的启动过程分析
本文通过分析RHEL/CentOS系统静态路由的启动过程,由此同学们可以了解到Linux系统的启动流程。可以帮助同学们更好的理解Linux系统,也可以帮助平时的排错。- 系统启动脚本/etc/init.d/network ,此脚本为bash脚本,静态路由启动的关键行:action$"Bringingupinterface$i:"./ifup$ibooti...原创 2015-10-07 15:23:18 · 186 阅读 · 0 评论 -
Django搭建简易监控系统
背景Django是使用最广泛的用python写的开源WEB框架,用它可以搭建一套WEB系统,它也可以和其他开源组件,如cellery组合使用,扩展性比较强。下面详细讲一讲如何利用django搭建一套简易的服务器监控系统。客户端服务端模式,客户端通过脚本抓取本地性能参数,然后提交POST请求给django服务端,把数据传给服务端。服务端接收到数据后先保存到本地数据库中,用户在浏览器端输入...原创 2015-10-13 14:52:23 · 4454 阅读 · 0 评论 -
Linux系统参数调优
摘要本文讲Linux系统参数的含义及调优,本文会持续更新。正文最大文件句柄数设置a) 设置系统级别的所有进程允许打开的最大文件句柄数#cat/proc/sys/fs/file-max可以通过编辑/etc/sysctl.conf 来设定,比如:fs.file-max=1024000保存好后,执行sysctl -p来生效。b) 设置用户级别的所有进...原创 2015-10-29 17:17:11 · 1275 阅读 · 0 评论 -
Python脚本远程批量执行命令
背景本文主要写用python脚本远程连接多台服务器,然后批量执行命令,最终返回命令执行结果。这个可以说是Ansible,Puppet等工具的最简单的雏形。做运维的同学应该都知道的。正文multi_task.py#_*_coding:utf-8_*_importmultiprocessingimportparamikoimportgetpassimport...原创 2015-11-13 20:31:52 · 567 阅读 · 0 评论 -
Linux文件写入的工作原理
背景做运维的同学估计很多都遇到过如下这个问题:程序启动了多个线程或多个进程,这些线程或进程都会写入一个文件,这时就有可能会造成文件错乱的情况,也就是多个线程或进程同时写入一个文件,造成这个文件错乱了,有些行被插入到了另一些行里去了。这时很多同学想到了可以用文件锁来解决这个问题,很好,但你知不知道触发文件错乱是有一定条件的,在一次写入文件很小的情况下是不会造成文件错乱的。原理分析...原创 2015-11-18 15:41:35 · 668 阅读 · 0 评论 -
Linux中yum故障的问题
背景用Linux的同学应该都知道yum,是用来管理系统软件包的,非常快捷,可以自动解决包依赖问题。但真正了解yum的工作原理的人估计并不多。本文记录一次在公司云平台上遇到无法使用yum的问题。问题重现在虚拟机上安装包(比如tcpdump),报Timeout28,'Operationtooslow.Lessthan1bytes/sectransferedt...原创 2015-12-06 18:36:04 · 948 阅读 · 0 评论 -
python代码转换成rpm包
背景在linux系统上操作的同学都熟悉rpm,它是包管理软件,适用度很广。很多时候我们会想要把我们写的程序或者别人的源码变成rpm包,这样只需要一个rpm文件就可以安装好我们需要的程序了,方便管理而且应用程序直接在系统默认路径下,调用对应应用程序时很方便。这里说说如何把python源码转变为rpm包。正文rpm包一般分为两种,一个是source package, 一个是bina...原创 2015-12-21 18:49:07 · 1009 阅读 · 0 评论 -
kickstart中%post部分格式化硬盘的问题
背景做过kickstart或者cobbler的同学应该都知道,在系统安装结束后可以对系统作一些定制化的配置,比如ip,分区,硬盘,包等。下面讲讲我在写%post时遇到的一些关于硬盘分区的问题。废话不多说,先贴上处理硬盘的脚本,这里只是处理非系统盘的其他硬盘。代码实例echo "Dealing with data disks now..."NUM=01DATA_DISK...原创 2016-04-21 17:19:01 · 1308 阅读 · 0 评论