你是自己的主角,写个ansible剧本,让架构搭建更容易

Posted Friends of the wind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你是自己的主角,写个ansible剧本,让架构搭建更容易相关的知识,希望对你有一定的参考价值。

目标:

重点命令单词
syntax语法 check检查,示例:对剧本语法检查 ansible-playbook --syntax-check
tasks任务, 示例:列出任务ansible-playbook --list-tasks
tags标签,示例:ansible-playbook --list-tags:列出标签


学习内容:

playbook配置web–nfs–rsync架构环境

1、 搭建 环境
yaml缩进需要2字符,默认的tab键是四个字符,使用tab键,需要修改.vimrc

修改主机hosts文件

(1)安装ansible
配yum源下载两个文件:
epel源(扩展包):wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
linux镜像源(组包):wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装
yum -y install ansible

(2)ssh公钥
ssh-keygen -t rsa
ssh-copy-id root@web #web服务器
ssh-copy-id root@nfs #nfs服务器

ssh-copy-id root@rsync #rsync服务器,以当前登录用户远程ssh可以省略root

(3)复制/etc/hosts到被管理端

(4)创建ansible目录
mkdir -p /etc/ansible/ansible_playbook/{conf,file,scripts,tools}
上传配置所需文件:
ansible剧本文件
传完后查看:

血的教训,先修改文件,再做后面的,否则,忘记修改某一项,半天找不出问题!
tools: vim confxml.xml

conf: vim exports (改成实验环境的网段)

vim rsyncd.conf

scripts: vim rsync_backup.sh

vim rsync_check.sh (改成您的邮箱地址)

(5)创建ansible清单
vim /etc/ansible/hosts
添加:
[web]
web
[nfs]
nfs
[backup]
rsync
保存退出
关闭防火墙,也等于测试有没有问题。

2、 基础配置
注意:service模块,不好使,建议用shell代替,有的时候,什么都没问题,执行报错,再执行一次就成功。ansible也有缺点,主机状态和参数稍微变化,更新不过来,毕竟没有代理程序。
(1)网络环境(关闭firewall selinux)
(2)epel仓库
(3)安装rsync,nfs-utils
(4)创建组
(5)创建用户
(6)创建目录,并修改权限
(7)推送脚本
(8)推送rsync客户端密码文件,修改权限
(9)计划任务
编辑:
vim /etc/ansible/ansible_playbook/base.yaml

- hosts:  all
  tasks:
    - name: clear repos.d
      file: path=/etc/yum.repos.d/ state=absent

    - name: create repos.d
      file: path=/etc/yum.repos.d/ state=directory

    - name: install base repo
      get_url: url=http://mirrors.aliyun.com/repo/Centos-7.repo dest=/etc/yum.repos.d/CentOS-Base.repo

    - name: install epel repo
      get_url:  url=http://mirrors.aliyun.com/repo/epel-7.repo dest=/etc/yum.repos.d/epel.repo

    - name: install rsync nfs-utils
      yum:  name=rsync,nfs-utils state=installed

    - name: create group www
      group:  name=www gid=666

    - name: create user www
      user: name=www uid=666  create_home=no shell=/sbin/nologin

    - name: create rsync client password
      copy: content='1' dest=/etc/rsync.pass mode=600

    - name: create scripts directory
      file: path=/server/scripts/ recurse=yes state=directory

    - name: push scripts
      copy: src=./scripts/rsync_backup.sh dest=/server/scripts

    - name: crontab
      cron: name="backup scripts" hour=01 minute=00 job="/usr/bin/bash  /server/scripts/rsync_backup.sh &> /dev/null"

报错处理:

主机:2.4yum问题,经过处理,还是不行,重装ansible,不要用这个虚拟机。

3、 rsync配置
(1)安装rsync
(2)配置
(3)启动
(4)脚本
(5)计划任务

编辑:
vim /etc/ansible/ansible_playbook/rsync.yaml

- hosts:  rsync
  tasks:

    - name: install rsync
      yum:  name=rsync state=installed

    - name: config rsync
      copy: src=/etc/ansible/ansible_playbook/conf/rsyncd.conf dest=/etc/rsyncd.conf
      notify: restart rsync

    - name: create rsync local user
      copy: content='rsync_backup:1' dest=/etc/rsync.password mode=600

    - name: create data
      file: path=/data state=directory recurse=yes owner=www group=www mode=755

    - name: create backup
      file: path=/backup state=directory recurse=yes owner=www group=www mode=755

    - name: start rsync
      shell:  rsync  --daemon

    - name: push check scripts
      copy: src=./scripts/rsync_check.sh dest=/server/scripts/

    - name: crond check scripts
      cron: name="check scripts"  hour=05 minute=00 job="/usr/bin/bash  /server/scripts/rsync_check.sh &> /dev/null"

  handlers:
    - name: restart rsync
      service:  name=rsyncd state=restarted

