一键部署nfs、rsync、sersync

项目代码:

链接:https://pan.baidu.com/s/13I0BBAYsdK-KmPekZ5VpdA

提取码:u2tw

--来自百度网盘超级会员V6的分享

[root@m01 /ansible/roles]# tree -F
.
├── fenfa.sh #分发秘钥脚本
├── group_vars/ #主机组变量
│ └── all/
│ └── main.yml
├── hosts #hosts文件
├── nfs-client/
│ ├── files/
│ ├── handlers/
│ ├── tasks/
│ │ └── main.yml
│ └── templates/
├── nfs-server/
│ ├── files/
│ ├── handlers/
│ │ └── main.yml
│ ├── tasks/
│ │ └── main.yml
│ └── templates/
│ └── exports.j2
├── rsync-client/
│ ├── files/
│ ├── handlers/
│ ├── tasks/
│ │ └── main.yml
│ └── templates/
│ ├── back-conf.j2
│ └── rsync.j2
├── rsync-server/
│ ├── files/
│ ├── handlers/
│ │ └── main.yml
│ ├── tasks/
│ │ └── main.yml
│ └── templates/
│ └── rsyncd.j2
├── sersync-client/
│ ├── files/
│ ├── handlers/
│ ├── tasks/
│ │ └── main.yml
│ └── templates/
├── sersync-server/
│ ├── files/
│ │ └── sersync2.5.4_64bit_binary_stable_final.tar.gz
│ ├── handlers/
│ ├── tasks/
│ │ └── main.yml
│ └── templates/
│ └── confxml.j2*
└── top.yml #启动文件

fenfa.sh文件内容

[root@m01 /ansible/roles]# cat fenfa.sh
#!/bin/bash
#author: wh
#version: v2
#desc: 一键创建秘钥对 分发秘钥对 #1.vars
pass=1 #服务器的密码
ips="172.16.1.7 172.16.1.31 172.16.1.41"
. /etc/init.d/functions #1.4 判断是否联网或是否可以使用yum
#1.5 加入判断sshpass命令是否存在,如果不存在则安装 #2.创建秘钥对
if [ -f ~/.ssh/id_rsa ] ;then
echo "已经创建过秘钥对"
else
echo "正在创建秘钥对...."
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null
if [ $? -eq 0 ];then
action "密钥创建成功" /bin/true
else
action "密钥创建失败" /bin/false
fi
fi #3.通过循环发送公钥
for ip in $ips
do
sshpass -p${pass} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no $ip &>/dev/null
if [ $? -eq 0 ];then
action "$ip 公钥分发 成功" /bin/true
else
action "$ip 公钥分发 失败" /bin/false
fi
done

hosts文件内容

[root@m01 /ansible/roles]# cat hosts
[web]
172.16.1.7 [nfs]
172.16.1.31 [backup]
172.16.1.41

启动文件top.yml文件内容

[root@m01 /ansible/roles]# cat top.yml
- hosts: nfs
roles:
- role: nfs-server
- role: rsync-client
- role: sersync-server - hosts: backup
roles:
- role: rsync-server
- role: rsync-client
- role: sersync-client - hosts: web
roles:
- role: rsync-client
- role: nfs-client

主机组变量文件内容

[root@m01 /ansible/roles]# cat group_vars/all/main.yml
#nfs的用户
nfs_user: nfsnobody #nfs的共享的挂载目录
nfs_dir: /data #nfs配置的共享目录
nfs_server_dir: "172.16.1.31:/data" #web挂载nfs的目录
web_nfs_dir: /upload #rsync用户
rsync_user: rsync #rsync认证用户
rsync_auth_user: rsync_backup #rsync服务端ip
rsync_server_ip: 172.16.1.41 #rsync备份配置文件的模板
rsync_module_name: backup #rsync的备份共享目录
rsync_dir: /backup #rsync密码文件
rsync_client_pass_dir: /etc/rsync.client #rsync的密码
rsync_auth_password: 1 #sersync的nfs实时同步模块
sersync_module_name: nfsbackup #sersync的nfs实时同步目录
sersync_dir: /nfsbackup

