xdays

Zabbix性能优化

概述

关于优化,我个人观点是这样的:首先,优化的前提是完善的监控,因为你有完善的监控才能发现确定问题所在,才能看到优化后的效果;然后,不要过度优化,时间很宝贵,视需求来决定优化的程度,够用即可;最后优化不是一件容易的事情,需要对方方面面有深入的理解。

性能评估

Zabbix自带了对自身的监控,包括繁忙worker进程的比例,缓存使用情况等,也有相应的触发器。

配置调整

#采集进程的数量,这个值是关键,当监控数目较多时需增大此值
StartPollers=100
#对不可达设备的采集进程数量,适当增加
StartPollersUnreachable=100
#缓存大小,用于存储主机,项目和触发器的数据
CacheSize=256M
#历史数据值缓存
ValueCacheSize=64M
#认为agent不可达的时间
Timeout=10
#数据库慢查询
LogSlowQueries=1000

吐槽: 官方文档对配置文件的描述太简单了,只能知其然不能知其所以然。

参考链接
zabbix performance tuning

Zabbix自动发现

简介

通过近段时间对Zabbix的研究,我认为实现批量监控设备的方式有两种:一种是封装API,通过调用函数传递主机信息来新增设备;另一种是通过自动发现并新增设备。本文主要讨论自动发现,因为它功能强大且操作简单。自动发现可分为网络发现,自动注册和底层发现。一言以蔽之,通过自动发现你只需要配置一个网段和发现规则即可自动完成设备的监控。

底层发现

原理

底层发现的原理大致如下:当Zabbix被告知需要监控一台设备时,会主动去探测设备上一些信息来作为item,然后可以为这些item创建trigger和graph;目前这种去探测设备的常见方式有agent和snmp等;探测来的信息实际上是一个个key,需要通过正则表达式来筛选,然后拿筛选后的key来获取实际想要的信息;item,trigger和graph在发现里叫做prototype,即原型。

配置流程

底层发现的创建流程如下:

  1. 进入模板配置,点击discovery
  2. 点击create discovery rule
  3. 填写discovery的相关信息
  4. 点击items prototypes
  5. 点击trigger prototypes
  6. 点击graph prototypes
  7. 检查配置

注意: 以上每个步骤的具体细节请参考官方文档,我只写思路。

实例1 通过SNMP自动发现DiskIO

由于Net-SNMP已经包含了磁盘IO的相关信息,所以只需要添加一个模板即可,考参照zabbix_snmp_linux_templates模板 ...

Zabbix编译安装

安装依赖

由于自带的PHP版本为5.1,而Zabbix2.2对PHP版本需要是不低于5.3,故而卸载系统自带的版本安装5.3:

rpm -e php-common php-cli php
yum install httpd yum install php53 php53-cli php53-common php53-pdo php53-mysql php53-gd php53-bcmath php53-xml php53-mbstring mysql mysql-server mysql-devel net-snmp net-snmp-utils net-snmp-devel

下载解压

wget -SO zabbix-2.2.0.tar.gz "http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable ...

Zabbix基本安装

简介

目前系统运维监控环节有Cacti和Nagios两大工具,分别用于监控中的作图和报警两个重要方面。而Zabbix可以集两工具的功能于一体并且具有一些额外的包括告警自动处理,资产管理等“福利”。官方称其为企业级的开源监控解决方案,其中含义可在学习研究中慢慢体会。

特性

  • 数据采集,支持SNMP,IPMI,JMX和agent等多种模式
  • 分析采集数据,问题探测
  • 可视化,可做成牛掰的大屏幕模式
  • 告警通知,自动处理
  • 模板机制,简化操作
  • 自动发现
  • 支持proxy模式,可做分布是监控
  • 资产管理

安装配置

安装需求

zabbix hardware reuqirement

安装官方源

rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel ...

proxy服务器-trafficserver基础

简介

Apache Traffic Server(简称ATS)是新一代的缓存代理服务器,Yahoo买下Inktomi,经多年开发日渐成熟,2009年将其贡献给Apache基金会作为TLP。

