zoukankan      html  css  js  c++  java
  • Ansible-入门使用方法

    Ansible介绍


    自动化运维工具,统一配置管理工具。自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。

    统一配置管理工具:

    • Ansible python 基于ssh通信,不用安装客户端
    • SaltStack python 不基于ssh,使用自己的客户端和服务端通信,跨平台,跨系统操作。
    • puppet Raby

    Ansible的功能及优点


    1.远程执行
    批量执行远程命令,可以对多台主机进行远程操作

    2.配置管理
    批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理,和启停

    3.事件驱动
    通过Ansible的模块,对服务进行不同的事件驱动
    比如:
    1)修改配置后重启
    2)只修改配置文件,不重启
    3)修改配置文件后,重新加载
    4)远程启停服务管理

    4.管理公有云
    通过API接口的方式管理公有云,不过这方面做的不如saltstack.
    saltstack本身可以通过saltcloud管理各大云厂商的云平台。

    5.二次开发
    因为语法是Python,所以便于运维进行二次开发。

    6.任务编排
    可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署

    7.跨平台,跨系统
    几乎不受到平台和系统的限制,比如安装apache和启动服务

    在Ubuntu上安装apache服务名字叫apache2
    在CentOS上安装apache服务名字叫httpd

    在CentOS6上启动服务器使用命令:/etc/init.d/nginx start
    在CentOS7上启动服务器使用命令:systemctl start nginx

    Saltstack基础使用

    # 1.安装服务端和客户端
    [root@m01 ~]# yum install -y salt-master salt-minion
    
    # 2.客户端
    [root@m01 ~]# yum install -y  salt-minion
    
    # 3.修改客户端的配置文件
    [root@m01 ~]# vim /etc/salt/minion
    master: 10.0.0.61
    
    # 4.一定先启动服务端,再启动客户端
    [root@m01 ~]# systemctl start salt-master salt-minion
    [root@m01 ~]# systemctl start salt-minion
    [root@oldgirl ~]# /etc/init.d/salt-minion start
    
    # 查看认证key
    [root@m01 ~]# salt-key 
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    m01
    oldgirl
    web01
    Rejected Keys:
    
    ### 认证1个key
    [root@m01 ~]# salt-key -a web01
    ### 全部认证
    [root@m01 ~]# salt-key -A
    
    
    [root@m01 ~]# salt '*' test.ping
    [root@m01 ~]# salt '*' cmd.run 'touch /root/zls123_456.txt'
    

    环境

    主机名 wanIP lanIP 角色
    m01 10.0.0.61 172.16.1.61 Ansible控制端
    web01 10.0.0.7 172.16.1.7 Ansible被控端
    web02 10.0.0.8 172.16.1.8 Ansible被控端
    web03 10.0.0.9 172.16.1.9 Ansible被控端
    lb01 10.0.0.5 172.16.1.5 Ansible被控端
    lb02 10.0.0.6 172.16.1.6 Ansible被控端
    db01 10.0.0.51 172.16.1.51 Ansible被控端
    backup 10.0.0.41 172.16.1.41 Ansible被控端
    nfs 10.0.0.31 172.16.1.31 Ansible被控端

    安装

    [root@m01 ~]# yum -y install ansible
    

    ansible配置文件


    /etc/ansible/ansible.cfg

    /etc/ansible/hosts 主机清单配置文件

    [root@m01 ~]# cat /etc/ansible/ansible.cfg 
    #inventory      = /etc/ansible/hosts      #主机列表配置文件
    #library        = /usr/share/my_modules/  #库文件存放目录
    #remote_tmp     = ~/.ansible/tmp          #临时py文件存放在远程主机目录
    #local_tmp      = ~/.ansible/tmp          #本机的临时执行目录
    #forks          = 5                       #默认并发数
    #sudo_user      = root                    #默认sudo用户
    #ask_sudo_pass = True                     #每次执行是否询问sudo的ssh密码
    #ask_pass      = True                     #每次执行是否询问ssh密码
    #remote_port    = 22                      #远程主机端口
    host_key_checking = False                 #跳过检查主机指纹,在密码验证的时候忽略yes/和no的那一步。
    log_path = /var/log/ansible.log           #ansible日志
    

    主机清单


    让ansible知道哪些机器需要维护,还有hosts的作用。


    连接方式:

    ip + port+user+pass

    #方式一、IP+端口+用户+密码
    [root@m01 ~]# vi /etc/ansible/hosts 
    [webs]
    10.0.0.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
    10.0.0.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
    
    

    hostname+pass

    # 写法一
    [root@m01 ~]# vi /etc/ansible/hosts
    [web_group]
    web01 ansible_ssh_host=10.0.0.7 ansible_ssh_pass='1'
    web02 ansible_ssh_host=10.0.0.8 ansible_ssh_pass='1'
    
    [root@m01 ~]# ansible web_group -m ping 
    web02 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    web01 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    
    
    
    # 写法二(需要编辑hosts)
    [root@m01 ~]# vi /etc/ansible/hosts
    [web_group]
    web01 ansible_ssh_pass='1'
    web02 ansible_ssh_pass='1'
    
    [root@m01 ~]# vi /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    10.0.0.8    web02
    10.0.0.7    web01
    10.0.0.9    web03
    10.0.0.31   nfs01
    
    
    [root@m01 ~]# ansible web_group -m ping 
    web02 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    web01 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    nfs01 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    
    
    # 写法三
    [web_group]
    web0[1:3] ansible_ssh_pass='1'
    # 表示的是web01到web03;需要编辑hosts
    
    # 写法四,定义变量
    [web_group]
    web0[1:3]
    
    [web_group:vars]
    ansible_ssh_pass='1'
    # 需要编辑hosts,做主机解析
    
    [root@m01 ~]# ansible web_group -m ping 
    web01 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    web02 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    web03 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    
    

    主机密钥

    # 先分发密钥
    [root@m01 ~]# ssh-keygen
    [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51
    
    [root@m01 ~]# vi /etc/ansible/hosts 
    [web_group]
    10.0.0.7:22
    10.0.0.8
    10.0.0.9
    
    [root@m01 ~]# ansible web_group -m ping 
    10.0.0.8 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    10.0.0.9 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    10.0.0.31 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    10.0.0.7 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    10.0.0.51 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    
    

    推荐使用的方式

    不同用处的主机分成不同的组。

    # 需要分发主机密钥
    [root@m01 ~]# vi /etc/ansible/hosts
    [web_group]
    web01 ansible_ssh_host=10.0.0.7 ansible_ssh_port=22 # 后面ssh端口不是22的,可以使用该参数,更改端口
    web02 ansible_ssh_host=10.0.0.8
    
    [backup_group]
    backup ansible_ssh_host=10.0.0.41
    
    [nfs_group]
    nfs ansible_ssh_host=10.0.0.31
    
    [db_group]
    db01 ansible_ssh_host=10.0.0.51
    db02 ansible_ssh_host=10.0.0.52
    
    # =======================================
    # 分组书写的方式之一
    [root@m01 ~]# vi /etc/ansible/hosts
    [web_group]
    web01 ansible_ssh_host=10.0.0.7 ansible_ssh_port=22
    web02 ansible_ssh_host=10.0.0.8
    
    [backup_group]
    backup ansible_ssh_host=10.0.0.41
    
    [nfs_group]
    nfs ansible_ssh_host=10.0.0.31
    
    [db_group]
    db01 ansible_ssh_host=10.0.0.51
    db02 ansible_ssh_host=10.0.0.52
    
    # 可以引用上面的分组,!(和分组里面的主机名),比如安装rsync在特定的机器上,用此操作。
    [rsync:children]
    nfs_group
    backup_group
    
    [root@m01 ~]# ansible rsync -m ping 
    nfs | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    backup | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    
    [root@m01 ~]# ansible rsync -m shell -a 'hostname' 
    nfs | CHANGED | rc=0 >>
    nfs01
    backup | CHANGED | rc=0 >>
    backup
    
    
    [root@m01 ~]# ansible rsync -m shell -a 'yum -y install rsync' 
    # 会提示ansible有专门的yum模块
    [WARNING]: Consider using the yum module rather than running 'yum'.  If you need to use command because yum is insufficient you can
    add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
    # 后面会有返回安装过后的值
    

    查看主机

    # 查看分组中有哪些主机
    [root@m01 ~]# ansible rsync --list-host
    
    # 查看所有的主机
    [root@m01 ~]# ansible all --list-host
    
    主机的指定:
    1.组名字
    2.[]标签名
    3.IP(密钥连接的时候)
    4.主机名
    
    # 语法
    ansible 指定主机(IP、主机清单名字、all) -m 指定模块
    ansible webs -m ping 
    
    -m 		# 指定模块 
    


    FBI WARNING

    QQ:1402122292 认准原创sheldon 别人叫我晓东
  • 相关阅读:
    同步IO,异步IO,阻塞,非阻塞的定义与区别
    RocketMQ之NameServer学习笔记
    RocketMQ消息发送的队列选择与容错策略
    RocketMQ详解
    JVM(HotSpot) 7种垃圾收集器的特点及使用场景
    dubbo SPI设计
    dubbo集群容错之LoadBalance
    dubbo服务引用与集群容错
    dubbo服务暴露过程
    内存溢出排查基本步骤
  • 原文地址:https://www.cnblogs.com/gshelldon/p/13374633.html
Copyright © 2011-2022 走看看