Ansible是一款极为灵活的开源工具套件,能够大大简化Unix管理员的自动化配置管理与流程控制方式。它利用推送方式对客户系统加以配置,这样所有工作都可在主服务器端完成。其命令行机制同样非常强大,允许大家利用商业许可Web UI实现授权管理与配置。
需要将Ansible部署在中央服务器当中,同时在Ansible主机文件内配置所需管理的客户端群组以及主机名称。托管主机的配置流程也非常精简,只需要安装功能性Python 2.4或者2.6并为连入的Ansible主服务器及各台主机配置SSH authorized_keys文件。
1、安装ansible
安装了epel的源之后,可以指定使用epel源通过yum安装ansible
2、生成ssh-key
将管理服务器生成的ssh-key上传到各个被管理主机的.ssh/authorized_keys文件中。设置成无密钥登录主机。
First commands
安装ansible之后,编辑/etc/ansible/hosts文件,(或者在ansible文件中指定其他文件)。将已经配置无密钥登录的被管理主机写到配置文件中。
$cat /etc/ansible/hosts
192.168.8.52
现在可以ping已经配置在hosts文件中节点机,
$ansible all -m ping
192.168.8.52 | success >> {
"changed": false,
"ping": "pong"
}
ansible尝试使用当前登录用户来远程连接节点主机,也可用通过 -u 来指定用户(此用户在节点机存在,并且已经配置了无密钥登录)
$ansible all -m ping -u wyf
192.168.8.52 | success >> {
"changed": false,
"ping": "pong"
}
Inventory(hosts文件配置)
ansible可以同时工作在多个系统上,通过匹配保存在/etc/ansible/hosts文件中的主机列表,执行指定的命令。
Inventory的格式可以如下配置;
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
中括号指定组名称,可以通过组名来分辨节点机,并匹配你要执行的命令。
一个节点机可以同时存在于多个组中。如果ssh监听的端口不是标准的22,你可以在节点机后面加一个冒号,来指定ssh的端口
www.dawang.com:1003
如果你想给一个拥有静态ip的定义一个别名,可以这样:
dawang ansible_ssh_port=1003 ansible_ssh_host=192.168.10.3
如果有很多个主机,并且域名相识,可以这样写hosts文件
[webservers]
www[01:50].example.com
[databases]
db-[a:f].example.com
还可以针对每一个主机配置变量
ansible_ssh_host=host1 指定连接主机
ansible_ssh_port=22 指定连接端口
ansible_ssh_user=user1 指定连接用户
ansible_ssh_pass=abc 指定连接用户的密码,不推荐
ansible_sudo_pass=abc 指定sudo的密码
ansible_connection=local 指定连接方式,local或者ssh
ansible_shell_type=bash 指定shell类型
ansible_ssh_private_key_file=/root/klyg.pem aws主机指定pem文件路径。
如果需要,可以将两个组名再放在一个组里,建立一个大组,并建立相应的变量,为playbooks使用。
[www]
host1
host2
[db]
host3
host4
[cluster:children]
www
db
[cluster:vars]
http_port=80
ntp_server=asia.pool.ntp.org
Patterns
pattern在ansible的作用是指定匹配的主机执行后续的命令,也就是决定了与哪些主机建立连接。在playbook中,就意味着匹配哪些主机执行后续的配置或者执行相应的程序。
通用的方法如下:
举例: ansible dawang -m service -a "name=httpd state=restarted"
pattern通常还指一个组或者某一台主机,上述例子就是指定了一个主机“dawang”。
"all" "*" 这两个pattern相当于指定了host文件中的所有主机,
当处理一个或多个组的时候,可以用一下来表示“或”来处理
webserver:dbservers
也可以指定一个组,并排除其中的某台主机
webserver:!phoenix
指定一个组,再加上组外的其他一台主机
webserver:&staging
也可以来指定主机名或者ip来匹配多台主机
*.dawang.com
*.com