zoukankan      html  css  js  c++  java
  • Day 61 应用工具_Saltstack自动化运维

    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(一对一)速度更快

    Saltstack部署

    部署实验图

     salt-master 安装

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

    master:服务端

    Salt-minion 安装

    1、服务端与客户端都需要安装 yum 源

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

    本地安装:yum -y localinstall ./*

     minion:客户端

    修改配置文件

    服务端:

    [root@master ~]# cat /etc/salt/master |head -5
    master: 192.168.10.42
    user: root

    启动:systemctl start salt-master

    查看端口:netstat -ntpl   (端口:4505,4506)

    客户端:
    [root@minion01 ~]# head -10 /etc/salt/minion
    master: 192.168.10.42
    user: root
    id: minion-01

    启动:systemctl start salt-minion

    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是来接受消息的。

     

    minion管理

    minion架构
    [root@master srv]# salt-key -L
    Accepted Keys: 同意加入的
    Denied Keys: 未被加入的
    Unaccepted Keys: 未知的
    Rejected Keys: 被拒绝的

     服务端检测 minion:salt-key -L

     

    服务端添加认证互信:salt-key -a minion-01

     

     

    Salt-key

    •  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

    #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命令
    salt “*” test.ping
    *代表所有主机
    test.ping 命令


    #执行一个linux命令
    salt "*" cmd.run "whoami"
    cmd.run 告诉客户端执行什么命令


    #执行一个脚本
    salt “*” cmd.script “salt://脚本名” #/srv/salt 脚本路径 默认

    模块命令:salt "minion_name"  模块.函数   参数

    系统命名:salt "minion_name" cmd.run '命令'

    执行脚本:salt "minion_name" 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
    View Code

    查看正在运行的任务,找到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
    View Code

    根据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
    View Code

    使用saltstack部署环境

    业务部署

    1)部署业务
    2)升级业务
    3)配置文件升级业务
    4)服务管理

  • 相关阅读:
    从一个简单的例子谈谈package与import机制
    java 中public 类
    java 内部类
    使用Maven运行Java main的3种方式
    递归删除目录下.svn文件
    react-redux的connect()方法
    react 调用 function 的写法 及 解决 react onClick 方法自动执行
    react 路由传参
    react-redux 和 redux-saga 小结
    百度地图 放大或缩小后 中心点偏移(中心点不是在放大前的点)
  • 原文地址:https://www.cnblogs.com/ysging/p/12871101.html
Copyright © 2011-2022 走看看