Eu possuo uma empresa de hospedagem e fazemos exatamente isso. Aqui está como nós conseguimos isso.
Para começar, você precisa de uma fonte mestra NTP. Então, um dos seus servidores Linux se tornará o mestre. Eu criaria um registro de DNS A chamado time.example.com (assumindo que example.com é o domínio). Dessa forma, se o seu mestre se mover, você não precisará atualizar os outros 19 servidores.
No servidor master, você precisa ter um arquivo ntp.conf apropriadamente configurado.
Aqui está o que um dos nossos arquivos mestre /etc/ntp.conf se parece. Note que este é um centro de dados com um espaço de endereço privado (RFC1918) usando 172.17.x.x, portanto, você precisará ajustar de acordo. Se você quiser mais de um mestre, crie mais de um registro de DNS A com IPs diferentes para obter um pouco de tolerância a falhas, se desejado.
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
server 0.north-america.pool.ntp.org
server 1.north-america.pool.ntp.org
server 2.north-america.pool.ntp.org
server 3.north-america.pool.ntp.org
# Logging & Stats
statistics loopstats
statsdir /var/log/ntp/
filegen peerstats file peers type day link enable
filegen loopstats file loops type day link enable
# Drift file. Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
#
driftfile /etc/ntp/drift
broadcastdelay 0.008
restrict default noquery nomodify
restrict 0.north-america.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 1.north-america.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 2.north-america.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 3.north-america.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
# Allow LAN to query us
restrict 172.17.0.0 mask 255.255.0.0 nomodify notrap
# Trust ourselves. :-)
restrict 127.0.0.1
Agora em cada cliente, temos um arquivo /etc/ntp.conf com esta aparência:
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
server time.example.com
# Drift file. Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
driftfile /etc/ntp/drift
multicastclient # listen on default 224.0.1.1
broadcastdelay 0.008
# Don't serve time or stats to anyone else by default (more secure)
restrict default noquery nomodify
restrict time.example.com mask 255.255.255.255 nomodify notrap noquery
# Allow LAN to query us
restrict 172.17.0.0 mask 255.255.0.0 nomodify notrap
# Trust ourselves. :-)
restrict 127.0.0.1
Use o comando ntpq para ver os servidores com os quais você está sincronizado. Ele forneceu uma lista de servidores de tempo configurados e o atraso, deslocamento e jitter que seu servidor está experimentando com eles. Para sincronização correta, os valores de atraso e deslocamento devem ser diferente de zero e o valor do jitter deve ser inferior a 100.
Também em nossos nós cliente, temos um script rc (/etc/rc.d/rc.local) que sincroniza o relógio antes de iniciar o daemon NTPD. Aqui estão as partes importantes ... Elas dependem da ordem.
Sincronize o relógio do cliente com a fonte de tempo principal / usr / sbin / ntpdate -b time.example.com
Inicie o daemon NTPD, permitindo grandes ajustes de tempo durante a inicialização. / usr / sbin / ntpd -g -x
Por fim, dependendo da sua configuração, você precisará inserir uma regra de firewall para permitir que seu mestre time.example.com atinja a porta da Internet pública pela UDP. Aqui está uma regra IPTables típica e apropriadamente colocada
iptables -t nat -A POSTROUTING -o $ PUB_IF -p udp --dport 123-j MASCARADA
Onde PUB_IF é a interface pública (eth0, eth1, whatever)