zoukankan      html  css  js  c++  java
  • ansible与saltstack简介

    课前回顾

    在web上使用mariadb客户端,通过命令 mysql -u wp_zh -p1 -h 10.0.0.51 可以检测web与数据库的是否可以连接
    
    批量管理要选择批量管理工具,ansible saltstack
    使用:
    	1.批量命令执行
    	2.批量安排服务
    	3.批量配置同步
    	4.批量任务执行
    	5.批量代码部署
    作用:
    	1.提高工作效率
    	2.提高工作准确度
    	3.减少维护成本
    	4.减少重复性工作
    优势:
    1.远程执行
    批量执行远程命令,可以对多台主机进行远程操作
    2.配置管理
    批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理,和启停
    3.事件驱动
    通过Ansible的模块,对服务进行不同的事件驱动
    比如:
    1)修改配置后重启
    2)只修改配置文件,不重启
    3)修改配置文件后,重新加载
    4)远程启停服务管理
    4.管理公有云
    通过API接口的方式管理公有云,不过这方面做的不如saltstack.
    saltstack本身可以通过saltcloud管理各大云厂商的云平台。
    5.二次开发
    因为语法是Python,所以便于运维进行二次开发。
    6.任务编排
    可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署
    7.跨平台,跨系统
    
    ansible不需要下载客户端,不需要启动,但是要做优化
    
    #centos8使用dnf命令安装ansible
    [root@m01 ~]# yum provides dnf
    dnf-4.0.9.2-1.el7_6.noarch : Package manager
    
    

    自动化工具对比

    同类型软件对比:

    ​ 1.puppet学习难,安装ruby环境难,没有远程执行功能

    ​ 2.ansible轻量级,大规模环境下只通过ssh会很慢,串行的,一般不需要安装客户端,但是也可以选择去安装客户端。不需要启动,只支持Python2

    ​ 3.saltstack,一般选择sall的c/s结构模式,需要安装客户端,通过端对端的方式连接服务器,但是也可以不安装客户端,通过ssh协议连接服务器,salt-master和salt-minion是并行的,大规模批量操作的时候,会比ansible快一些,底层使用的是zero-MQ消息队列,但是比较占资源**,saltstack既有Python2和Python3

    tI77GR.md.png

    zero-MQ(message queue)

    消息队列:相当于一个缓冲

    堆栈:(先进后出)

    面试回答 ansible和saltstack对比

    1. ansible是基于ssh协议来工作的,但是saltstack也有支持ssh协议的模式
    2. 但是一般来说,选择saltstack就是为了使用c/s结构的模式(速度快)
    3. 因为saltstack底层有一个zmq消息队列
    4. ansible基于ssh,如果ssh服务挂了,ansible也不能工作,但是saltstack可以,saltstack会使用两个端口4505,4506
      saltstack官网

    saltstack 安装包下载

    tI7LM6.md.png
    tI7bxx.md.png

    saltstack服务端

    cs/s结构中,服务端与客户端的连接不需要sshd进程,甚至可以开启或者关闭ssh服务

    saltstack服务端可以管理所有的saltstack客户端

    [root@m01 ~]# yum install -y salt-master salt-minion
    [root@m01 ~]# rpm -q salt-master salt-minion
    salt-master-2015.5.10-2.el7.noarch
    salt-minion-2015.5.10-2.el7.noarch
    
    [root@m01 ~]# rpm -ql salt-master
    /etc/salt/master
    /usr/bin/salt
    /usr/bin/salt-cp
    /usr/bin/salt-key
    /usr/bin/salt-master
    /usr/bin/salt-run
    /usr/bin/salt-unity
    /usr/lib/systemd/system/salt-master.service
    [root@m01 ~]# rpm -ql salt-minion
    /etc/salt/minion
    /usr/bin/salt-call
    /usr/bin/salt-minion
    /usr/lib/systemd/system/salt-minion.service
    
    #取消注释(指定可以连接谁)(选做)
    [root@m01 ~]# vim /etc/salt/master 
    interface: 0.0.0.0
    #启动
    [root@m01 ~]# systemctl start salt-master.service
    
    #取消注释,指定master(指定客户端寻找的ip)
    [root@m01 ~]# vim /etc/salt/minion
    master: 10.0.0.61
    #启动
    [root@m01 ~]# systemctl start salt-minion.service
    
    #查看saltstack端口(4505发送,4506接收)
    [root@m01 ~]# netstat -lntup  
    tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      1415/python                 
    tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      1423/python
    
    [root@m01 ~]# salt-key 
    Accepted Keys:		#接受的
    Denied Keys:		#拒绝的
    Unaccepted Keys:	#没有被允许的key
    m01
    Rejected Keys:		拒绝的
    
    [root@m01 ~]# salt-key -A	#接受所有客户端密匙
    The following keys are going to be accepted:
    Unaccepted Keys:
    m01
    web01
    Proceed? [n/Y] y
    Key for minion m01 accepted.
    Key for minion web01 accepted.
    [root@m01 ~]# salt-key -a xx	#可以选择接受指定客户端密匙
    
    [root@m01 ~]# salt-key 
    Accepted Keys:
    m01
    web01
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    
    #检查服务端和客户端是否可以连通
    [root@m01 ~]# salt '*' test.ping
    web01:
        True
    m01:
        True
    
    
    

    saltstack客户端

    客户端的使用不需要端口

    [root@web01 ~]# yum install -y salt-minion
    
    #修改配置文件
    [root@web01 ~]# vim /etc/salt/minion 
    master: 10.0.0.61
    
    #启动saltstack客户端
    [root@web01 ~]# systemctl start salt-minion.service 
    
    #以内saltstack很占服务器资源,所以不用的时候需要关闭
    [root@m01 ~]# systemctl stop salt-master.service salt-minion.service 
    

    服务端操控客户端

    查看客户端主机名,IP,内存,磁盘

    cmd.run 可以执行任何操作命令,cmd实际上就是saltstack的一个模块
    .就相当于调用函数,方法(playbook)
    
    [root@m01 ~]# salt 'web01' cmd.run 'free -m' 
    web01:
                      total        used        free      shared  buff/cache   available
        Mem:            972         209         247          25         515         592
        Swap:
    
    #查看客户端详细信息,主机名,IP(内置变量)
    [root@m01 ~]# salt '*' grains.items
    [root@m01 ~]# salt 'web01' grains.items
    
    #查看客户端主机名
    [root@m01 ~]# salt 'm01' grains.get 'fqdn'
    m01:
        m01
    #查看客户端IP
    [root@m01 ~]# salt 'm01' grains.get 'fqdn_ip4'
    m01:
        - 10.0.0.61
        - 172.16.1.61
    [root@m01 ~]# salt 'm01' grains.get 'ip4_interfaces'
    m01:
        ----------
        eth0:
            - 10.0.0.61
        eth1:
            - 172.16.1.61
        lo:
            - 127.0.0.1
    [root@m01 ~]# salt 'm01' grains.get 'ip4_interfaces:eth0'
    m01:
        - 10.0.0.61
    [root@m01 ~]# salt 'm01' grains.get 'master'
    m01:
        10.0.0.61
    
    #开启或者关闭客户端web01的进程
    [root@m01 ~]# salt 'web01' cmd.run 'systemctl start sshd'
    [root@m01 ~]# salt 'web01' 'systemctl start sshd'
    
    #使用ansible操作主机组
    [root@m01 ~]# salt 'web0_group' cmd.run 'systemctl start sshd'
    

    ansible官网

    TP

    因为ansible只安装在服务端,不用安装客户端(因为ansible基于ssh协议),这种服务端也叫控制端,客户端叫被控端,受控端

    ansible服务之星流程:

    ​ 1.ansible读取playbook剧本(host),剧本中会记录对哪些主机之星哪些任务

    ​ 2.首先ansible通过主机清单找到要执行的主机,然后调用具体的模块

    ​ 3.其次ansible会通过连接插件连接对应的主机并推送对应的任务列表

    ​ 4.最后被管理的主机将ansible发送过来的任务解析为本地shell命令执行

    saltmast和ansible不能同时安装,不然会导致Python环境发生冲突,两个软件都用不了

    Ansible的架构

    1、连接插件connection plugins用于连接主机 用来连接被管理端
    2、核心模块core modules连接主机实现操作, 它依赖于具体的模块来做具体的事情
    3、自定义模块custom modules根据自己的需求编写具体的模块(一般开发使用)
    4、插件plugins完成模块功能的补充
    5、剧本playbook,ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
    6、主机清单inventor定义ansible需要操作主机的范围

    最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块

    img

    ad-hoc与playbook

    [ansible任务执行模式]
    ad-hoc:
    ad-hoc模式使用单个模块,支持批量执行单条命令。'ad-hoc命令是一种可以快速输入的命令',而且不需要保存起来的命令。相当于bash中的一句shell。
    playbook:
    playbook模式是ansible主要管理方式,也是ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如web服务的安装部署、数据库服务器的批量备份等。'可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。'
    
    
    [ansible命令执行过程]
    1、加载自己的'主配置文件',默认/etc/ansible/ansible.cfg
    2、查找对应的'playbook',找到要执行的主机或者组。
    3、加载自己对应的'模块文件',如command
    4、通过ansible将模块或命令生成对应的'临时py文件',并将该'文件传输'至远程服务器
    5、'对应执行用户家目录的.ansible/tmp/XXX/XXX.PY文件'
    6、给文件+x执行
    7、执行并返回结果
    8、删除临时py文件,sleep 0 退出。
    
  • 相关阅读:
    OS程序开发引用的第三方库之间出现冲突的处理方法
    ios的指令集(转)
    查看lib库支持的IOS指令集
    Audio Session Programming Guide
    Swift中文教程
    NSString 与 char * 互转
    id 与void *类型的转换(转)
    versions使用(转)
    superview透明问题
    Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区别
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/13069011.html
Copyright © 2011-2022 走看看