nfs客户端文件内容

[root@m01 /ansible/roles]# cat nfs-client/tasks/main.yml
- name: 安装nfs-utils
yum:
name: nfs-utils
state: present
- name: 挂载目录
mount:
src: "{{ nfs_server_dir }}"
path: "{{ web_nfs_dir }}"
fstype: nfs
state: mounted

nfs服务端文件内容

[root@m01 /ansible/roles]# cat nfs-server/tasks/main.yml
- name: 安装rpcbind,nfs-utils
yum:
name: "{{ item }}"
state: present
loop:
- rpcbind
- nfs-utils
- name: 创建共享目录,修改属主属组
file:
path: "{{ nfs_dir }}"
state: directory
owner: "{{ nfs_user }}"
group: "{{ nfs_user }}"
- name: 修改配置文件
template:
src: exports.j2
dest: /etc/exports
backup: yes
notify:
- 重载nfs
- name: 启动rpcbind,nfs
systemd:
name: "{{ item }}"
enabled: yes
state: started
loop:
- rpcbind
- nfs [root@m01 /ansible/roles]# cat nfs-server/handlers/main.yml
- name: 重载nfs
systemd:
name: nfs
state: reloaded [root@m01 /ansible/roles]# cat nfs-server/templates/exports.j2
{{ nfs_dir }} 172.16.1.0/24(rw)

rsync客户端文件内容

[root@m01 /ansible/roles]# cat rsync-client/tasks/main.yml
- name: 安装rsync
yum:
name: rsync
state: present
- name: 创建脚本目录
file:
path: /server/scripts
state: directory
- name: 分发备份脚本
template:
src: back-conf.j2
dest: /server/scripts/back-conf.sh
- name: 分发密码文件
template:
src: rsync.j2
dest: "{{ rsync_client_pass_dir }}"
mode: 600
- name: 创建定时任务
cron:
name: backup conf
minute: "*/2"
job: sh /server/scripts/back-conf.sh &>/dev/null
state: present [root@m01 /ansible/roles]# cat rsync-client/templates/back-conf.j2
#!/bin/bash
#author: wh
#desc: 备份配置文件+定时任务+推送到rsync服务端 source /etc/profile
source ~/.bash_profile
#定义变量
ip=`ifconfig|awk 'NR==2{print $2}'`
date=`date +%F`
backup_dir=/backup/${ip}
backup_filename=conf-${date}.tar.gz
#rsync用户
rsync_authUser={{ rsync_auth_user }}
#rsync密码文件
rsync_passwdFile={{ rsync_client_pass_dir }}
#服务端ip
rsync_serviceIP={{ rsync_server_ip }}
#备份服务器备份模块
rsync_module={{ rsync_module_name }} #创建备份目录
mkdir -p ${backup_dir} #备份
tar zcf ${backup_dir}/${backup_filename} /etc/ /var/spool/cron #生成md5sum校验文件
md5sum ${backup_dir}/${backup_filename} > ${backup_dir}/conf.md5 #推送到rsync服务端
rsync -az ${backup_dir} ${rsync_authUser}@${rsync_serviceIP}::${rsync_module} --password-file=${rsync_passwdFile} #删除7天之前的备份
rm -f `find ${backup_dir} -type f -name "*.tar.gz" -mtime +7` [root@m01 /ansible/roles]# cat rsync-client/templates/rsync.j2
{{ rsync_auth_password }}

rsync服务端文件内容

