Ansible--02 ansible playbook的应用

Ansible playbook的应用

什么是playbook

playbook(剧本)是由两部分组成

play:主机或者主机组(角色:可以有一个或者多个)

task:指定工作(动作,台词:一个或者多个)


在Ansible中"剧本文件"是以yml结尾的文件。

在SaltStack中"剧本文件"是以sls结尾的文件。

但是语法,使用的都是yaml语法

playbook的组成

playbook和Ad-Hoc对比

特点 PlayBook ad-hoc
完整性
持久性
执行效率
变量 支持 不支持
耦合度

1.PlayBook功能比ad-hoc更全,是对ad-hoc的一种编排.
2.PlayBook能很好的控制先后执行顺序, 以及依赖关系.
3.PlayBook语法展现更加的直观.
4.playbook可以持久使用,ad-hoc无法持久使用.

YAML语法

缩进:

中国:
  上海: 浦东新区
  北京: 
    - 朝阳区
    - 海淀区
    - 昌平区
    - 大兴区

美国:
  德克萨斯州: 电信一区
  
冒号:只要不是以冒号结尾的冒号,冒号后面都要加空格
短横线-:代表一个层级,在Python中专业叫法,代表是一个列表

也可以查看官方文档

playbook编写

host : 对哪些主机进行操作

remote_user : 使用什么用户执行

tasks : 具体执行什么任务

注意: 可查看官方文档, ansible-playbook +模块名

** copy模块: ** ansible-playbook copy

示例:

[root@m01 ~]# cat foo.yml
---
- hosts: all
  remote_user: root
  vars:
    file_name: zls.txt
  tasks:
    - name: Create New File
      file: name=/tmp/{{ file_name }} state=touch

检查语法

#检查mysql_zh.yml语法
[root@m01 mariadb]# ansible-playbook --syntax-check mysql_zh.yml  
playbook: mysql_zh.yml
#测试安装
[root@m01 mariadb]# ansible-playbook -C  mysql_zh.yml 
#执行playbook,安装
[root@m01 mariadb]# ansible-playbook  mysql_zh.yml 

安装httpd练习

1.安装httpd

[root@m01 httpd]# vim httpd.yml
#角色
- hosts: web_group

#动作
  tasks:
    - name: install httpd server
      yum:
        name: httpd
        state: present

#检查语法
[root@m01 httpd]# ansible-playbook --syntax-check httpd.yml 

playbook: httpd.yml

#执行
[root@m01 httpd]# ansible-playbook  httpd.yml 
PLAY [web_group] ********************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************
ok: [zls_web02]
ok: [zls_web01]

TASK [install httpd server] *********************************************************************************************************
changed: [zls_web01]
changed: [zls_web02]

PLAY RECAP **************************************************************************************************************************
zls_web01                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
zls_web02                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

2.启动httpd

#角色
- hosts: web_group

#动作
  tasks:
    - name: install httpd server
      yum:
        name: httpd
        state: present

    - name: start httpd server
      systemd:
        name: httpd
        state: started
        enabled: yes

3.关闭防火墙

- hosts: web_group

#动作
  tasks:
#关闭防火墙
    - name: Stop Firewalld
      systemd:
        name: firewalld
        state: stopped
        enabled: no

#安装httpd
    - name: install httpd server
      yum:
        name: httpd
        state: present

#开启httpd
    - name: start httpd server
      systemd:
        name: httpd
        state: started
        enabled: yes

4.给默认站点页面

#角色
- hosts: web_group

#动作
  tasks:
#关闭防火墙
    - name: Stop Firewalld
      systemd:
        name: firewalld
        state: stopped
        enabled: no

#安装httpd
    - name: install httpd server
      yum:
        name: httpd
        state: present

#开启httpd
    - name: start httpd server
      systemd:
        name: httpd
        state: started
        enabled: yes

#配置默认页面
    - name: Config index.html
      copy:
        content: "zls_web_page"
        dest: /var/www/html/index.html
        group: root
        owner: root
        mode: 0644

5.给不同的web配置不同的页面(多个play)

#角色
- hosts: web_group

#动作
  tasks:
#关闭防火墙
    - name: Stop Firewalld
      systemd:
        name: firewalld
        state: stopped
        enabled: no

#安装httpd
    - name: install httpd server
      yum:
        name: httpd
        state: present

#开启httpd
    - name: start httpd server
      systemd:
        name: httpd
        state: started
        enabled: yes

