设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

SaltStack:能够灵活且可扩展的配置管理

2014-7-11 12:36| 发布者: joejoe0332| 查看: 4672| 评论: 0|原作者: infoq|来自: infoq

摘要: 配置管理作为基础使现代基础设施成为可能。在任何运维团队的工具箱中,都需要那些实现配置管理的工具,甚至对于很多开发团队也是如此。尽管所有的工 具旨在解决同样的基本问题集,但它们遵循了不同的看法,并表现出 ...

使用SaltStack在Red Hat上安装LAMP Stack

一个简单的SaltStack配置管理场景是安装LAMP stack。尽管在GitHub上有关于更完整采用SaltStack方案的组织实例(https://github.com/saltstack-formulas),但本例应能充分地展示了基本的方案,它是某一指定资源配置管理的预编写Salt状态。SaltStack方案和状态可以用于类似、:安装软件包、配置和启动一个服务、设置用户或权限以及其他常见任务。

由于该例子是为基于Linux的Red Hat环境设计的,其中包含了Python 2.6为现有基础安装的一部分,其Linux和Python部分已经完成了。所有需要做的就是配置一个Web应用程序并使用Apache Web服务器和MySQL数据库服务器。

开始前,我们要确保/srv/salt/目录存在于服务器中。

因为Web应用程序需要在使用前安装数据库服务器,我们将首先定义数据库服务器。


# /srv/salt/mysql.sls mysql: pkg.installed: - name: mysql-server service.running: - enable: True - require: - pkg: mysql-server

由于该例子除了声明外,并不包含其它任何文件。我们可以简单地将其保存为:/srv/salt/mysql.sls。但是Apache的安装比较复杂,因为它包含了一个配置文件。该文件通过使用file.managed功能被拷贝到web服务器上,支持了像templating这样加强的功能。为了适应这种情况,我们通过在/srv/salt/目录下创建apache/子目录,并创建以下文件:

# /srv/salt/apache/init.sls
httpd:
 pkg.installed:
  - name: httpd
   - file: httpd
 service.running:
  - enable: True
  - require:
   - pkg: httpd
 file.managed:
  - name: /etc/conf/httpd/httpd.conf
  - source: salt://httpd/httpd.conf
  - require:
   - pkg: httpd

由于更多的文件将添加到该方案中,我们创建另外一个目录来保存它们。该目录在包含一个init.sls文件的同时,也包含被管理的httpd.conf文件副本。这些文件现在会与top.sls文件绑定在一起。

# /srv/salt/top.sls
base:
 web*:
  - apache
 db*:
  - mysql

该文件就像胶水一样将这些状态连接在一起,定义了每个服务器上所应用的状态。需要注意的是该文件并没有涉及任何具体路径。因为top.sls定义了这类信息,因此SaltStack会到top.sls目录下查找。当SaltStack在top.sls中找到所需名称,接下来它会查找与其名称相对应的.sls文件(比如:mysql.sls)或者目录,该目录包含一个init.sls文件(比如:apache/init.sls)。

该定义确保了所有名字以“web”为开头的服务器(比如:web01,甚至是web01.example.com)都会有指定的Apache状态,还有任何名字以“db”开头的服务器(比如:db01或db01.example.com)都会有指定的MySQL状态。

将这些状态应用到所有服务器上,我们需要开始运行一个highstate命令:

salt ‘*’ state.highstate

Highstate是状态数据的结合(程序包、服务和文件等),它将应用到目的系统中。

然而,它也提出了另一个挑战。正如我上面所说的,这些web服务器如果没有可工作的数据库服务器的话,基本上是派不上什么用场。该场景在两者都存在的情况下可以正常工作,我们只要往组合中添加服务器就可以了。但对于一个干净的环境,没有任何服务器的情况该怎么办?

这时候就该轮到SaltStack流程引擎上场了。可以通过定义状态执行顺序来定义机器部署顺序:

# /srv/salt/myorchestration.sls
db_setup:
 salt.state:
  - tgt: ‘db*’
  - highstate: True
web_setup:
 salt.state:
  - tgt: ‘web*’
  - highstate: True
  - require:
   - salt: db_setup

这个文件定义了我们之前定义的web状态只有在我们所定义的数据库状态执行完后才能执行。启动该状态,可以执行:

salt-run state.orchestrate myorchestration

注意:在salt 0.17.x里,该命令为:

salt-run state.sls myorchestration

上述场景对初始配置一组服务器是可行的。如果按计划执行的话,它会通过配置漂移缓解问题:如果服务器上httpd.conf文件被修改了,SaltStack会将其放置回它需要在的地方,然后汇报给用户都要做那些修改,以回到正确的状态。但程序包的版本怎么办呢?

当pkg.installed状态被声明后,SaltStack会检测底层包管理器来查看该程序包是否已经安装。如果是,那么该状态就已经实现了, 不需要任何进一步行为。然而,如果该程序包还没被安装的话,SaltStack也会通知包管理器安装该程序包,通常会检测该程序包(依具体环境而异)的最 新可用版本,然后安装。

但随着时间的推移,这会造成一些服务器上的程序包所带版本不一样,由此产生的问题也将难以定位。其解决方案就是使用pkg.lastes状态取而代之,这样可以一直保证所有服务器上运行的程序包版本都是最新的。


httpd: pkg.latest: - name: httpd

尽管如此,这也可能产生问题。只要有新版本出来,所有服务器都会试图下载安装。如果你没有预料到会有新版本,且还没有时间执行内部测试的话,这会造成很严重的问题。所以最好还是锁定某一特定版本的程序包比较好:

httpd:
 pkg.installed:
  - name: httpd
  - version: 2.2.15

这保证了只有在状态声明中明确更新时,安装包才会被升级。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部