• 系统自动化配置和管理工具:SaltStack


    我们的服务器由 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 的地方是它是 Python 写的,比 Puppet/Chef 这些 Ruby 工具更接近我们的能力圈。

    安装主控服务器(salt master)

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

    在 CentOS 6.x 上安装 salt master:

    1. # rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm 
    2. # yum update 
    3. # yum install salt-master 

    安装受控客户端(salt minion)

    在 CentOS 6.x 上安装 salt minion:

    1. # rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm 
    2. # yum update 
    3. # yum install salt-minion 

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

    1. $ sudo vi /etc/salt/minion 
    2. ... 
    3. # Set the location of the salt master server, if the master server cannot be 
    4. # resolved, then the minion will fail to start. 
    5. master: saltmaster.vpsee.com 
    6. ... 
    7. $ sudo restart salt-minion 


    配置 master(第二种,我是按这个配才生效)

    cp /etc/salt/minion{,.original}
    sed -i '12,12imaster: salt.example.org' /etc/salt/minion
    cat >> /etc/hosts <<'EOF'192.168.2.1    salt.example.org
    EOF
    service salt-minion start

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

    1. # salt-key list 
    2. Accepted Keys: 
    3. Unaccepted Keys: 
    4. minion1.vpsee.com 
    5. Rejected Keys: 
    6. # salt-key -a minion1.vpsee.com 
    7. The following keys are going to be accepted: 
    8. Unaccepted Keys: 
    9. minion1.vpsee.com 
    10. Proceed? [n/Y] 

    执行命令的例子

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

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

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

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

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

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

    执行状态的例子

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

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

    1. # vi /etc/salt/master 
    2. ... 
    3. #file_roots: 
    4. #  base: 
    5. #    - /srv/salt 
    6. ... 
    7. # mkdir /srv/salt 

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

    1. # vi /srv/salt/vim.sls 
    2. vim: 
    3. pkg.installed 
    4. /etc/vimrc: 
    5. file.managed: 
    6. - source: salt://vimrc 
    7. - mode: 644 
    8. - user: root 
    9. - group: root 
    10. # vi /srv/salt/vimrc 
    11. syntax enable 
    12. set textwidth=79 
    13. set shiftwidth=4 
    14. set tabstop=4 
    15. set expandtab 
    16. set softtabstop=4 
    17. set shiftround 
    18. set fileencodings=utf-8 
    19. set encoding=utf8 
    20. set tenc=utf8 

    强制执行这个状态:

    1. # salt '*' state.sls vim 

    再来一个例子,参考 “安装和使用系统监控工具 Glances” 一文,我们想在所有受控机器上安装 Glances,如何实现呢?

    1. # vi /srv/salt/glances.sls 
    2. python-pip: 
    3. pkg.installed 
    4. build-essential: 
    5. pkg.installed 
    6. python-dev: 
    7. pkg.installed 
    8. glances: 
    9. pip.installed: 
    10. - require: 
    11. - pkg: python-pip 

    强制执行这个状态:

    1. # salt '*' state.sls glances 
    2. ... 
    3. minion1.vpsee.com: 
    4. ---------- 
    5. State: - pip 
    6. Name:      glances 
    7. Function:  installed 
    8. Result:    True 
    9. Comment:   Package was successfully installed 
    10. Changes:   Glances==1.7.1: Installed 
    11. ... 



    salt '*' cmd.run "ifconfig" cmd.run 这个命令 用来做系统管理,就像cmd一样使用
    salt 192.168.170.159 grains.items   查看系统信息 




  • 相关阅读:
    Vue中v-on的指令以及一些其他指令
    Vue模板语法中数据绑定
    Vue介绍以及模板语法-插值
    JQ中的Ajax的封装
    跨域问题的解决?
    Ajax的快速入门
    如何使用npm的部分用法以及npm被墙的解决方法
    使用Node.js简单创建一个服务器
    机智云连接ESP8266--远程控制点亮RGB灯
    1、索引的概念和分类
  • 原文地址:https://www.cnblogs.com/tangbinghaochi/p/6296479.html
Copyright © 2020-2023  润新知