• 自动化运维与Saltstack


    一、自动化运维介绍

    1、自动化运维产生背景

    传统的IT运维是将数据中心中的网络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行排查,找出问题并加以解决。但是,随着互联网+时代的到来,移动互联网、云计算和大数据技术得到了广泛应用,从而导致企业所管理的IT架构不断扩大,服务器、虚拟化、存储设备的数量越来越多,网络也变得更加复杂,业务流程越来越繁琐,传统的运维管理也越来越力不从心。

    运维的四大苦恼:

    运维的苦恼

    2、运维自动化

    自动化运维,可实现日常设备监控、主动发现问题、自动分析定位、基于标准化流程工具规范化处理、通过自动化运维操作工具处理修复等功能,最终实现监管的自动化运维。
      总结来说就是把人的工作给机器去完成,通过标准化快速分析和定位问题,将问题自动修复。

    • 实现哪些方面自动化
      监控自动化、数据采集自动化、数据分析自动化、日常巡检自动化、设备配置比对自动化、故障定位自动化、故障处理自动化、流程处理自动化、日常备份自动化、系统优化自动化、大批量配置自动化。

    3、自动化运维工具

    • Saltstack:https://www.saltstack.com
      基于 rubby 开发,c/s 架构,支持多平台,可管理配置文件、用户、cron 任务、软件包、系统服务等。分为社区版(免费)和企业版(收费),企业版支持图形化配置。
    • pupppet:https://puppet.com
      基于 python 开发,c/s 架构,支持多平台,比 puppet 轻量,在远程执行命令时非常快捷,配置和使用比 puppet 容易,能实现 puppet 几乎所有的功能。
    • Ansible:https://www.ansible.com
      更加简洁的自动化运维工具,不需要在客户端上安装 agent,基于 python 开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令

    三种运维工具技术特性比较:

    名称 Puppet SaltStack Ansible
    开发语言 Ruby python python
    客户端
    二次开发 不支持(自由度太低) 支持 支持
    通信验证
    同学加密 标准SSL协议 AES加密 OpenSSH(点对点加密不推荐,机器压力大)
    平台支持 AIX,BSD,HP-UX,Linux,Mac,Solaris,Windows BSD,Linux,Mac,Solaris,Windows AIX,BSD,HP-UX,Linux,Mac,Solaris
    配置文件格式 Ruby语法格式 YAML YAML
    Web UI 提供 提供 提供
    命令执行 不支持(配置模块可实现) 支持 支持

    二、Saltstack介绍

    • SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统。
    • Saltstack最主要的两个功能是:配置管理远程执行
    • Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器
    • 采用订阅者模式分布式管理工具,管理节点【发命令】——>被管理节点【去执行 返回结果】
    • 采用自定义协议zeromq 比SSH(一对一)速度更快

    1、Salt原理

    SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。
      minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信。
      master可以发送任何指令让minion执行了,salt有很多可执行模块, 如说cmd模块,在安装minion的时候已经自带了。它们通常位于你的python库中,这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执 salt '*' cmd.run 'uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回 结果。

    2、关于zeroMQ

    master监听4505和4506端 : 4505对应的是ZMQ的PUB system,用来发送消息; 4506对应的是REP system是来接受消息的。

    三、Saltstack部署

    准备两个节点,一个master节点(192.168.31.42),一个minion节点(192.168.31.43)。

    1、安装Saltstack

    (1)Salt-master安装

    yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
    yum install salt-master
    
    # 扩展功能安装
    yum install salt-syndic   分布式代理
    yum install salt-cloud    基于openstack来做的,它可以支持多种云的使用。 如:Aliyun、Azure、DigitalOcean、EC2、Google Compute Engine、HP Cloud、OpenStack
    

    (2)Salt-minion安装

    yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
    yum install salt-minion
    

    2、配置文件

    均是在配置文件中指定master和用户名。

    (1) master节点配置

    [root@master salt]# head -2 /etc/salt/master   # 仅在文件前添加了两行
    master: 192.168.31.42
    user: root
    

    (2)minion节点(192.168.31.43)配置

    [root@minion01 salt]# head -3 /etc/salt/minion
    master: 192.168.31.42
    user: root
    id: minion-01
    

    (3)启动Salt

    # 启动主节点salt
    [root@master salt]# systemctl start salt-master
    # 启动奴隶节点
    [root@minion01 salt]# systemctl start salt-minion
    

    3、minion管理

    # 查看所有minion-key
    [root@master selinux]# salt-key -L
    Accepted Keys:    # 同意加入的
    Denied Keys:    # 未被加入的
    Unaccepted Keys:     # 未知的
    Rejected Keys:     # 被拒绝的
    [root@master selinux]# salt-key -L
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    minion-01             # 已经被监测到的
    Rejected Keys:
    
    # minion加入架构
    [root@master selinux]# salt-key -a minion-01
    The following keys are going to be accepted:
    Unaccepted Keys:
    minion-01
    Proceed? [n/Y] y
    Key for minion minion-01 accepted.
    [root@master selinux]# salt-key -L
    Accepted Keys:
    minion-01      # 认领成功
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    

    四、minion管理

    1、如何使用salt查看手册

    (1)查看模块列表module

    [root@master selinux]# salt 'minion-01' sys.list_modules
    minion-01:
        - acl
        - aliases
        - alternatives
        ...
        - xfs
        - zenoss
    

    (2)查看指定module的function用法

    [root@master selinux]# salt 'minion-01'  sys.list_functions cmd
    minion-01:
        - cmd.exec_code
        - cmd.exec_code_all
        - cmd.has_exec
        - cmd.powershell
        - cmd.powershell_all
        - cmd.retcode
        - cmd.run
        - cmd.run_all
        - cmd.run_bg
        - cmd.run_chroot
        - cmd.run_stderr
        - cmd.run_stdout
        - cmd.script
        - cmd.script_retcode
        - cmd.shell
        - cmd.shell_info
        - cmd.shells
        - cmd.tty
        - cmd.which
        - cmd.which_bin
    [root@master ~]# salt 'minion-01'  sys.list_functions user
    minion-01:
        - user.add
        - user.chfullname
        - user.chgid
        - user.chgroups
        - user.chhome
        - user.chhomephone
        - user.chloginclass
        - user.chother
        - user.chroomnumber
        - user.chshell
        - user.chuid
        - user.chworkphone
        - user.delete
        - user.get_loginclass
        - user.getent
        - user.info
        - user.list_groups
        - user.list_users
        - user.primary_group
        - user.rename
    

    (3)查看指定模块的详细用法

    [root@master selinux]# salt 'minion-01' sys.doc cmd 
    [root@master ~]# salt 'minion-01' sys.doc user
    
    # 查看模块下的具体某个方法
    [root@MiWiFi-R4C-srv ~]# salt 'minion-01' sys.doc user.add
    user.add:
        Add a user to the minion
        CLI Example:
            salt '*' user.add name <uid> <gid> <groups> <home> <shell>
    

    (4)添加用户示例

    # vipw命令编辑用户密码文件
    [root@minoin01 ~]# vipw    # 查看确认没有xxx用户
        vipw: /etc/passwd is unchanged
    
    # 用salt的user模块创建用户
    [root@master ~]# salt "minion-01" user.add xxx
    minion-01:
        True
    
    # 查看minion上用户是否创建
    [root@minion01 ~]# cat /etc/passwd | tail -n 1
    xxx:x:1000:1000::/home/xxx:/bin/bash
    

    2、salt-key密钥管理(通常在master端执行)

    salt-key [options]
    salt-key -L              ##查看所有minion-key
    salt-key -a <key-name>   ##接受某个minion-key
    salt-key -d <key-name>   ##删除某个minion-key
    salt-key -A              ##接受所有的minion-key
    salt-key -D              ##删除所有的minion-key
    

    3、查看minion状态

    #查看minion的状态
    [root@master selinux]# salt-run manage.status
    down:
    up:
        - minion-01
    
    #查看minion在线状态
    [root@master selinux]# salt-run manage.up
    - minion-01
    
    #查看minion离线状态
    [root@master selinux]# salt-run manage.down
    

    4、文件分发 salt-cp

    salt-cp 分发文件到minion上,不支持目录分发,通常在master运行。

    # 拷贝单个件
    [root@master salt]# salt-cp minion-01 /root/salt-repo-latest-2.el7.noarch.rpm /tmp 
    minion-01:
        ----------
        /tmp/salt-repo-latest-2.el7.noarch.rpm:
            True
    
    # 拷贝单个文件到minion的目标目录下并改名
    [root@master salt]# salt-cp minion-01 /root/anaconda-ks.cfg /tmp/abc 
    minion-01:
        ---------- 
        /tmp/abc:
            True
    

    5、minion本地执行命令:salt-call

    salt-call minion本地执行命令,自己执行可执行模块,不是通过master下发job。

    [root@minion01 tmp]# salt-call test.ping
    local:
        True
    

    6、salt命令分类和总结

    批量操作(*)

    # 模块命令
    salt "minion_name"   模块.函数   参数
    salt "*" test.ping       # *代表所有主机      test.ping 命令
    
    # linux系统命令(cmd.run)
    salt "*" cmd.run "hostname"          #  cmd.run 告诉客户端执行什么命令
    
    # 执行脚本(cmd.script)
    salt "*" cmd.script “salt://脚本名”      # /srv/salt 脚本路径 默认
    

    脚本执行示例:

    [root@master salt]# pwd
    /srv/salt
    [root@master salt]# vim test.sh
    [root@master salt]# chmod 755 test.sh
    [root@master salt]# vim test.sh      
    [root@master salt]# ./test.sh  
    master
    
    
    2018-12-28
    this is a test for salt
    [root@master salt]# salt "*" cmd.script 'salt://test.sh'
    minion-01:
        ----------
        pid:
            12322
        retcode:
            0
        stderr:
        stdout:
            master
            
            
            2018-12-28
            this is a test for salt
    

    7、查看salt minion的执行状态

    (1)查看minion正在执行的操作

    # 第一个master终端,执行系统命令
    [root@master salt]# salt '*'  cmd.run 'yum -y update'
    # 第二个master终端,查看salt minion执行情况
    [root@master ~]# salt-run jobs.active
    20181228112409202939:
        ----------
        Arguments:
            - yum -y update
        Function:
            cmd.run
        Returned:
        Running:
            |_
              ----------
              minion-01:
                  12329
        StartTime:
            2018, Dec 28 11:24:09.202939
        Target:
            *
        Target-type:
            glob
        User:
            root
    

    (2)执行、查看、杀死进程和清空缓存

    # 第一个master终端执行
    [root@master salt]# salt '*'  cmd.run 'pip install scrapy' 
    
    # 第二个master终端
    # 查看正在运行的任务,找到jid 
    [root@master ~]#  salt 'minion-01' saltutil.running
    minion-01:
        |_
          ----------
          arg:
              - pip install scrapy
          fun:
              cmd.run
          jid:
              20181228113349565844
          pid:
              44973
          ret:
          tgt:
              *
          tgt_type:
              glob
          user:
              root
    
    # 根据jid杀掉任务
    [root@master ~]# salt 'minion-01' saltutil.kill_job  20181228113349565844
    minion-01:
        Signal 9 sent to job 20181228113349565844 at pid 44973
    
    # 清除minion缓存
    [root@master ~]# salt '*' saltutil.clear_cache
    minion-01:
        True
    
  • 相关阅读:
    Leetcode 1414. 和为 K 的最少斐波那契数字数目(贪心)
    A ConvNet for the 2020论文阅读笔记
    Leetcode 957. N 天后的牢房(暴力)
    洛谷P1879 [USACO06NOV]Corn Fields G(状压DP)
    CF1553D Backspace(双指针)
    26
    37
    36
    3.4
    3.3
  • 原文地址:https://www.cnblogs.com/xiugeng/p/10178714.html
Copyright © 2020-2023  润新知