NoOps

Ops make no ops | Ops的目标是没有Ops,嗯!

PXE/OS启动initrd.img文件操作

作者: |   944 浏览  | 

解压缩
mv initrd.img initrd.img.gz
gunzip initrd.img.gz
cpio -ivmd < initrd.img

解压后得到以下文件\目录
# ls
bin dev etc init initrd.img modules proc sbin selinux sys tmp var

关于驱动的修改都在modules中

重新打包
rm -f initrd.img
find . | cpio -c -o > ../new
gzip ../new
mv ../new.gz initrd.img

论怎么做好运维自动化 1

作者: |   7,493 浏览  | 

本篇文章未经允许,不得转载! 内容未分级,有可能会对部分读者造成不适,还请谅解。

作为一个标题党成员,我可以很负责的告诉你——我真不知道运维自动化怎么做,更不知道怎样才能做好!
Read More →

小米系统运维部诚求工程师

作者: |   1,968 浏览  | 

通过ngx-lua来统计nginx上的虚拟主机性能数据

作者: |   2,911 浏览  | 

介绍

以前我们为nginx做统计,都是通过对日志的分析来完成.比较麻烦,现在基于ngx_lua插件,开发了实时统计站点状态的脚本,解放生产力.
项目主页: https://github.com/skyeydemon/ngx-lua-stats

功能

  • 支持分不同虚拟主机统计, 同一个虚拟主机下可以分不同的location统计.
  • 可以统计与query-times request-time status-code speed 相关的数据.

环境依赖

  • nginx + ngx_http_lua_module

安装

http://wiki.nginx.org/HttpLuaModule#Installation

使用方法

添加全局字典

在nginx的配置中添加dict的初始化, 类似如下

Read More →

用ajaxterm实现web页面查看任意服务器远程管理卡console输出

作者: |   4,456 浏览  | 

鉴于近期咨询小米如何在web端实现服务器远程管理卡console的朋友比较多。简单的写出个大概避免重复多次的介绍。
首先,你需要有基本的linux、控制卡知识
我们用到的主要工具有:ajaxterm、ipmitool、代理服务器
ajaxterm是一个web端的终端+服务器端相应的程序,简单的将他启动,默认可以将服务器的ssh连接控制台打到web的ajax控件上,这样可以满足的是用户通过web连接ssh的需求。如下图:

scr

但是这个默认的配置只打开了一个监听端口对本机(127.0.0.1开放),这时候你就需要 配置代理服务器。

Read More →

noops in xiaomi @ Velocity 2013 beijing

作者: |   1,967 浏览  | 

NoOps的目标是希望系统不需要运维或者更少的运维工作,DEV从产品的开发的前期,到最后的部署都由运维组件来支持完成.

这个过程既包括业务本身的变更控制,也包括业务保障部分的联动变化。在这里,小米运维架构师伏晔将为大家讲述小米的运维。

PDF下载:
Read More →

smartdns-基于twisted实现的智能dns系统

作者: |   4,902 浏览  | 

smartdns

使用场景

smartdns是python语言编写,基于twisted框架实现的dns server,能够支持针对不同的dns请求根据配置返回不同的解析结果。smartdns获取dns请求的源IP或者客户端IP(支持edns协议的请求可以获取客户端IP),根据本地的静态IP库获取请求IP的特性,包括所在的国家、省份、城市、ISP等,然后根据我们的调度配置返回解析结果。
smartdns的使用场景:
  1. 服务的多机房流量调度,比如电信流量调度到电信机房、联通流量调度到联通机房;
  2. 用户访问控制,将用户调度到离用户最近或者链路质量最好的节点上。
举个简单的例子,我们的一个站点test.test.com同时部署在电信和联通两个机房,该站点在电信机房的ip为1.1.1.1、在联通机房的ip为2.2.2.2,就可以通过smartdns做到该站点域名解析时判断源IP为电信的IP时返回1.1.1.1、判断源IP为联通的IP时返回2.2.2.2,从而达到不同运营商机房流量调度的目的。

支持的功能

支持A、SOA、NS记录的查询,支持DNS forward功能

性能

在虚拟机2.4G CPU上能够处理1000QPS查询请求,打开debug日志后可以到800QPS。3-5台dns server组成的集群已经能够满足大部分站点的需求。

目前我们正在实现和小流量测试go语言实现的smartdns,能够达到3wQPS以上,后续测试稳定后会开源出来,大家敬请期待:)

原理

smartdns响应dns请求的处理流程如下:

dns请求处理流程

IPPool类的初始化和该类中FindIP方法进行解析处理是smartdns中最关键的两个要素,这两个要素在下面详细介绍。其他的特性比如继承twisted中dns相关类并重写处理dns请求的方法、升级twisted代码支持解析和处理edns请求等大家可以通过代码了解。edns知识可以猛戳这里:DNS support edns-client-subnet

IPPool初始化

IPPool初始化流程

ip.csv内容格式如下:
200000001, 200000010,中国,陕西,西安,电信

其中各个字段含义分别为 IP段起始,IP段截止,IP段所属国家,IP段所属省份,IP段所属城市,IP段所属ISP
Read More →

dsnat v2

作者: |   1,629 浏览  | 

dsnat简介

dsnat(Dynamic Source Network Address Translation) 是一个基于lvs的模块,在taobao开源的FNAT基础上开发,dsnat位于网络的网关位置,内网访问外网时,会将内网地址改成公网地址池中的ip,轮询选择

目前该模块只支持ipv4下的TCP,UDP协议, ICMP暂时还不支持

dsnat_tools包含ipvsadm和keepalived这2个工具,在官方源码的基础上修改添加了对dsnat的支持
- ipvsadm是对lvs进行配置的用户空间工具,ipvsadm->lvs类似于iptables->netfilter
- keepalived是对lvs集群的一个自动化配置工具(以服务形式常驻内存),可针对rs自动摘除和添加rs到vs中;并带有HA功能,提供热备容灾

change log

  • 添加了源地址判断功能
    • 不同源地址可使用不同的local address
    • 可实现源地址黑白名单功能
  • 代码由原来的centos6.2内核改为centos6.3内核

Read More →

奇怪的time_wait——http客户端连接经常RST问题分析

作者: |   3,912 浏览  | 

前两天aiming说有个内部访问php接口的服务器经常会收到rst。起初就怀疑是time_wait之类的东西作怪,但是一直想着会是client端time_wait的问题,于是陷入了死胡同。。。刚才突然想起貌似client端去请求server端http接口,主动断开的一方应该是server端,是server端进入了time_wait。顺着这个思路,经过试验,终于发现了问题的所在。

实验中用到的工具:tcpdump,curl,hping(你需要对他们进行一定的了解才能理解下面的内容)
实验中的client:sd-pt-cs00.bj(10.180.2.251)
实验中的server:sd-pt-xman00.bj(10.180.2.243)

我们首先模拟client请求server端http

[root@client]# curl "sd-pt-xman00.bj"
#得到若干内容

同一时间在server端抓到的包如下

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
00:04:45.820164 IP (tos 0x0, ttl 64, id 10936, offset 0, flags [DF], proto TCP (6), length 60)
sd-pt-cs00.bj.57979 > sd-pt-xman00.bj.http: Flags [S], cksum 0xc4ea (correct), seq tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
00:04:45.820164 IP (tos 0x0, ttl 64, id 10936, offset 0, flags [DF], proto TCP (6), length 60)
sd-pt-cs00.bj.57979 > sd-pt-xman00.bj.http: Flags [S], cksum 0xc4ea (correct), seq 2862922835, win 14600, options [mss 1460,sackOK,TS val 1309251307 ecr 0,nop,wscale 6], length 0
00:04:45.820217 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
sd-pt-xman00.bj.http > sd-pt-cs00.bj.57979: Flags [S.], cksum 0xd192 (correct), seq 3280914721, ack 2862922836, win 14480, options [mss 1460,sackOK,TS val 4054807901 ecr 1309251307,nop,wscale 7], length 0
00:04:45.820217 IP (tos 0x0, ttl 64, id 10937, offset 0, flags [DF], proto TCP (6), length 52)
#此处省略若干行
00:04:45.821854 IP (tos 0x0, ttl 64, id 10942, offset 0, flags [DF], proto TCP (6), length 52)
sd-pt-cs00.bj.57979 > sd-pt-xman00.bj.http: Flags [F.], cksum 0x2ad1 (correct), seq 168, ack 3080, win 364, options [nop,nop,TS val 1309251309 ecr 4054807902], length 0
00:04:45.822037 IP (tos 0x0, ttl 64, id 48260, offset 0, flags [DF], proto TCP (6), length 52)
sd-pt-xman00.bj.http > sd-pt-cs00.bj.57979: Flags [.], cksum 0x2bc2 (correct), seq 3080, ack 169, win 122, options [nop,nop,TS val 4054807903 ecr 1309251309], length 0

可以算出来,最后server端针对client的fin包的ack值为169+2862922835=2862923004

接下来查看server端对这次链接的time_wait
Read More →