Chinaunix首页 | 论坛 | 博客
  • 博客访问: 854718
  • 博文数量: 188
  • 博客积分: 4433
  • 博客等级: 上校
  • 技术积分: 1905
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-14 07:14
个人简介

linux

文章分类

全部博文(188)

文章存档

2016年(6)

2015年(22)

2014年(18)

2013年(5)

2012年(125)

2011年(10)

2010年(2)

分类: LINUX

2014-06-12 22:42:12


我们的由 Puppet 配置来管理,服务器上线后由 puppet 完成初始化和配置等一系列工作(比如,静态 IP 配置,DNS 设置,NFS/SAN 挂载,LDAP/Kerberos 登录,安全加固配置,内核参数优化,规则配置等等),等初始化完成后开始运行,运行一段时间后会有一些需要自动和手动操作的任务(比如升级、重启、备份等),这时候我们使用 Fabric 来批量执行这些临时任务。


所以从这里可以看到 Puppet 和 Fabric 其实是两个不同性质的工具,看下面的归类可能会更清楚一些。Puppet 和 Fabric
两个的工作其实可以由一个工具 SaltStack(或
AnsibleWorks)完成,减少一个工具的使用会减轻一点负担(学习工具的人力成本、安装和配置工具的时间成本等等)。

和软件的安装、配置、升级等;
(Puppet, Chef, CFEngine, AnsibleWorks, SaltStack)

自动执行任务,比如定期备份,清除日志等;
(Fabric, AnsibleWorks, SaltStack)

手动执行任务,比如部署应用,升级、重启等。
(Fabric, Rake, AnsibleWorks, SaltStack)

SaltStack 采用 zeromq 消息队列进行通信,和 Puppet/Chef 比起来,SaltStack 速度快得多。还有一点我们喜欢 SaltStack 的地方是它是 写的,比 Puppet/Chef 这些 Ruby 工具更接近我们的能力圈。

安装主控服务器(salt master)


和大多数类似工具一样,SaltStack 需要在一台机器(主控)上安装服务器端软件(SaltStack 称之为 salt
master),在多台机器(受控)上安装客户端软件(SaltStack 称之为 salt
minion)。在主控机器上给下属(受控)发命令,在受控机器上接受和执行上级(主控)的命令。

上安装 salt master:


$ sudo add-apt-repository ppa:saltstack/salt
$ sudo apt-get update
$ sudo apt-get install salt-master

6.x 上安装 salt master:


# rpm -Uvh 
# yum update
# yum install salt-master

安装受控客户端(salt minion)

在 Ubuntu 上安装 salt minion:


$ sudo add-apt-repository ppa:saltstack/salt
$ sudo apt-get update
$ sudo apt-get install salt-minion

在 CentOS 6.x 上安装 salt minion:


# rpm -Uvh 
# yum update
# yum install salt-minion

安装完 salt minion 后记得修改配置文件,让 salt minion 指向 salt master 服务器地址:


$ sudo vi /etc/salt/minion
...
# Set the location of the salt master server, if the master server cannot be
# resolved, then the minion will fail to start.
master: saltmaster.vpsee.com
...

$ sudo restart salt-minion

在 master 上执行 salt-key list 就会看到有个 minion1.vpsee.com 请求加入受控,执行 -a 接受请求后,主控和受控之间的信任关系就建立起来了,主控就可以任意 “摆布” 受控了:


# salt-key list
Accepted Keys:
Unaccepted Keys:
minion1.vpsee.com
Rejected Keys:

# salt-key -a minion1.vpsee.com
The following keys are going to be accepted:
Unaccepted Keys:
minion1.vpsee.com
Proceed? [n/Y]

执行命令的例子

在主控机器上执行一个命令,让所有受控机器执行 hostname 命令:


# salt '*' cmd.run "hostname"
minion1.vpsee.com:
    minion1.vpsee.com

在主控机器上执行一个命令,让所有受控机器上执行内建 test.ping 命令:


# salt '*' test.ping
minion1.vpsee.com:
    True

还有一些内建命令可以尝试:


# salt '*' disk.usage
# salt '*' network.interfaces

执行状态的例子

开头的时候我们说了 SaltStack = Fabric + Puppet,上面 “执行命令的例子” 演示了 Fabric 类似的功能,这里要演示的是 Puppet 类似的功能,在主控上定义好系统配置应该有的状态,然后受控自动完成相应的操作和配置。

首先确定状态定义的文件应该放在什么地方,以下操作都在主控(salt master)上执行。检查 /etc/salt/master 文件的 file_roots 条目,默认是在 /srv/salt 下,如果没有这个目录还需要手动创建一个:


# vi /etc/salt/master
...
#file_roots:
#  base:
#    - /srv/salt
...

# mkdir /srt/salt

比如我们想在所有受控机器上安装 vim 软件包,并使用自己定义的 vimrc 文件:


# vi /srt/salt/vim.sls
vim:
  pkg.installed

/etc/vimrc:
  file.managed:
    - source: salt://vimrc
    - mode: 644
    - user: root
    - group: root

# vi /srt/salt/vimrc
syntax enable
set textwidth=79
set shiftwidth=4
set tabstop=4
set expandtab
set softtabstop=4
set shiftround
set fileencodings=utf-8
set encoding=utf8
set tenc=utf8

强制执行这个状态:


# salt '*' state.sls vim

再来一个例子,我们想在所有受控机器上安装 Glances,如何实现呢?


# vi /srt/salt/glances.sls
python-pip:
  pkg.installed

build-essential:
  pkg.installed

python-dev:
  pkg.installed

glances:
  pip.installed:
    - require:
      - pkg: python-pip

强制执行这个状态:


# salt '*' state.sls glances
...
minion1.vpsee.com:
----------
    State: - pip
    Name:      glances
    Function:  installed
        Result:    True
        Comment:   Package was successfully installed
        Changes:   Glances==1.7.1: Installed
...

阅读(1053) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~