- hosts: zls_web01
  tasks:

    - name: Config index.html
      copy:
        content: "zls_web01_page"
        dest: /var/www/html/index.html
        group: root
        owner: root
        mode: 0644

- hosts: zls_web02
  tasks:

    - name: Config index.html
      copy:
        content: "zls_web02_page"
        dest: /var/www/html/index.html
        group: root
        owner: root
        mode: 0644

rsyncd实战

1.环境准备

主机名 wanIP lanIP 服务 角色
m01 10.0.0.61 172.16.1.61 Ansible 控制端(导演)
backup 10.0.0.41 172.16.1.41 rsync服务端 被控端(男一)
web01 10.0.0.7 172.16.1.7 rsync客户端 被控端(女二)
web02 10.0.0.8 172.16.1.8 rsync客户端 被控端(女二)

2.战前准备

#准备项目目录
[root@m01 project]# mkdir rsyncd

#配置文件
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

#准备主机清单
[web_group]
zls_web01 ansible_ssh_host=172.16.1.7
zls_web02 ansible_ssh_host=172.16.1.8

[backup_group]
backup ansible_ssh_host=172.16.1.41

[rsync_server:children]
web_group
backup_group

3.写剧本

1)安装rsync服务端和客户端

2)配置rsync服务端

3)创建目录授权

4)创建密码文件授权

5)创建系统用户

6)启动rsync并加入开机自启

[root@m01 rsyncd]# vim rsyncd.yml
[root@m01 rsyncd]# cat rsyncd.yml 
- hosts: rsync_server
  tasks:

#关闭防火墙
    - name: Stop firewalld
      systemd:
        name: firewalld
        state: stopped
        enabled: no

    - name: SCP YUM REPO
      copy:
        src: /etc/yum.repos.d/CentOS-Base.repo
        dest: /etc/yum.repos.d/

#创建系统用户组
    - name: Create www Group
      group:
        name: www
        gid: 666
        state: present
#创建系统用户
    - name: Create www User
      user:
        name: www
        uid: 666
        group: www
        create_home: false
        shell: /sbin/nologin
#安装rsync服务端和客户端
    - name: Install rsyncd Server
      yum:
        name: rsync
        state: present

- hosts: backup_group
  tasks:
#配置rsync服务端
    - name: Config rsyncd Conf
      copy:
        src: ./rsyncd.j2
        dest: /etc/rsyncd.conf
        owner: root
        group: root
        mode: 0644

#创建目录授权
    - name: Create dir
      file:
        path: /backup
        state: directory
        owner: www
        group: www
        mode: 0755
        recurse: yes

#创建密码文件授权
    - name: Create passwd file
      copy:
        content: "rsync_backup:123"
        dest: /etc/rsync.passwd
        owner: root
        group: root
        mode: 0600


#启动rsync并加入开机自启
    - name: Start rsyncd
      systemd:
        name: rsyncd
        state: started
        enabled: yes

#配置客户端
- hosts: web_group
  tasks:
    - name: Config client passwd file
      copy:
        content: "123"
        dest: /etc/rsync.pass
        owner: root
        group: root
        mode: 0600

实战1:

使用Ansible-playbook部署以下内容:

  • web01 web02 提交作业代码 httpd php

  • rsync 备份脚本,加入crontab,定时发送邮件

  • nfs 挂载站点目录,实现共享存储

  • sersync 实时同步

    ansible-playbook --syntax-check cron.yml


解决:

  1. 准备基本纯净环境
  2. 编辑主机清单
  3. 传密钥
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
···
  1. 编写ansible-playbook
[root@m01 project]# cat anible.yml 
- hosts: all
  tasks:
  #关闭防火墙
    - name: stop firewalld
      systemd: 
        name: firewalld
        state: stopped
        enabled: no
  #创建用户及组
    - name: create www group
      group:
        name: www
        gid: 666
        state: present
    - name: create www user
      user:
        name: www
        uid: 666
        group: www
        create_home: false
        shell: /sbin/nologin
#远程安装httpd        
- hosts: web_group
  tasks:
    - name: Install httpd server 
      yum:
        name: httpd 
        state: present
#远程安装php 
    - name: Install php  server 
      yum:
        name: php
        state: present
#上传作业代码到站点目录并给权限
    - name: copy zuoye
      copy: 
        src: /root/project/httpd/zuoye/
        dest: /var/www/html/
        group: www
        owner: www
        mode: 0755
