內網集群準同步shell腳本
在公司的內網中配置集群同步,可能是代理問題,ntpd和chrony都沒有用,所以只好寫shell腳本解決
前提條件集群中各臺機器已經配置好了免密登錄
一、免密登錄配置
1. 用 root 用戶登錄。每臺服務器都生成公鑰,再合並到 authorized_keys。
2. CentOS 默認沒有啟動 ssh 無密登錄 ,每臺服務器都要配置 /etc/ssh/sshd_config。
vi /etc/ssh/sshd_config 修改
UseDNS no
PubkeyAuthentication yes
3. 每臺服務器下都輸入命令 ssh-keygen -t rsa,生成 key,一律不輸入密碼,直接回車,/root 就會生成 .ssh 文件夾。
4. 在 Master 服務器下,合並公鑰到 authorized_keys 文件,進入 /root/.ssh 目錄,通過 SSH 命令合並.
cat id_rsa.pub>> authorized_keys
ssh root@bigdata02 cat ~/.ssh/id_rsa.pub>> authorized_keys
ssh root@bigdata03 cat ~/.ssh/id_rsa.pub>> authorized_keys
5. 把 Master 服務器的 authorized_keys、known_hosts 復制到 Slave 服務器的 `/root/.ssh 目錄
scp authorized_keys root@bigdata02:/root/.ssh/
scp authorized_keys root@bigdata03:/root/.ssh/
scp known_hosts root@bigdata02:/root/.ssh/
scp known_hosts root@bigdata03:/root/.ssh/
二、準同步腳本timer.sh,在master主機的時間上加了5秒鐘,因為執行腳本有點延遲,將準同步的範圍縮小
#!/usr/bin/env bash #hosts array hosts=("bigdata02" "bigdata03" "bigdata04" "bigdata05") #localhost current time date1=`date "+%Y/%m/%d %H:%M:%S"` date2=`date -d "$date1 5 second" +"%Y/%m/%d %H:%M:%S"` echo "Now the time is $date1" #loop host to set time for hostname in ${hosts[*]} do theDay=`date -d "$date2" +"%Y-%m-%d"` theTime=`date -d "$date2" +"%H:%M:%S"` echo $hostname ssh -t $hostname bash -c "‘date -s ‘$theDay‘ &&hwclock --systohc‘" ssh -t $hostname bash -c "‘date -s ‘$theTime‘ &&hwclock --systohc‘" done
三、在master上設置定時任務
配置centos7定時任務 每小時執行一次
開啟定時任務
systemctl start crond
systemctl enable crond.service
編輯當前crontab,輸入 crontab -e
* */1 * * * sh /home/timer.sh
內網集群準同步shell腳本