特性

  • 缓存,也是其最主要应用,功能和Squid一样;
  • 代理,服务器端做反向代理,负载均衡,功能和nginx等类似;
  • 快速,支持多核处理器,每秒并发支持到3w;
  • 可扩展
    • 插件机制使其内部可扩展
    • 通过多级缓存和ICP互联工作模式使其外部可扩展

注意:在技术领域里会经常看到这种新技术创造的革命,如nginx

组件

TrafficServer缓存

通过告诉对象数据库来缓存,索引为URL和相关header头。可以根据vary存多份;存储很大和很小的文件;能容忍磁盘的任何失效,盘坏完了就切换为纯代理模式;可以对缓存分区,不同条件存到不同的分区,可用于混合存储。

RAM缓存

顾名思义,内存缓存。

Host数据库

用于保存链接源服务器的DNS记录,包括DNS,HTTP版本信息。

DNS解析器

回源解析,可实现根据条件使用不同的DNS服务器。

TrafficServer进程

  • traffic_server是事务处理引擎
  • traffic_manager用来命令和控制ATS的进程 ...

Ansible初探

简介

ansible是一个自动化管理工具,它足够简单且足够强大来管理大批量设备。可用于配置系统,部署软件以及组合复杂任务。关于其来由可参考中文FAQ

特性

  • 无agent模式,push模式,这一点与fabric有几分类似
  • 并发执行
  • 可用任何语言写扩展模块
  • 有类似Puppet(RAL)或者SaltStack(state)的playbook
  • 灵活的匹配规则,通配符,正则

执行模型

如图所示: ansible architecture

​* 首先,你需要定义设备列表,即任务执行的范围 * 然后,Ansible能通过调用模块来在这些设备上执行任务 * 此外,可以通过用playbook描述要执行的任务的逻辑,完成任务组合

ansible命令

语法

ansible <pattern_goes_here ...

JavaScript基础语法

特点

  • 解释型,基于原型(prototype)的面向对象高级语言;
  • 应用广泛,常见但不仅限于Web开发,node.js日渐流行;
  • 编写灵活,这是一把双刃剑
  • 性能强大,非阻塞
  • 开放,ECMAScript规范
  • 厂商扩展,看具体引擎实现

数据类型

  • 字符串,Unicode
  • 数字,64位二进制表示
  • 布尔,即true和false
  • null,实际上null不是一种数据类型,而是一个对象值。
  • undefined
  • 对象,理解JavaScript的关键所在,键值对的集合,包括数组,函数,正则,日期等

操作符和表达式

操作符

  • 操作符列表如下:

    operator

  • 操作符优先级,与其他语言类似,记住用括号显示表达优先级就可以了。

表达式

  • 原始表达式,如1.0就是表达式
  • 数组和对象初始化,如 ...

Bind搭建DNS服务系统

简介

Bind是目前应用最广泛的DNS服务器软件,其主要包括服务器实现,解析器库实现和测试三个部分。

说明

本文仅讨论如何把Bind配置成一台DNS域名服务器,关于DNS协议的说明,请参考DNS协议详解

安装

centos

yum install bind bind-libs bind-utils bind-chroot

其中bind-chroot用于让bind运行于chroot模式下。

ubuntu

apt-get install bind9 dnsutils

配置

概述

bind的配置文件为named.conf,没有chroot时位于/etc/named.conf,chroot时位于/var/named/chroot/etc/named.conf下。配置文件由配置语句和注释组成。关于配置的详细说明可参考BIND 9 Administrator Reference Manual

配置语句列表

  • acl 定义一个IP列表名,用于接入控制
  • controls ...

DNS协议详解

基本概念

树是一种数据结构,用来表达一种一对多的关系,一图胜千言。

tree

注意: 图选自《大话数据结构》

需要对树结构的几点说明:

  • 根节点没有父节点,叶节点没有子节点
  • 节点间不能有交叉
  • 很多应用树结构的应用场景,如linux目录结构等

域名

顾名思义,就是一个域的名字。其格式说明如下:

  • 以点分隔,每个字段最长63个字符,总长度最多255个字符(包括点)
  • 域名中可以使用任意的ASCII字符,但是有些自负需要转义(000到040,177到377和不做分隔符的点)​
  • 域名既可以表示一个域也可以表示一个主机,其实可以表示主机是因为它就是子域的根节点,如hp.com

