網站首頁 編程語言 正文
集群腳本分發
在處理 Linux 集群的時候,常常會涉及到集群內文件的同步。文件數量多,且需要頻繁同步的情況下,運用 一些 Linux 命令能很大程度上的幫助我們節省時間和精力。
本文將介紹 scp 和 rsync 兩個命令
- scp(secure copy) 安全拷貝:可以實現服務器與服務器之間的數據拷貝。rsync 遠程同步工具:主要用于備份和鏡像。具有速度快、避免復制相同內容和支持符號鏈接的優點。
- 區別:用 rsync 做文件的復制要比 scp 的速度快,rsync 只對差異文件做更新。scp 是把所有文件都復制過去。
scp
基本語法
scp -r $pdir/$fname $user@$host:$pdir/$fname
scp:命令
-r:遞歸
p d i r / pdir/ pdir/fname:要拷貝的文件路徑/名稱
u s e r @ user@ user@host: p d i r / pdir/ pdir/fname:目的地用戶@主機:目的地路徑/名稱
簡單操作
在 ndmiao 用戶目錄下,創建一個 test 文件夾, 并創建一些文件。修改 test 文件目錄權限歸屬為 ndmiao:ndmiao
[ndmiao@centos01 ~]$ sudo chown ndmiao:ndmiao -R test
在 centos01 上將 test 文件目錄拷貝到 centos02 上,回車后會提示是否確認連接,確認連接后輸入 centos02 的密碼即可
[ndmiao@centos01 ~]$ scp -r test ndmiao@centos02:/home/ndmiao/
在 centos02 上將 centos01 中的目錄拷貝到 centos02
[ndmiao@centos01 ~]$ scp -r test ndmiao@centos02:/home/ndmiao/
在 centos02 上將 centos01 上的目錄拷貝到 centos03
[ndmiao@centos02 ~]$ scp -r ndmiao@centos01:/home/ndmiao/test ndmiao@centos03:/home/ndmiao/
rsync
基本語法
rsync -av $pdir/$fname $user@$host:$pdir/$fname
rsync:命令
-a:歸檔拷貝
-v:顯示復制過程
p d i r / pdir/ pdir/fname:要拷貝的文件路徑/名稱
u s e r @ user@ user@host: p d i r / pdir/ pdir/fname:目的地用戶@主機:目的地路徑/名稱
簡單操作
同步 centos01 目錄到 centos02
[ndmiao@centos01 ~]$ rsync -av test ndmiao@centos02:/home/ndmiao/
xsync
雖然上面兩個命令已經極大的方便了文件的同步,但是當集群中存在著幾十幾百甚至上千服務器的時候,就又顯的麻煩了,這時候就可以編寫一個shell腳本來實現集群文件的同步。
需求
能夠一條命令同步目錄至集群所有的節點
實現
配置 /etc/hosts ,因為腳本需要通過主機名來獲取節點的地址, 文件中追加節點地址以及對應的主機名。配置好之后,需要重啟。
192.168.10.101 centos01
192.168.10.102 centos02
192.168.10.102 centos03
因為需要腳本在任何路徑下都能夠使用,所以需要將腳本放置在聲明了全局環境變量的路徑下面。
[ndmiao@centos01 ~]$ /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ndmiao/.local/bin:/home/ndmiao/bin
于是選擇將 xsync 文件放置在 /home/ndmiao/bin 目錄下
#!/bin/bash #1. 判斷參數個數 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍歷集群所有機器 for host in centos01 centos02 centos03 do echo ==================== $host ==================== #3. 遍歷所有目錄,挨個發送 for file in $@ do #4. 判斷文件是否存在 if [ -e $file ] then #5. 獲取父目錄 pdir=$(cd -P $(dirname $file); pwd) #6. 獲取當前文件的名稱 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done
修改腳本 xsync 的權限
[ndmiao@centos01 bin]$ chmod 777 xsync
測試腳本
[ndmiao@centos01 ~]$ xsync /home/ndmiao/bin
運行后會發現所有節點的 /home/ndmiao/bin 下都會出現 xsync 腳本
如果想要以 root 的身份來運行
[ndmiao@centos01 ~]$ sudo /home/ndmiao/bin/xsync /home/ndmiao/test
SSH 無密碼登錄
雖然已經配置好了xsync,但是每同步一個節點就要輸入一次節點的密碼,SSH 無密碼登錄就可以去除這種重復的操作
免登陸原理
假設有兩臺服務器,一臺為 centos01,一臺為 centos02,使用 ssh-key-gen 在 centos01 的 /home/ndmiao/.ssh 會生成私鑰 id_rsa 和 公鑰 id_rsa.pub。將 centos01 的公鑰拷貝到 centos02 的 authorized_keys 后,當 centos01 通過 ssh 訪問 centos02(數據用私鑰加密),centos02 會授權 authorized_keys 中的 centos01 公鑰來解密私鑰,然后用 centos01 公鑰加密數據返還給 centos01,centos01 接受到數據后用私鑰來解密數據。
操作步驟
生成公鑰和私鑰
[ndmiao@centos01 ~]$ cd .ssh [ndmiao@centos01 .ssh]$ ssh-keygen -t rsa
將公鑰拷貝到需要免密登錄的目標節點,因為 ssh 訪問自身節點也需要密碼,所以自身也需要拷貝
[ndmiao@centos01 .ssh]$ ssh-copy-id centos01 [ndmiao@centos01 .ssh]$ ssh-copy-id centos02 [ndmiao@centos01 .ssh]$ ssh-copy-id centos03
這時候就可以通過 centos01 來 ssh 免密訪問三臺節點了,運行 xsync 也不再需要輸入密碼。如果想要其它節點也能無密碼訪問其它的節點,也需要同樣的配置過程。因為 Linux 不同用戶是隔離的,所以其它用戶想要無密碼訪問其它節點,也需要同樣操作配置,包括 root 用戶。
原文鏈接:https://blog.csdn.net/qq_40851534/article/details/122441324
相關推薦
- 2022-04-25 T-SQL查詢為何慎用IN和NOT?IN詳解_MsSql
- 2022-10-05 redis?stream?實現消息隊列的實踐_Redis
- 2023-11-19 樹莓派/arm設備上安裝火狐Firefox瀏覽器
- 2022-04-08 go實現圖片拼接與文字書寫的方法實例_Golang
- 2022-05-05 Redis數據類型string和Hash詳解_Redis
- 2022-03-22 C++this指針詳情_C 語言
- 2022-10-09 .NET使用Moq進行單元測試_實用技巧
- 2022-06-25 EF?Core的CRUD(增刪改查)基本操作_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支