草庐IT

一键部署nfs、rsync、sersync

缘之世界 2023-03-28 原文

一键部署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. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

  3. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  4. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  5. Ruby,使用包含 TK GUI 的 ocra 部署一个 exe - 2

    Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答

  6. ruby - Dropbox 类似 git 的服务——没有 rsync 和 inotify - 2

    关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec

  7. ruby-on-rails - NameError(未初始化常量 Unzipper::Zip)但仅在 Heroku 部署(Rails)上 - 2

    我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在H​​eroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class

  8. ruby - Sinatra + Heroku + Datamapper 使用 dm-sqlite-adapter 部署问题 - 2

    出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t

  9. ruby-on-rails - 在服务器上没有互联网访问权限的 Capistrano 部署 - 2

    如何使用Capistrano将Rails应用程序部署到无法访问外部网络或存储库的生产或暂存服务器?我已经设法完成部署的一半,并意识到Capistrano没有在我的本地机器上下载gitrepo,但它首先连接到远程服务器并尝试在那里下载Git存储库。我希望有一个类似Javaee的构建系统,其中创建可交付成果并将该可交付成果发送到服务器。就像您构建.ear文件并将其部署到您想要的任何服务器上一样。显然在RoR中,你被迫(据我所知)在该服务器上构建应用程序,在那里创建一个gem存储库,在那里克隆最新的分支等等。有什么方法可以将准备运行的包发送到远程服务器吗? 最佳答

  10. Streampark集成Cloudera Flink、ldap、告警,以及部署常见问题 - 2

    集成背景我们当前集群使用的是ClouderaCDP,Flink版本为ClouderaVersion1.14,整体Flink安装目录以及配置文件结构与社区版本有较大出入。直接根据Streampark官方文档进行部署,将无法配置FlinkHome,以及后续整体Flink任务提交到集群中,因此需要进行针对化适配集成,在满足使用需求上,尽量提供完整的Streampark使用体验。集成步骤版本匹配问题解决首先解决无法识别Cloudera中的FlinkHome问题,根据报错主要明确到的事情是无法读取到Flink版本、lib下面的jar包名称无法匹配。修改对象:修改源码:(解决无法匹配clouderajar

随机推荐