zoukankan      html  css  js  c++  java
  • Saltstack

    Saltstack介绍

    01 自动化运维介绍
    02 Saltstack介绍
    03 Saltstack部署
    04 使用saltstack部署环境
    
    # 运维自动化介绍
    背景
    传统的IT运维是将数据中心中的网络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行排查,找出问题并加以解决。但是,随着互联网
    +时代的到来,移动互联网、云计算和大数据技术得到了广泛应用,从而导致企业所管理的IT架构不断扩大,服务器、虚拟化、存储设备的数量越来越多,网络也变得更加复杂,业务流程越来越繁琐,传统的运维管理也越来越力不从心
    
    
    # 自动化运维
    自动化运维,可实现日常设备监控、主动发现问题、自动分析定位、基于标准化流程工具规范化处理、通过自动化运维操作工具处理修复等功能,最终实现监管治自动化运维。
    
    自动化
    监控自动化
    数据采集自动化
    数据分析自动化
    日常巡检自动化
    设备配置比对自动化
    故障定位自动化
    故障处理自动化
    流程处理自动化
    日常备份自动化
    系统优化自动化
    大批量配置自动化
    
    # 自动化运维工具
    saltstack:https://docs.saltstack.com/en/latest/
    puppet:https://puppet.com/?_ga=2.223205342.4314246.1540783578-2053614486.1540783578
    ansible:https://www.ansible.com/
    
    
    # Saltstack介绍
    • SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统
    • Saltstack最主要的两个功能是:配置管理与远程执行
    • Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利利器
    • 采用订阅者模式的分布式管理工具 管理节点【发命令】——>被管理节点 【去执行 返回结果】
    • 采用自定义协议zeromq 比SSH(一对一)速度更快
    
    
    ## 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执行模块函数,并返回结果。
    
    关于zeroMQ
    master监听4505和4506端口:
    4505对应的是ZMQ的PUB system,用来发送消息;
    4506对应的是REP system是来接受消息的。
    
    # Saltstack部署
    ## 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
    
    ## Salt-minion 安装!
    • yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
    • yum install salt-minion
    
    
    ## 修改配置文件!
    [root@master ~]# cat /etc/salt/master |head -5
    master: 192.168.10.42
    user: root
    
    [root@minion01 ~]# head -10 /etc/salt/minion
    master: 192.168.10.42
    user: root
    id: minion-01
    
    
    
    ## 启动 管理 认领
    [root@master salt]# systemctl start salt-master
    [root@master salt]# netstat -ntpl    
    [root@master salt]# salt-key -L 
    
    [root@master salt]# salt-key -A
    ...
    ...
    
    [root@minion01 salt]# systemctl start salt-minion
    
    
    
    ## minion管理!
    minion加入架构
    [root@master srv]# salt-key -L
        Accepted Keys: 同意加入的
        Denied Keys: 未被加入的
        Unaccepted Keys: 未知的
        Rejected Keys: 被拒绝的
    
    
    Salt-key!
    • salt-key -L 列列出来认大哥的
    • salt-key -A 所有小弟都认
    • salt-key -a 单个认
    • salt-key -D 剔除所有小弟
    • salt-key -d 删除某个
    
    
    ## 如何使用salt查看手册
        查看模块列列表module
        salt 'minion-01' sys.list_modules
        查看指定module的function用法
        salt 'minion-01' sys.list_functions cmd
        查看指定模块的详细用法
        salt 'minion-01' sys.doc cmd
    
    ## 查看minion状态!
        # 查看minion的状态
        [root@master salt]# salt-run manage.status
        down:
        up:
            - minion-01
    
        # 查看minion在线状态
        [root@master salt]# salt-run manage.up
        - minion-01
    
        #查看minion不在线状态
        [root@master salt]# salt-run manage.down
    
    
    
    ## 文件分发 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    
    
    
    ## minion本地执行命令:salt-call!
        #salt-call minion本地执行命令,自己执行可执行模块,不是通过master下发job
        [root@minion01 tmp]# salt-call test.ping
        local:
            True
    
    
    
    ## 批量操作!
        # 执行单个salt命令
        [root@master salt]# salt "*" test.ping
        *代表所有主机
        test.ping 命令
    
        # 执行一个linux命令
        [root@master salt]# salt "*" cmd.run "whoami"
        cmd.run 告诉客户端执行什么命令
    
        # 执行一个脚本
        [root@master salt]# salt "*" cmd.script "salt://脚本名"       #/srv/salt 脚本路径默认
    
    
    
    
    ## 查看salt minion在执行什么操作!
    [root@master ~]# salt-run jobs.active
    20181029231137078329:
        ----------
        Arguments:
            - yum -y update
        Function:
            cmd.run
        Returned:
        Running:
            |_
            ----------
            minion-01:
                2651
        StartTime:
            2018, Oct 29 23:11:37.078329
        Target:
            minion-01
        Target-type:
            glob
        User:
            root
    
    
    
    ## 查看正在运行的任务,找到jid!
    [root@master ~]# salt 'minion-01' saltutil.running
    minion-01:
        |_
        ----------
        arg:
            - yum -y update
        fun:
            cmd.run
        jid:
            20181029231137078329
        pid:
            2651
        ret:
        tgt:
            minion-01
        tgt_type:
            glob
        user:
            root
    
    
    
    ## 根据jid杀掉任务!
    [root@master ~]# salt 'minion-01' saltutil.kill_job 20181029231137078329
    minion-01:
        Signal 9 sent to job 20181029231137078329 at pid 2651
    
    ## 清除minion缓存
    [root@master ~]# salt '*' saltutil.clear_cache
    minion-01:
        True
    
    
    
    ## 使用saltstack部署环境    
    1)部署业务
    2)升级业务
    3)配置文件升级业务
    4)服务管理
    
    
    
    
    
    
    ## saltstack
    传统的IT运维是将数据中心中的网络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行排查,找出问
    题并加以解决。但是,随着互联网+时代的到来,移动互联网、云计算和大数据技术得到了广泛应用,从而导致企业所管理的IT架构不断扩大,服务器、虚拟化、存储设备的数量越来越
    多,网络也变得更加复杂,业务流程越来越繁琐,传统的运维管理也越来越力不从心IT环境异构:系统软硬件种类繁多,导致运维人员运维监控压力大,日常工作量繁重。
    故障发生后,运维工程师花费大量精力排查问题,"无法快速和准确的定位问题,治标不治本。由于设备数量巨大,日常巡检占用大量时间,导致工作效率低下,事倍功半。
    工作机制混乱,面对庞大的IT系统,缺乏有效、自动化的运维流程,缺乏有效的绩效考核依据。
    缺少自动运维机制:IT部门人员过少,导致运维压力大;由于误操作,导致"无法挽回的灾难;大而全的系统,对运维人员技术能力要求越来越高。
    系统内数据非常重要,如果遗漏漏备份,系统瘫痪/误操作等出现时会导致"无法估量的后果。自动化运维,可实现日常设备监控、主动发现问题、自动分析定位、基于标准化流程工具规范
    化处理、通过自动化运维操作工具处理修复等功能,最终实现监管治自动化运维。
    
    
    监控自动化zabbix
    数据采集自动化 elk
    数据分析自动化
    日常巡检自动化
    设备配置比对自动化
    故障定位自动化 blueking
    故障处理自动化
    流程处理自动化
    日常备份自动化
    系统优化自动化 kickstart cobbler
    大批量配置自动化
    分布式管理工具
    saltstack:https://docs.saltstack.com/en/latest/
    puppet:https://puppet.com/?_ga=2.223205342.4314246.1540783578-2053614486.1540783578
    ansible:https://www.ansible.com/
    
    
    # 为什么不用shell
    1.交互式 进程模式 多进程 机器受不了
    2.开发周期长 没有第三方
    SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统
    Saltstack最主要的两个功能是:配置管理与远程执行
    Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利利器
    
    # 分布式工具
    管理节点 被管理节点  管理节点【发命令】——>被管理节点 【去执行 返回结果】
    几款软件 使用的协议 ssh   ssh 加密 一对一 所以比较慢 点对点
    自定义协议 zeromq 管理和被管理建立长连接 pub—>sub 模式发布消息 发布者—> 订阅者  发布消息 传输消息 加密 字典方式发布
    
    
    # salt 工作原理
    SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列列通信
    minion上线后先与master端联系,把自己的pub key发过去,这时master端通过saltkey-L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信
    master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。
    这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt '*'cmd.run 'uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。
    master监听4505和4506端口,4505对应的是ZMQ的PUBsystem,用来发送消息,4506对应的是REP system是来接受消息的。
    
    slat
    master minion
    主人 奴隶
    奴隶去找主人 minion 找 master
    自己也可以管理自己
    1) 安装包
    2)配置文件
    3)调整平台
    4)应用
    5)部署一个环境使用salt
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    #install
    master salt-master
    minion salt-minion
    yum install https://repo.saltstack.com/yum/redhat/salt-repolatest-
    1.el7.noarch.rpm
    ◦ sudo yum install salt-master #master
    ◦ sudo yum install salt-minion #minion
    yum install salt-ssh
    yum install salt-syndic 分布式代理
    yum install salt-cloud 也是基于openstack来做的,它可以支持多种云的使用。
    比如:Aliyun、Azure、DigitalOcean、EC2、Google Compute Engine、HP
    Cloud、OpenStack、等等
    #安装后
    查看每台主机的主机名
    cat /etc/hosts
    主机名和ip对应
    ==========================
    #0.配置文件
    /etc/salt/master #
    /etc/salt/minion #节点
    ##节点配置
    yaml语言
    master: IP #注意冒号空格不能少
    id: 主机名 #注意冒号空格不能少
    ==========================
    #1.启动
    关闭防⽕火墙 selinux
    使用端口 4505 4506
    第一次启动
    salt-master -l debug
    salt-minion -l debug
    正常
    service salt-master start
    service salt-minion start
    [root@master salt]# salt-key
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    minion-01
    Rejected Keys:
    [root@master salt]# 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 salt]# salt-key -L
    Accepted Keys:
    minion-01
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    ==========================
    #2.master认小弟
    salt-key -L 列列出来认大哥的
    salt-key -A 所有小弟都认
    salt-key -a 单个认
    salt-key -D 剔除所有小弟
    salt-key -d 删除某个
    ==========================
    使用salt
    #如何使用salt 看手册
    查看模块列列表module
    salt 'minion-01' sys.list_modules
    查看指定module的function用法
    salt 'minion-01' sys.list_functions cmd
    查看指定模块的详细用法
    salt 'minion-01' sys.doc cmd
    #查看minion
    #查看minion的状态
    [root@master salt]# salt-run manage.status
    down:
    up:
    - minion-01
    #查看minion在线状态
    [root@master salt]# salt-run manage.up
    - minion-01
    #查看minion不在线状态
    [root@master salt]# salt-run manage.down
    #salt-cp 分发文件到minion上,不支持目录分发,通常在master运行
    #考本单个文件
    [root@master salt]# salt-cp minion-01 /root/salt-repolatest-
    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
    #salt-call minion本地执行命令,自己执行可执行模块,不是通过master下发job
    [root@minion01 tmp]# salt-call test.ping
    local:
    True
    #查看salt minion在执行什么操作
    [root@master ~]# salt-run jobs.active
    20181029231137078329:
    ----------
    Arguments:
    - yum -y update
    Function:
    cmd.run
    Returned:
    Running:
    |_
    ----------
    minion-01:
    2651
    StartTime:
    2018, Oct 29 23:11:37.078329
    Target:
    minion-01
    Target-type:
    glob
    User:
    root
    #查看正在运行的任务,找到jjd
    [root@master ~]# salt 'minion-01' saltutil.running
    minion-01:
    |_
    ----------
    arg:
    - yum -y update
    fun:
    cmd.run
    jid:
    20181029231137078329
    pid:
    2651
    ret:
    tgt:
    minion-01
    tgt_type:
    glob
    user:
    root
    #根据jid杀掉任务
    [root@master ~]# salt 'minion-01' saltutil.kill_job
    20181029231137078329
    minion-01:
    Signal 9 sent to job 20181029231137078329 at pid 2651
    #清除minion缓存
    [root@master ~]# salt '*' saltutil.clear_cache
    minion-01:
    True
    #执行单个salt命令
    salt "*" test.ping
    *代表所有主机
    test.ping 命令
    #执行一个linux命令
    salt "*" cmd.run "whoami"
    cmd.run 告诉客户端执行什么命令
    #执行一个脚本
    salt "*" cmd.script "salt://脚本名" #/srv/salt 脚本路径默认
    salt "*" grains.items 查看minion的硬件信息
    模块命令
    salt "minion_name" 模块.函数 参数
    系统命令 cmd.run
    salt "*" cmd.run 'hostname'
    #执行一个脚本
    salt "*" cmd.script "salt://脚本名" #/srv/salt 脚本路径默认

  • 相关阅读:
    Promise、Async、await
    Generator
    模块化
    继承
    原型
    == vs ===
    深浅拷贝
    this
    nodejs中搭建服务器
    sql中constraint主要是增加约束
  • 原文地址:https://www.cnblogs.com/bubu99/p/12927661.html
Copyright © 2011-2022 走看看