您的位置:首页 > 其它

ansible的安装部署及简单应用

2016-04-19 20:18 471 查看
Ansible 是一个配置管理和应用部署工具,功能类似于目前业界的配置管理工具 Chef,Puppet,Saltstack。Ansible 是通过 Python 语言开发。Ansible 平台由 Michael DeHaan 创建,他同时也是知名软件 Cobbler 与 Func 的作者。Ansible 的第一个版本发布于 2012 年 2 月。Ansible 默认通过 SSH 协议管理机器,所以 Ansible 不需要安装客户端程序在服务器上。您只需要将 Ansible 安装在一台服务器,在 Ansible 安装完后,您就可以去管理控制其它服务器。不需要为它配置数据库,Ansible 不会以 daemons 方式来启动或保持运行状态。Ansible 可以实现以下目标:

自动化部署应用
自动化管理配置
自动化的持续交付
自动化的(AWS)云服务管理。

根据 Ansible 官方提供的信息,当前使用 Ansible 的用户有:evernote、rackspace、NASA、Atlassian、twitter 等。

1、分别配置各自主机名,并配置hosts文件(能互相解析)



8.20、8.39、8.40

#vim /etc/hosts

# hostname node1.chinasoft.com

vim /etc/hosts

192.168.8.20 node1.chinasoft.com node1

192.168.8.39 node2.chinasoft.com node2

2、在ansible服务器8.40上配置ssh免密码访问

# ssh-keygen

# ssh-copy-id -i .ssh/id_rsa.pub root@node1.chinasoft.com

# ssh-copy-id -i .ssh/id_rsa.pub root@node2.chinasoft.com

测试是否成功

# ssh node1.chinasoft.com 'date';date

# ssh node2.chinasoft.com 'date';date

3、安装ansible服务

# yum install -y epel-relase

# yum install -y ansible1.9

配置服务器组

# vim /etc/ansible/hosts

[webservers]

node1.chinasoft.com

node2.chinasoft.com

[dbserver2]

node1.chinasoft.com

node2.chinasoft.com



4、常用服务及模块的使用

查看命令的帮助文档,如copy

# ansible-doc -s copy

简单的命令测试:

①ping响应

# ansible all -m ping

node2.chinasoft.com | success >> {

"changed": false,

"ping": "pong"

}

node1.chinasoft.com | success >> {

"changed": false,

"ping": "pong"

}

②各服务器时间

# ansible all -a 'date'

node2.chinasoft.com | success | rc=0 >>

Mon Apr 18 20:43:48 CST 2016

node1.chinasoft.com | success | rc=0 >>

Mon Apr 18 20:43:48 CST 2016

③文件拷贝

# ansible dbservers -m copy -a "src=/etc/fstab dest=/root/fstab"

验证拷贝是否成功

# ansible dbservers -a "ls /root"

node1.chinasoft.com | success | rc=0 >>

anaconda-ks.cfg

fstab

install.log

install.log.syslog

node2.chinasoft.com | success | rc=0 >>

anaconda-ks.cfg

fstab

install.log

install.log.syslog

④添加计划任务

# ansible all -m cron -a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate 192.168.8.102"'

node2.chinasoft.com | success >> {

"changed": false,

"jobs": [

"customjob",

"custom job"

]

}

node1.chinasoft.com | success >> {

"changed": true,

"jobs": [

"custom job"

]

}

# ansible all -a "crontab -l"

node1.chinasoft.com | success | rc=0 >>

#Ansible: custom job

*/3 * * * * /usr/sbin/ntpdate 192.168.8.102

node2.chinasoft.com | success | rc=0 >>

#Ansible: customjob

*/3 * * * * /usr/sbin/ntpdate 192.168.8.102

④在节点中添加组

# ansible-doc -s group

action: group

gid # Optional `GID' to set for the group.

name= # Name of the group to manage.

state # Whether the group should be present or not on the remote host.

system # If `yes', indicates that the group created is a system group.

添加mysql组

# ansible all -m group -a "gid=306 system=yes name=mysql"

