playbook搭建rsync全网备份服务、nfs服务、sersync实时同步服务_ansible playbook rsync

任务:一键执行Rsync全网备份、NFS共享目录、sersync实时同步三个服务
ansible官网链接:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

在这里插入图片描述

有些繁琐,欢迎提出问题。

一、守护进程+全网备份

##在完成一键批量执行服务前要保证SSH远程连接服务秘钥分发成功

1.配置ansible主机列表
1.书写分发秘钥脚本保证SSH远程连接服务
2.修改邮件配置文件并推送到backup服务器
3.m01批量管理机本地创建客户端全网备份的脚本
4.m01批量管理机本地创建服务端发送邮件的脚本
5.m01批量管理机本地创建剧本执行 先保证客户端nfs01 web01 web02与服务端backup保证守护进程模式,再进行全网备份。

添加主机列表到/etc/ansible/hosts
[02:15 root@m01 ~]# vim /etc/ansible/hosts 
[oldboy]
172.16.1.7
172.16.1.8
172.16.1.31
[web]
172.16.1.7
172.16.1.8
[nfs]
172.16.1.31
[backup]
172.16.1.41

1.本地创建分发秘钥脚本并执行
[21:49 root@m01 /etc/ansible]# vim /server/scripts/fenfa\_pub.sh 
#!/bin/bash
#make key pair
ssh-keygen -t dsa -f ~/.ssh/id_dsa -P ''
#fenfa public key
for ip in 7 8 41 31
do
 sshpass -p123456   ssh-copy-id -o StrictHostKeyChecking=no 172.16.1.$ip
done
#ansible
ansible all -m shell -a "hostname"

2.修改rsync.conf配置文件
[21:51 root@m01 /etc/ansible]# cat /etc/ansible/file/rsyncd.conf
##Rsync server
##created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
fake super = yes
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[data]
comment = www by old0boy 13:14 2019-5-20
path = /data
#####################################
[backup]
comment = www by old0boy 13:14 2019-5-20
path = /backup
#####################################
[nfsbackup]
comment = www by old0boy 13:14 2019-5-20
path = /nfsbackup

3.创建客户端端脚本:
[21:52 root@m01 /etc/ansible]# cat /server/scripts/rsync\_backup.sh 
#!/bin/bash
. /etc/profile
#定义变量
IP=$(hostname -I|awk '{print $2}')
HOSTNAME=$(hostname)
#创建目录
mkdir -p /backup/$IP
#打包备份系统配置文件
tar zcf /backup/$IP/`date +%F-%w`.tar.gz /var/spool/cron/root /var/l
og/messages /var/log/cron /var/log/rsyncd.log /etc/rc.local /etc/fst
ab /etc/hosts /server/scripts 
#md5校验信息
find /backup/ -type f -name "\*.tar.gz"|xargs md5sum >/backup/$IP/$HOSTNAME.md5
#保留7天内的备份
find /backup/ -type f -mtime +7 -name "\*.tar.gz"|xargs rm -rf
#推送到备份服务器
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

4.创建服务端发送邮件的脚本
[22:04 root@m01 /etc/ansible]# vim /server/scripts/backup.sh 
#!/bin/bash
. /etc/profile
#校验md5信息
find /backup/ -type f -name "\*.md5"|xargs md5sum -c >/backup/md5.txt
#删除180天前的
find /backup/ -type f -name "\*.tar.gz" ! -name "\*-6.tar.gz" -mtime +180|xargs rm -rf
#发送邮件
mail -s " Rsync Backup 完成 该下班拉" 245684979@qq.com </backup/md5.txt

5.在backup服务端安装mailx软件

然后在邮箱配置文件/etc/mail.rc追加此邮箱配置
把此文件推送到backup服务器上,覆盖源文件

[22:05 root@m01 /etc/ansible]#ansible backup -m yum -a 'name=mailx state=present' \\安装邮箱
[22:05 root@m01 /etc/ansible]# cat >>/etc/mail.rc <<EOF \\追加配置内容
> set from=lichenxing0430@163.com
> set smtp=smtp.163.com
> set smtp-auth=login
> set smtp=auth-user=lichenxing0430
> set smtp-auth-password=\\密码
> set smtp-auth=login
> EOF

playbook-剧本一键批量部署—Rsync全网备份流程图.jpg

