分类目录归档:云运维

Zookeeper部署

介绍zookeeper单机多实例部署以及生产环境的分布式部署

1. 准备工作:

1)需要linux环境,推荐用ubuntu的系统。学习的话使用oracle的virtual box安装虚拟机,网上找下安装文档就可以装好了,而生产环境一般都会装好的。ubuntu下载链接:
32位:http://mirrors.zju.edu.cn/ubuntu-releases//precise/ubuntu-12.04.3-server-i386.iso

64位:http://mirrors.hust.edu.cn/ubuntu-releases//precise/ubuntu-12.04.3-server-amd64.iso
2) JDK:zookeeper需要java运行环境,这个建议1.6以上,配置好 JAVA_HOME 、CLASSPATH、 PATH 变量。

jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

环境变量配置,home目录下的.profile即可:
export JAVA_HOME=”/usr/lib/jvm/jdk1.7.0_40″
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export ZOOKEEPER_HOME=”/data/apache/zookeeper”
export PATH=”$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin”
3) zookeeper安装包:http://zookeeper.apache.org/releases.html 下载稳定版本,现在的版本是3.4.5

2. 各种解压,不多说,建议对解压后的目录(带有版本号的),建立软连接 zk ,方便后面的配置和升级。

我解压后放在: /data/apache/zookeeper下面,并修改文件权限为运行用户权限:
sudo chown -R zqgame:zqgame zookeeper
zqgame:zqgame是运行zookeeper的用户和用户所在组,查看权限:

$ ll
total 16
drwxr-xr-x 4 zqgame zqgame 4096 Jan 17 12:41 ./
drwxr-xr-x 11 root root 4096 Dec 13 14:49 ../
drwxr-xr-x 11 zqgame zqgame 4096 Nov 20 15:50 hadoop-2.2.0/
drwxr-xr-x 12 zqgame zqgame 4096 Jan 17 12:56 zookeeper/

3. 端口检查,通常使用的端口 2181,2888,3888 ,检查是否占用,占用则下面的配置中更改端口。
netstat -ano | grep 2181
4.单机多实例配置及启动:

#生成配置文件,配置文件名随便,这里是zoo.cfg
cp /data/apache/zookeeper/conf/zoo_sample.cfg /data/apache/zookeeper/conf/zoo.cfg
vi /data/apache/zookeeper/conf/zoo.cfg
配置文件内容:
tickTime=2000
initLimit=5
syncLimit=5
dataDir=/data/apache/zookeeper/data # 目录需要手工建立,存放 zk 数据,主要是快照
clientPort=2181
# dataLogDir事务日志存放目录,最好配置,事务日志的写入速度严重影响zookeeper的性能
dataLogDir=/data/apache/zookeeper/datalog
server.1=192.168.130.170:2889:3889
server.2=192.168.130.170:2890:3890
server.3=192.168.130.170:2891:3891
拷贝配置文件,生成三个配置文件:zoo-slave1.cfg: (另外两个 zoo-slave2.cfg 和 zoo-slave3.cfg)。

zoo-slave1.cfg需要为dataDir和dataLogDir设置目录,改动内容如下:

dataDir=/data/apache/zookeeper/data/slave1
dataLogDir=/data/apache/zookeeper/datalog/slave1
clientPort=2182
zoo-slave2.cfg :

dataDir=/data/apache/zookeeper/data/slave2
dataLogDir=/data/apache/zookeeper/datalog/slave2
clientPort=2183
zoo-slave3.cfg :

dataDir=/data/apache/zookeeper/data/slave3
dataLogDir=/data/apache/zookeeper/datalog/slave3
clientPort=2184
如上配置相同的本机IP,不同的端口号,这里配置了三个实例

如何区分到底是第几个实例呢,就要有个id文件,名字必须是myid

echo “1″ > /data/apache/zookeeper/data/slave1/myid
echo “2″ > /data/apache/zookeeper/data/slave1/myid
echo “3″ > /data/apache/zookeeper/data/slave1/myid
在三个窗口下迅速启动:

bin/zkServer.sh start zoo-slave1.cfg
bin/zkServer.sh start zoo-slave2.cfg
bin/zkServer.sh start zoo-slave3.cfg
查看zookeeper选出来的leader,通过下面的脚本,分别指定配置文件,就可以查看哪一个实例是leader:
bin/zkServer.sh status zoo-slave1.cfg
可以看下如下输出信息:
$ bin/zkServer.sh status zoo-slave2.cfg
JMX enabled by default
Using config: /data/apache/zookeeper/bin/../conf/zoo-slave2.cfg
Mode: leader
5、分布式部署:

与单机多实例差不多,不过不用三个目录,只需要一个目录,一个配置文件,三个不同IP,分发在不同的IP上,仍然是不同的myid。假设我有三台独立机器,那么zoo.cfg(只需要一个默认的配置文件zoo.cfg)配置文件如下所示:

tickTime=2000
initLimit=5
syncLimit=5
dataDir=/data/apache/zookeeper/data # 目录需要手工建立,存放 zk 数据,主要是快照
clientPort=2181
# dataLogDir事务日志存放目录,最好配置,事务日志的写入速度严重影响zookeeper的性能
dataLogDir=/data/apache/zookeeper/datalog
server.1=192.168.130.101:2888:3888
server.2=192.168.130.102:2888:3888
server.3=192.168.130.103:2888:3888
然后在三台机器上分别写入不同的myid:
#在192.168.130.101执行下面一条
echo “1″ > /data/apache/zookeeper/data/myid
#在192.168.130.102执行下面一条
echo “2″ > /data/apache/zookeeper/data/myid
#在192.168.130.103执行下面一条
echo “3″ > /data/apache/zookeeper/data/myid
这样分别在三台机器迅速启动zookeeper,此时不需要指定配置文件,默认配置文件就是zoo.cfg:
bin/zkServer.sh start
查看启动后的状态:

bin/zkServer.sh status
进入zookeeper的shell客户端:

bin/zkCli.sh #进入本机zookeeper的shell
进入指定机器的shell客户端:

bin/zkCli.sh -server 192.168.130.101
在查看启动状态有错误的情况下,稍等一会再查看,因为zookeeper启动后需要一点时间选出leader。

Storm对实时流数据进行处理

Storm是个实时的、分布式以及具备高容错的计算系统。hadoop也可以大批量的数据处理的,但是不实时。

Storm在保证高可靠性的前提下还可以让处理进行的更加实时!

Storm组件:

Storm集群主要由一个主节点和一群工作节点(worker node)组成,通过 Zookeeper进行协调。

Nimbus主节点:用于响应分布在集群中的节点,分配任务和监测故障。

Supervisor工作节点:用于收听工作指派并基于要求运行工作进程。

每个工作节点都是topology中一个子集的实现。而Nimbus和Supervisor之间的协调则通过Zookeeper系统或者集群。

Zookeeper是完成Supervisor和Nimbus之间协调的服务。而应用程序实现实时的逻辑则被封装进Storm中的“topology”。topology则是一组由Spouts(数据源)和Bolts(数据操作)通过Stream Groupings进行连接的图。

 

  1. Nimbus:负责资源分配和任务调度。
  2. Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。
  3. Worker:运行具体处理组件逻辑的进程。
  4. Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。

OpenTSDB监控系统的研究和介绍-转至淘宝

一、背景介绍

此次航天局为了让天宫一号与神舟九号载人交会顺利对接成功,采用了新一代数值天气预报系统为神九保驾护航。新一代数值天气预报系统是中国国内技术最先进、分辨率最高、预报时效最长的数值天气预报系统。新系统在火箭燃料加注、飞船发射和返回、载人交会对接等关键节点发挥重要作用。 同样,作为后台系统或网站的运维,我们同样需要类似的监控或预报系统快速发现各种不稳定现象和解决性能问题以达到SLA(服务等级协议)的标准。

你有没有厌倦那个拥有10年以上寿命的监控系统?它常常会出现这样的问题:1)中心化数据存储进而导致单点故障。2)有限的存储空间。3)数据会因为时间问题而变得不准确。4)不易于定制图形。5)不能扩展采集数据点到100亿级别。6)不能扩展metrics到K级别。7)不支持秒级别的数据。

