zoukankan      html  css  js  c++  java
  • saltstack

    saltstack
    Saltstack是一个大型分布式的配置管理系统(安装升级卸载软件,检测环境),也是一个远程命令执行系统。saltstack的两大功能:远程执行和配置管理。
    Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具。由Master和Minion构成,通过ZeroMQ进行通信。
     
    Saltstack的master端监听4505与4506端口,4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端控制,如果连接断开,master对客户端就无能为力了。当然,客户端若检查到断开后会定期的一直连接master端的。
    自动化运维:
    0>需求分析
    1>机房设备上下架
    2>系统初始化
    3>应用环境初始化
    4>应用的的部署
    5>代码发布
    6>服务监控
    7>数据备份
    -------------------------------------------------
    安装saltstack
    redhat6.5平台
    服务器端:master ---- 客户端:minion
    需要epel,yum源:
    rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    yum clean all
    或者:
    rpm -ivh epel-release-6-8.noarch.rpm
    ----------------------------------------
    saltstack源:
    [saltstack]
    name=SaltStack
    baseurl=https://repo.saltstack.com/yum/redhat/6/$basearch/latest/
    skip_if_unavailable=True
    gpgcheck=1
    gpgkey=https://repo.saltstack.com/yum/redhat/6/$basearch/latest/SALTSTACK-GPG-KEY.pub
    enabled=1
    enabled_metadata=1
    ---------------------
    所依赖的包:
    PyYAML27.x86_64 0:3.11-2.el6 libyaml.x86_64 0:0.1.3-4.el6
    python27.x86_64 0:2.7.13-2.ius.el6 python27-babel.noarch 0:0.9.4-5.2.el6
    python27-chardet.noarch 0:2.2.1-3.el6 python27-crypto.x86_64 0:2.6.1-4.el6
    python27-futures.noarch 0:3.0.3-2.el6 python27-jinja2.noarch 0:2.8.1-2.el6
    python27-libs.x86_64 0:2.7.13-2.ius.el6 python27-markupsafe.x86_64 0:0.11-11.el6
    python27-msgpack.x86_64 0:0.4.6-2.el6 python27-psutil.x86_64 0:5.2.2-1.ius.el6
    python27-pycurl.x86_64 0:7.19.0-10.el6 python27-requests.noarch 0:2.6.0-4.el6
    python27-six.noarch 0:1.9.0-3.el6 python27-tornado.x86_64 0:4.2.1-3.el6
    python27-urllib3.noarch 0:1.10.2-2.el6 python27-zmq.x86_64 0:14.5.0-3.el6
    -----------------------------------------
    master端
    yum -y install salt-master
    修改配置文件:
    vim /etc/salt/master
    interface: 192.168.1.113 #此处是server端监听的地址。
    auto_accept: True     #此lsof -i:4505
    lsof -i:4506
    处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能。
    file_roots: #指定salt文件根目录位置。
    base:
    - /srv/salt/
    prod:
    - /srv/salt/prod/states
    创建相应目录:
    mkdir -p /srv/salt/prod/states
    master端启动
    service salt-master restart
    /etc/init.d/salt-master
    minion端:
    yum -y install salt-minion
    修改配置文件:
    vim /etc/salt/minion
    master: masterIP         #绑定master主机IP地址。
    id: vm4          #更改被控端主机识别id,建议用主机名来配置
    启动服务:
    service salt-minion restart
    /etc/init.d/salt-minion restart
    -----------------------------------------------------------
    master端:
    (1)证书管理:
    master端证书存放位置:/etc/salt/pki/minion
    salt-key -L #查询所有接收到的证书
    salt-key -a <证书名>   #接收单个证书
    salt-key -A #接受所有证书
    salt-key -d <证书名>   #删除单个证书
    salt-key -D #删除所有证书
    (2)salt实时批量基本操作:
    man salt
    salt '*'test.ping # 测试所有主机的连通性(此处*为通配符)
    salt -E '*' cmd.run 'free -m' # -E使用正则,cmd.run执行远程命令
    salt '*' cmd.run "df -h" #查看所有主机的磁盘信息
    salt '*' cmd.script salt://hello.sh 
    salt '*' cmd.script salt://scripts/runme.sh 'arg1 arg2 "arg 3"'
    #cmd.script执行一个脚本,即把本地脚本拷贝到远程主机上执行,hello.sh要放在指定的文件存放路径,默认是/srv/salt/
    salt '*'  state.highstate #向客户端推送master端配置。       
    salt '*' cmd.run 'df -h '  -t 5 #超时控制(默认5s)
        
    (3)salt分组管理
    vim /etc/salt/master.d/group.conf
    nodegroups:
      group1: 'L@DG-Server-27,DG-Server-28'
      group2: 'L@qsmind'
    vim /etc/salt/master
    nodegroups:
    group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
    group2: 'G@os:Debian and foo.domain.com'
    group3: 'G@os:Debian and N@group1'
    group4:
    - 'G@foo:bar'
    - 'or'
    - 'G@foo:baz'
    (4)salt-run检查客户端up状态
    salt-run manage.status #查看所有客户端up/down状态
    salt-run manage.up #只显示up状态的客户端
    salt-run manage.down #只显示down状态的客户端
    (5)salt-cp批量拷贝文件
    语法: salt-cp [options] '<target>' 源 目标
    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自动分发目录
    指定同步的目录后,以后文件只需放到该目录下就会自动同步到minion端。
    vim /srv/salt/top.sls
    base: #在top.sls文件中指定哪些主机访问哪些目录
      "DG-Server*": #匹配到DG-Server*的minion被控端
    - ssh_key.key
    - zabbix.zabbix
      
    vim /srv/salt/zabbix/zabbix.sls
    /usr/local/zabbix/scripts: #指定minion端同步后生成的目录
      file.recurse:
    - source: salt://zabbix/zabbix_scripts #指定要master端同步的原始目录,以后只要把想要分发的文件放在这个目录中,就会自动同步了。
    - dir_mode: 755 #用dir_mode和file_mode来设置文件和目录的权限
    - file_mode: 744
      
    (8)saltstack自动分发文件
    如下配置,当文件出现变更时,匹配DG-Server开头的主机,同步文件到这些minion上,并设置为对应的文件权限。
    vim /srv/salt/top.sls
    base:
      "DG-Server*":
    - ssh_key.key
    - zabbix.zabbix
      
    vim /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
    salt文件状态管理模块file.managed
    vim top.sls               
    base:  #这里指定的环境是base,所以这个top.sls在/srv/salt/base目录下
      "*": #“*”是所有主机的意思,指定单个主机直接写“salt-minion1”
        - system.hosts #这里指调用了那些sls配置文件,“点”在这里是目录分级
    #也就是system没有可以下的hosts.sls配置文件
      
    vim system/hosts.sls
    /etc/hosts: #这个是配置ID和文件存放位置,是不可重复的
      file.managed: #这里调用了“file.managed”salt的文件管理模块
        - source: salt://system/files/hosts #source是指定文件源,"salt://"是指salt项目下文件
        - mode: 644 #文件权限644
        - user: root #文件用户属主
        - group: root #文件的用户组
    # salt 'salt-minion1' state.highstate#salt '执行节点' 执行模块   
    下面是执行结果
    salt-minion1: #执行节点
    ----------
    ID: /etc/hosts   #配置ID
    Function: file.managed #模块
    Result: True #执行结果True为成功
    Comment: File /etc/hosts updated #文件执行操作【更新】
    Started: 14:15:55.120499 #执行命令开始时间
    Duration: 24.284 ms #执行的时长
    Changes: #是否产生更改
     ----------
         diff:
           --- 
    +++ 
    @@ -1,2 +1,4 @@
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomainlocalhost6 localhost6.localdomain
    +salt-master 10.0.0.11 #在这个带有“+”号的行是增加的,"-"号为减少行
    +salt-minion1 10.0.0.21
      
    Summary
    ------------
    Succeeded: 1 (changed=1) #执行成功1个,有一个文件状态发生更改
    Failed: 0 #执行失败0个
    ------------
    Total states run: 1 #执行状态个数
  • 相关阅读:
    867. Transpose Matrix
    896. Monotonic Array
    Java并发包中线程池ThreadPoolExecutor原理探究
    Java中的线程协作之Condition
    Java中的读写锁
    Java中的锁——Lock和synchronized
    Java中的队列同步器AQS
    Java并发编程基础之volatile
    leetcode-数组中只出现一次的数字
    leetcode-比特位计数
  • 原文地址:https://www.cnblogs.com/skyzy/p/9226805.html
Copyright © 2011-2022 走看看