下面这些实战每一步我会进行详细解释,但是如果有些参数你还是看不到,那么请参考ansible各种参数详解以及实例如果ansible你还没有安装,这里面也有安装方法。
oles则是在ansible中,playbooks的目录组织结构。而模块化之后,成为roles的组织结构,易读,代码可重用,层次清晰。
实战目标:通过role远程部署nginx并配置
两台机器配置本地解析
[root@ansible-server ~]# vim /etc/hosts
192.168.13.128 ansible-server
192.168.13.129 ansible-web4
[root@ansible-web4 ~]# vim /etc/hosts
192.168.13.128 ansible-server
192.168.13.129 ansible-web4
添加主机组
[root@ansible-server ansible]# vim /etc/ansible/hosts
[webservers4]
ansible-web4
配置免密登录:
[root@ansible-server ~]# ssh-copy-id -i 192.168.13.129
#也可以添加多个被控制节点,这样你就可以同时安装多台
#如果你的其它机器上安装了nginx可以使用 yum remove nginx进行卸载
1.目录结构:
目录顺序:
role_name/ ---角色名称=目录
files/:存储一些可以用copy调用的静态文件。
tasks/: 存储任务的目录,此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由(与notify:名字相同,方便notify通知执行下一条命令)通过main.yml进行“包含”调用;
vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
templates/:存储由template模块调用的模板文本; (也可以调用变量)(以.j2结尾)
site.yml:定义哪个主机应用哪个角色
=========================================================================================
准备目录结构
[root@ansible-server ~]# cd /etc/ansible/roles/ #role为自带目录,如果不存在可以创建
[root@ansible-server roles]# mkdir nginx/{files,handlers,tasks,templates,vars} -p
创建文件:
[root@ansible-server roles]# touch site.yml nginx/{handlers,tasks,vars}/main.yml
[root@ansible-server roles]# yum install -y tree
1.创建nginx的测试文件
[root@ansible-server roles]# echo 1234 > nginx/files/index.html
2.安装nginx并配置模板
[root@ansible-server roles]# yum -y install epel-release ; yum -y install nginx #yum 安装nginx
[root@ansible-server roles]# cp /etc/nginx/nginx.conf nginx/templates/nginx.conf.j2 #.j2(jin jia 2 模板)
3.编写任务
[root@ansible-server roles]# vim nginx/tasks/main.yml
---
- name: install epel
yum: name=epel-release state=latest
- name: install nginx
yum: name=nginx state=latest
- name: copy nginx.conf templte
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf #template(默认路径在template下面)当然你写绝对路径也可以
- name: copy index.html
copy: src=/etc/ansible/roles/nginx/files/index.html dest=/usr/share/nginx/html/index.html
notify: start nginx #与下面handlers中的名字保持一致
4.编写handlers
[root@ansible-server roles]# vim nginx/handlers/main.yml #编写如下内容
---
- name: start nginx #和notify的名字必须一样
service: name=nginx state=started #启动
5.编写变量
[root@ansible-server roles]# vim nginx/vars/main.yml #添加如下内容
worker_connections: 2 #变量 : 值
6.准备配置文件
[root@ansible-server roles]# vim nginx/templates/nginx.conf.j2
修改成如下内容。其实就是将1改为了2
7.编写剧本
[root@ansible-server roles]# vim site.yml
---
- hosts: webservers4
user: root
roles:
- nginx #指的就是nginx那个目录
检测语法
[root@ansible-server roles]# ansible-playbook site.yml --syntax-check
playbook: site.yml
执行剧本:
[root@ansible-server roles]# ansible-playbook site.yml
查看:
[root@ansible-web4 ~]# cat /etc/nginx/nginx.conf | grep pro
worker_processes 2;
三台机器配置本地解析,一台做控制节点,另外两台做被控制节点
[root@ansible-server ~]# vim /etc/hosts
192.168.13.128 ansible-server
192.168.13.129 ansible-web1
192.168.13.133 ansible-web2
[root@ansible-web1 ~]# vim /etc/hosts
192.168.13.128 ansible-server
192.168.13.129 ansible-web1
192.168.13.133 ansible-web2
[root@ansible-web2 ~]# vim /etc/hosts
192.168.13.128 ansible-server
192.168.13.129 ansible-web1
192.168.13.133 ansible-web2
添加主机组
[root@ansible-server ansible]# vim /etc/ansible/hosts
[webservers]
ansible-web1
ansible-web2
配置免密登录:
[root@ansible-server ~]# ssh-copy-id -i 192.168.13.129
#也可以添加多个被控制节点,这样你就可以同时安装多台
如果你找不到安装包,这里有网盘地址
JDK+tomcat 密码:22ib
注意:如果你的安装包跟我的不一样,不要直接粘贴我的代码
[root@ansible-server ~]# cd /usr/src
[root@ansible-server src]# tar -xf apache-tomcat-8.5.45.tar.gz #解压
[root@ansible-server src]# cp apache-tomcat-8.5.45/bin/startup.sh . #将可执行文件拷贝过来
[root@ansible-server src]# ls #上传到这个目录下
apache-tomcat-8.5.45 debug kernels tomcat.retry
apache-tomcat-8.5.45.tar.gz jdk-8u211-linux-x64.tar.gz startup.sh tomcat.yml
[root@ansible-server src]# cat tomcat.yml
- hosts: webservers
user: root
tasks:
##配置JDK,上传jdk、tomcat的安装包到/usr/src
- name: configure Jdk1.8
copy: src=/usr/src/jdk-8u211-linux-x64.tar.gz dest=/usr/src
- name: unzip
shell: tar -xvzf /usr/src/jdk-8u211-linux-x64.tar.gz -C /usr/local
- name: rename to java
shell: mv /usr/local/jdk1.8.0_211 /usr/local/java #改名为java
- name: configure envirement1
shell: echo "JAVA_HOME=/usr/local/java" >> /etc/profile
- name: configure envirement2
shell: echo 'PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
##Tomcat
- name: copy tomcat
copy: src=/usr/src/apache-tomcat-8.5.45.tar.gz dest=/usr/src
- name: unzip tomcat
shell: tar -xvzf /usr/src/apache-tomcat-8.5.45.tar.gz -C /usr/local
- name: rename to tomcat
shell: mv /usr/local/apache-tomcat-8.5.45 /usr/local/tomcat
- name: copy startup file
copy: src=/usr/src/startup.sh dest=/usr/local/tomcat/bin
notify: start tomcat
handlers:
- name: start tomcat
shell: nohup /usr/local/tomcat/bin/startup.sh nohup: 忽略输入并把输出追加到"nohup.out"
[root@ansible-server src]# vim startup.sh
添加如下代码
#!/bin/sh
source /etc/profile #ansible是不登录用户直接远程执行,不会加载/etc/profile配置文件
如果上面的安装步骤你看不懂,可以参考tomcat安装详解这篇文章
分别去两台机器上查看是否安装成功
[root@ansible-web1 ~]# /usr/local/tomcat/bin/version.sh #查看是否安装成功
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.5.45
Server built: Aug 14 2019 22:21:25 UTC
Server number: 8.5.45.0
OS Name: Linux
OS Version: 3.10.0-693.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_211-b12
JVM Vendor: Oracle Corporation
[root@ansible-web2 ~]# /usr/local/tomcat/bin/version.sh #查看是否安装成功
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.5.45
Server built: Aug 14 2019 22:21:25 UTC
Server number: 8.5.45.0
OS Name: Linux
OS Version: 3.10.0-693.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_211-b12
JVM Vendor: Oracle Corporation
可以看到两台被控制节点都成功安装了JDK+tomact。
然后访问网页http://192.168.13.129:8080/
然后访问网页http://192.168.13.133:8080/