最近搭建了一个5节点的hadoop集群,这个过程中,涉及到各个节点间做ssh等效性、时间同步、服务启动和停止。我的做法是使用SCRT打开5个窗口远程到各个节点,然后在各个窗口中输入同样的命令,启动同样的服务。刚开始还好,到了后面我需要在各个节点上来回的切换用户,然后执行一些命令,然后再切换回root用户做一些授权的操作,尽管使用sudo可以提升普通用户的权限,但是我仍感到无比的麻烦,更重要的是目前是5个节点,如果集群是50个节点甚至是500个节点时,我仍要用这种方法吗?显然是愚蠢的做法!我渴望对着一个黑窗口,噼里啪啦一阵狂敲,所有的节点都嗷嗷叫,为了能够装Bigger,我决定学习一个自动化运维的工具。


    纠结:saltstack or puppet

    因为听说google内部使用的是puppet,所以刚开始晕着头把puppet搭建起来,尝试学习使用它,无奈一段时间以后,发现自己真是屌丝一枚,无法真正领略puppet的惊艳,更准确的来说,是因为自己内心迫切的想体验使用这样的工具来实现自己的统帅N多节点的快感,因此,放弃使用puppet,改为更为轻量的saltstack,而且配置简单,saltstack的核心功能是:配置管理和远程执行。你可以在master节点上一条命令,然后所有的节点都嘚啵嘚啵的开始执行,更重要的是你可以在master的控制台看到各个节点的返回结果。puppet 10 节点以上开始收费,而saltstack完全免费。学习的过程中,顺便记录下过程,方便自己也服务他人。


    好,开始正题,首先看我的环境:

    节点操作系统均为centos6.5,使用centos自带网络yum源+epel扩展源

    hadoop0.updb.com 192.168.0.100     master

    hadoop1.updb.com 192.168.0.101     minion

    hadoop2.updb.com 192.168.0.102     minion

    hadoop3.updb.com 192.168.0.103     minion

    hadoop4.updb.com 192.168.0.104     minion

    hadoop5.updb.com 192.168.0.105     minion

1、在master和minion上安装软件

    master:

yum install salt-master -y

    minion

yum install salt-minion -y

2、修改minion的配置文件,让minion能够找到master,每个minion都要修改,以hadoop1为例

vi /etc/salt/minion    ## minion配置文件中只修改两行
#master: salt -->改为master: 192.168.0.100
#id: -->改为id: hadoop1

    需要注意这里的id是给minion起的别名,作为唯一标识,各个minion不能重复

3、启动各minion节点的服务

/etc/init.d/salt-minion start

4、启动master节点服务,并通过认证minion keys实现master和minion之间的通信

/etc/init.d/salt-master start

    使用salt-key -L 列出所以没有认证,认证过,拒绝认证的证书

[root@hadoop0 ~]# salt-key -L
Accepted Keys:
Unaccepted Keys:
hadoop1
hadoop2
hadoop3
hadoop4
hadoop5
Rejected Keys:

    使用salt-key -A来签名所有状态为Unaccepted的证书

[root@hadoop0 ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
hadoop1
hadoop2
hadoop3
hadoop4
hadoop5
Proceed? [n/Y] y
Key for minion hadoop1 accepted.
Key for minion hadoop2 accepted.
Key for minion hadoop3 accepted.
Key for minion hadoop4 accepted.
Key for minion hadoop5 accepted.

    验证,发现所有的minion证书已经被master签名

[root@hadoop0 ~]# salt-key -L
Accepted Keys:
hadoop1
hadoop2
hadoop3
hadoop4
hadoop5
Unaccepted Keys:
Rejected Keys:

5、测试通信是否正常

[root@hadoop0 ~]# salt '*' test.ping
hadoop4:
    True
hadoop3:
    True
hadoop2:
    True
hadoop5:
    True
hadoop1:
    True

    返回结果全为True,通信功能正常。

6、牛刀小试,我想在master上查看所有节点的当前时间,如下

[root@hadoop0 ~]# salt '*' cmd.run "date"
hadoop1:
    Sun Oct 26 16:16:09 CST 2014
hadoop3:
    Sun Oct 26 08:16:08 GMT 2014
hadoop5:
    Sun Oct 26 08:16:09 GMT 2014
hadoop4:
    Sun Oct 26 08:16:09 GMT 2014
hadoop2:
    Sun Oct 26 08:16:08 GMT 2014

    

    看到这个结果,老脸盛开的像朵菊花,心里那个爽啊!saltstack既然号称神器,当然不可能只会显示时间,接下来,慢慢体会并会持续记录。ok,engoying!