xdays

Kafka基础

简介

Kafka是一个分布式的,基于分区存储的,多副本提交的日志系统。其特点包括:

  1. 高吞吐
  2. 无缝扩展
  3. 消息持久化

基本概念

broker

broker是Kafka集群的一个节点,负责接收producer发来的消息和响应consumer发来的消息请求。

topic和partition

topic是Kafka组织消息的方式,可以认为是消息的类别。一个topic可以有多个partition来保存消息,消息在partition里是顺序存储的。这里注意,需要注意的是,Kafka保存数据是根据时间来决定的,而不是它是否被消费者消费。如果在数据的生命周期内,它被消费后仍然会存储在Kafka中。但如果它在生命周期内没有被消费,同样它也会在生命周期结束时被丢弃。

分布式

partition分布在所有的broker上。partition有leader和follower,partition的leader broker负责接收读写请求,而follower broker只负责从leader同步消息。当leader broker挂掉的时候,会通过Zookeeper的failover机制从follower中选举出新的leader。

producer

消息的生产者,producer根据topic的partition策略讲消息发给broker。

consumer

消息的消费者,Kafka在consumer之上引入了消费者组的概念,消费者会被被划分成一个个消费者组,属于某一个主题的消息会被分派到它的一个分区下,而该分区与订阅了该主题的消费组中的某一个消费者相对应,也就是说消息只会发送给订阅的消费者组中的一个消费者。可以把消费者组理解成消息的真正的订阅者,而它下面的消费者只是处理消息的线程池,这样做可以保证系统的扩展性和容错性。而消费者与分区的关系是,每个分区只能有一个消费者 ...

OpenLDAP构建统一认证之项目实战

背景

问题

登录服务器的账号分散在所有的机器上,这样就带来两个问题:

  1. 维护成本高,需要专门在playbook里定义用户权限
  2. 没有明确的权限划分
  3. 不便于和其他系统(如Google Apps)对接

需求

  1. 数据集中管理
  2. 根据用户组控制用户的登陆权限
  3. 控制用户的sudo权限,只有operation有sudo的权限
  4. 自动创建家目录
  5. Web管理界面

原则

  • 尽可能少的涉及组件,减少维护成本
  • 尽可能的不入侵系统配置,便于恢复

配置

服务端

OpenLDAP安装配置

关于OpenLDAP的安装可以参考OpenLDAP构建统一认证之安装配置

LAM安装配置

关于LAM安装配置可以参考OpenLDAP构建统一认证之管理工具

管理账号

dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

