1、role介绍
ansible自1.2版本后引入的新特性,用于层次性、结构性的组织playbook。Roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来说,roles就是通过分别将变量、文件、任务、模板以及处理器放置于单独的目录中,并可以便捷的include他们的一种机制。角色一般基于主机结构构建服务的场景中,但也可以是用于构建守护进程等场景中。
Ansible的roles目录结构
project/ 项目名称,有以下子目录
tasks/ 定义task、role的基本元素,至少包含一个名为main.yaml的文件;其他需要的文件在此通过include进行包含
files/ 存放由copy或者script模块调用的文件
vars/ 不常用,定义变量;至少包含一个名为main.yaml的文件;其他需要的文件在此通过include进行包含
default/ 不常用,设定默认变量时使用此目录中的main.yaml
templates/ template模块查找所需要的模板问文件的目录
handlers/
meta/ 不常用,定义当前角色的特殊设定以及依赖关系
2、案例
在其中一台服务器上部署nginx,在两台服务器上部署tomcat,通过nginx做个反向代理,实现服务的轮询访问。
2.1 role的总入口文件
cat install.yml
- hosts: 10.99.200.110
remote_user: root
gather_facts: false
roles:
- nginx
- hosts: test
remote_user: root
gather_facts: false
roles:
- tomcat
2.2 nginx部署
step1:定义变量
cat vars/main.yml
# defile nginx deploy host ip
nginx_ip: '10.99.200.110'
nginx_port: 10086
nginx_core: 4
nginx_user: 'root'
tomcat_server: 'TMS'
tomcat_server1: '10.99.200.110'
tomcat_server2: '10.99.200.111'
tomcat_port1: 8080
tomcat_port2: 8080
step2:部署nginx
cat main.yml
- name: unpress nginx
unarchive: src=install_nginx-1.16.1.tar.gz dest=/tmp/
tags:
- unpress
- name: install nginx
shell: cd /tmp/install_nginx-1.16.1 && bash install.sh
- name: replace nginx conf
template: src=nginx.conf.ji2 dest=/usr/local/nginx/conf/nginx.conf
notify:
- reload-nginx
tags:
- reload nginx
- name: start nginx
shell: /etc/init.d/nginx -s reload
step3:nginx配置文件模板
cat templates/nginx.conf.ji2
user {
{
nginx_user }};
worker_processes {
{
nginx_core }};
events {
worker_connections 51200;
accept_mutex on;
multi_accept on;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
client_max_body_size 500M;
client_header_buffer_size 4k;
server_tokens off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /usr/local/nginx/logs/access.log main;
send_timeout 60;
tcp_nodelay on;
underscores_in_headers on;
keepalive_timeout 120;
gzip on;
gzip_min_length 10k;
gzip_buffers 16 64k;
gzip_http_version 1.1;
gzip_comp_level 3;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
proxy_temp_path /usr/local/nginx/ngx_cache 1 2;
proxy_cache_path /usr/local/nginx/ngx_cache/temp levels=1:2 keys_zone=content:1024m inactive=2d max_size=10G;
upstream {
{
tomcat_server }} {
server {
{
tomcat_server1 }}:{
{
tomcat_port1 }};
server {
{
tomcat_server2 }}:{
{
tomcat_port2 }};
}
server {
listen {
{
nginx_port }};
server_name {
{
nginx_ip }};
location / {
root html;
index index.html index.htm;
proxy_pass http://{
{
tomcat_server }};
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include /usr/local/nginx/conf/conf.d/*.conf;
}
step4:nginx触发操作
cat handlers/main.yml
- name: reload-nginx
shell: /etc/init.d/nginx -s reload
2.3 tomcat部署
step1:定义tomcat的安装参数
cat vars/main.yml
# defile tomcat deploy args
tomcat_path: "/u01/isi/application"
tomcat_version: "apache-tomcat-9.0.33"
step2:部署tomcat
cat tasks/main.yml
# install tomcat
- name: unpress pacakges
unarchive: src={
{
tomcat_version }}.tar.gz dest={
{
tomcat_path }}
- name: copy scripts for tomcat
copy: src=start.sh dest={
{
tomcat_path }}/{
{
tomcat_version }} mode=0755
- name: copy scripts for tomcat
copy: src=stop.sh dest={
{
tomcat_path }}/{
{
tomcat_version }} mode=0755
- name: start tomcat
shell: cd {
{
tomcat_path }}/{
{
tomcat_version }} && source /etc/profile && ./start.sh
step3:编写tomcat的启动脚本
cat files/start.sh
#!/bin/bash
cd /u01/isi/application/apache-tomcat-9.0.33
nohup ./bin/startup.sh &
cat files/stop.sh
#!/bin/bash
ps -ef | grep apache-tomcat-9.0.33 | grep -v grep | awk '{print $2}' | xargs kill -9
2.4 检测并执行role文件
ansible-playbook --check install.yml
ansible-playbook install.yml
2.5 浏览器验证
前台浏览器验证
后台日志验证
3、文件获取
链接:https://pan.baidu.com/s/1sHN790EMUISV1P9Okqwa_A
提取码:juey
都到这儿了,扫一扫吧!