Ansible基于Python开发,默认经过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,可同时支持多台主机进行管理。ansible是基于模块工做的,自己没有批量部署的能力,真正具备批量部署的是ansible所运行的模块,可以实现批量运行命令、部署程序、配置系统等功能。mysql
(1)Ansible core核心引擎。
(2)Host inventory 主机清单:用来定义Ansible管理的主机,默认是在Ansible配置文件中定义被管理主机,同时也支持自定义动态主机清单。
(3)Comecton pugins链接插件:负责和被管理主机实现通讯。除支持使用SSH链接被管理主机外,Ansible还支持其余的链接方式,因此须要有链接插件将各个主机用链接插件链接到Ansible。
(4)Core modules核心模块:是Ansible自带的模块,使用这些模块将资源分发到被管理主机,使其执行特定任务或匹配特定的状态。
(5)Custom meodle自定义模块:用于完成模块功能的补充,可借助相关插件完成记
录日志、发送邮件等功能。
(6)Playbooks (yaml, jinja2) 剧本:用来集中定义Ansible任务的配置文件,即将多个任务定义在一个剧本中由Ansible自动执行,能够由控制主机针对多台被管理主机同时运行多个任务。web
系统环境:sql
主机 | 操做系统 | IP地址 | 组名 |
---|---|---|---|
控制主机 | CentOS 7.4 x86_64 | 192.168.100.138 | |
被管理主机 | CentOS 7.4 x86_64 | 192.168.100.131 | webserver |
被管理主机 | CentOS 7.4 x86_64 | 192.168.100.132 | mysql |
准备yum源,直接使用yum命令安装Ansibleshell
yum install -y epel-release #安装epel源 yum install ansible -y
查看ansible软件的版本信息vim
ansible --version
Ansible主要相关配置文件在/etc/ansible目录下。bash
[root@promote ~]# cd /etc/ansible/ [root@promote ansible]# pwd /etc/ansible [root@promote ansible]# ll 总用量 24 -rw-r--r--. 1 root root 19549 7月 6 23:53 ansible.cfg #配置文件 -rw-r--r--. 1 root root 1016 7月 6 23:53 hosts #管控主机文件 drwxr-xr-x. 2 root root 6 7月 6 23:53 roles
修改主机与组配置后,可同时链接到多个被管理主机上执行任务。架构
cd /etc/ansible vim hosts [webserver] #被管理主机分类 192.168.100.131 [mysql] 192.168.100.132 #被管理主机分类
使用ssh-keygen产生一对密钥,使用ssh-copy-id来下发生成的公钥。ssh
ssh-keygen -t rsa #基于ssh密钥的链接 ssh-copy-id root@192.168.100.131 ssh-copy-id root@192.168.100.132 #配置密钥对验证
为了实现免交互代理,能够输入如下命令:ide
ssh-agent bash ssh-add
Ansible可使用命令行方式进行自动化管理,它的命令行管理工具都是由一系列模块、参数所支持的,基本语法以下:工具
ansible [主机] [-m 模块] [-a args]
Ansible自带了不少模块,可以下发执行Ansible的各类管理任务。不过查看模块帮助信息能够用ansible-doc工具。
ansible-doc -l #列出全部已安装的模块 注:按q退出 ansible-doc -s yum #-s列出yum模块描述信息和操做动做
-m选项指定使用模块,默认使用command模块,用于在被管理主机上运行命令。
(1)使用IP地址指定运行主机
ansible 192.168.100.131 -m command -a 'date'
(2)使用被管理主机的分类运行
ansible mysql -m command -a 'date'
(3)在全部主机清单中的主机运行
ansible all -m command -a 'date'
(4)不加-m选项,默认运行command模块
ansible all -a 'tail -1 /etc/passwd'
cron模块用于定义任务计划。其中有两种状态(state ):present表示添加(省略状态默认使用),absent表示移除。
(1)添加任务计划
ansible webserver -m cron -a 'minute="*/1" job="/bin/echo heihei" name="test cron job"'
#查看计划是否添加成功 ansible webserver -a 'crontab -l'
进webserver组的主机查看
(2)移除任务计划
ansible webserver -m cron -a 'name="test cron job" state=absent'
user模块用于建立新用户和更改、删除已存在的用户。其中name选项用来指明建立的用户名称。请求的是useradd, userdel, usermod三个指令
(1)建立用户
ansible mysql -m user -a 'name="test01"'
#查看用户是否添加成功 ansible mysql -m command -a 'tail /etc/passwd'
(2)删除用户
ansible mysql -m user -a 'name="test01" state=absent'
group模块用于对用户组进行管理。请求的是groupadd, groupdel, groupmod 三个指令。
例如:建立mysql组,将已建立好的用户test01添加到mysql组中。
#建立mysql组 ansible mysql -m group -a 'name=mysql gid=306 system=yes'
#查看组是否添加 ansible mysql -a 'tail /etc/group'
#将用户mysql添加到mysql组中 ansible mysql -m user -a 'name=mysql uid=306 system=yes group=mysql'
#查看用户mysql是否添加到mysql组中 ansible mysql -a 'tail -1 /etc/passwd'
copy模块用于实现文件复制和批量下发文件。其中使用src来定义本地源文件路径,使用dest定义被管理主机文件路径,使用content则是经过指定信息内容来生成目标文件。
(1)将本地文件/etc/fstab复制到被管理主机上的/opt/fstab.back,将全部者设置为root,权限设置为640.
ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640'
#查看是否存在复制的文件 ansible mysql -a 'ls -l /opt'
(2)将hello heihei!写入/opt/fstab.back。
ansible mysql -m copy -a 'content="hello heihei!" dest=/opt/fstab.back'
#查看内容是否写入 ansible mysql -a 'cat /opt/fstab.back'
file模块来设置文件属性。其中使用path指定文件路径,使用src定义源文件路径,使用name或dest来替换建立文件的符号连接。
(1)设置文件/opt/fstab.back的所属主为mysql,所属组为mysql,权限为644.
ansible mysql -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.back'
#查看文件的属性 ansible mysql -a 'ls -l /opt/'
(2)设置/opt/fstab.link为/opt/fstab.back的连接文件。
ansible mysql -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link'
#查看连接文件 ansible mysql -a 'ls -l /opt/'
(3)删除文件/opt/fstab.back
ansible mysql -m file -a "path=/opt/fstab.back state=absent"
(4)建立文件/opt/test。
ansible mysql -m file -a "path=/opt/test state=touch"
ping,模块是用来检测指定主机的连通性。
ansible all -m ping
shell模块能够在被管理主机上运行命令,并支持像管道符等功能的复杂命令。
例如,建立用户使用无交互模式给用户设置密码。
#建立用户user1 ansible mysql -m user -a 'name=user1' #无交互给用户user1设置密码 ansible mysql -m shell -a 'echo abc123|passwd --stdin user1'
script模块能够将本地脚本复制到被管理主机上进行运行。须要注意的是,使用相对路径来指定脚本。
例如,编辑一个本地脚本test.sh,复制到被管理主机上运行。
vi /opt/test.sh #!/bin/bash echo "hello ansible from script"> /opt/script.txt chmod +x /opt/test.sh ansible mysql -m script -a '/opt/test.sh'
#查看脚本实现 ansible mysql -a 'cat /opt/script.txt'
yum模块复责在被管理主机上安装与卸载软件包,其中使用name指定要安装的软件包,使用state指定安装软件包的状态,present、latest用来表示安装,absent表示卸载。
(1)安装zsh软件包
ansible mysql -m yum -a 'name=zsh'
#查看是否安装 ansible mysql -a 'rpm -q zsh'
(2)卸载zsh软件包
ansible mysql -m yum -a 'name=zsh state=absent'
(3)安装httpd软件包
ansible webserver -m yum -a 'name=httpd'
service模块用来控制管理服务的运行状态。其中enabled表示是否开机自启动,取值为true或false,使用name定义服务名称,使用state指定服务状态,取值分别为started、stoped、restarted.
(1)启动httpd服务并设置开机自启动。
ansible webserver -m service -a 'enabled=true name=httpd state=started'
(2)查看httpd服务的状态
ansible webserver -a 'systemctl status httpd'
setup模块收集、查看被管理主机的facts。每一个被管理主机在接并运行管理命令以前,都会将本身的相关信息(操做系统、IP地址)发送给控制主机。
例如,查看mysql组的facts信息。
ansible mysql -m setup
以上皆是Ansible经常使用的模块,若是用到其余模块可使用ansible-doc工具。