playbook实战优化

playbook实战优化

环境准备

主机名 外网IP 内网IP 角色 部署服务
m01 10.0.0.61 172.16.1.61 ansible管理端 ansible
backup 10.0.0.41 172.16.1.41 被管理端,rsync服务端,nfs备机 rsync、nfs
nfs 10.0.0.31 172.16.1.31 被管理端,rsync客户端,nfs服务端 rsync、nfs、sersync
web01 10.0.0.7 172.16.1.7 被管理端,nfs客户端,web nginx、nfs、wordpress
web02 10.0.0.8 172.16.1.8 被管理端,nfs客户端,web nginx、nfs、wordpress
db01 10.0.0.51 172.16.1.51 被管理端,数据库 mariadb

先决条件

1.首先在根目录下创建一个ansible_project 目录
[Tue Aug 17 04:17:56 root@m01 /]
 # mkdir /ansible_project
 
 2.进入到该目录下
[Tue Aug 17 04:17:56 root@m01 /]
 # cd /ansible_project/

 3.再该目录下分别创建需要准备的各项目的目录
[Tue Aug 17 04:19:25 root@m01 /ansible_project]
 # mkdir sersync
   mkdir mariadb
   mkdir nfs
   mkdir nginx
   mkdir php
   mkdir rsync
   
   4.因为是先安装rsync 所以我们先配置rsync项目,进入到rsync目录中
   [Tue Aug 17 04:38:50 root@m01 /ansible_project/rsync]
 # cp /root/ansible/rsyncd.conf   /ansible_project/rsync
 
[Tue Aug 17 05:31:21 root@m01 /ansible_project]
 # vim rsync/install_rsync.yml 
- name: Install Rsyncd 
  yum:
    name: "{{ pkg }}"
    state: present
  when: ansible_hostname == 'backup' or ansible_ho
stname == 'nfs'
  
[Tue Aug 17 05:15:28 root@m01 /ansible_project/rsync]
 # vim config_rsync.yml 
- name: Configure Rsyncd Conf
  copy:
    src: /ansible_project/rsync/rsyncd.conf
    dest: /etc/rsyncd.conf
  notify: Restarted rsyncd
  when: ansible_hostname == 'backup'

- name: Create Passwd File
  copy:
    content: rsync_backup:123
    dest: /etc/rsync.passwd
    mode: 0600
  when: ansible_hostname == 'backup'

- name: Create backup Directory
  file:
    path: /backup
    owner: www
    group: www
    state: directory
  when: ansible_hostname == 'backup'
  
[Tue Aug 17 05:17:05 root@m01 /ansible_project/rsync]
 # vim start_rsync.yml 
- name: Start Rsync
  service:
    name: rsyncd
    state: started
    enabled: yes
  when: ansible_hostname == 'backup'
    
   
[Tue Aug 17 05:13:39 root@m01 /ansible_project]
 # vim task.yml 
- hosts: all
  tasks:
    - include_tasks: rsync/install_rsync.yml
    - include_tasks: rsync/config_rsync.yml
    - include_tasks: rsync/start_rsync.yml
 
   
   
[Tue Aug 17 05:23:28 root@m01 /ansible_project]
 # mkdir group_vars
    mkdir host_vars
   
[Tue Aug 17 05:23:58 root@m01 /ansible_project]
 # vim host_vars/backup
pkg: rsync

[Tue Aug 17 05:26:55 root@m01 /ansible_project]
 # vim host_vars/nfs
pkg: rsync


nfs项目

[Tue Aug 17 05:38:51 root@m01 /ansible_project/nfs]
 # vim install_nfs.yml
- name: Install NFS
  yum:
    name: nfs-utils
    state: present
  when:
    - ansible_hostname == 'web01'
    - ansible_hostname == 'web02'
    - ansible_hostname == 'backup'
    - ansible_hostname == 'nfs'
    
[Tue Aug 17 06:13:10 root@m01 /ansible_project/nfs]
 # vim config_nfs.yml 
- name: Configure NFS Server
  copy:
    content: /data 172.16.1.0/24(rw,sync,all_squas
h,anonuid=666,anongid=666)
    dest: /etc/exports
  notify: Restarted nfs-utils
  when: ansible_hostname == 'nfs' or ansible_hostname == 'backup'