这里介绍一淘使用的一个开源监控系统OpenTSDB,它可以解决上面的问题,它用hbase存储所有的时序(无须采样)来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集所有metrics,支持永久存储,可以做容量规划,并很容易的接入到现有的报警系统里。OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的metrics并进行存储、索引以及服务,从而使得这些数据更容易让人理解,如web化,图形化等。

对于运维工程师而言,OpenTSDB可以获取基础设施和服务的实时状态信息,展示集群的各种软硬件错误,性能变化以及性能瓶颈。对于管理者而言,OpenTSDB可以衡量系统的SLA,理解复杂系统间的相互作用,展示资源消耗情况。集群的整体作业情况,可以用以辅助预算和集群资源协调。对于开发者而言,OpenTSDB可以展示集群的主要性能瓶颈,经常出现的错误,从而可以着力重点解决重要问题。 继续阅读

如何打开多个终端进入Docker容器

Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH。如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可。当我启动了五个容器后,每个容器默认是没有配置SSH Server的,安装配置SSHD,映射容器SSH端口,实在是麻烦。 我发现很多Docker镜像都是没有安装SSHD服务的,难道有其他方法进入Docker容器?
有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。
使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。
nsenter 可以访问另一个进程的名字空间。
为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。
PID=$(docker inspect –format “{{ .State.Pid }}” <container>) //将<container>换成你的容器id
通过这个 PID,就可以连接到这个容器:
$ nsenter –target $PID –mount –uts –ipc –net –pid
更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中。
$ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
$ echo “[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker” >> ~/.bashrc; source ~/.bashrc
这个文件中定义了很多方便使用 Docker 的命令,例如 docker-pid 可以获取某个容器的 PID;而 docker-enter 可以进入容器或直接在容器内执行命令。 继续阅读

让XenServer 虚拟机开机自动启动

XenServer 6.2中的虚拟机默认是不会自动启动的(据说是为了防止在HA环境中出现某些异常),所以如果母鸡(宿主机)异常断电恢复启动后,所有的虚拟机均为关机状态。
但如果只是单台XenServer跑若干独立虚拟机,还是有必要让虚拟机开机自动启动的。
下面的方法可实现虚拟机开机自动启动:
一、用Citrix XenCenter登录并切换到Console —— Local Command Shell,或SSH工具(如putty、SecureCRT)登录到XenServer;

二、查看所有的pool并设置pool自动启动:
1、xe pool-list 查看所有的pool:

[root@xenserver ~]# xe pool-list
uuid ( RO)                : c7d7a7e4-77ad-e6a6-c935-4cba102881a8
          name-label ( RW): 
    name-description ( RW): 
              master ( RO): b35d1618-ad4e-4830-89da-d93788e9f082
          default-SR ( RW): 85280950-f08d-9e4d-5e51-f0ec4e221a7a

2、设置pool的自动启动:

[root@xenserver ~]# xe pool-param-set uuid=c7d7a7e4-77ad-e6a6-c935-4cba102881a8 other-config:auto_poweron=true

注意要把上面的c7d7a7e4-77ad-e6a6-c935-4cba102881a8换成你的pool的uuid。 继续阅读

LVS集群中的IP负载均衡技术

1.前言
在 前面文章中,讲述了可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出 IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术,我们将在文 章中详细描述它们的工作原理和各自的优缺点。 继续阅读

VirtualBox – upgrading Windows XP VMs to 2 CPU

VirtualBox – upgrading Windows XP VMs to 2 CPU

Symptom: If you had Windows XP VM with only 1 CPU created / virtalized earlier you won’t be able to see a second CPU when you add it later.

1. Make sure you have second CPU added via VM Virtual Box Manager and “Enable IO APIC” checkbox in System settings on Motherboard tab is checked.
2. You should see 2 CPUs in Device Manager , but when you run Task Manager, you’ll see only 1 CPU.
3. MS recommendation for Windows XP is to reinstall Windows (no surprise) as you can see it in this KB article: http://support.microsoft.com/kb/309283
4. Do not reinstall Windows, just run run the following from command prompt

rundll32 syssetup,SetupInfObjectInstallAction ACPIAPIC_MP_HAL 128 %windir%\inf\hal.inf
5. Reboot when prompted , log on back to Windows XP wait until you see “Windows has finished installing new devices. The software that supports your device requires that you restart your computer. You must restart your computer before the new setting will take effect” and press OK to reboot it again.
6. Done

如何做到linux系统安全

现在发行的各种linux中,red hat的企业版相对来说比较安全。对于一般的linux版本来说,我们如何保证系统的安全。或者系统安全需要关注哪些方面?这就是本次要讨论的要点。
linux系统的安全主要通过以下几个部分进行重点保护:文件系统保护、用户管理安全、进程的保护、以及日志的管理。
文件系统保护
首先linux系统中有这么一个概念:“一切皆文件”。那么对文件的管理就是通过文件系统进行实现的。如何对文件系统进行管理?linux中已经存在了基本的对文件权限的设置。现在主要介绍一款检测文件系统的工具。tripwire。
Tripwire是目前最为著名的unix下文件系统完整性检查的软件工具,这一软件采用的技术核心就是对每个要监控的文件产生一个数字签名,保留下来。当文件现在的数字签名与保留的数字签名不一致时,那么现在这个文件必定被改动过了。
那么知道了tripwire是干什么的了,现在介绍如何安转。不是一般软件安装都是三部曲吗?./configure    、 make、 make install
对,该软件的安装页需要上述几步,但是该软件还需要生成一个基准数据库。使用命令 #tripwire –init
该软件的工作原理是:首先使用特定的特征码函数,为需要监视的系统文件和目录建立一个特征数据库,这里的特征码就是使用了hash函数,使得任意长度的文件产生固定大小的值。通过保存该值与现有的文件或目录的hash值进行比较,如果结果相同,则说明该文件没有被改动,否则视文件被改动。
具体的安装步骤可以在网上查看。安装好之后就可以使用该工具对系统进行检查,默认是对整个系统进行检测,这里我们可以在某个目录下对文件进行检测,使用命令#tripwire –check.运行该命令之后会产生哪些文件是新增的、哪些改动过。
用户管理安全
用户管理这里主要涉及用户登录密码和用户管理。这里主要介绍一款工具来查看自己的密码是否相对安全。john the ripper

John the Ripper免费的开源软件,是一个快速的密码破解工具,用于在已知密文的情况下尝试破解出明文的破解密码软件,支持目前大多数的加密算法, 如DES、MD4、MD5等。它支持多种不同类型的系统架构,包括Unix、Linux、Windows、DOS模式、BeOS和OpenVMS,主要目 的是破解不够牢固的Unix/Linux系统密码。目前的最新版本是John the Ripper 1.7.3版,针对Windows平台的最新免费版为John the Ripper 1.7.0.1版。
John the Ripper的官方网站: http://www.openwall.com/john/

如何安装,首先解压源码包之后进入解压包中的src目录,然后执行make、make clean linux-x86-any.
安装好之后可以进入到run目录下进行测试,执行./john -test.该结果给出了解密需要的一些时间

上面的salts指用户数,针对传统的DES解密速度为413414次/秒。

测试完之后就可以进行解密,该命令含有很多参数,这里只讲述简单的方式。使用命令#./john -single “/etc/shadow”就可以显示存在/etc/shadow中的用户及对应密码。

该结果显示了我的密码之前已经被破解了(这运行之前我已经运行了该命令一次)。如果john已经破解了用户的密码,她就回将解密的密码放到当前目录的john.pot文件中。
比如查看这个文件显示
$6$V04bcTXNnRgUepZa$SFlIYTUDAkC9rlajU1oO4AozREGzGZrZvKocUkBtOOnlS9qJ/tt8VpV5jk9YIdEhPfIjs7LJ0IDUkI6sGxCZq0:wuyaalan
:前面的部分是用户的密文,后面是对应用户的密码。

当然如果简单的方式不能破解,可以使用字典解密。字典解密的成功与否是由字典是否完整为依据的。如果再有比较强的密码可以结合-rules、-incremental、-rexternal等等。基本命令的使用查看john手册。

进程安全
很多的入侵都是通过进程实现的,所以我们要时刻监视某些比较重要的进程。看其是否有不寻常的变化。这里主要通过linux里面的命令查看:主要有:who 、w 、ps、top
日志管理
如果系统被入侵了,并且入侵者在没修改日志的情况下,我们可以通过查看日志来回放入侵行为。
在linux中主要有3个主要的日志子系统:链接时间日志、进程统计日志、错误日志。
链接时间日志记录在/var/log/wtmp和/var/log/utmp中,用于跟踪谁何时登录了系统。其中utmp记录当前登录用户的信息;wtmp记录了用户登录系统和退出的时间记录。以上两个文件都是二进制文件。
进程统计日志给系统中的基本服务提供命令使用统计。
错误日志有syslogd后台进程记录,系统中各种守护进程、用户程序需要通过调用syslog向文件/var/log/messages记录相关事件。

用户程序以及内核如何通过syslog记录消息。
用户程序首先通过syslog库函数将用户消息通过syslogd后台进程输出到log文件。
内核里面产生日志通过printk将消息写入到一个环形缓冲区,如果环形缓冲区填满,printk在缓冲区的开始位置填写数据。然后通过系统调用syslog将消息发送到klogd后台进程,klogd监听    并得到内核消息之后,发送到syslogd后台进程,最后写入到log中。
这里使用的基本命令有:who、users、last、ac、lastlog等等。

xenserver的不足

1.xenserver6.1虚拟的2.4内核linux运行异常,不稳定,vm经常死机,启动过程中就死掉了。

2.io设备多个不能识别正常。

3.网卡型号不能指定切换。

XenServer虚拟机添加虚拟硬盘、CPU、内存

Citrix的XenCenter管理XenServer是很方便,但是有一些功能是不能实现的,我们还必须要借助命令来实现

一.给XenServer虚拟机添加一个虚拟硬盘

1>首先要查询要在其上创建VDI的sr的uuid

xe sr-list

2>创建vdi

xe vdi-create sr-uuid=<sr_uuid> name-label=<vdi_name> type=user virtual-size=100GiB   (单位为MiB,KiB,GiB)

3>创建VBD虚拟块设备,将VDI与vm关联起来

xe vbd-create vdi-uuid=<vdi_uuid> vm-uuid=<vm_uuid> device=1 type=disk mode=RW

device=1:为设备号从0开始

type=disk:如果添加光驱则为cd

mode=RW:为可读写

4>插入新建的vbd

xe vbd-plug uuid=<vbd_uuid>

二、修改vm的cpu数量
1、确认目前cpu数量
xe vm-param-list uuid=546f896a-ebe6-8071-2c31-b9214dc1d1b5 | grep VCPUs-
返回
VCPUs-params (MRW):
VCPUs-max ( RW): 2
VCPUs-at-startup ( RW): 1
VCPUs-number ( RO): 2
VCPUs-utilisation (MRO): 0: 0.000; 1: 0.000
可以修改的是VCPUs-max(系统最多使用的cpu)、VCPUs-at-startup ( 系统启动时使用的cpu,可以用来热添加cpu测试)
2、修改cpu数量
xe vm-param-set VCPUs-max=1 uuid=546f896a-ebe6-8071-2c31-b9214dc1d1b5

三、修改vm的memory数量
1、确认目前memory
xe vm-param-list uuid=546f896a-ebe6-8071-2c31-b9214dc1d1b5 | grep -i memory | more
返回
memory-actual ( RO): 0
memory-target ( RO): 1073741824
memory-static-max ( RW): 2147483648
memory-dynamic-max ( RW): 2147483648
memory-dynamic-min ( RW): 2147483648
memory-static-min ( RW): 16777216
需要修改的是     memory-static-max ( RW): 2147483648
memory-dynamic-max ( RW): 2147483648
memory-dynamic-min ( RW): 2147483648
目前为2G
2、修改memory
xe vm-param-set memory-dynamic-max=1073741824  memory-dynamic-min=1073741824  memory-static-max=1073741824
将内存改为1G