saltstack

系统自动化配置和管理工具saltstack采用zeromq消息队列进行通信,和puppet、chef比起来,saltstack速度更快,还有一些我们喜欢的saltstack的地方是他是python写的,比puppet、chef这些ruby工具更接近我们的能力圈。
       服务器由puppet配置管理工具来管理,服务器上线后由puppet完成初始化和配置等一系列工作(比如,静态IP,DNS设置,nfs/san挂载,内核参数优化,防火墙规则配置)初始化完成,需要手动操作的任务(比如备份,升级,重启),这时候我么使用Fabric来批量执行这些临时任务。
Puppet和Fabric两个的工具都可以由saltstack完成。
操作系统和软件的安装,配置,初始化等
  puppet,chef,ansible,saltstack
自动执行任务,比如备份,清除日志等
  fabric,ansible,saltstack
手动执行任务,比如部署应用,升级,重启,校验文件系统等
fabric,ansible,saltstack

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

saltstack安装:


      安装完salt-minion后记得修改配置文件,让salt-minion指向salt-master服务器地址:
sudo Vim /etc/salt/minion
找到#mastaer:salt
修改成master: XXX-XXX-XXX-XXx//改成你的master对服务器地址(冒号后面必须带有空格,否则验证不通过),最后重启服务,配置生效。(假如master和minion在一台机器上,此时master:127.0.0.1)
       命名一个昵称给你的服务器,查找到#id行,移除#号,增加一个nameid(这个名字可以是任何字符)
service salt-minion resatrt 

在sal-master上执行 salt-key list 或者salt-key -L  (查看发起请求的minion的主机名称hostname )就会看到有个请求加进来
然后执行 salt-key -A  (同意所有连接),或者认证这个证书使用sudo salt-key -a +minion名字。  至此maser和minion的配置完成。
测试:
salt-master: salt '*' test.ping  
通配符“*”代表了所有minion
然后看到所有salt-minion都返回True,则说明整个系统配置成功
     执行命令:在salt-master上执行 “salt id  系统命令”来返回minion结果。

saltstack=puppet+fabric
安装和使用系统监控工具Glances:


saltstack分组及其测试:
        线上安装配置相同的或者相近的服务为一组,方便批量安装管理,编         辑/etc/salt/mater  添加如下内容:
每组可以一有多个服务,每个服务之间用逗号隔开。
nodegroups:
      wwwgroup: 'aaa,bb'
      dbgroup: 'aaa'
分组测试:  
salt -N  xxxgroup cmd.run “free -m”           salt -N ubuntu cmd.run "apt-get install rcconf"

     saltstack安装和基本配置已经完成,可以通过saltstack批量执行系统命令,包括重启,重启服务,查看系统负载,添加用户和删除用户等。

centos用户 选择rpm
首先安装rpm源:
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
 epel中关于salt的包:
   salt-api.noarch : A web api for to access salt the parallel remote execution system
   salt-master.noarch : Management component for salt, a parallel remote execution system
   salt-minion.noarch : Client component for salt, a parallel remote execution system
   salt.noarch : A parallel remote execution system
   salt-cloud.noarch : Generic cloud provisioning tool
1:服务端
1:安装
          yum install salt-master -y
      2:配置文件
           /etc/salt/master
           配置文件选项介绍:  http://docs.saltstack.com/ref/configuration/master.html
           最基本字段:
                interface: 服务端监听IP
      3:运行
           调试模式:
                salt-master  -l debug
           后台运行:
                salt-master  -d  
           作为CentOS管理员,我选择:
                /etc/init.d/salt-master start
      4:注意事项:
           1:监听端口
                 4505(publish_port):salt的消息发布系统
                 4506(ret_port):salt客户端与服务端通信的端口,主要用来接受消息
            所以确保客户端能跟服务端的这2个端口通信
2:客户端
      1:安装
           yum install salt-minion -y
      2:配置文件
           /etc/salt/minion
           配置文件选项介绍: http://docs.saltstack.com/ref/configuration/minion.html
           最基本字段:
                master: 服务端主机名
                id: 客户端主机名(在服务端看到的客户端的名字)
      3:运行
           调试模式:
                salt-minion  -l debug
           后台运行:
                salt-minion  -d  
           作为CentOS管理员,我选择:
                /etc/init.d/salt-minion start
      4:注意事项:
           1:minion默认和主机名为salt的主机通信
           2:关于配置文件
               salt的配置文件均为yaml风格
               $key: $value     #注意冒号后有一个空格 
3:基础知识
        1:salt minion和master的认证过程:
            (1) minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成minion.pem(private key), minion.pub(public key),然后将minion.pub发送给master
            (2) master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了

        如下:
            启动服务端:
                /etc/init.d/salt-minion restart
            启动客户端:
                /etc/init.d/salt-minion restart
            服务端查看key:
            salt-key 
                Accepted Keys:
                Unaccepted Keys:
                minion1
                Rejected Keys:
            服务端接受key
                salt-key -a minion1
            测试:
                salt 'minion1' test.ping
                    minion1:
                        True
      附:salt更多命令及手册
            salt '*' sys.doc
saltstack的master端监听 45054506端口,4505为salt消息发布系统,4506为salt客户端与
服务端通信的端口;salt客户端不监听端口, 客户端启动后,会主动连接 master 端注册,然后一直保持该 TCP 连接, master 通过这条 TCP 连接对客户端控制,如果连接断开, master 对客户端就无能为力了,当客户端连接断开后,客户端会定期连接master。
saltstack配置文件的修改:
     master端修改配置文件:
vi  /etc/salt/master
interface: 115.28.2.1   #此处是server端监听的地址。
auto_accept: True     #此处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能
    启动 master
/etc/salt/master  -d   #后台启动
/etc/salt/master   #前台启动,方便调试
     minion端配置文件的修改:
#vi /etc/salt/minion
master: 115.28.2.1   #这里改成你的master服务器地址
id : web01    #建议这里修改成主机名,便于master端分辨
  
#在配置文件末尾加入下面内容,每隔5分钟自动同步master配置,效果等同于在客户端执行salt-call state.highstate或在server端执行 salt '*'state.highstate
schedule:
   highstate:
     function : state.highstate
     minutes: 5
    启动 minion
/etc/salt/minion  -d  #后台启动
/etc/salt/minion   #前台启动,方便调试
注:minion启动后,自动会生成公钥私钥,并把公钥发送到master端。minion不监听端口,全靠和master保持长连接,可通过 netstat  -an| grep  ES来查看是否有连接。
3.salt-key 证书管理:
Master端证书存放路径:/etc/salt/pki/master/minions
 
salt-key  -L             #查询所有接收到的证书
salt-key  -a <证书名>    #接收单个证书
salt-key  -A             #接受所有证书
salt-key  -d <证书名>    #删除单个证书
salt-key  -D             #删除所有证书

4.salt-run 检查客户端up状态
salt-run manage.status  #查看所有客户端up/down状态
salt-run manage.up     #只显示up状态的客户端
salt-run manage.down   #只显示down状态的客户端


5salt-cp批量拷贝文件
在Master端执行:
语法:
salt- cp  [options]  '<target>' SOURCE DEST
    
示例:
  salt- cp  '*'   /etc/hosts    /etc/hosts  #把master上的hosts文件分发到所有主机。

6.saltstack定时同步

可以把salt-call state.highstate命令放在minion端的定时任务中,来进行自动请求同步。

也可以把salt '*' state.highstate放在master端的定时任务中,来进行自动推送到所有机器。

也可以在/etc/salt/minion配置文件中加入如下内容,如下是每隔5分钟同步,效果一样

          schedule:
           highstate:
                  function :state.highstate
                  seconds:300

7.saltstack自动分发目录
[root@yang salt] # cat /srv/salt/top.sls
base:
   "DG-Server*" :
     - ssh_key.key
- zabbix.zabbix
#在top.sls文件中指定哪些主机访问哪些目录
  
[root@yang salt] # cat /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/scripts :      #指定minion端同步后生成的目录
   file .recurse:
source : salt: //zabbix/zabbix_scripts     #指定要master端同步的原始目录,以后只要把想要分发的文件放在这个目录中,就会自动同步了。
- dir_mode: 755
- file_mode: 744
  
#用dir_mode和file_mode来设置文件和目录的权限
8.saltstack自动分发文件
如下配置,当文件出现变更时,匹配DG-Server开头的主机,同步文件到这些minion上,并设置为对应的文件权限
[root@yang salt] # cat /srv/salt/top.sls
base:
   "DG-Server*" :
     - ssh_key.key
- zabbix.zabbix
  
[root@yang zabbix] # cat /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/etc/zabbix_agentd .conf.d /UserParameter .conf:    #指定在minion端生成的文件名
file .managed:
   source : salt: //zabbix/UserParameter .conf     #指定在master同步的原始文件
   - backup: minion            #当文件发生变化时,都会把原文件备份,备份文件目录:/var/cache/salt/minion/file_backup/
   - mode: 744
   - user: root
   - group: root

9.saltstack进程状态管理

saltstack常用功能也就批量执行命令或脚本,批量分发文件,自动同步目录与文件,整体来说很简单实用。但salt有一个缺点,zeromq虽性能很高,但稳定性略差,经常出现minionmaster连接断开的情况,导致有些服务器会执行命令失败,这个请大家要注意。


10.saltstack之salt-ssh
     salt-ssh介绍:salt-ssh是0.17.0新出现的一个功能,它依赖ssh来进行远程命令执行,好处是不需要在客户端安装minion,也不需要安装master(直接安装salt-ssh这个包即可),有些类似ansible工具,有些时候你需要salt-ssh(例如:条件不允许安装minion,不用长期管理某个minion),最重要的是salt-ssh并不是单纯的ssh工具,它支持salt大部分的功能。
       备注:  需要注意的是,salt-ssh 并没有继承原来的通讯架构 (ZeroMQ),也就是说它的执行速度啥的都会比较慢
   
  salt-ssh 安装:

去 github 下载 salt 的源安装即可

# git clone https://github.com/saltstack/salt.git
# python setup.py install
     
  定义roster,让salt-ssh生效:
<Salt ID>:   # ID,用于salt-ssh引用
      host:    # IP或域名
  user:    # 登录用户名
       passwd:  # 登录密码

    # 可选参数
     port:    # 自定义的端口
     sudo:    # 是否允许sudo到root,默认不允许
     priv:   # ssh登录key路径,默认为salt-ssh.rsa
     timeout:  # 等待超时

注意 windown,linux上同样存在这个问题,原因是salt使用MQ通信,而重启minion,则原有的socket链路失效,会产生新的,而当前在master上使用的依然是旧的,导致输出有问题的,所以不推荐进行重启操作,如果在linux上,推荐使用salt-ssh来做这件事。

重新安装salt: 需要删除/etc/salt/pki文件。如不行在删除/var/run/salt-minion.pid.






你可能感兴趣的:(saltstack)