- name: Greate NFS Directory
  file:
    path: /data
    state: directory
    owner: www
    group: www
    mode: 0755
  when: ansible_hostname == 'nfs' or ansible_hostn
ame == 'backup'


- name: Create App Dirctory
  file:
    path: /app
    state: directory
  when: ansible_hostname == 'nfs'

[Tue Aug 17 05:52:14 root@m01 /ansible_project/nfs]
 # vim start_nfs.yml
- name: Start NFS Server
  service:
    name: nfs-server
    state: started
    enabled: yes
  when: ansible_hostname == 'nfs' or ansible_hostname == 'backup'
  
[Tue Aug 17 06:00:48 root@m01 /ansible_project]
 # vim task.yml 
- hosts: all
  tasks:
    - include_tasks: rsync/install_rsync.yml
    - include_tasks: rsync/config_rsync.yml
    - include_tasks: rsync/start_rsync.yml
    - include_tasks: nfs/install_nfs.yml
    - include_tasks: nfs/config_nfs.yml
    - include_tasks: nfs/start_nfs.yml

  handlers:
    - name: Restarted rsyncd
      service:
        name: rsyncd
        state: restarted

    - name: Restarted nfs-utils
      service:
        name: nfs-utils
        state: restarted

sersync项目

[Tue Aug 17 06:17:25 root@m01 /ansible_project/sersync]
 # cp /root/ansible/sersync2.5.4_64bit_binary_stable_final.tar.gz .
 [Tue Aug 17 06:22:30 root@m01 /ansible_project/sersync]
 # cp /root/ansible/conf.xml .
[Tue Aug 17 06:22:30 root@m01 /ansible_project/sersync]
cp /root/ansible/sersyncd.service .
 
[Tue Aug 17 06:17:56 root@m01 /ansible_project/sersync]
 # vim install_sersync.yml
- name: Install Sersync Server
  unarchive:
    src: /ansible_project/sersync/sersync2.5.4_64b
it_binary_stable_final.tar.gz
    dest: /app
  when: ansible_hostname == 'nfs'
  
[Tue Aug 17 06:22:55 root@m01 /ansible_project/sersync]
 # vim config_sersync.yml
- name: Configure Sersync Conf
  copy:
    src: /ansible_project/sersync/conf.xml
    dest: /app/GNU-Linux-x86/confxml.xml
    mode: 0755
  notify: Restarted sersyncd
  when: ansible_hostname == 'nfs'

- name: Push Sersync Start Shell
  copy: 
    src:
    /ansible_project/nfs/sersyncd.service
    dest: /usr/lib/systemd/system
  when: ansible_hostname == 'nfs'

- name: Create Rsyncd Password File
  copy:
    content: "123"
    dest: /etc/rsync.passwd
    mode: 0600 
  when: ansible_hostname == 'nfs'
  
[Tue Aug 17 06:32:08 root@m01 /ansible_project/sersync]
 # vim start_sersync.yml
- name: Start Sersync
  service:
    name: sersyncd
    state: started
    enabled: yes
  when: ansible_hostname == 'nfs'
  
[Tue Aug 17 06:35:00 root@m01 /ansible_project]
 # vim task.yml 
- hosts: all
  tasks:
    - include_tasks: rsync/install_rsync.yml
    - include_tasks: rsync/config_rsync.yml
    - include_tasks: rsync/start_rsync.yml
    - include_tasks: nfs/install_nfs.yml
    - include_tasks: nfs/config_nfs.yml
    - include_tasks: nfs/start_nfs.yml
    - include_tasks: sersync/install_sersync.yml
    - include_tasks: sersync/config_sersync.yml
    - include_tasks: sersync/start_sersync.yml

  handlers:
    - name: Restarted rsyncd
      service:
        name: rsyncd
        state: restarted

    - name: Restarted nfs-utils
      service:
        name: nfs-utils
        state: restarted

    - name: Restarted sersyncd
      service:
        name: sersyncd
        state: restarted

db01

[Tue Aug 17 06:41:31 root@m01 /ansible_project/mariadb]
 # vim install_db01.yml