[root@m01 /ansible/roles]# cat rsync-server/tasks/main.yml
- name: 安装rsync
yum:
name: rsync
state: present
- name: 配置rsync
template:
src: rsyncd.j2
dest: /etc/rsyncd.conf
backup: yes
notify:
- 重启rsync
- name: 创建用户
user:
name: "{{ rsync_user }}"
create_home: no
shell: /sbin/nologin
- name: 创建共享目录,修改属组属主 /backup
file:
path: "{{ rsync_dir }}"
state: directory
owner: "{{ rsync_user }}"
group: "{{ rsync_user }}"
- name: 创建密码文件并写入密码修改权限
lineinfile:
path: /etc/rsync.password
line: "{{ rsync_auth_user }}:{{ rsync_auth_password }}"
create: yes
mode: 600
- name: 启动rsync
systemd:
name: rsyncd
enabled: yes
state: started [root@m01 /ansible/roles]# cat rsync-server/handlers/main.yml
- name: 重启rsync
systemd:
name: rsyncd
state: restarted [root@m01 /ansible/roles]# cat rsync-server/templates/rsyncd.j2
fake super =yes
uid = rsync
gid = rsync
use chroot = no
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 = 10.0.0.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#######################################
[{{ rsync_module_name }}]
comment = "备份文件夹"
path = {{ rsync_dir }}
[{{ sersync_module_name }}]
comment = "nfs备份文件夹"
path = {{ sersync_dir }}

sersync客户端文件内容

[root@m01 /ansible/roles]# cat sersync-server/tasks/main.yml
- name: 创建bin目录,conf目录
file:
path: "{{ item }}"
state: directory
loop:
- /app/tools/sersync/bin/
- /app/tools/sersync/conf/
- name: 解压sersync2.5.4_64bit_binary_stable_final.tar.gz
unarchive:
src: sersync2.5.4_64bit_binary_stable_final.tar.gz
dest: /root/
- name: 移动目录
shell: "mv /root/GNU-Linux-x86/sersync2 /app/tools/sersync/bin"
- name: 拷贝配置文件
template:
src: confxml.j2
dest: /app/tools/sersync/conf/confxml.xml
backup: yes
- name: 创建快捷方式
file:
path: /bin/sersync2
src: /app/tools/sersync/bin/sersync2
state: link
- name: 启动sersync
shell: "sersync2 -rdo /app/tools/sersync/conf/confxml.xml" [root@m01 /ansible/roles]# cat sersync-server/templates/confxml.j2
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify> <sersync>
<localpath watch="{{ nfs_dir }}">
<remote ip="{{ rsync_server_ip }}" name="{{ sersync_module_name }}"/>
<!--<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_auth_user }}" passwordfile="{{ rsync_client_pass_dir }}"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync> <plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin> <plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head> #此文件在百度网盘的链接接里,或者从官网下载也行
[root@m01 /ansible/roles]# ll sersync-server/files
total 712
-rw-r--r-- 1 root root 727290 Feb 7 15:27 sersync2.5.4_64bit_binary_stable_final.tar.gz

一键部署nfs、rsync、sersync的更多相关文章

  1. day10、nfs+rsync全网备份及实时同步

    题目要求 注意:博主使用的系统为: [root@web01 ~]# uname -a Linux web01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29 ...

  2. Kubernetes一键部署利器:kubeadm

    要真正发挥容器技术的实力,你就不能仅仅局限于对 Linux 容器本身的钻研和使用. 这些知识更适合作为你的技术储备,以便在需要的时候可以帮你更快的定位问题,并解决问题. 而更深入的学习容器技术的关键在 ...

  3. 文件触发式实时同步 Rsync+Sersync Rsync+Inotify-tools

    一.概述 1.Rsync+Sersync 是什么? 1)Sersync使用c++编写基于inotify开发的触发机制: 2)Sersync可以监控所监听的目录发生的变化(包括新建.修改.删除),具体到 ...

  4. Rsync+sersync实现实时同步

    介绍: sersync主要用于服务器同步,web镜像等功能.基于boost1.43.0,inotify api,rsync command.开发.目前使用的比较多的同步解决方案是inotify-too ...

  5. rsync+sersync多线程实时同步

    一.sersync优点 1)使用c++编写,对linux系统文件产生的临时文件和重复文件操作会进行过滤,在结合rsync同步的时候,会减少运行时消耗的本地及网络资源,因此速度更快. 2)相比较inot ...

  6. inotify+rsync sersync+rsync实时同步服务

    中小型网站搭建-数据实时的复制-inotify/sersync inotify是一种强大的,细粒度的.异步的文件系统事件监控机制(软件),linux内核从2.6.13起,加入inotify支持,通过i ...

  7. rsync & sersync 实时同步

    1.根据之前一篇关于rsync的随笔部署好rsync服务后,可以开始inotify的部署 2.sersync的部署 ①.部署服务(安装和配置过程) #Master 部署Sersync服务 mkdir ...

  8. centos7服务搭建常用服务配置之二:Rsync+sersync实现数据实时同步

    目录 1.RSYNC数据备份 1.1 rsync服务简介 1.2 rsync特点和优势 1.3 rysnc运行模式简介 1.4 数据同步方式 2 Rsync实验测试 2.1 实验环境说明 2.2 服务 ...

  9. rsync+sersync实现文件同步

    一.目的 A服务器:11.11.11.11 源服务器 B服务器:22.22.22.22 目标服务器,既同步备份的目标 将A服务器的文件同步到B服务器上 二.rsync环境部署 1.关闭selinux, ...

  10. Mysql+Mycat+NFS+Rsync+LVS+DNS+IPtables综合实验

    1.环境准备 服务器 IP地址 作用 系统版本 Mysql-master eth0:10.0.0.58 主数据库 Rocky8.6 Mysql-slave1 eth0:10.0.0.68 备数据库 R ...

