zoukankan      html  css  js  c++  java
  • 自动化运维之saltstack的使用安装

    SaltStack 简介

      SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。遵守Apache2协议,

      通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

    基本原理:

      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库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。

    主要功能

    • Saltstack最主要的两个功能是:配置管理与远程执行

    • Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器

    • Saltstack已经支持Docker相关模块

    • 在友好地支持各大云平台之后,配合Saltstack的Mine实时发现功能可以实现各种云平台业务的自动扩展

    SaltStack 常用模块

    1.pkg 模块

    pkg 模块的作用是包管理,包括增删更新。

    2.file 模块

    file 模块的作用是管理文件的操作,包括同步文件、设置权限和所属用户组、删除文件等操作。

    3.cmd 模块

    cmd 模块的作用是在 minion 上执行命令或脚本。

    4.user 模块

    user 模块的作用是管理系统账户的操作。

    5.service 模块

    service 模块的作用是管理系统服务的操作。

    6.cron 模块

    cron 模块的作用是管理 cron 服务操作。

    salt部署基本架构

    在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。

    salt架构中的一种就是master > minion。

    在远程执行系统中,salt用python通过函数调用完成任务。

    运行salt依赖包

    复制代码
    python
    zeromq
    pyzmp
    pycrypto
    msgpack-python
    yaml
    jinja2
    复制代码

    解决依赖包最简单的办法就是用安装包管理器,yum工具

    服务器环境准备

    服务器环境 centos7(master) centos7(master)

    ip地址

    192.168.178.131 192.168.178.132

    身份

    master slave

    软件包

    salt-master salt-minion

    准备工作

    1.修改虚拟机ip地址为静态地址,并且确保可上网

    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no"
    BOOTPROTO="static"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens33"
    UUID="7d4f9ede-810f-4976-a01b-250b845c99cc"
    DEVICE="ens33"
    ONBOOT="yes"
    IPADDR=192.168.11.131
    NETMASK=255.255.255.0
    GATEWAY=192.168.11.1
    DNS1=119.29.29.29
    master网卡配置
    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no"
    BOOTPROTO="static"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens33"
    UUID="f9fc5929-8594-466e-a041-34caee8c1e32"
    DEVICE="ens33"
    ONBOOT="yes"
    IPADDR=192.168.11.132
    NETMASK=255.255.255.0
    GATEWAY=192.168.11.1
    DNS1=119.29.29.29
    slave网卡配置
    查看linux的dns文件
    cat /etc/resolv.conf  #如果本地机器出现 “未知的域名” 报错时,请检查这个dns文件是否配置了dns服务器
    #配置dns就是写入
    nameserver 119.29.29.29
    #常见dns服务器
    8.8.8.8 google
    114.114.114.114 
    119.29.29.29 腾讯
    8.8.4.4 
    223.5.5.5  #阿里巴巴的dns服务器
    223.6.6.6  #同上
    DNS配置文件
    #设置好本地/etc/hosts解析
    vim /etc/hosts#写入以下解析记录
    192.168.12.44 master
    192.168.12.45 slave
    #关闭服务器安全策略
    /etc/init.d/iptables stop
    iptables -F
    #关闭服务器selinux
    getenforce #检测selinux是否开启
    setenforce 0 #临时关闭selinux
    #使用sed永久关闭selinux(此步骤需要重启linux)
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    /etc/hosts和关闭服务器安全策略

    2.安装saltstack

     salt软件包需要epel源的支持,那么下载

    EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum clean all #清空缓存
    yum makecache #生成yum缓存

     安装好epel源就可以开始安装salt了

    查看salt包
    yum list salt

    安装salt-master # 中心服务器安装salt-master yum install salt-master -y
    安装salt-minion
    yum install salt-minion -y

    salt端口

    安装好salt之后开始配置,salt-master默认监听两个端口:

    4505   publish_port 提供远程命令发送功能
    4506   ret_port     提供认证,文件服务,结果收集等功能
    确保客户端可以通信服务器的此2个端口,保证防火墙允许端口通过。因此在测试环境直接关闭防火墙。

    配置文件

    salt-master的配置文件是/etc/salt/master
    salt-minion的配置文件是/etc/salt/minion
    配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面

    配置salt-master---->/etc/salt/master

    复制代码
     # 绑定到本地的端口
     interface: 0.0.0.0
    # salt运行的用户,影响到salt的执行权限
    user: root
    
    #s alt的运行线程,开的线程越多一般处理的速度越快,但一般不要超过CPU的个数
    worker_threads: 10
    
    # master的管理端口
    publish_port : 4505
    
    # master跟minion的通讯端口,用于文件服务,认证,接受返回结果等
    ret_port : 4506
    
    # 如果这个master运行的salt-syndic连接到了一个更高层级的master,那么这个参数需要配置成连接到的这个高层级master的监听端口
    syndic_master_port : 4506
    
    # 指定pid文件位置
    pidfile: /var/run/salt-master.pid
    复制代码

    salt-master配置结果

    复制代码
    [root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
    interface: 0.0.0.0  #绑定到本地的0.0.0.0地址
    publish_port: 4505  #管理端口,命令发送
    user: root      #运行salt进程的用户
    worker_threads: 5  #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
    ret_port: 4506  #执行结果返回端口
    pidfile: /var/run/salt-master.pid #pid文件位置
    log_file: /var/log/salt/master  #日志文件地址

    #自动接收minion的key
    auto_accept: False
    复制代码

    salt-minion的配置文件

    # minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
    id: slave   # 特别注意次数,是一个坑,id:与后面的名字之间一定要加一个空格,否则报错
     
    # salt运行的用户权限
    user: root
     
    # master的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
    master : master
     
    # master通信端口
    master_port: 4506
     
    # 备份模式,minion是本地备份,当进行文件管理时的文件备份模式
    backup_mode: minion
     
    # 执行salt-call时候的输出方式
    output: nested
     
    # minion等待master接受认证的时间
    acceptance_wait_time: 10
     
    # 失败重连次数,0表示无限次,非零会不断尝试到设置值后停止尝试
    acceptance_wait_time_max: 0
     
    # 重新认证延迟时间,可以避免因为master的key改变导致minion需要重新认证的syn风暴
    random_reauth_delay: 60
     
    # 日志文件位置
    log_file: /var/logs/salt_minion.log

    salt-minion的配置结果

    复制代码
    [root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$
    master: master
    master_port: 4506
    user: root
    id: slave
    acceptance_wait_time: 10
    log_file: /var/log/salt/minion
    复制代码

     启动salt-master和salt-minion

    复制代码
    systemctl start salt-minion
    systemctl start salt-master

    #检查salt状态
    systemctl status salt-minion
    systemctl status salt-master
    复制代码

    在master上接收minion秘钥

    在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。

    在salt-master执行

    salt-key命令用于管理mionion秘钥

    复制代码
    [root@master ~]# salt-key -L
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    slave    #此时已经出现slave
    Rejected Keys:
    复制代码

    此时slave已经出现在unaccepted keys中,说明minion已经和master联系,并且master已经获取了minion的公钥,等待下一步指令。

    检查master和minion的秘钥匹配

    在master上执行

    [root@master ~]# salt-key -f slave
    Unaccepted Keys:
    slave:  0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea

    然后可以在minion上获取minion的秘钥

    [root@slave ~]# salt-call --local key.finger
    local:
        0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea

    因此可确认秘钥匹配,在master上接收秘钥

    复制代码
    [root@master ~]# salt-key -a slave
    The following keys are going to be accepted:
    Unaccepted Keys:
    slave
    Proceed? [n/Y] y
    Key for minion slave accepted.
    复制代码

    确认接收秘钥后,检验minion秘钥是否被接收

    复制代码
    [root@master ~]# salt-key -L
    Accepted Keys:
    slave
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    复制代码

      这样,秘钥接收就完成了,就可以执行通过中心节点master远程控制执行子slave了

    第一条salt命令

    [root@master ~]# salt '*' test.ping
    slave:
        True

    这是条很简单的探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活。

    查看salve的ip和主机名

  • 相关阅读:
    CSS hack——不同浏览器的CSS应对法
    IE6对CSS支持Bug收集
    jQuery
    jQuery学习备忘
    MSSQLSERVER之发布-分发-订阅
    利用Resgen.exe 批量生成resources文件
    多语言处理
    c# winform 打包部署 自定义界面 或设置开机启动
    C#修改文件夹权限
    VS2008 Windows Form项目安装包生成详解
  • 原文地址:https://www.cnblogs.com/zhaopanpan/p/9507922.html
Copyright © 2011-2022 走看看