域命名空间

用树结构表示出来的互联网所有域名数据就是域的命名空间。再来一张图说明下:

domain namespace

需要对命名空间有几点说明:

  • 命名空间的根是root用点来表示,严格来说所有的域名最后都有个点,因为都有所以省略了
  • 每个子树对应一个域
  • 把域名用点拆开 ...

主流Linux版本自动化安装

概述

目前主流的发行版本(Redhat和Debian系列)都有相应的自动化安装的工具:Redhat有kickstart,Debian有preseed。其作用都类似,通过预先生成或者写好的配置文件来配合系统安装程序,回答安装过程中需要交互问题来实现自动化安装。

自动化安装配置

kickstart

  • 所有的ks文件配置项参考官方文档
  • 在系统安装完成之后,/root/下会有一个anaconda-ks.cfg文件,此文件是根据手动安装时的配置生成的ks文件,可供下次使用
  • 如果手头没有ks文件可以通过“Kickstart Configurator application”来创建一个,交互式图形界面工具。

注意: %post这个版块,可以写一些定制脚本。

preseed

注意: d-i preseed/late_command string这个版块,和kickstart的%post的类似 ...

Cobbler自动化安装Linux系统

简介

根据官方文档的定位,Cobbler首要的是快速设置网络安装环境的Linux安装服务器;但其功能不限于此,它还可以管理配置,管理DNS,HDCP,TFTP和rsync,软件包升级和电源管理等;个人感觉有些乱,作为一个开源项目明白自己想要解决什么问题并把这个问题解决到极致就够了。

说明

血与泪的经历:

  • Cobbler2.2(来自CentOS5.5) 安装CentOS5.5和CentOS6.4没有问题,安装Ubuntu12.04失败
  • Cobbler2.4(来自CentOS6.4) 安装CentOS5.5和CentOS6.4没有问题,安装Ubuntu12.04没问题

基本概念

PXE原理

PXE原理

  1. 客户端发起Discover包,通过flag说明自身的PXE拓展信息;
  2. 服务器响应Offer包,告知客户端下边去找哪台服务器;
  3. 客户端发送Request包
  4. 服务器发送ACK包
  5. 客户端通过TFTP协议请求pxelinux.0等文件
  6. 客户端加载并启动系统

Cobbler模型

Cobbler模型

这张图画出了Cobbler的模型,越往上的对象越基础越通用,自上而下不断的添加一些新的东西进来让其满足个性化的需求。这里我们需要重点关注的是distro和profile这两个概念。

安装

安装EPEL或者rpmforge

  • CentOS5 ...

OAuth2.0

前言

OAuth在展过程中变化非常大,1.0的基础概念在2.0中完全不同了,整个模型也发生了翻天覆地的变化,这也给学习这门技术带来了困扰。好在OAuth2.0已经成为标准的RFC6749,我就跟着时代走学习2.0吧!以下内容来自我学习过程对各种文档的总结,仅为个人理解。另外,1.0的相关资料见参考链接。

简介

OAuth是一种开放的授权标准,它解决的问题是如何更安全地让第三方应用访问用户的资源。随着开放平台等其他云计算形式的发展,OAuth也成了做平台或者平台开发很重要的一项技能。

概念

  • 角色
    • 资源所有者(resource owner) 就是终端用户
    • 资源服务器(resource server) 资源托管的平台,如微博等
    • 客户端(client) 第三方应用,想要获取用户资源
    • 授权服务器(authorization server) 颁发授权信息的服务器
  • 授权许可 获取访问令牌的方式,2.0版本定义了四种授权方式(授权码,隐式授权,资源所有者密码凭据和客户端凭据)
  • 访问令牌 代表应用程序可以获取资源的一个凭证 ...

fabric初探

简介

Fabric是一个用于应用部署和系统管理的工具,它让基于ssh的的操作更灵活;你可以在本地或者远程批量执行一些命令,上传下载文件等。

