NoOps

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

ceph VS glusterfs

作者: |   8,217 浏览  | 

11月初有幸去参加了在香港举行的OpenStack Summit,在体验了祖国特别行政区的繁华同时,也体验了ceph如火如荼的势头。ceph提出的统一存储(united storage:file system、block storage、object storage)开始被大家广泛认可。而glusterfs同样也是一款很出色的分布式文件系统,很多公司在生产环境中已经应用了glusterfs。

最近正在对本篇文章主要带大家简单熟悉下ceph和gluster的部署并使用fio对两款文件系统性能进行测试。

Read More →

Tripwire文件完整性监控

作者: |   2,378 浏览  | 

简介

Tripwire 是目前最为著名的Unix下文件系统完整性检查的软件工具,这一软件采用的技术核心就是对每个要监控的文件产生一个数字签名,保留下来。当文件现在的数字签名与保留的数字签名不一致时,那么现在这个文件必定被改动过了。

 

软件特点

监视和检查系统发生的变化能够及时地帮助你发现攻击者的入侵,它们能够很好地提供系统完整性的检查。

用Tripwire建立数据完整性监测系统。虽然它不能抵御黑客攻击以及黑客对一些重要文件的修改,但是可以监测文件是否被修改过以及哪些文件被修改过,从而在被攻击后有的放矢的策划出解决办法。

Tripwire原理

Tripwire的原理是Tripwire被安装、配置后,将当前的系统数据状态建立成数据库,随着文件的添加、删除和修改等等变化,通过系统数据现状与不断更新的数据库进行比较,来判定哪些文件被添加、删除和修改过。正因为初始的数据库是在Tripwire本体被安装、配置后建立的原因,我们务必应该在服务器开放前,或者说操作系统刚被安装后用Tripwire构建数据完整性监测系统。

Tripwire的基本操作

一个配置文件(tw.config)描述监测哪些目录和文件,还有一个基线签名数据库产生一个有关改动的详细报告。

tripwire

 

当第一次运行Tripwire时,程序创建一个签名的基线数据库。下一次运行时,它使用tw. config文件产生一个新的签名数据库。然后,它比较两个数据库,实施用户定义的任何选项屏蔽(排除经常更改的文件),最后通过电子邮件或显示器来为用户在终端上输出一个可读的报告。

 

Tripwire有四种操作模式:数据库生成、完整性检查、数据库更新或交互式更新。

数据库生成模式产生一个基线数据库,为未来的比较打下基础。

完整性检查是Tripwire的主要模式,把当前文件签名和基线数据库进行比较来进行检查。

有两种更新模式允许用户调整Tripwire数据库以消除不感兴趣的结果以及应付正常的系统变化。例如当用户帐号正常增加或删除时,不希望Tripwire重复报告/etc/passwd文件被改动了。
Read More →

ruby开发终端下类似pry/irb/msf的交互程序

作者: |   945 浏览  | 

实现pry,ronin,msf类似的终端下交互功能,这里主要用到了ripl gem:

  • 能够调用定义的方法,如help
  • 能够执行系统命令
  • 能够类似irb/pry进行ruby语言解析

安装:

gem install ripl
gem install ripl-shell_commands
etc..

示例

ripl这个gem,它也提供很多插件,如下是一个简单的终端下交互实现:

使用

在终端下运行程序后,出现[0] cmd>这样的提示,其中help、name、dodo这些变量/方法可以tab补全。
运行shell命令前加!,如:!df
还有更多内部方法,如: history, list, jump…

周末半夜写文章不容易啊,困~~~

ruby元编程在实际项目中的使用

作者: |   968 浏览  | 

很喜欢ruby元编程,puppet和chef用到了很多ruby的语言特性,来定义一个新的部署语言。
分享几个在实际项目中用到的场景,能力有限,如果有更优方案,请留言给我:)

rpc接口模板化——使用eval、alias、defind_method

上面是一个rpc server,编写一个函数,调用rpc命令进行注册。

采用define_method、eval、alias方法,可以实现一个判断rpc/目录下的*.rb文件,进行加载和rpc接口注册的功能,实现代码如下:

