实验环境: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
![]()