node1.chinasoft.com | success >> {

"changed": true,

"gid": 306,

"name": "mysql",

"state": "present",

"system": true

}

node2.chinasoft.com | success >> {

"changed": true,

"gid": 306,

"name": "mysql",

"state": "present",

"system": true

}

# ansible all -a "tail -1 /etc/group"

node2.chinasoft.com | success | rc=0 >>

mysql:x:306:

node1.chinasoft.com | success | rc=0 >>

mysql:x:306:

⑥yum命令的使用

# ansible-doc -s yum

action: yum

conf_file # The remote yum configuration file to use for the transaction.

disable_gpg_check # Whether to disable the GPG checking of signatures of packages being installed. Has an effect only if state is `present' or `latest'.

disablerepo # `Repoid' of repositories to disable for the install/update operation. These repos will not persist beyond the transaction. When specifying multiple repos, separ

enablerepo # `Repoid' of repositories to enable for the install/update operation. These repos will not persist beyond the transaction. When specifying multiple repos, separa

list # Various (non-idempotent) commands for usage with `/usr/bin/ansible' and `not' playbooks. See examples.

name= # Package name, or package specifier with version, like `name-1.0'. When using state=latest, this can be '*' which means run: yum -y update. You can also pass a u

state # Whether to install (`present', `latest'), or remove (`absent') a package.

update_cache # Force updating the cache. Has an effect only if state is `present' or `latest'.

安装httpd软件

# ansible all -m yum -a "name=httpd state=present"

查看是否安装了httpd

# ansible all -a "rpm -q httpd"

node1.chinasoft.com | success | rc=0 >>

httpd-2.2.15-47.el6.centos.4.x86_64

node2.chinasoft.com | success | rc=0 >>

httpd-2.2.15-47.el6.centos.4.x86_64

⑦查看服务状态

# ansible all -a "service httpd status"

node2.chinasoft.com | FAILED | rc=3 >>

httpd 已停

node1.chinasoft.com | FAILED | rc=3 >>

httpd 已停

启动httpd服务,并设置开机自启动

# ansible all -m service -a "state=started enabled=yes name=httpd"

node1.chinasoft.com | success >> {

"changed": true,

"enabled": true,

"name": "httpd",

"state": "started"

}

node2.chinasoft.com | success >> {

"changed": true,

"enabled": true,

"name": "httpd",

"state": "started"

}

# ansible all -a "service httpd status"

node1.chinasoft.com | success | rc=0 >>

httpd (pid 2575) 正在运行...

node2.chinasoft.com | success | rc=0 >>

httpd (pid 2371) 正在运行...

校验是否开机自启动

# ansible all -a "chkconfig --list httpd"

node1.chinasoft.com | success | rc=0 >>

httpd 0:off1:off2:on3:on4:on5:on6:off

node2.chinasoft.com | success | rc=0 >>

httpd 0:off1:off2:on3:on4:on5:on6:off

5、剧本的简单使用

①通过脚本添加组

# vim test.yaml

- hosts: all

remote_user: root

tasks:

- name: add a group

group: gid=1000 name=testgroup1 system=no

- name: execute a commond

command: /bin/date

执行剧本

# ansible-playbook test.yaml

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************

ok: [node2.chinasoft.com]

ok: [node1.chinasoft.com]

TASK: [add a group] ***********************************************************

changed: [node2.chinasoft.com]

changed: [node1.chinasoft.com]

TASK: [execute a commond] *****************************************************

changed: [node2.chinasoft.com]

changed: [node1.chinasoft.com]

PLAY RECAP ********************************************************************

node1.chinasoft.com : ok=3 changed=2 unreachable=0 failed=0

node2.chinasoft.com : ok=3 changed=2 unreachable=0 failed=0

②通过脚本修改httpd配置文件,修改端口为8080

# vim web.yaml

- hosts: all

remote_user: root

tasks:

- name: ensure apache latest version

yum: state=latest name=httpd

- name: apache configure file

copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf force=yes

notify:

- restart httpd

handlers:

- name: restart httpd

service: name=httpd state=restarted

执行剧本

# ansible-playbook web.yaml



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: