Ansible playbook 多台服务器部署不同服务

实验环境:Centos 7.4 最小化安装
主机名  外网IP(NAT)eth0  内网IP(LAN)eth1   部署软件/角色
m01    192.168.189.61      172.16.1.61         ansible/管理服务器
backup 192.168.189.41      172.16.1.41         rsync/备份服务器
nfs    192.168.189.31      172.16.1.31         nfs/NFS存储
web01  192.168.189.7       172.16.1.7          httpd/Web 服务器
要求:
172.16.1.41: 部署 Rsync 做为备份服务器,每天凌晨5点,开始md5检查客户端备份过来的文件。
172.16.1.31: 部署NFS,每天的凌晨1点,把本地的/backup内容同步到Rsync 服务器172.16.1.41
172.16.1.7 : 部署Appache,端口:7896 每天的凌晨1点,把本地的/backup内容同步到Rsync 服务器172.16.1.41,把172.16.1.31上面的/data 目录,挂载到本地的 /var/www/html
每台服务器上创建 www 组,gid 666 ,创建一个www用户 uid 666,创建/data /backup 目录属主666 创建/server/scripts 目录
实施步骤:
一、配置ansible主机免密钥登录到其他主机。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.41
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.31
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.7


二、安装ansible
yum install epel-release -y
yum install ansible -y
三、添加主机组、创建目录,存放配置文件、脚本。mkdir -p /etc/ansible/ansible_playbook/{conf,scripts}
ansible_playbook #用来存放yaml文件
conf #用来存放各种服务的配置文件
scripts #用来存放脚本文件
修改 /etc/ansible/hosts 文件,在文件的最后面添加主机。
vim /etc/ansible/hosts

四、基础环境部署
+++++++++++++++ ansible 主机上操作
vim /etc/hosts

vim /etc/selinux/config


拷贝这两个文件到统一的 ansible 下面的conf 目录
cd /etc/ansible/ansible_playbook
cp /etc/hosts conf/hosts
cp /etc/selinux/config conf/selinux.config
4.1、编写 基础环境部署 yaml 文件,(hosts:all)对所有的主机
cd /etc/ansible/ansible_playbook/ && vim base.yaml
网络环境(selinux firewalld)


如果selinux已经是Disabled ,这时执行setenforce 0 ,返回的$? 就是1而不是0 ,playbook中只要执行命令的返回值不为0,就会报错,tasks停止,ignore_errors: True #忽略错误,强制返回成功,继续执行后面的任务。
epel 仓库

开始安装软件包 rsync nfs-utils

创建组

创建用户

创建目录,并修改所属权限

推送hosts 文件到客户端

完整的base.yaml

语法检查:

