实验环境:
操作系统 contos7.4
node 192.168.137.130 ansible
node1 192.168.137.131 nginx
node2 192.168.137.132 tomcatA
node3 192.168.137.133 tomcatB
开始
配置主机名解析
[root@node /]# vi /etc/hosts
192.168.137.130 node.cwf.com node
192.168.137.131 node1.cwf.com node1
192.168.137.132 node2.cwf.com node2
192.168.137.133 node3.cwf.com node3
配置主机将秘钥认证通信
ssh-keygen -t rsa -P ""
ssh-copy-id -i ~/.ssh/id_rsa.pub node1
…
安装ansible
yum -y install ansible -y
添加主机到主机清单文件中
[root@node /]# vi /etc/ansible/hosts
[lb]
node1
[tomcat]
node2
node3
node3
查看主机清单主机的可用主机
[root@node /]# ansible all --list-hosts
hosts (3):
node1
node2
node3
[root@node /]# ansible lb --list-hosts
hosts (1):
node1
[root@node /]# ansible tomcat --list-hosts
hosts (2):
node2
node3
定义roles目录
[root@node /]# mkdir -pv /etc/ansible/roles/{nginx,tomcat,jdk}/{files,templates,tasks,handlers,vars,meta,default}
mkdir: created directory ‘/etc/ansible/roles/nginx’
mkdir: created directory ‘/etc/ansible/roles/nginx/files’
mkdir: created directory ‘/etc/ansible/roles/nginx/templates’
mkdir: created directory ‘/etc/ansible/roles/nginx/tasks’
mkdir: created directory ‘/etc/ansible/roles/nginx/handlers’
mkdir: created directory ‘/etc/ansible/roles/nginx/vars’
mkdir: created directory ‘/etc/ansible/roles/nginx/meta’
mkdir: created directory ‘/etc/ansible/roles/nginx/default’
mkdir: created directory ‘/etc/ansible/roles/tomcat’
mkdir: created directory ‘/etc/ansible/roles/tomcat/files’
mkdir: created directory ‘/etc/ansible/roles/tomcat/templates’
mkdir: created directory ‘/etc/ansible/roles/tomcat/tasks’
mkdir: created directory ‘/etc/ansible/roles/tomcat/handlers’
mkdir: created directory ‘/etc/ansible/roles/tomcat/vars’
mkdir: created directory ‘/etc/ansible/roles/tomcat/meta’
mkdir: created directory ‘/etc/ansible/roles/tomcat/default’
mkdir: created directory ‘/etc/ansible/roles/jdk’
mkdir: created directory ‘/etc/ansible/roles/jdk/files’
mkdir: created directory ‘/etc/ansible/roles/jdk/templates’
mkdir: created directory ‘/etc/ansible/roles/jdk/tasks’
mkdir: created directory ‘/etc/ansible/roles/jdk/handlers’
mkdir: created directory ‘/etc/ansible/roles/jdk/vars’
mkdir: created directory ‘/etc/ansible/roles/jdk/meta’
mkdir: created directory ‘/etc/ansible/roles/jdk/default’
编辑nginx角色的任务文件
[root@node /]# cd /etc/ansible/roles/nginx/
- name: install nginx
yum: name=nginx state=latest
- name: install conf
copy: src=lb.conf dest=/etc/nginx/conf.d/
tags: conf
notify: restart nginx
- name: start nginx
service: name=nginx state=started enabled=yes
编辑handlers触发文件
[root@node nginx]# vim handlers/main.yml
- name: restart nginx
service: name=nginx state=restarted
定义Nginx的虚拟主机文件
[root@node nginx]# vim files/lb.conf
[root@node nginx]# cat files/lb.conf
upstream tcsrvs {
server node2.cwf.com:8080;
server node3.cwf.com:8080;
}
server {
listen 80;
server_name node1.cwf.com;
location / {
proxy_pass http://tcsrvs;
}
}
配置jdk角色
配置jdk角色的任务文件
[root@node roles]# cd jdk/
[root@node jdk]# ls
default files handlers meta tasks templates vars
[root@node jdk]# vim tasks/main.yml
[root@node jdk]# cat tasks/main.yml
- name: install openjdk
yum: name=java-{{ version }}-openjdk-devel state=latest #{{ version }}使用变量
- name: install env file #定义jdk程序的环境文件
copy: src=java.sh dest=/etc/profile.d/
编辑jdk的程序环境文件
vim files/java.sh
export JAVA_HOME=/usr
配置tomcat的角色
编辑tomcat的任务文件
[root@node tomcat]# vim tasks/main.yml
- name: install package
yum: name={{ item }} state=latest
with_items:
- tomcat
- tomcat-admin-webapps
- tomcat-webapps
- tomcat-docs-webapp
- name: start tomcat
service: name=tomcat state=started enabled=yes
编辑playbook样本文件,调用nginx角色
[root@node roles]# vim nginx.yml
- hosts: lb
remote_user: root
roles:
- nginx
- hosts: tomcat
remote_user: root
roles:
- { role: jdk,version: 1.8.0 } #调用jdk角色及定义version变量
- tomcat
注意 配网络源 本地 源 可能没有 tomcat 的包
执行nginx.yml样本文件
[root@node roles]# ansible-playbook nginx.yml
PLAY [lb] *******************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [node1]
TASK [nginx : install nginx] ************************************************************************************************************
ok: [node1]
TASK [nginx : install conf] *************************************************************************************************************
ok: [node1]
TASK [nginx : start nginx] **************************************************************************************************************
ok: [node1]
PLAY [tomcat] ***************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [node3]
ok: [node2]
TASK [jdk : install openjdk] ************************************************************************************************************
changed: [node3]
changed: [node2]
TASK [jdk : install env file] ***********************************************************************************************************
ok: [node2]
ok: [node3]
TASK [tomcat : install package] *********************************************************************************************************
[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply
multiple items and specifying `name: "{{ item }}"`, please use `name: ['tomcat', 'tomcat-admin-webapps', 'tomcat-webapps', 'tomcat-docs-
webapp']` and remove the loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply
multiple items and specifying `name: "{{ item }}"`, please use `name: ['tomcat', 'tomcat-admin-webapps', 'tomcat-webapps', 'tomcat-docs-
webapp']` and remove the loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
changed: [node2] => (item=[u'tomcat', u'tomcat-admin-webapps', u'tomcat-webapps', u'tomcat-docs-webapp'])
changed: [node3] => (item=[u'tomcat', u'tomcat-admin-webapps', u'tomcat-webapps', u'tomcat-docs-webapp'])
TASK [tomcat : start tomcat] ************************************************************************************************************
changed: [node2]
changed: [node3]
PLAY RECAP ******************************************************************************************************************************
node1 : ok=4 changed=0 unreachable=0 failed=0
node2 : ok=5 changed=3 unreachable=0 failed=0
node3 : ok=5 changed=3 unreachable=0 failed=0
浏览器访问 可以 成功 !!!!!!!!!!!