完成上述功能后,可以非常方便的开发rpc接口,例如下面这个IP地址增、删、查的代码,注册ip.list, ip.add和ip.del方法:
Read More →

OpenStack创建虚拟机镜像

作者: |   3,169 浏览  | 

随着小米私有云服务正式上线,虚拟机的创建会更加的标准化,因此本文介绍两种创建虚拟机的方法。

第一种方法:白手起家

其实这种方法在网上有很多类似的方法,也是我们最早使用的创建镜像的方法。系统环境:ubuntu 12.04

1)创建镜像文件

首先创建一个大小为40G的镜像文件,文件格式为qcow2,qcow2为目前较为主流,性能较其他格式也有些许提升。

2)创建虚拟机

然后用VNC客户端进行登录,正常的安装虚拟机,注意分区的时候最好不要创建交换分区。为了避免重复工作,我们可以先在上面做好一些初始化工作。

3)上传镜像到glance

接下来将我们才做好的虚拟机镜像上传到glance当中即可。

Read More →

CloudFoundry中gorouter深入解读

作者: |   2,965 浏览  | 

导读

首先,所谓的深入解读比较标题党了哈:)只是给大家分享一下我的理解,希望共同进步
我们以一个问题开篇,主要介绍代码结构、接口交互、主要逻辑,最后稍微总结一下,希望能把你讲明白:)

背景问题

思考这么一个问题:paas是多租户的,每个app都希望有自己的域名,比如miui.com、miliao.com、xiaomi.com,为了提高可用性,每个app一般都会有多个instance。OK,想象一下,一个http request过来了,请求的是miui.com(至于怎么过来的CloudFoundry是不管的,自己可以做个cname之类的),CloudFoundry应该如何处理呢?

  • 针对这个域名的请求最终应该打到某个instance上,so,应该有个地方来保存路由信息,可不能让miui.com的请求打到miliao.com的instance上去
  • 既然有个路由表,那某个instance挂掉的时候或者扩容新增instance的时候,希望能够动态更新这个路由表
  • http协议本身是无状态的,如果一会请求instance a,一会请求instance b,就会存在session一致性问题,我们可以用一个简单的策略解决,达到这样的效果:上次这个用户请求打到哪个instance我们记录下来,下次仍使其打到这个instance上;第一次请求就随便喽,不过要有负载均衡的效果
  • app不光是http协议提供服务的,还有websocket的、tcp的呢,怎么整?

OK,gorouter就是来解决以上问题的,他保存了一张路由表在内存中,他来做转发,所有的请求都从router节点走,所以性能是个需要注意的问题,cf1.0中使用nginx+lua+ruby来搞效果不是很好,当然,还有一个更普遍的问题,可用性问题:) so,一般来讲,在CloudFoundry平台中,gorouter是部署多个的,前面加一层LVS

Read More →

外部节点服务器安装方法

作者: |   1,021 浏览  | 

节点由于机器数量一般比较少,单独搭建一套装机系统比较浪费。之前我们都是装好系统发到节点,如果需要重装就是远程管理卡挂载镜像安装,耗费人力
最近新上的装机方法可以减少很大的工作量,我们使用起来效果也很好
方法大致如下:
2
假设A B在一个节点内,A目前有操作系统,B要安装操作系统,大致原理如下:
1. A提供临时简单的dhcp服务,dhcp的next-server指向WEB
2. B进入PXE获得123.1.1.2这个有效地址和网关
3. B从公网WEB的tftp服务器获得pxelinux.cfg文件
4. Pxelinux.cfg文件指示B从WEB的tftp服务器获得initrd.img、vmlinuz和ks文件
5. B根据KS文件配置有效的IP主机名等
6. B根据ks文件中的配置,从WEB的http服务器获得安装所需的所有文件进行安装
7. B安装完成后重启,然后到WEB处获得初始化脚本完成安装

这样做的优势:
1. A只需要部署一个临时dhcp环境
2. 所有的文件和tftp服务器都在长期稳定的WEB环境上
劣势:
1. 该节点上必须有一台机器有操作系统

前期准备
1. 外部http源
公网服务器挂载我们需要安装的iso版本并提供http服务,搭建tftp放置必备的文件。配置iptables只对节点的IP地址段开放tcp:80端口、udp:69端口和对源站地址段开放tcp:22端口
2. 快速部署脚本
编写脚本快速在节点上部署装机环境,提供pxe时用的dhcp环境
3. 生成ks文件脚本
快速在WEB上生成ks和pxelinux.cfg文件的脚本

CloudFoundry中buildpack介绍与自定义实践

作者: |   6,336 浏览  | 

背景

用一个问题开篇:一个服务能够run起来,到底需要些什么?
做过部署系统的同学会对这个问题认识比较深,总结一下,我们可以归为如下几类:
1、程序本身的代码文件,嗯,这个不用解释
2、需要的配置,比如测试环境下有一套配置,开发环境、线上环境各有一套配置,还有甚者,一个idc一套配置
3、环境依赖,比如语言环境:Python2.7、JDK6,一些操作系统特性等
4、运行时依赖,比如我需要上游某个模块提供的rpc接口的支持,需要用到MQ等等
看起来,要部署个程序还是比较麻烦的嘞,那怎么做才会相对容易一些呢?如果程序最后能把所有依赖的东西打成一个包(比如统一要求是tar.gz格式),扔到任何一个地方去,我们只需要解压,然后使用解压出来的start.sh即可启动执行,那就太棒了!

buildpack就是解决这个问题的……

相关术语

在CloudFoundry中,最后打成的那个tar.gz的包,称为droplet,任何一个DEA拿到这个droplet,解压然后start即可。那具体应该如何打包?打包过程应该是运行一系列的脚本吧,这个脚本在哪里?一般来讲,脚本文件为了备份和版本化需求我们一般会放到git或svn上,嗯,现在可以解释什么叫buildpack了:它是一坨脚本,一般是放到git上作为一个project的形态存在,这坨脚本的作用是把用户写好的程序(CloudFoundry中一般称为app)、及其依赖的环境、配置、启动脚本等打包成droplet,这个过程称之为stage。

Read More →

一个采集服务器所接交换机端口信息的脚本(支持CISCO和H3C的交换机)

作者: |   4,228 浏览  | 

这个脚本在centos物理服务器上运行可以采集到服务器所连接的交换机信息和端口信息。利用了CDP和LLDP协议

我们线上是服务器安装完操作系统就会跑这个脚本并自动把这些信息采集到资产库里,便于以后更改机器网段做vlan自动划分

采集到我们资产平台的信息如下:
1

采集脚本内容如下:
Read More →

2014 小米运维部校招笔试题 卷B

作者: |   4,353 浏览  | 

一、linux基础

1)  如何杀掉linux系统中所有的带“nginx”字段的进程,请给出详细命令?

2)  linux系统中如何获取pid为100的进程的所有TCP连接,请给出详细命令?(尽可能给出效率最高的方法)

3)  阻塞和非阻塞系统调用的区别是什么?请举一个应该使用非阻塞系统调用的例子?

4)  主机A需要给主机B传输一份10GB的数据,从应用层上可以做哪些传输优化?从TCP上可以做哪些传输优化?请分别列举优化措施

 

二、系统/网络

1)  介绍linux系统的启动过程

2)  尽可能多的列出你知道的安装linux操作系统的方法

3)  简述下传统机械硬盘和SSD的性能差异

4)  简述DHCP的获取IP地址的过程

5)  简述traceroute命令的原理

 

三、开发/安全

1)  ftp的默认使用的20和21端口,各自的用途是什么?

2)  ftp的主动模式和被动模式,各有什么使用场景,并简述两种模式下,ftp的连接建立过程

3)  ftp的数据传输过程中,是明文传输还是加密传输?请描述相应的嗅探方案

4)  如果要对一个ftp服务进行ddos攻击,简述你的思路,请从应用层和网络层分别阐述。

5)  ddos问题产生的本质是什么,阐述你想到的防御思路

6)  编码实现一个简单的ftp server,支持连接建立,列目录(dir),下载文件(get)功能,编程语言不限

 
Read More →