#copy配置文件
    - name: copy httpd.conf
      copy:
        src: /etc/httpd/conf/httpd.conf 
        dest: /etc/httpd/conf/
#创建目录       
    - name: create dir
      file:
        path: /var/www/html/uploads
        state: directory
        owner: www
        group: www
        mode: 0755
        recurse: yes
 #启动httpd
    - name: start httpd server
      systemd:
        name: httpd
        state: restarted
        daemon_reload: yes
        enabled: yes

#部署nfs服务   
- hosts: nfs_server
  tasks:
#安装nfs
    - name: Install nfs-utils server 
      yum:
        name: nfs-utils
        state: present
#部署nfs服务端
- hosts: nfs_group
  tasks:
#创建配置文件
    - name: copy config file
      copy:
        src: /root/project/nfs/exports
        dest: /etc/exports
#创建共享目录
    - name: create dir
      file:
        path: /data
        state: directory
        owner: www
        group: www
        mode: 0755
        recurse: yes
 #启动nfs服务
    - name: start nfs-server
      systemd:
        name: nfs-server
        state: restarted
        daemon_reload: yes
        enabled: yes
#nfs客户端挂载共享目录
- hosts: web_group
  tasks:
    - name: Mount /data
      mount:
        path: /var/www/html/uploads
        src: 172.16.1.31:/data
        fstype: nfs
        state: mounted

#部署rsync服务
- hosts: rsync_server
  tasks:
#安装rsync服务
    - name: install rsyncd server
      yum: 
        name: rsync
        state: present
#部署rsync服务端
- hosts: backup_group
  tasks:
#copy配置文件
    - name: config rsyncd conf
      copy:
        src: /root/project/rsyncd/rsyncd.j2
        dest: /etc/rsyncd.conf
        owner: root
        group: root
        mode: 0644
#根据配置文件创建对应的目录
    - name: create dir
      file:
        path: /backup
        state: directory
        owner: www
        group: www
        mode: 0755
        recurse: yes
    - name: create dir
      file:
        path: /data
        state: directory
        owner: www
        group: www
        mode: 0755
        recurse: yes
#根据配置文件创建对应的密码文件
    - name: create passwd file
      copy:
        content: "rsync_backup:123"
        dest: /etc/rsync.passwd
        owner: root
        group: root
        mode: 0600
#启动rsync
    - name: start rsyncd
      systemd:
        name: rsyncd
        state: started
        enabled: yes
#备份脚本
- hosts: web_group
  tasks:
    - name: create  file
      copy:
        src: /root/project/cron/web.sh
        dest: /root/rsync.sh
#加入cron定时任务
    - name: Creates an cron
      cron:
        name: "每天凌晨执行脚本"
        minute: "0"
        hour: "0"
        job: "/bin/bash /root/rsync.sh > /dev/null"

#安装邮件功能
- hosts: backup_group
  tasks:
    - name: install mailx
      yum:
        name: mailx
        state: present
 #copy邮件配置文件
    - name: copy mailx file
      copy:
        src: /root/project/cron/mailx.rc
        dest: /etc/mail.rc
#校验发邮件脚本      
    - name: create  file
      copy:
        src: /root/project/cron/backup_md5.sh
        dest: /root/backup_md5.sh 
#定时执行脚本
    - name: Creates an cron
      cron:
        name: "每天凌晨执行脚本"
        minute: "0"
        hour: "0"
        job: "/bin/bash /root/backup_md5.sh > /dev/null"
#部署实时同步服务端
- hosts: nfs_group
  tasks:
    - name: install rsyncd server
      yum:
        name: rsync
        state: present    
    - name: install inotify-tools server
      yum:
        name: inotify-tools
        state: present
#创建配置文件对应的密码文件
    - name: create passwd file
      copy:
        content: "123"
        dest: /etc/rsync.pass
        owner: root
        group: root
        mode: 0600
#copy实时同步解压目录到站点目录
    - name: copy sersync file
      copy:
        src: /usr/local/sersync/
        dest: /usr/local/sersync/
        mode: 0755 
#启动任务
    - name: shell 
      shell: "/usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml"

  1. 对应的配置文件
#nfs配置文件
[root@m01 nfs]# cat exports 
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

#rsync配置文件
[root@m01 rsyncd]# cat rsyncd.j2 
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
[nfs]
comment = welcome to oldboyedu nfs!
path = /data

