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 		# 指定模块 
posted @ 2020-07-24 21:22  Gshelldon  阅读(214)  评论(0编辑  收藏  举报