++++++++++++++++++
4.2、创建rsync客户端 备份的yaml文件
因为172.16.1.41 为备份服务器,1.31 1.7 是客户端(是需要,把备份在本地的内容,再通过rsync 备份到 172.16.1.41,所以只需要在这两台上,推送备份脚本和设置计划任务。
编写Rsync 客户端备份的脚本:
vim /etc/ansible/ansible_playbook/scripts/rsync_backup.sh
#!/bin/bash
#Rsync 3.12 客户端备份脚本
#1、定义变量
Host=$(hostname)
IP=$(hostname -I |awk '{print $2}')
Date=$(date +%F)
BackupDir=/backup
Dest=${BackupDir}/${Host}_${IP}_${Date}
#2、创建 备份目录
mkdir -p $Dest
#3、收集需要备份的文件,压缩归档。
#系统配置文件
tar czf $Dest/sysconf.tar.gz /etc/fstab /etc/hosts /var/spool/cron/root
#日志文件
tar czf $Dest/log.tar.gz /var/log/messages /var/log/secure /var/log/cron
#服务的配置文件
tar czf $Dest/svrconf.tar.gz /etc/rsyncd.conf
#4、校验文件,生成flag文件
md5sum $Dest/* >$Dest/backup_check_$Date
#5、推送到服务端
Rsync_IP=172.16.1.41
Rsync_User=rsync_backup
Rsync_Module=backup
rsync -avz $Dest $Rsync_User@$Rsync_IP::$Rsync_Module --password-file=/etc/rsync.pass
#6、本地备份文件保留七天。
find $BackupDir -type d -mtime +7|xargs rm -rf
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cd /etc/ansible/ansible_playbook/ && vim backup.yaml

语法检查:

+++++++++++++++++++++++++++++++++++++++++++++
五、编写部署Rsync 服务器的 yaml # ansible 主机上操作
5.1、准备mail.rc rsyncd.conf
在172.16.1.61上面安装rsync,mailx
yum install mailx rsync -y
vim /etc/mail.rc #在文件的最后面配置邮箱信息,用来发送邮件。

cp /etc/mail.rc /etc/ansible/ansible_playbook/conf/
准备rsyncd.conf
vim /etc/ansible/ansible_playbook/conf/rsyncd.conf
uid = rsync
gid = rsync
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.password
log file = /var/log/rsyncd.log
[backup]
comment = welcome to 51ctoedu backup!
path = /backup
5.2、编写rsync服务端检查脚本:
vim /etc/ansible/ansible_playbook/scripts/rsync_check.sh
#!/bin/bash
Date=$(date +%F)
Bak_Dir=`find /backup -mindepth 1 -maxdepth 1 -type d -printf "%P\n"|grep "$Date"`
for i in $Bak_Dir
do
  if [[ $i == *_$Date ]];then
    md5sum -c /backup/$i/backup_check_$(date +%F) >> /backup/reslut_$(date +%F)
  fi
done
mail -s "backup check result" 331758730@qq.com </backup/reslut_$(date +%F)
#保留最近3天的MD5检验文件
echo "send is ok!"
find /backup/*/ -name "reslut*" -mtime +3 | xargs rm -f
#保留3天内的备份内容
find /backup -mindepth 1 -maxdepth 1 -type d -printf "%p\n"|sort -r|awk 'NR>4 {print $1}'|xargs rm -rf
5.3、编写rsync 部署的 yaml 文件。
cd /etc/ansible/ansible_playbook/ && vim rsync.yaml
安装rsync mailx 

创建rsync 用户,用于启动rsyncd和同步。

修改/backup 权限为rsync ,所属组rsync 。

配置rsync:

创建虚拟认证用户、密码文件。

启动rsync服务

推送mail.rc

推送脚本(此脚本是Rsync服务器上的检查脚本,即客户端文件备份到服务器完成后,Rsync服务端对这些文件做一个md5检验
创建计划任务

创建监控触发:

完整的rsync.yaml

语法检查:

+++++++++++++++++++++++++++++++++++
六、编写部署nfs 服务器的 yaml # ansible 主机上操作
 6.1、添加nfs 的exports
 cd /etc/ansible/ansible_playbook/conf
 echo "/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" >./exports
6.2、编写 nfs 的yaml
 cd /etc/ansible/ansible_playbook/ && vim nfs.yaml

语法检查:

七、编写部署Apache 服务器的 yaml # ansible 主机上操作
 7.1、安装Apache
 yum install httpd -y
cd /etc/ansible/ansible_playbook/conf
cp /etc/httpd/conf/httpd.conf .
sed -i 's#Listen 80#Listen 7896#g' httpd.conf
 7.2 编写 httpd 的yaml
cd /etc/ansible/ansible_playbook/ && vim web.yaml


语法检查:

八、将所有单个yaml 文件,写到一个ymal 文件中 # ansible 主机上操作
cd /etc/ansible/ansible_playbook/ && vim rsync_nfs_httpd.yaml

语法检查:

九、执行,并查看结果。 # ansible 主机上操作
cd /etc/ansible/ansible_playbook/
ansible-playbook rsync_nfs_httpd.yaml

+++++++++++++++++
172.16.1.7




172.16.1.31


172.16.1.41