随机推荐

  1. Python学习之实例1

    一.求n个数字的平均值 n=3 #定义常量n=3 sum=0 #定义求和变量sum count=0 #定义变量count,记录输入数字的次数 print("请输入3个数字:") # ...

  2. Docker | 专栏文章整理🎉🎉

    Docker Docker系列文章基本已经更新完毕,这是我从去年的学习笔记中整理出来的. 笔记稍微有点杂乱.随意,把它们整理成文章花费了不少力气.整理的过程也是我的一个再次学习的过程,同时也是为了方便 ...

  3. IDEA git配置

    必备:安装Idea \ git配置git坏境:在环境变量中添加git安装包bin目录即可 1.去git官网申请一个账号 https://github.com/ 创建一个新的项目 2.在快速启动栏或者g ...

  4. 一次MTU问题导致的RDS访问故障

    导语 VPN是一种通过公网连接两个或多个私网站点的专用网络,使得这些站点仿佛是通过专线连接在一起.IPSec是一套协议框架,用于保证数据传输的私密性,完整性,真实性.但是VPN网络经常会带来一些连通性 ...

  5. 【Scala复习】基础知识、函数式编程、面向对象、集合、隐式转换、模式匹配、泛型

    重点版 详细版 基础知识常量和变量尽量使用常量val别使用变量var变量的命名数字字母下划线_特殊的用法数据类型java基本数据类型引用数据类型scalaAny-对象的根类AnyVal-数值类型Lon ...

  6. MasaFramework -- 领域驱动设计

    概念 什么是领域驱动设计 领域驱动的主要思想是, 利用确定的业务模型来指导业务与应用的设计和实现.主张开发人员与业务人员持续地沟通和模型的持续迭代,从而保证业务模型与代码的一致性,实现有效管理业务的复 ...

  7. python装饰器初级

    global与nonlocal 1.global的作用: 可以在局部空间里直接就该全局名称工具中的数据 代码展示: name = 'moon' #设置了一个全局变量 def fucn(): name ...

  8. uniapp vue3下的代理转发不生效问题,亲测有效解决

    以前配置过vue vite 的代理转发,没想到在uniapp的代理转发下翻车了,其实是一个很小的问题.调试过程中,尝试了webpack.vite 等写法 在根目录下 创建了 vite.config.j ...

  9. ob-myfreemp3

    网站 aHR0cDovL3Rvb2wubGl1bWluZ3llLmNuL211c2ljLw== 打开之后随便搜一个歌手的名字或歌曲(这里搜林俊杰)  m/api/search,可以看到数据全在这里 全 ...

  10. Spring IOC官方文档学习笔记(三)之依赖项

    1.依赖注入 (1) 依赖注入(DI)的概念:某个bean的依赖项,由容器来负责注入维护,而非我们自己手动去维护,以此来达到bean之间解耦的目的,如下 //情况一:不使用依赖注入 public cl ...