优势

  • 简单,没有架构,不需要理解master/agent(puppet)啦,master/minion(saltstack)啦相关的概念,当然任何一个工具都有自己的逻辑规则,相比其他工具fabric的学习成本要低很多;
  • Pythonic,最小的执行单位---任务,就是基本的python函数,灵活性强;
  • 并行执行,尽管如此性能仍不及M/S模式的其他工具;
  • 可扩展,这是我认为最大的优势,你可以很轻松的在fabric之上构建自己的平台,如监控和部署等。

安装

由于fabric尚不完善,我个人建议直接从github获取最新的代码安装:

git clone https://github.com/fabric/fabric.git
cd fabric/fabric
python setup.py install

也可以通过pip安装

pip install ...

Python实现手机控制PC

背景

最初想法起因是这样的:晚上睡觉前看电视剧看困了就不想起来关电脑了,所以需要通过手机远程在PC上执行命令。

组件

  • 服务端提供接受指令和下发指令的两个API
  • 手机端用Qpython写脚本向服务端提交指令
  • PC端写一个小daemon程序,获取指令并在本机执行

代码

服务端代码

以Django编写,后端用redis存储。

views.py

from django.http import Http404, HttpResponse from django.shortcuts import render from django.views.decorators.csrf import csrf_exempt, csrf_protect from xbox.control.forms import order from redis_cache import get_redis_connection import time import json @csrf_exempt def ...

synergy一套鼠键管理多台机器

背景

前段时间购得一RaspberryPi,在一切初始化就绪后发现一个问题:同时操作笔记本和Pi的时候切换鼠标键盘非常不爽,不够简单(简单很重要)。所以就找到了synergy这个小软件,解决了问题。

功能

  • 用一套鼠标键盘同时操作多台电脑,鼠标触及屏幕边缘就切换到另一台电脑;
  • 共享剪切板。

安装配置

安装

debian/ubuntu下用如下命令安装:

sudo apt-get install synergy

配置

样例配置如下:

section: screens
        xdays-ThinkPad-E520:
        raspberrypi:
end
section: links
        xdays-ThinkPad-E520:
             right = raspberrypi
        raspberrypi:
             left = xdays-ThinkPad-E520
end

具体配置相关解释可参考manpage

运行

客户端:

synergyc -f ...

Python写MapReduce

说明

本文以一个没有Java开发经验的运维角度从宏观上去理解Hadoop的云计算(也就是MapReduce)框架模型的一些思想和运行流程;主要目的是在对MapReduce有一定了解后能用Python通过streaming工具来写MapReduce。

MapReduce工作流程

如下图所示:

MapReduce Flow

概括整个过程如下:

  1. 客户端启动一个作业;
  2. 客户端向JobTracker请求一个job id;
  3. 客户端将运行作业所需的资源复制到HDFS上;
  4. 客户端将作业提交给JobTracker;
  5. JobTracker初始化作业对象,获取输入数据进行拆分作业;
  6. JobTracker与TaskTracker保持心跳,将子作业下发给TaskTracker;
  7. Tasktracker从HDFS获取数据进行MapTask和ReduceTask

具体的流程介绍可参考这篇文章或者《Hadoop权威指南》

Shuffle机制

Shuffle意思是洗牌或搞乱,在整个MapReduce工作流程中Shuffle指的是map开始之后至Reduce完成之前的这个环节。理解其内部运行机制后,你会对那句形容Shuffle的话理解更深刻:排序是Hadoop的灵魂。

具体Shuffle的介绍参考这篇文章,好文,作者分析的通俗易懂,这里鄙人表示感谢。

MapReduce数据流

理解数据流对写MapReduce很重要。总结来说就是:数据始终以key/value形式从input流向output,在input端map有相应的转换方式定义如何将数据转换为key ...

Markdown官方文档

说明

本文翻译自官方的英文文档,主要目的是个人学习Markdown语法和锻炼英语能力。

注意: 这篇文档本身就是用Markdown写的,你可以 在URL中添加.text来查看源码.


概述

思想

Markdown置力于尽可能的易读写。

可读性是最终要的。一片用Markdown格式化的文档应该可以作为文本原样发布,不许要看上去已经被一些标签或者格式化指令标记。Markdown的语法受目前已有的文本转html的过滤器影响--包括Setext, atx, Textile, reStructuredText, Grutatext, and EtText--对Markdown语法影响最大的是email的文本格式

