1. 程式人生 > >內網集群準同步shell腳本

內網集群準同步shell腳本

loop pre 編輯 mce etime bigdata 都沒有 小時 localhost

在公司的內網中配置集群同步,可能是代理問題,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腳本