zoukankan      html  css  js  c++  java
  • saltstack 服务器批量管理

    学习saltstack 服务器批量管理

    1、saltstack 简介

    SaltStack是一个开源的、新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维管理系统进行集成。相对于出道比较早的Puppet,SaltStack先天的优势就是简单、易用,可以非常快速的在团队中推广和使用,而且运行多平台。

    SaltStack目前拥有四大主要功能

    • 远程执行:就是在管理节点上实现在上百台、上千台机器上同时执行一个命令。
    • 配置管理:也可以称之为状态管理,你可以描述一个状态。例如,某台机器要安装Nginx软件包、Nginx必须是启动的状态、Nginx有一个配置文件(内容和某个地方的一样)。你用一种描述语法描述出来后交给SaltStack,SaltStack就可以帮你实现,而不用你手动进行Nginx软件包的安装、配置文件的修改、启动等。
    • 云管理:SaltStack有一个组件叫作salt-cloud,它可以帮你自动化的进行云主机的创建和管理,支持很多公有云或私有云,例如AWS、阿里云、HP云、OpenStack、CloudStack等。
    • 事件驱动:事件驱动基础设施是SaltStack最强大也是最神秘的功能,前面的远程执行和配置管理是最基础的的,事件驱动是指SaltStack在日常运行中可以产生和捕捉事件,并根据捕捉到的事件触发对应的操作。

    SaltStack的四种运行方式

    • Local:在本地运行或者说单台使用SaltStack
    • Minion/Master: 传统的客户端/服务器端(C/S)架构
    • Syndic: 使用代理实现架构扩展,用于管理更多的节点
    • Salt SSH: 无须安装客户端,直接通过SSH通信

    2、SaltStack演示操作

    1、首先需要准备至少两台的虚拟机
    192.168.16.130  master
    192.168.16.193  minion
    
    2、 修改2台机器的主机名,用于主机名通信,加速salt的命令执行
    hostnamectl set-hostname  master 
    hostnamectl set-hostname  minion1  
    
    3、关闭2台机器的iptables防火墙策略,防止端口拒绝
    iptables -F  					#清空防火墙规则
    systemctl stop firewalld 		#关闭防火强服务
    systemctl disable firewalld  	#禁止防火墙开机自启 
    
    4、分别安装2个软件
    • master 机器上装
    yum install salt-master -y 
    
    • minion 机器上装
    yum install  salt-minion -y 
    
    5、配置/etc/hosts文件,用于主机名通信
    192.168.16.190 	master
    192.168.16.193 	minion1
    
    6、修改salt的master和minion的配置文件
    • 在master机器上修改 /etc/salt/master 文件改为如下
    [root@master ~]# grep -vE "^$|#" /etc/salt/master
    interface: 0.0.0.0
    publish_port: 4505
    user: root
    worker_threads: 5
    ret_port: 4506
    
    • 在minion机器上修改 /etc/salt/minion 文件改为如下
    [root@minion1 ~]# grep -vE "^$|#" /etc/salt/minion
    master: master
    master_port: 4506
    user: root
    id: minion1
    
    5、分别启动salt-master和salt-minion
    [root@master ~]# systemctl start salt-master
    [root@minion1 ~]# systemctl start salt-minion
    
    6、查看密钥是否被读取到了

    在master上输入 salt-key -L 查看是否读取到了minion的信息

    [root@master ~]# salt-key -L
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    minion1
    Rejected Keys:
    
    7、分别检查2台机器的密钥信息,是否一致
    • 在master机器上输入 salt-key -f minion1
    [root@master ~]# salt-key -f minion1
    Unaccepted Keys:
    minion1:  4f:51:a8:33:9d:65:8d:81:0b:84:6f:08:f7:b6:23:9c
    
    • 在minion机器上输入 salt-call --local key.finger
    [root@minion1 ~]# salt-call --local key.finger
    local:
        4f:51:a8:33:9d:65:8d:81:0b:84:6f:08:f7:b6:23:9c
    
    8、接收minion1的密钥,使用 salt-key -a minion1 进行管理
    [root@master ~]# salt-key -a minion1 
    The following keys are going to be accepted:
    Unaccepted Keys:
    minion1
    Proceed? [n/Y] y
    Key for minion minion1 accepted.
    
    9、用salt的命令salt '*' test.ping 测试服务器是否存活
    [root@master ~]# salt '*'  test.ping
    minion1:
        True
    
    salt '*'  test.ping  #发送命令接口,ping一下被管理的机器,是否存活,返回true活着,负责挂掉了,或者salt-minion 服务器宕机了
    
    salt      					# 是核心管理命令
    "*" 					 	# 目标匹配 
    test.ping  					# 是test模块下的一个功能函数 
    
    10、对于密钥管理的命令如下
    salt-key  参数如下
    -L  	#查看KEY状态
    -A  	#允许所有
    -D  	#删除所有
    -a  	#认证指定的key
    -d  	#删除指定的key
    -r  	#注销掉指定key(该状态为未被认证)
    
    11、学习salt的命令接口
    • 测试命令 test.fib 生成斐波那契数列
    [root@master ~]# salt 'minion2'  test.fib 50
    minion2:
        |_
          - 0
          - 1
          - 1
          - 2
          - 3
          - 5
          - 8
          - 13
          - 21
          - 34
        - 2.14576721191e-06
    
    • salt '*' cmd.run 'touch /tmp/一给我里giao' --summary 输出salt命令执行结果的详细情况
    [root@master ~]# salt 'minion2'  cmd.run 'touch /tmp/一给我里giao'  --summary 
    
    [root@minion1 tmp]# ls
    vmware-root  一给我里giao
    
    12、远程安装nginx,以及启动nginx
    [root@master ~]# salt '*'  cmd.run  "systemctl status nginx"
    minion2:
        Unit nginx.service could not be found.
    ERROR: Minions returned with non-zero exit code
    
    [root@master ~]# salt 'minion*'  cmd.run  "yum install nginx -y"
    minion1:
        Loaded plugins: fastestmirror
        Repository epel is listed more than once in the configuration
        Repository epel-debuginfo is listed more than once in the configuration
        Repository epel-source is listed more than once
        .
        .
        .
    
    [root@master ~]# salt '*'  cmd.run  "systemctl status nginx"
    minion1:
        * nginx.service - The nginx HTTP and reverse proxy server
           Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
           Active: inactive (dead)
        
        Dec 25 22:13:21 minion1 systemd[1]: Unit nginx.service cannot be reloaded because it is inactive.
    ERROR: Minions returned with non-zero exit code
    

    minion1 上的信息:

    [root@minion2 tmp]# systemctl status nginx
    ● nginx.service - The nginx HTTP and reverse proxy server
       Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
       Active: inactive (dead)
    
    Dec 25 22:13:21 minion2 systemd[1]: U
    
    13、salt提供的软件安装模块,其实也是在远程调用yum命令而已
    [root@master 192.168.11.72 ~]$salt '*' pkg.install "nginx"
    #卸载minion上的nginx
    [root@master 192.168.11.72 ~]$salt '*' pkg.remove "nginx"
    #检查pkg包的版本
    [root@master 192.168.11.72 ~]$salt '*' pkg.version "nginx"
    
    14、salt提供的服务信息模块其实调用的是 systemctl 命令
    [root@master ~]# salt '*' service.start "redis"
    minion1:
        True
    
    
    [root@master ~]# salt '*' service.status "redis"
    minion1:
        True
    
    
    15、输出json格式的数据,以及yaml格式的数据
    [root@master ~]# salt '*' service.status "redis" --out=json
    {
        "minion1": true
    }
    
    16、salt采集服务器静态信息之grains模块,其实就是用python写的一个超大的字典
    [root@master ~]# salt '*' grains.item fqdn_ip4 --out=json
    {
        "minion2": {
            "fqdn_ip4": [
                "192.168.16.56"
            ]
        }
    }
    
  • 相关阅读:
    团队作业第五次——冲刺任务与计划
    2020-04-29 冲刺第一天
    OO Unit 2 Summary
    OO Unit 1 Summary
    团队项目-选题报告
    第一次结对编程作业
    第一次个人编程作业
    软件工程第一次作业
    软件工程2019第一次作业
    α阶段第九次会议
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/12101123.html
Copyright © 2011-2022 走看看