6.本地创建剧本文件rsync_backup.yml进行全网配置
[02:56 root@m01 /etc/ansible]# vim rsync\_backup.yml 
  1 #搭建守护进程模式backup服务端
  2 ---
  3   - hosts: backup
  4     tasks:
  5 
  6     - name: rsync.conf
  7       copy:
  8         src: /etc/ansible/file/rsyncd.conf
  9         dest: /etc/rsyncd.conf
 10 
 11     - name: useradd rsync
 12       user:
 13         name: rsync
 14         shell: /sbin/nologin
 15         create_home: no
 16 
 17     - name: mkdir /backup
 18       file:
 19         path: /backup
 20         state: directory
 21         owner: rsync
 22         group: rsync
 23 
 24     - name: touch password chmod 600
 25       file:
 26         path: /etc/rsync.password
 27         state: touch
 28         mode: 600
 29 
 30     - name: content password
 31       copy:
 32         dest: /etc/rsync.password
 33         content: rsync_backup:123456
 34 
 35     - name: restart rsyncd
 36       service:
 37         name: rsyncd.service
 38         state: restarted
 39         enabled: yes
 40 
 41 #nfs01 web01 web02 客户端守护进程 
 42 
 43   - hosts: oldboy
 44     tasks:
 45 
 46     - name: touch password chmod 600
 47       file:
 48         path: /etc/rsync.password
 49         state: touch
 50         mode: 600
 51     - name: content password
 52       copy:
 53         dest: /etc/rsync.password
 54         content: 123456
 55 
 56     - name: copy rsync_backup
 57       copy:
 58         src: /server/scripts/rsync_backup.sh
 59         dest: /server/scripts/
 60 
 61 ##客户端定时任务 每天凌晨0点执行备份推送到服务端
 62 
 63     - name: cron backup
 64       cron:
 65         name:  rsync_backup
 66         minute: 00
 67         hour: 00
 68         job: sh /server/scripts/rsync_backup.sh  >/dev/null 2>&1
 69         state: present
 70 
 71 ##服务端定时任务 将备份校验信息发送mail
 72 
 73   - hosts: backup
 74     tasks:
 75 
 76     - name: yum mailx
 77       yum:
 78         name: mailx
 79         state: present
 80 
 81     - name: copy rsync_backup
 82       copy:
 83         src: /server/scripts/backup.sh
 84         dest: /server/scripts/
 85 
 86     - name: copy mail.rc
 87       copy:
 88         src: /etc/mail.rc
 89         dest: /etc/mail.rc
 90 
 91     - name: mail-cron
 92       cron:
 93         name:  set mail
 94         minute: 01
 95         hour: 00
 96         job: sh /server/scripts/backup.sh  >/dev/null 2>&1
 97         state: present


7.先检查剧本后再完成推送

可以在剧本中定时任务改为每分钟,单个拿出模块测试一下是否能备份,是否可以收到邮件。
–start-at-task=模块名 指定任务执行

ansible-playbook rsync_backup.yml --start-at-task="mail-cron"   检查剧本


※二、批量部署nfs服务(服务端 客户端)

1.书写分发秘钥脚本保证SSH远程连接服务
5.本地创建剧本执行nfs网络文件系统服务

1.本地创建分发秘钥脚本并执行

如果已经批量分发过秘钥,此步不需要执行

[03:00 root@m01 /etc/ansible]# vim /server/scripts/fenfa\_pub.sh 
#!/bin/bash
#make key pair
ssh-keygen -t dsa -f ~/.ssh/id_dsa -P ''
#fenfa public key
for ip in 7 8 41 31
do
 sshpass -p123456   ssh-copy-id -o StrictHostKeyChecking=no 172.16.1.$ip
done
#ansible
ansible all -m shell -a "hostname"

playbook-剧本一键批量部署—NFS存储服务流程图.jpg

2.本地创建剧本文件nfs.yml进行全网配置
[03:02 root@m01 /etc/ansible]# vim nfs.yml 
  1 #nfs服务端配置-安装软件-配置/etc/exports权限-创建共享目录-重启服务
  2 ---
  3 #安装软件
  4   - hosts: nfs web
  5     tasks:
  6 
  7     - name: yum rpcbind nfs-utils
  8       yum:
  9         name: rpcbind
 10         name: nfs-utils
 11         state: present
 12 
 13 #nfs服务端
 14 
 15   - hosts: nfs
 16     tasks:
 17 
 18     - name: configure nfs
 19       shell: echo '/nfs 172.16.1.0/24(rw,all\_squash)' >>/etc/exports
 20 
 21     - name: mkdir chown /nfs
 22       file:
 23         path: /nfs
 24         owner: nfsnobody
 25         group: nfsnobody
 26         state: directory
 27 
 28     - name: start && enable rpcbind
 29       service:
 30         name: rpcbind
 31         state: restarted
 32         enabled: yes
 33 
 34     - name: reloaded nfs
 35       service:
 36         name: nfs.service
 37         state: reloaded
 38         enabled: yes
 39 
 40 
 41 #web客户端配置-创建挂载目录-安装nfs-挂载nfs共享目录到/upload 
 42   - hosts: web
 43     tasks:
 44 
 45     - name: mkdir /upload
 46       file:
 47         path: /upload
 48         state: directory
 49 
 50     - name: mount
 51       mount:
 52         fstype: nfs
 53         src: 172.16.1.31:/nfs
 54         path: /upload
 55         state: mounted