- name: Install Maraidb
  yum:
    name:
      - mariadb-server
      - MySQL-python
    state: present
  when: ansible_hostname == 'db01'
  
[Tue Aug 17 06:46:48 root@m01 /ansible_project/mariadb]
 # vim start_db01.yml
- name: Start Maraidb
  service:
    name: mariadb
    state: started
    enabled: yes
  when: ansible_hostname == 'db01'

- name: Create wordpress Database
  mysql_db:
    name: wordpress
    state: present
    encoding: utf8
  when: ansible_hostname == 'db01'

- name: Create wordpress User
  mysql_user:
    name: wordpress
    state: present
    priv: "wordpress.*:ALL"
    host: "%"
    password: "123"
  when: ansible_hostname == 'db01'

[Tue Aug 17 06:52:35 root@m01 /ansible_project]
 # vim task.yml 
    - include_tasks: rsync/start_rsync.yml
    - include_tasks: nfs/install_nfs.yml
    - include_tasks: nfs/config_nfs.yml
    - include_tasks: nfs/start_nfs.yml
    - include_tasks: sersync/install_sersync.yml
    - include_tasks: sersync/config_sersync.yml
    - include_tasks: sersync/start_sersync.yml
    - include_tasks: mariadb/install_db01.yml
    - include_tasks: mariadb/start_db01.yml

  handlers:
    - name: Restarted rsyncd
      service:
        name: rsyncd
        state: restarted

    - name: Restarted nfs-utils
      service:
        name: nfs-utils
        state: restarted

    - name: Restarted sersyncd
      service:
        name: sersyncd

nginx

[Tue Aug 17 06:58:37 root@m01 /ansible_project/nginx]
 # vim install_nginx.yml
- name: Install nginx
  yum:
    name: nginx
    state: present
  when: ansible_hostname == 'web01' or ansib
le_hostname == 'web02'

[Tue Aug 17 07:23:06 root@m01 /ansible_project/nginx]
 # cp /root/ansible/nginx.conf .
[Tue Aug 17 07:23:16 root@m01 /ansible_project/nginx]
 # cp /root/ansible/blog.wk.com.conf .
 
[Tue Aug 17 07:46:34 root@m01 /ansible_project/nginx]
 # vim push.yml 
- name: Push All Conf
  copy:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
  with_items:
    - {src: "/ansible_project/nginx/nginx.conf",dest: "/etc/nginx/nginx.conf"}
    - {src: "/ansible_project/nginx/blog.wk.com.conf",dest: "/etc/nginx/conf.d/blog.drz.com.conf"}
    - {src: "/ansible_project/php/www.conf",dest: "/etc/php-fpm.d/www.conf"} 
  tags:
    - manager_nginx_server
  notify: Restart nginx
  when: ansible_hostname is match 'web*'

- name: Create Code Directory
  file:
    path: /code
    state: directory
    owner: www
    group: www
    mode: 0755
  when: ansible_hostname is match 'web*'

- name: Push code
  unarchive:
    src: /ansible_project/nginx/wordpress-5.7.2-zh_CN.tar.gz
    dest: /code
    owner: www
    group: www
  when: ansible_hostname is match 'web*'

- name: Create uploads Directory
  file:
    path: /code/wordpress/wp-content/uploads
    state: directory
    owner: www
    group: www
  when: ansible_hostname is match 'web*'
[Tue Aug 17 07:46:59 root@m01 /ansible_project/nginx]

[Tue Aug 17 07:46:59 root@m01 /ansible_project/nginx]
 # vim start_nginx.yml
- name: Start Nginx
  sercive:
    name: nginx
    state: started
    enabled: yes
  when: ansible_hostname is match 'web*'

- name: Mount Code Dirctory
  mount:
    path: /code/wordpress/wp-content/uploads
    src: 172.16.1.31:/data
    fstype: nfs
    state: mounted
  when: ansible_hostname is match 'web*'

- name: Shouquan
  file:
    path: /var/lib/nginx
    owner: www
    group: www
    recurse: yes
  when: ansible_hostname is match 'web*'
  
[Tue Aug 17 08:04:33 root@m01 /ansible_project]
 # cat task.yml 