Markdown的语法是由标点符号组成,这些标点符号都是精心挑选的以便来表达他们本意。例如,围绕单词的型号看起啦就像是强调。列表看起来像是,哦,列表。甚至是块引用看起来就像是引用的文本,假设你曾经使用过邮件。

内联HTML

Markdown的语法是为了一个目的:用来编写web的一种格式。

Markdown不是HTML的替代品,也不像它。他的语法很少,仅对应于HTML的标签的子集。其重点不是制定一些更便捷的插入HTML标签的语法。在我看来,HTML标签已经很容易插入了。Markdown的重点在于更容易的读,写和编辑文章。HTML是一种发布格式;Markdown是一种 ...

Hadoop集群搭建

简介

目前我对hadoop的认识主要是如下两点:

  • 类似raid模式的存储系统,基于软件的容灾;
  • 分布式计算,这个是其牛逼之处。

安装配置

新建用户并配置免密码登录

所有设备上都需要hadoop帐号。

useradd hadoop
passwd hadoop

配置ssh无密码登陆

以hadoop用户执行如下命令:

su - hadoop
cd
mkdir .ssh
ssh-keygen –t rsa
cd ~/.ssh
cp id_rsa.pub authorized_keys 
scp authorized_keys ccos-m1:/home/hadoop/.ssh
scp authorized_keys ccos-m2:/home/hadoop/.ssh

安装JDK

JDK在每台设备上都要安装。

安装rpm包:

rpm -ivh jdk-6u23-linux-amd64.rpm

编辑/etc ...

Python语言参考-简介

简介

本参考手册描述了Python语言,它本意并不是一篇教程。

尽管我努力做到尽可能的精确,除了语法和词法分析外我都用英语而不是标准的规范来阐述。这样应该让这篇文档对于普通读者来说更易读,但可能会产生歧义。所以,如果你来自火星,想通过此文档重新实现Python,你可能需要猜测一些东西或者实际上你最终可能实现一种完全不同的语言。另一方面,如果你使用Python,想了解这门语言一个特定方面的准确定义,你应该能从这里找到。如果你想搞明白这门语言更正式的定义,你可能需要奉献你的时间或者发明一台克隆机器。

在语言的参考手册里加入太多实现细节是非常危险的---|实现可能会变,同一语言的不同实现可能运行的完全不同。另一方面,目前广泛使用的只有一种Python实现(尽管存在其他实现),而且其特殊的模式值得一提特别是实现强加了一些限制。因此,你会看到一些“实现要点”散落于文档中。

每种Python实现都有很多其自己的内置模块,这些在Ptyhon标准模块中有说明。一些和语言的定义有重大关系的内置模块会被提及。

替代品

尽管目前最流行的Python实现只有一种,但有一些其他人感兴趣的替代品。

已知的实现包括:

  • Cpython 这是最初也是维护最好的Python实现,以C语言编写,新特性通常先出现在这里。
  • Jython Java语言实现,这个版本可用于Java程序的脚本语言,或者用来借助Java类库创建Java程序。也可以用它给Java类写测试程序。更多信息可以访问Jython主页。
  • Python for .NET 此版本使用Cpython实现,但是一个受管理的应用 ...

垂直互联网站点技术改造

背景

昨天看到Fenng在Qcon上的一个技术分享很有价值,遂写下自己的学习笔记,总结和反思。(有些东西只有总结了,反思了才算真的学会了)

问题

产品陈旧,可扩展性差,访问速度慢,信息架构混乱,UI/UX差等等。 首先明确自己所面临的问题。

解决

阶段一

可用性

  • 充分利用开源程序,对于中小规模网站的可用性不是问题。
  • 可用性是是网站持续发展的前提,没有可用性其他的免谈。

性能调优

  • 考虑新程序的二次开发性,通过改造和改进来优化遗留程序而不是完全替换。同时避免NIH综合症。 团队建设 不影响用户

阶段二

信息架构

  • 信息维度URL,用户和搜索

代码重构

  • 开发者/服务/API

数据挖掘

团队建设

阶段三

UX改进 新功能/新特性

  • 需求驱动,用户需要什么,就做什么 团队建设

阶段四 ...