ansible是一个综合的强大的管理工具,他可以对多台主机安装操作系统,并为这些主机安装不同的应用程序,也可以通知指挥这些主机完成不同的任务.查看多台主机的各种信息的状态等,ansible都可以通过模块的方式来完成.
ansible组件包含以下所有组件的功能
configuretion(cfengine,chef,puppte)
deployment(capistrano,fabric)
ad-hoc tasks(func)
multi-tier orchestration(juju,sort of)
ansible特性:
No agents:不需要再被管理节点上安装任何程序,除了sshd
No server :在服务器端不需要启动任何服务,只需要执行命令就行
No additional PKI : 由于不基于ssl,所以也不基于PKI工作
MOdules in any language:基于模块工作,ansible拥有众多的模块
YAML:支持YMAL语言,另一种语言
SSH by default:默认使用ssh控制各节点
ansible的基本架构
编译安装ansible核心:ansible
核心模块:Core Modules,这些都是ansible自带的模块
扩展模块:Custom Modules,如果核心模块不足以完成某种功能,可以添加扩展模块
插件:Plugins:完成模块功能的补充
剧本:Playbooks,把需要完成的多个任务定义在剧本中
连接插件:Connectior Plugins;ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh链接到个主机的,但是他还支持其他的连接方法,所以需要有连接插件
主机群:Host Inventory;ansible在管理多台主机时,只想对其中的一部分执行某些操作
如下图所示:
解决依赖关系
# yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto# tar xf ansible-1.5.4.tar.gz# cd ansible-1.5.4# python setup.py build# python setup.py install# mkdir /etc/ansible# cp -r examples/* /etc/ansible
查看rpm包的详细信息
rpm -pqi ansible-1.5.4-1.el6.noarch.rpm
安装rpm包
yum install ansible-1.5.4-1.el6.noarch.rpm �Cy
查看安装后生成的文件
rpm -ql ansible
配置主机列表
vim /etc/ansible/hosts.,$s@^\([^#]\)@#\1@g #注释所有行,在命令行模式下[webserver] #添加webserve,下面的IP地址也可以使用主机名172.16.21.2172.16.21.3[dbserver] #添加dbserver172.16.21.4
生成密钥并让主机列表中的主机信任
ssh-keygen -t rsa -P '' #生成密钥ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] #复制公钥到其他主机ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
ansible的基本用法
ansible all -m ping #查看是否所有的节点都在线ansible all [ -m command ] -a 'date' #查看所有主机当前时间ansible all -a 'ntpdate 172.16.0.1' #同步所有主机的时间ansible <host-pattern> [-f forks] [-m module_name] [-a args] #命令格式ansible all -a 'service httpd status' #查看三台主机的httpd服务状态ansible webserver -a 'service httpd status' #可对组进行操作ansible 172.16.21.4 -a 'service httpd status' #可对单台主机进行操作
查看ansible所支持的模块
ansible-doc -l #列出所有ansible支持的模块,重要,请自行记住acl Sets and retrieves file ACL information....at Schedule the execution of a command or scripts via the at cocron Manage cron.d and crontab entries.command Executes a command on a remote nodecopy Copies files to remote locations.
...
查看指定模块的参数
ansible-doc -s copy 重要,请自行记住src= #源文件force= #是否覆盖dest= #目标文件ansible all -m copy -a "src=/etc/fstab dest=/tmp"1: ansible-doc -s cron2: - name: Manage cron.d and crontab entries.3: action: cron4: name=5: hour=6: job=7: cron_file=8: reboot=9: month=10: state=11: special_time=12: user=13: backup=14: day=15: minute=16: weekday=17: ansible all -m cron -a 'name="custom job" minute=15 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate 172.16.0.1"'18: ansible all -a 'crontab -l'
ansible的yum使用的
1: ansible-doc -s yum2: action: yum3: state= #安装还是卸载,present安装,absent卸载4: disablerepo= #禁用某个yum源5: name= #要安装的程序包名6: enablerepo= #要启用的yum源7: list= #列表,主要是playbooks中使用的8: disable_gpg_check= #9: conf_file= #执行yum时使用其他服务器的文件10: ansible all -m yum -a "state=present name=corosync"
ansible的服务使用
1: ansible-doc -s service #设置某一应用程序开启自动启动的2: - name: Manage services.3: action: service4: state= # 当前的服务是启动的还是关闭的5: sleep= #6: name= # 服务名称7: runlevel= #在哪些级别下启动的8: pattern= #9: enabled= #开机是否让其启动{0|1}10: arguments= #11: ansible all -m service -a "state=stopped name=httpd enabled=yes"12: ansible all -a "chkconfig --list httpd"
ansible的playbooks,可把多个需要执行的命令存在剧本中,一次执行
1: vim test.yaml2: 下面的格式很重要,冒号后面一定要有空格,tasks下面一定要有缩进,并且每行对齐3: - hosts: all #执行的主机,前面有横杠表示可以有多个4: remote_user: root #使用哪个用户的身份在各远程主机上执行命令,可以定义全局的,也可以定义单个任务要使用的用户5: tasks: #需要执行的任务,因为有子任务,所以下面的任务需要缩进6: - name: add a group #第一个执行的任务的名字,类似注释信息7: group: gid=1001 name=testymal system=no #具体的任务本身8: - name: excute a command9: command: /bin/date
10: 执行顺序是把一个任务在所有主机上执行一遍,再把第二个任务在所有主机上执行,如果在执行任务的过程中发生错误,将回滚所有可回滚的任务
ansible的handler
1: - hosts: all2: remote_user: root3: tasks:4: - name: ensure apache latest version5: yum: name=httpd state=laster6: - name: apache configure file7: copy: src=/root/httpd.conf dest=/etc/httpd/conf force=yes8: notify: #调用下面的handlers9: - restart httpd10: handlers: #定义handlers要执行的动作11: - name: restart httpd12: service: name=httpd state=restarted
ansible的playbooks实现安装heartbeat
扩展:ansible还有两种模式,一种是队列,一种是拉(Pull Mode) ,这里不介绍了 .....1: heartbeat.yaml2: - hosts: hbhosts3: remote_user: root4: tasks:5: - name: ensure heartbeat latest version6: yum: name=heartbeat state=present #安装最新版本7: - name: authkeys configure file8: copy: src=/root/hb_conf/authkeys dest=/etc/ha.d/authkeys #复制本地文件到远程主机9: - name: authkeys mode 60010: file: path=/etc/ha.d/authkeys mode=600 #改文件权限,可以使用ansible-doc -s file查看11: notify: #调用下面的handlers12: - restart heartbeat13: - name: ha.cf configure file14: copy: src=/root/hb_conf/ha.cf dest=/etc/ha.d/ha.cf #复制本地文件到远程主机15: notify: #调用下面的handlers16: - restart heartbeat #调用下面的handlers17: handlers: #定义handlers的动作,这个的缩进与tasks一致18: - name: restart heartbeat19: service: name=heartbeat state=restarted