Ansible介绍 自动化运维工具,统一配置管理工具。自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。 统一配置管理工具: Ansible python 基于ssh通信,不用安装客户端 SaltStack
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 别人叫我晓东