4、 nfs部署
(1)安装nfs-utils
(2)配置
(3)启动

编辑:
vim /etc/ansible/ansible_playbook/nfs.yaml

- hosts:  nfs
  tasks:

    - name:  install nfs
      yum: name=nfs-utils state=installed
      notify: restart nfs

    - name: config nfs
      copy: src=./conf/exports dest=/etc/exports

    - name: create data
      file: path=/data state=directory recurse=yes owner=www group=www mode=755

    - name: start nfs
      shell: systemctl restart nfs

  handlers:
    - name: restart nfs
      shell: systemctl restart nfs

5、sersync部署
(1)在ansible服务器先下载sersync
(2)解压到/etc/ansible/ansible_playbook/并修改配置文件
(3)推送到nfs
(4)启动sersync

编辑:
vim /etc/ansible/ansible_playbook/sersync.yaml

- hosts: nfs
  tasks:
    - name: scp sersync
      copy: src=./tools/sersync/ dest=/usr/local/sersync owner=www group=www mode=755

    - name: start sersync
      shell:  pgrep sersync;
            [ $? -eq 0 ] || /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml

6、web部署
(1)本地安装httpd
(2)修改配置文件,复制到/etc/ansible/ansible_playbook/conf
(3)挂载
(4)启动

编辑:
vim /etc/ansible/ansible_playbook/web.yaml

- hosts:  web
  tasks:
    - name: mount nfs
      mount: src=nfs:/data path=/data fstype=nfs state=mounted

    - name: install httpd
      yum: name=httpd state=installed

    - name: config httpd
      copy: src=./conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
      notify: restart httpd

    - name: start httpd
      shell: systemctl start httpd

  handlers:
    - name: restart httpd
      shell: systemctl restart httpd

7、main.yaml

编辑:vim main.yaml

- import_playbook: base.yaml
- import_playbook:  rsync.yaml
- import_playbook:   nfs.yaml
- import_playbook:   sersync.yaml
- import_playbook:   web.yaml
~                               

预检测:


注意:只能检测语法、配置的逻辑错误,最终是否成功,还依赖其他方面;比如:年龄,您可以写1~100,在这个范围内,系统会检测正确,可是,您实际年龄20,写错成55,也会检测成功,但执行错误!
执行:ansible-playbook main.yaml

验证:http:192.168.2.135:8080访问正常

定时同步是晚上指定时间进行,所以手动测试一下,在nfs服务器的/data/创建测试文件,用命令:/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
未操作前:nfs服务器的/data目录为空,rsync服务器的backup目录也为空

使用命令在nfs创建测试文件:

查看:rsync服务器的/backup目录有刚创建的文件。


报错

1、restart rsync出现问题,检查发现,重启命令错误

vim rsync.yaml 改shell后面的命令如下:


2、 web.yaml 里面的mount nfs 错误,名称或服务不能识别

解决方案:定位nfs问题,查看nfs.yaml,红线处是修改过的,原本用start。

3、 当nfs挂载的时候,访问被拒绝。

很明显,权限问题。更改配置文件exports,主机地址更改成需要nfs允许的网段。重启服务,执行发现问题还没有解决!原来,前面的剧本已经把文件推送到nfs服务器了,需要在nfs服务器更改此配置。

4、 远程查看防火墙状态,报错:

解决方案:
以另一种方式:却可以成功

找到问题:以web主机为例,即忘记将本地主机hosts文件推送过去,此主机名没有改成正确的

5、测试base.yaml报错

解决:分析提示,值的状态必须是absent、directory等等;言外意是,参数不是语法支持的单词,肯定是单词拼写错误,查看发现directory写错

以上是关于你是自己的主角,写个ansible剧本,让架构搭建更容易的主要内容,如果未能解决你的问题,请参考以下文章

ansible playbook剧本

ansible playbook剧本

ansible_playbook 一键搭建集群架构

用ansible剧本搭建lnmp

Linux:综合架构批量管理服务(ansible)-- 扩展功能补充

Linux:综合架构批量管理服务(ansible)-- 下