#定时任务对应的脚本
[root@m01 cron]# pwd
/root/project/cron
#校验脚本
[root@m01 cron]# cat backup_md5.sh 
#!/bin/bash
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
H=`hostname`
I=`ifconfig eth1|awk 'NR==2{print $2}'`
D=`date +%F`
S=${H}_${I}_${D}
BD=/backup

md5sum -c /backup/*.txt|mail -s "${D}:校验结果" 861962063@qq.com
find ${BD} -type d -mtime +180|xargs rm -fr

#mailx配置文件
[root@m01 cron]# cat mailx.rc 
...
set bsdcompat
et from=861962063@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=861962063@qq.com
set smtp-auth-passwordwzooyakiejsrbbjc
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
[root@m01 cron]# 

[root@m01 cron]# cat web.sh 
#!/bin/bash

PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
H=`hostname`
I=`ifconfig eth1|awk 'NR==2{print $2}'`
D=`date +%F`
S=${H}_${I}_${D}
BD=/backup
export RSYNC_PASSWORD=123

mkdir -p ${BD}/${S}

tar zcf /backup/${S}/conf.tar.gz /etc/passwd &>/dev/null

md5sum /backup/${S}/conf.tar.gz  > /backup/${H}.txt
rsync -az /backup/ rsync_backup@172.16.1.41::backup
find ${BD} -type d -mtime +7|xargs rm -fr

#实时同步配置文件
[root@m01 sersync]# cat confxml.xml 
...
    <inotify>
    <delete start="true"/>
    <createFolder start="true"/>
    <createFile start="true"/>
    <closeWrite start="true"/>
    <moveFrom start="true"/>
    <moveTo start="true"/>
    <attrib start="true"/>
    <modify start="true"/>
    </inotify>

    <sersync>
    <localpath watch="/data">
        <remote ip="172.16.1.41" name="nfs"/>
        <!--<remote ip="192.168.8.39" name="tongbu"/>-->
        <!--<remote ip="192.168.8.40" name="tongbu"/>-->
    </localpath>
    <rsync>
        <commonParams params="-az"/>
        <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/>
        <userDefinedPort start="false" port="874"/><!-- port=874 -->
        <timeout start="true" time="100"/><!-- timeout=100 -->
        <ssh start="false"/>


  1. 执行playbook
#检查playbook语法
[root@m01 project]# ansible-playbook --syntax-check  anible.yml 

playbook: anible.yml
#测试
[root@m01 project]# ansible-playbook -C  anible.yml 
#执行
[root@m01 project]# ansible-playbook anible.yml 
  1. 浏览器测试

上传照片到web01,同时检查共享目录,实时同步的目录

上传照片到web02,同时检查共享目录,实时同步的目录

实战2:

源码安装nginx,拆分数据库,一键部署知乎搭建好的页面

准备工作

  1. 准备基本纯净环境
  2. 编辑主机清单
  3. 传密钥
  4. 编写部署php,源码安装nginx, 上传wordpress和zh代码的playbook
  5. 执行playbook,域名解析后浏览器访问,仅能访问到wordpress和zh的首页面,编辑不了。
  6. 编写playbook 部署数据库Db01--10.0.0.51, 并创建wordpress和zh的库,给权限,允许 远程连接访问
  7. 执行完playbook,访问wordpress和知乎,登录并发表文章
  8. 在web上,把 wordpress 和 zh 的 目录打包压缩,发送给主机端。并修改playbook 对应的路径
  9. 把db01,上对应的wordpress和zh库,导出发送给主机端,并修改playbook对应的路径

执行

  1. 初始化环境 web, db01

  2. 一键执行完playbook ,域名访问浏览器,即可访问到写好文章的wordpress,和zh.

#需要的playbook

[root@m01 nginx]# cat lnmp.yml
- hosts: web_group
  tasks:
#关闭防火墙
    - name: stop firewalld
      systemd: 
        name: firewalld
        state: stopped
        enabled: no
#copy源   
    - name: copy yum repo
      copy:
        src: /etc/yum.repos.d/CentOS-Base.repo
        dest: /etc/yum.repos.d/
        owner: root
        group: root
        mode: 0644
 #关闭selinux   
    - name: Disable SElinux
      selinux: 
        state: disabled 
    - name: install unzip
      yum: 
        name: unzip
        state: present
#创建用户及组
    - name: create www group
      group:
        name: www
        gid: 666
        state: present
    - name: create www user
      user:
        name: www
        uid: 666
        group: www
        create_home: false
        shell: /sbin/nologin
 #解压php压缩包到对端 对应目录下   
    - name: tar php
      unarchive:
        src: /root/project/nginx/php.tar.gz
        dest: /usr/local/src
        copy: yes
#安装php
    - name: install php
      shell: "cd /usr/local/src/php && rpm -Uvh *rpm"
#安装nginx依赖
    - name: install nginx  require package
      yum:
        name: openssl-devel
        state: present
#解压nginx压缩包到对端   
    - name: tar nginx
      unarchive:
        src: /root/project/nginx/nginx-1.16.0.tar.gz
        dest: /root
        copy: yes
#源码指定模块编译安装   
    - name: configure nginx
      shell: "cd /root/nginx-1.16.0 && ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module && make && make install"
#copy nginx启动文件
    - name: scp nginx shell
      copy: 
        src: /root/project/nginx/nginx.service
        dest: /usr/lib/systemd/system
#copy nginx主配置文件    
    - name: scp nginx default conf
      copy:
        src: /root/project/nginx/nginx.conf
        dest: /usr/local/nginx/conf/
#创建主配置文件对应的目录
    - name: creat nginx conf.d
      file:
        path: /usr/local/nginx/conf/conf.d
        state: directory
#copy 博客配置文件
    - name: scp nginx conf
      copy:
        src: /root/project/nginx/wordpress.conf
        dest: /usr/local/nginx/conf/conf.d/
#copy知乎配置文件   
    - name: scp zh conf
      copy:
        src: /root/project/nginx/zh.conf
        dest: /usr/local/nginx/conf/conf.d/
#启动nginx
    - name: start nginx
      systemd:
        name: nginx
        state: restarted
        enabled: yes
#修改对端php配置文件qidong#修改对端php配置文件启动用户   
    - name: config php conf
      shell: "sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf && sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf" 
#启动php     
    - name: start php
      systemd:
        name: php-fpm
        state: restarted
        enabled: yes  
 #创建博客知乎对应目录   
    - name: creat code  dir
      file:
        path: /code
        state: directory
        owner: www
        group: www
        mode: 0755
        recurse: yes
#解压写好文章的博客到对端
    - name: unarchive wordpress code 
      unarchive:
        src: /root/project/nginx/wordpress.tgz
        dest: /code
        owner: www
        group: www
        mode: 0755
#创建知乎对应目录          
    - name: creat zh  dir
      file:
        path: /code/zh
        state: directory
        owner: www
        group: www
        mode: 0755
        recurse: yes
#解压写好文章的知乎压缩包到对端
    - name: unarchive zh  code
      unarchive:
        src: /root/project/nginx/zh.zip
        dest: /code/zh
        owner: www
        group: www
        mode: 0755

  1. 对应需要的配置文件
#nginx 主配置文件
[root@m01 nginx]# cat nginx.conf 

user  www;
worker_processes  1;

...

http {
    include       mime.types;
    default_type  application/octet-stream;
    include  /usr/local/nginx/conf/conf.d/*.conf;
...

#nginx启动文件    
[root@m01 nginx]# cat nginx.service 
[Unit]
Description=nginx server daemon
DOCUMENTATION=man:nginx
After=network.target 

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
#systemctl daemon-reload
#systemctl start nginx.service
#systemctl enable  nginx.service
#systemctl status  nginx.service

#wordpress配置文件
[root@m01 nginx]# cat wordpress.conf 
server {	
	listen 80;
	server_name www.gjy.com;

	location / {
		root /code/wordpress;
		index index.php index.html;
	}
	
	location ~.php$ {
		root /code/wordpress;
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}
}
#知乎对应配置文件
[root@m01 nginx]# cat zh.conf 
server {	
	listen 80;
	server_name www.zh.com;

	location / {
		root /code/zh;
		index index.php index.html;
	}
	
	location ~.php$ {
		root /code/zh;
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}

}


域名解析到web0 --10.0.0.7,在浏览器访问,www.gjy.com,并写篇文章

实战mysql迁移

1.到web02,把写好文章的wordpress,打包成名称修改为 wordpress.tgz,并远程推送到 m01--10.0.0.61 对应目录下

 #需要的安装包   
[root@m01 nginx]# ll
total 51736
-rw-r--r-- 1 root root      788 Sep 27 09:51 lnmp.yml.gz
-rw-r--r-- 1 root root     3103 Sep 27 13:15 lnmp_zh.yml
-rw-r--r-- 1 root root  1032345 Sep 18 14:55 nginx-1.16.0.tar.gz
-rw-r--r-- 1 1001 1001     2701 Sep 27 06:10 nginx.conf
-rw-r--r-- 1 root root      418 Sep 27 05:47 nginx.service
-rw-r--r-- 1 root root 20663838 Sep 18 17:34 php.tar.gz
-rw-r--r-- 1 root root      297 Sep 27 08:05 wordpress.conf
-rw-r--r-- 1 root root 11190716 Sep 27 09:40 wordpress.tgz
-rw-r--r-- 1 root root  2478168 Sep 27 12:25 z_blog.zip
-rw-r--r-- 1 root root      282 Sep 27 11:34 zh.conf
-rw-r--r-- 1 root root 17572114 Sep 27 13:01 zh.zip

还原web02,修改playbook,再重新推送

[root@m01 nginx]# cat lnmp.yml 
- hosts: gjy_web02
  tasks:
    - name: stop firewalld
      systemd: 
        name: firewalld
        state: stopped
        enabled: no
...

  
#解压写好文章的博客到对端
    - name: unarchive wordpress code 
      unarchive:
        src: /root/project/nginx/wordpress.tgz
        dest: /code
        owner: www
        group: www
        mode: 0755

  ...
#解压写好文章的知乎压缩包到对端
    - name: unarchive zh  code
      unarchive:
        src: /root/project/nginx/zh.zip
        dest: /code/zh
        owner: www
        group: www
        mode: 0755

浏览器能访问到界面,但是是db01数据库的

关闭db01的数据库,或者修改web02的连接数据库的主机名,再次访问,都会出现500 的错误

一键执行playbook,完成数据迁移,访问到wordpres写好文章的页面

[root@m01 mariadb]# cat mysql.yml 
- hosts: gjy_db02
  tasks:
    - name: install python mysql
      yum:
        name: MySQL-python
        state: present
#安装mariadb
    - name: install mariadb server
      yum:
        name: mariadb-server
        state: present
#启动mariadb
    - name: start mariadb server
      systemd:
        name: mariadb
        state: restarted
        enabled: yes  
#创建wordpress库
    - name: create database  wordpress
      mysql_db:
        name: wordpress
        state: present
#授权wordpress库
    - name: create wordpress  user
      mysql_user: 
        name: "wordpress"
        password: "123"
        host: '172.16.1.%'
        priv: '*.*:ALL'
        state: present
 #copy写好文章的wordpress库到对端
    - name: scp mysql wordpress
      copy: 
        src: /root/project/mariadb/full.sql
        dest: /tmp/full.sql
 #导入写好文章的wordpress库
    - name: import full.sql
      mysql_db:
        state: import
        name: wordpress
        target: /tmp/full.sql
 #copy写好文章的zh库到对端
    - name: scp mysql zh
      copy:
        src: /root/project/mariadb/zh.sql
        dest: /tmp/zh.sql
#导入写好文章的zh库
    - name: import zh.sql
      mysql_db:
        state: import
        name: zh
        target: /tmp/zh.sql

执行playbook, 可以先查看db02的数据库

[root@db02 ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 3
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]>  select user,host from mysql.user;
+-----------+------------+
| user      | host       |
+-----------+------------+
| root      | 127.0.0.1  |
| wordpress | 172.16.1.% |
| root      | ::1        |
|           | db01       |
| root      | db01       |
|           | localhost  |
| root      | localhost  |
+-----------+------------+
7 rows in set (0.00 sec)

#查看wordpress库
MariaDB [(none)]> show tables from wordpress;
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
.....

#查看zh库
MariaDB [(none)]> show tables from zh;
+--------------------------------+
| Tables_in_zh                   |
+--------------------------------+
| aws_active_data                |
| aws_answer                     |
| aws_answer_comments            |
| aws_answer_thanks              |
| aws_answer_uninterested        |
 ......

迁移之后,10.0.0.51db01的数据库关闭,

域名访问www.gjy.com,都可以访问到wordpress写好文章的界面

域名访问www.zh.com,能访问到知乎的界面

原文地址:https://www.cnblogs.com/gongjingyun123--/p/11548280.html