dn: olcDatabase={2 ...

VPN-PPTP客户端自动登录

安装

yum install pptp

配置

chap-secrets

vim /etc/ppp/chap-secrets

yottaa    pptp password * 

peers

vim /etc/ppp/peers/vpn-bos

pty "pptp vpn-bos.yottaa.com --nolaunchpppd" 
name yottaa-1 
remotename pptp 
require-mppe-128 
file /etc/ppp/options.pptp 

options

vim /etc/ppp/options

lock 
lcp-echo-failure 10 
lcp-echo-interval 1 

启动

pppd call vpn-bos

Keepalived安装配置

简介

Keepalived是Linux的高可用软件,其主要是高可用协议的VRRP的开元实现,此外它还提供了方便管理LVS的接口。

安装

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz && tar xzf keepalived-1.2.7.tar.gz && cd keepalived-1.2.7 && ./configure --prefix=/usr/local/keepalived-1.2.7 && make &&     make install && cd /usr/local && ln -s keepalived-1.2.7 keepalived

配置

mv keepalived.conf ...

VPN-基于LDAP认证的OpenVPN

安装

yum install -y openvpn openvpn-auth-ldap

配置

证书

关于生成证书请参考 VPN-基于OpenVPN构建

/etc/openvpn/server.conf

port 1194
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/BJ.crt
key /etc/openvpn/easy-rsa/keys/BJ.key  # This file should be kept secret
dh /etc/openvpn ...

Bind基于DLZ实现智能DNS

简介

在我看来基于Bind的只能DNS方案主要包括两个部分:Geolocation和Dynamic Record。国内的业界对智能DNS的定位也无非这两点,但是我所理解的智能DNS是建立在这两条基础上的智能调度系统,比如我有三个负载能力不同的数据中心,DNS可以根据数据中心的metrics(这里可能包括带宽,服务能力等)实现流量的调度,限于个人水平个人未在这个方向有所实践,这个话题留作以后讨论,所以本文只针对前两个问题。由于Bind本身的配置可运维性比较差,这就引出本文主要讨论的DLZ。

原理

DLZ实际上就是扩展了Bind,将Zonefle的内容放到外部数据库里,然后给Bind配置查询语句从数据库里查询记录。当修改数据库里的记录信息的时候,无需重启Bind,下次客户请求时直接就能返回新的记录了。另外,DLZ本身不支持缓存,所以需要自己根据实际情况解决查询的问题。

安装

注意: 这里我以CentOS7上安装dlz-mysql模块为例。

安装依赖

yum install mariadb-devel gcc wget patch make

下载源码

Bind9.8之前的版本需要打patch,具体可参考DLZ官方文档,Bind9.8之后(包括9.8)的版本已经集成DLZ:

wget ftp://ftp.isc ...

God进程管理

功能

优点

  • 配置即ruby代码,灵活
  • 可管理后台进程
  • 可动态加载配置
  • 可根据进程消耗资源重启进程
  • 丰富的通知功能,如邮件,campfire等
  • 支持poll和event两种检测模式

缺点

  • 配置复杂,需要ruby背景
  • 文档太少

配置

poll模式:

RAILS_ROOT = "/Users/tom/dev/gravatar2"

%w{8200 8201 8202}.each do |port| God.watch do |w| w.name = "gravatar2-mongrel-#{port}" w.start = "mongrel_rails start -c #{RAILS_ROOT} -p #{port} \ -P #{RAILS_ROOT}/log/mongrel.#{port ...

Supervisor进程管理

功能

优点

  • 配置简单
  • 管理精准
  • 进程组管理
  • RPC扩展
  • API支持
  • FastCGI进程管理
  • 事件支持(如定时任务)

缺点

  • 被管理进程必须前台运行
  • 退出后会使被监管的进程也退出

配置

[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700

[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run ...

Monit进程管理

功能

优点

  • 性能高,占用内存少
  • 邮件通知
  • HTTP界面
  • 检测系统性能参数
  • 检测文件属性
  • 检测服务状态
  • 检测文件系统
  • 检测远程主机

缺点

  • 没有API
  • 准确性
  • 配置复杂

配置

 set daemon 60 # check services at 1-minute intervals set logfile /var/log/monit.log set pidfile /var/run/monit.pid set idfile /var/.monit.id set statefile /var/.monit.state set mailserver smtp.xdays ...

OpenLDAP构建统一认证之管理工具

自带工具

注意: 如果服务器的ssl证书是自签名的,那么在客户端的ldap.conf文件加入一行TLS_REQCERT never,否则认证会不通过。

安装

ubuntu执行:

apt-get install -y ldap-utils

centos执行:

yum install -y openldap-clients

使用

ldapsearch

ldapsearch,搜索目录树,示例如下:

ldapsearch -v -x -H ldaps://example.com -D "cn=admin,dc=example,dc=com" -W -W -b "dc=xdays,dc=info" -LL

简单解释下选项的作用:

  • -H 指定服务器url
  • -x ...

OpenLDAP构建统一认证之安装配置

安装OpenLDAP

ubuntu

确保本机有符合FQDN的主机名,因为安装程序会根据主机名提取域来作为baseDN

apt-get install slapd

安装过程中会提示设置管理员密码

centos

yum install slapd

配置OpenLDAP

slapd.conf和cn=config

配置slapd服务有两种方式:

  • slapd.conf是传统方式,修改配置文件然后重启服务,centos默认采用这种方式。
  • cn=config是新的配置方式,称之为on-line configuration,ubuntu默认采用这种方式。

配置TLS

自签名证书

mkdir /etc/ldap/certs
openssl genrsa -out ldap.key 1024
openssl req -new -key ldap.key -out ldap.csr
openssl x509 -req ...

OpenLDAP构建统一认证之基础概念

目录服务与关系数据库

目录数据库系统和关系数据库系统都是用来保存数据的,但是他们有两个主要的不同点:

  • 数据结构,目录服务只有树形结构,不像关系数据库有复杂的数据结构。
  • 查询速度与写入速度,目录服务适合查询,不适合写入。

基本概念

在浏览LDAP相关文档时经常会遇见一些概念,下面是常见概念的简单解释:

  • DIT,目录信息树,近似相当于一个表
  • Entry,条目,也叫记录项
  • DN,是无歧义标识一个条目的名字,如"cn=alair,dc=account,dc=xdays,dc=info",相当于主键
  • 属性,一个条目可以有多个属性,常见的属性有CN,O,OU,DC等
  • ObjectClass,对象类,决定了一个条目能具备哪些属性,以及属性对应值的类型
  • Schema,Schema是对象类的集合
  • baseDN,基本DN,baseDN执行绑定查询时的根目录
  • RootDN,根目录,也就是绑定了OpenLDAProotDSE这个类的条目。
  • O,组织 ...

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的进程 ...

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 ...

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 ...

rsync文件同步服务

简介

rsync是一个文件同步工具,简单来说,它的功能就是在两个位置(可能是本地的两个目录或者本地目录和远程目录)之间拷贝文件;但是相比cp或者scp等命令,rsync优势在于其强大的增量拷贝(高效)和过滤条件(灵活)上。

功能特点

  • 支持特殊文件,文件常见属性的拷贝
  • 可以借助常见的ssh,rsh等来传输
  • 强大的过滤机制
  • 通过著名的delta-transfer算法来实现高效传输
  • 基于服务的匿名和认证传输

客户端使用

运行模式

本地模式
rsync [OPTION...] SRC... [DEST]

如果源和目标都是本地路径则和cp类似。

shell模式
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

通过shell连接时在主机名和路径之间用一个":",用户名可选。

daemon模式
Pull: rsync [OPTION...] [USER ...

NFS文件共享服务器

基础概念

运行流程

NFS主要用于Linux系统间的文件共享,其方便之处在于client只要权限足够可以直接通过挂载的方式使用server端的目录,通过网络读写数据。NFS是通过几个独立的daemons来实现的,例如其中rpc.nfsd用于验证身份,rpc.mountd负责管理文件系统,rpc.lockd用于锁定文件防止写冲突,rpc.statd用于检查一致性。他们启动后选取小于1024的随机端口来监听,这就造成客户端无法了解服务端监听哪些端口的问题?所以NFS的运行依赖于portmap,portmap启动后会监听111端口,NFS各个服务器启动后需要向portmap注册自己的监听端口,这样当客户端要请求响应服务时先向portmap请求响应服务的端口,然后再去请求响应的服务

权限问题

分以下几种情况讨论:

  • 当client与server有完全相同的帐号和组(包括UID),client在server端拥有相应帐号的权限
  • 当client与server的用户UID相同时,client可以拥有以服务器端相同UID的权限,这可能会造成问题
  • 当server上并不存在client的UID,server端会把client的用户看作是一个匿名帐号,如Centos用nfsnobody
  • 当client以root用户访问server,默认server会把root用户改成匿名用户的权限

这样看来一个client用户要对NFS文件系统有些的权限要满足以下三个条件:

  • 通过NFS本身的验证
  • 在NFS配置中对文件系统有些的权限
  • 实际文件系统对响应的用户有些的权限

安装

一般系统默认都会安装,用如下命令查询下是否安装

rpm -q nfs-utils portmap

如果没有安装,yum安装

yum install -y ...

VPN-基于pptp的编译安装

安装依赖

安装ppp

yum install ppp -y

下载源码

下载pptpd

wget -SO /usr/local/src/pptpd-1.3.4.tar.gz http://sourceforge.net/projects/poptop/files/pptpd/pptpd-1.3.4/pptpd-1.3.4.tar.gz/download

编译安装

解压

cd /usr/local/src;tar xzf pptpd-1.3.4.tar.gz

修改头文件vim /usr/local ...

ssh技巧汇总

自动登录

简介

最近苦于linux下没有像SecureCRT这样便捷的虚拟终端软件,打算利用下这个ssh自动登录功能。流程说起来也简单,就是先把公钥和密钥分别保存到服务器和客户端,客户端登录只需要指定对应服务器的密钥就可以自动登录到服务器。

配置

这里只列举自动登录到多台服务器的配置过程,对于单台同样适用。

生成密钥

$ ssh-keygen  -t rsa
nter file in which to save the key 
(/home/lifeix/.ssh/id_rsa): /home/lifeix/.ssh/id_rsa_192.168.60.66
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home ...

Centos5搭建Exmail邮件系统

邮件系统运行原理

mail-architecture

MUA,MTA和MDA

MUA叫邮件用户代理,是客户端软件负责与用户交互,接受用户指令;MTA是邮件传输代理,负责判断邮件取向,如果目的地是自己就直接交给MDA处理,如果是其他MTA则用SMTP转发邮件;MDA是邮件投递代理,负责将目的地是本机的邮件投放到相应用户的邮箱中,将不是本机的邮件通过MTA发送给其他的主机,在这个过程中可以执行邮件过滤和自动回复等操作。

传送流程

  1. 用户写明邮件发件人A和收件人B,标题以及正文内容点发送,邮件便发送到A自己的MTA上,进入MTA的队列中
  2. 如果邮件收件人B属于用户自己的MTA则直接通过MDA投放到收件人B相应的邮箱里去
  3. 如果是收件人B属于其他的MTA,则发件人A的MTA开始转发(relay)流程,通过SMTP发送给下一台MTA,当然这个过程需要经过下一台MTA的许可(通过IP地址限制)或者认证(用户名密码)
  4. 最后收件人的MTA收到邮件后,通过MDA放到收件人的邮箱里,等待收件人查看和下载

Extmail 简介

Extmail是一套基于开源软件的邮件系统解决方案。其主要特点有支持STMP和POP统一用数据库认证及ESTMP,支持1G大邮件,web界面,病毒过滤和内容过滤,图形化日志分析,spam过滤,别名和多域等特点,目前应用广泛。

Extmail 系统结构


功能模块 功能模块2 功能模块2 操作系统(OS ...