3.7.先检查剧本后再完成推送
ansible-playbook -C nfs.yml 检查剧本


※三、批量部署sersync

ansible-playbook -C sersync.yml 检查剧本
剧本可能会有很多瑕疵,欢迎补充。

playbook-剧本一键批量部署—sersync实时同步思路图 .jpg

[03:05 root@m01 /etc/ansible]# vim sersync.yml 
  1 ##sersync实时同步服务
  2 ---
  3 #服务端配置:
  4 
  5   - hosts: backup
  6     tasks:
  7 
  8     - name: gourpadd rsync
  9       group:
 10         name: rsync
 11         state: present
 12 
 13     - name: useradd rsync
 14       user:
 15         name: rsync
 16         shell: /sbin/nologin
 17         create_home: no
 18 
 19     - name: copy rsyncd.conf
 20       copy:
 21         src: /etc/ansible/file/rsyncd.conf
 22         dest: /etc/rsyncd.conf
 23 
 24     - name: mkdir nfsbackup
 25       file:
 26         path: /nfsbackup
 27         state: directory
 28         owner: rsync
 29         group: rsync
 30 
 31     - name: mkdir password chmod 600
 32       file:
 33         path: /etc/rsync.password
 34         state: touch
 35         mode: 600
 36 
 37     - name: content password
 38       copy:
 39         dest: /etc/rsync.password
 40         content: rsync_backup:123456
 41 
 42 #客户端配置:
 43 
 44   - hosts: nfs
 45     tasks:
 46 
 47     - name: rsyncd restart && enable
 48       service:
 49         name: rsyncd
 50         state: restarted
 51         enabled: yes
 52 
 53     - name: mkdir server/scripts && tools &&
 54       file:
 55         path: '{{ item }}'
 56         state: directory
 57       with_items:
 58         - /server/scripts
 59         - /server/tools
 60 
 61     - name: copy sercync.zip
 62       copy:
 63         src: /server/tools/sersync_installdir_64bit.zip
 64         dest: /server/tools/
 65 
 66     - name: unzip
 67       unarchive:
 68         src: /server/tools/sersync_installdir_64bit.zip
 69         copy: no
 70         dest: /server/tools/
 71     - name: mkdir app
 72       file:
 73         path: /app
 74         state: directory
 75 
 76     - name: cp  sersync /app/
 77       shell: cp -a /server/tools/sersync_installdir_64bit/sersync /app/
 78 
 79     - name: chmod +x
 80       file:
 81         path: /app/sersync/bin/sersync
 82         mode: 755
 83 
 84     - name: link sersync
 85       file:
 86         src: /app/sersync/bin/sersync
 87         path: /sbin/sersync
 88         state: link
 89         force: yes
 90 
 91     - name: copy confxml.xml
 92       copy:
 93         src: /etc/ansible/file/confxml.xml
 94         dest: /app/sersync/conf/
 95         backup: yes
 96 
 97     - name: touch password chmod 600
 98       file:
 99         path: /etc/rsync.password
100         state: touch
101         mode: 600
102 
103     - name: content password
104       copy:
105         dest: /etc/rsync.password
106         content: 123456
107 
108     - name: mkdir /upload
109       file:
110         path: /upload
111         state: directory
112         owner: nfsnobody
113         group: nfsnobody
114 
115     - name: shell sersync
116       shell: sersync -rd -o /app/sersync/conf/confxml.xml
117 
118     - name: /etc/rc.d/rc.local
119       shell: echo "sersync -rd -o /app/sersync/conf/confxml.xml" >>/etc/rc.d/rc.local

检查一下

客户端