- hosts: all
  tasks:
    - include_tasks: rsync/install_rsync.yml
    - include_tasks: rsync/config_rsync.yml
    - include_tasks: rsync/start_rsync.yml  
    - include_tasks: nfs/install_nfs.yml
    - include_tasks: nfs/config_nfs.yml
    - include_tasks: nfs/start_nfs.yml
    - include_tasks: sersync/install_sersync.yml
    - include_tasks: sersync/config_sersync.yml
    - include_tasks: sersync/start_sersync.yml
    - include_tasks: mariadb/install_db01.yml
    - include_tasks: mariadb/start_db01.yml
    - include_tasks: nginx/install_nginx.yml
    - include_tasks: nginx/start_nginx.yml
    - include_tasks: nginx/push.yml
    - include_tasks: php/install_php.yml
    - include_tasks: php/push_php.yml
    - include_tasks: php/start_php.yml

  handlers: 
    - name: Restarted rsyncd
      service:
        name: rsyncd
        state: restarted

    - name: Restarted nfs-utils
      service:
        name: nfs-utils
        state: restarted

    - name: Restarted sersyncd
      service:
        name: sersyncd
        state: restarted

    - name: Restart nginx
      service: 
        name: nginx
        state: reloaded

php

[Tue Aug 17 07:03:00 root@m01 /ansible_project/php]
 # vim push_php.yml
- name: Push PHP
  unarchive:
    src: /ansible_project/php/php.tgz
    dest: /tmp
  when: ansible_hostname == 'web01' or ansible_hostname == 'web02'

Tue Aug 17 07:06:28 root@m01 /ansible_project/php]
 # vim install_php.yml
- name: Install PHP
  shell: 'rpm -Uvh /tmp/*.rpm'
  ignore_errors: yes
  when: ansible_hostname == 'web01' or ansible_hostname == 'web02'
  
[Tue Aug 17 07:51:28 root@m01 /ansible_project/php]
 # vim start_php.yml 
- name: Start PHP
  service:
    name: php-fpm
    state: started
    enabled: yes
  when: ansible_hostname is match 'web*'

- name: Chmod Sock
  file:
    path: /dev/shm/php71w.sock
    owner: www
    group: www
  when: ansible_hostname is match 'web*'

创建统一用户关闭selinux和防火墙

[Tue Aug 17 08:13:23 root@m01 /ansible_project]
 # mkdir youhua
  cd youhua


[Tue Aug 17 08:09:55 root@m01 /ansible_project/youhua]
 # vim youhua.yml 
- name: Greate www Group
  group:
    name: www
    gid: 666
    state: present
- name: Greate www user
  user:
    name: www      
    uid: 666
    group: www
    shell: /sbin/nologin     
    state: present
    create_home: no
        
[Tue Aug 17 08:13:49 root@m01 /ansible_project]
 # vim task.yml 
- hosts: all
  tasks:
    - include_tasks: youhua/youhua.yml
    - include_tasks: rsync/install_rsync.yml
    - include_tasks: rsync/config_rsync.yml
    - include_tasks: rsync/start_rsync.yml
    - include_tasks: nfs/install_nfs.yml
    - include_tasks: nfs/config_nfs.yml
    - include_tasks: nfs/start_nfs.yml
    - include_tasks: sersync/install_sersync.yml
    - include_tasks: sersync/config_sersync.yml
    - include_tasks: sersync/start_sersync.yml
    - include_tasks: mariadb/install_db01.yml
    - include_tasks: mariadb/start_db01.yml
    - include_tasks: nginx/install_nginx.yml
    - include_tasks: nginx/start_nginx.yml
    - include_tasks: nginx/push.yml
    - include_tasks: php/install_php.yml
    - include_tasks: php/push_php.yml
    - include_tasks: php/start_php.yml

  handlers: 
    - name: Restarted rsyncd
      service:
        name: rsyncd
        state: restarted

    - name: Restarted nfs-utils
      service:
        name: nfs-utils
        state: restarted

    - name: Restarted sersyncd
      service:
        name: sersyncd
        state: restarted

    - name: Restart nginx
      service: 
        name: nginx
        state: reloaded
 
上一篇:ansible系列(31)--ansible实战之部署WEB集群架构(1)


下一篇:Ansible流程控制