一鍵部署nfs、rsync、sersync

来源:https://www.cnblogs.com/world-of-yuan/archive/2023/02/08/17103264.html
-Advertisement-
Play Games

一鍵部署nfs、rsync、sersync 項目代碼: 鏈接:https://pan.baidu.com/s/13I0BBAYsdK-KmPekZ5VpdA 提取碼:u2tw --來自百度網盤超級會員V6的分享 目錄結構 [root@m01 /ansible/roles]# tree -F . ├─ ...


一鍵部署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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SpringSecurity+登錄功能+jwt校驗過濾器+redis配置 一、思路分析 1.登錄 ①自定義登錄介面 調用ProviderManager的方法進行認證 如果認證通過生成jwt 把用戶信息存入redis中 ②自定義UserDetailsService 在這個實現類中去查詢資料庫 註意配置 ...
  • 教程簡介 CICS快速指南 - 從CICS概述,環境,基本術語,Nucleus,事務,COBOL基礎知識,BMS,MAP,介面塊,偽編程,輔助密鑰,文件處理,錯誤處理,控制操作,簡單而簡單的步驟學習CICS臨時存儲,互通,狀態代碼。 CICS代表客戶信息控制系統。 CICS由IBM於1968年開發。 ...
  • 1. 概述 本地更新腳本是基於arthas工具的retransform命令熱替換class,此方法用於在不重啟項目的前提下,替換更新的class,如關鍵類添加列印日誌,排查線上問題 但是arthas工具的命令稍顯複雜,有那個時間還不如重新部署,因此需要一個可以快速替換的工具來進行替換 2. 方法一: ...
  • 教程簡介 亞馬遜商城快速指南 - 從簡單和簡單的步驟開始學習亞馬遜商城,從基本到高級概念,包括為什麼選擇亞馬遜?,亞馬遜優勢,帳戶類型,銷售什麼?,產品列表,費用,帳戶設置,購買盒,運輸方式,列出新產品,定價工具,獲取最高利潤,價格計算器,稅務處理,運輸流程,亞馬遜賣家中心,管理庫存,創建報告,管理 ...
  • 隨著技術的進步,跨平臺開發已經成為了標配,在此大背景下,ASP.NET Core也應運而生。本文主要基於ASP.NET Core+Element+Sql Server開發一個校園圖書管理系統為例,簡述基於MVC三層架構開發的常見知識點,前三篇篇文章簡單介紹瞭如何搭建開發框架,登錄功能,主頁面功能,以... ...
  • WPF框架代碼很龐雜不容易學習,這裡記錄我自己學習的點點滴滴。以wpf-4.8.0-rc1.19455.14為探索對象,相關代碼可在WPF倉庫下載。代碼結構大致如下: PresentationFramework 是最頂層抽象介面,開發中用到的大部分類都來源於此,包含各個控制項,圖形,動畫,綁定,XAM ...
  • 概述 開放封閉原則是面向對象所有原則的核心。對功能擴展開放,面向修改代碼封閉。 需求改變時,在小改變軟體實體源代碼(類、介面、方法等)的前提下通過擴展功能使其滿足新的需求。 需求 描述不同需求的用戶去銀行辦理不同的業務 分析需求 1、在這段程式中 會有多少個對象2、每個對象的屬性和行為對象1: 用戶 ...
  • docker問題 1. 安裝 docker 下載依賴環境 yum -y install yum-utils device-mapper-persistent-data lvm2 指定Docker鏡像源 # 使用的是阿裡的 yum-config-manager --add-repo http://mi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...