[03:06 root@nfs01 ~]# touch /upload/lcx{01..5}.txt
[03:06 root@nfs01 ~]# ll /upload/
total 0
-rw-r--r-- 1 root root 0 Jun  1 03:06 
lcx01.txt
-rw-r--r-- 1 root root 0 Jun  1 03:06 lcx02.txt
-rw-r--r-- 1 root root 0 Jun  1 03:06  lcx03.txt
-rw-r--r-- 1 root root 0 Jun  1 03:06  lcx04.txt
-rw-r--r-- 1 root root 0 Jun  1 03:06  lcx05.txt

服务端

[03:06 root@backup ~]# ll /nfsbackup/
total 0
-rw-r--r-- 1 rsync rsync 0 Jun  1 03:06  lcx01.txt
-rw-r--r-- 1 rsync rsync 0 Jun  1 03:06  lcx02.txt
-rw-r--r-- 1 rsync rsync 0 Jun  1 03:06  lcx03.txt
-rw-r--r-- 1 rsync rsync 0 Jun  1 03:06  lcx04.txt
-rw-r--r-- 1 rsync rsync 0 Jun  1 03:06  lcx05.txt

大功告成

把rsync全网备份服务 nfs网络文件共享服务 sersync实时同步服务都放到一个脚本中执行
把SSH远程分发秘钥写到脚本中

[03:07 root@m01 /etc/ansible]# vim /server/scripts/one.sh 
#!/bin/bash
. /etc/profile

sh /server/scripts/fenfa_pub.sh
ansible-playbook /etc/ansible/rsync_backup.yml
ansible-playbook /etc/ansible/nfs.yml
ansible-playbook /etc/ansible/sersync.yml


克隆四台全新的虚拟机测试一下吧:

web01 web02 nfs01 backup
修改主机名 IP地址 做基础优化 关闭防火墙

这种一条走到头的感觉非常爽,有种上厕所的通畅感,终于搞定了!

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
img

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

15a9e2ec54.png)

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-QotkfHIX-1712855974034)]

为了减轻多服务器配置和操作工作量以及安全性,特研究此课题,理论上可以同步所有想同步的文件,并且做到一键操作,不需要切换用户,不需要多次操作脚本,中途不需要输入任何字。 1, hosts文件 2, play.yml文件 剧本文件,按标准放到tasks文件夹内,因后面脚本写了路径,如果不愿意放tasks文件夹,需要改后面sh脚本路径参数 3, rsync_notice.py文件 钉钉机器人发送消息文件,此文件放在tools文件夹内,会调用备份日志进行分析,过滤后,发送到钉钉群内。各位同事可修改文件里的Webhoo为自己的机器人key 4, deploy.sh 文件 调用py钉钉文件发消息,并且处理备份日志,删除近期日志等后续事宜,请放在tools文件夹内 1.3.3. 功能基本介绍 1, 在对应脚本里基本都有注释,这里简单介绍下 2, 剧本文件需要在主控机器(备份机器),root用户下运行,运行一次即可,后续sh及py脚本会自动处理。一键搞定所有事情,中途无需手动干预; 3, 自行修改host文件为自己项目地址,bak为备份文件服务器,为安全起见,hosts文件进行了vault加密,密码123456,运行剧本文件,请加—ask-vault-pass 4, 再次提醒,在脚本运行完成后,为保险起见,可将hosts文件中的root密码删除,或修改复杂密码,不会影响后续同步功能。 5, 剧本流程介绍: 1) 主控被控端安装rsync及相关依赖软件; 2) 主控与被控端添加备份用户,rsync; 3) 主控端即备份服务器建立备份文件夹,设置归属用户; 4) 主控及被控端自动切换rsync用户,使用rsync用户配置免密访问所有被控端,即便服务器被黑,rsync用户访问也做不了什么; 5) 主控端即备份服务器使用rsync用户增加同步、日志记录、钉钉发送消息等定时任务; 6) 定时任务里各个需要同步的源地址及项目名称,请自行修改; 7) 日志为叠加记录,钉钉消息发完后,会按日期进行备份,同时删除原日志,因为钉钉消息每天都发,避免冗余数据; 6, 钉钉消息脚本介绍: 1) 访问实时备份日志,考虑到钉钉消息,只需要知道同步是否成功,其余数据不关心,所以读取后,进行数据处理,取出服务器地址、成功标识,或未成功标识; 2) 调用钉钉机器人接口,采取markdown形式,此形式可以定义一个固定的标题,比如:rsync同步情况汇总,这样在钉钉机器人安全设置里,只需要将标题设为关键字即可,具体发送内容千奇百怪也没关系。另外两种方式各有弊端,未研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值