Usando o NTP para sincronizar um grupo de servidores linux com uma fonte de tempo comum

7

Eu tenho 20 ou mais servidores linux e quero sincronizar todos os seus relógios para um único servidor NTP, que está no mesmo rack e switch que os meus servidores. Nada é virtualizado.

Nossos administradores estão tendo problemas para fazer com que os relógios das várias máquinas sejam sincronizados mais perto do que cerca de 500 ms. Eu teria imaginado, e este post implica que Devemos ser capazes de obter as caixas de linux sincronizadas dentro de 2 ms da fonte e entre si.

As minhas expectativas quanto ao NTP não são razoáveis? Alguma sugestão sobre o que os administradores devem fazer / verificar?

    
por Ted Graham 19.11.2010 / 21:26

3 respostas

12

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)

    
por 20.11.2010 / 00:23
3

O NTP corretamente configurado alcançará a sincronização dentro de alguns ms. Eu sempre garanto que cada cliente NTP se comunique com pelo menos três servidores NTP.

Use ntpq -p para monitorar o status - isso deve indicar por que você não está obtendo uma sincronização melhor.

    
por 19.11.2010 / 22:22
0

Não sei ao certo se você pode conseguir muito menos tempo de sincronização, mas a configuração correta do servidor ntp fará com que os servidores sincronizem quase 10 a 20 ms que fiz em meus servidores. Minimize o tempo de drift. Não é impossível obter isso, mas depois de configurar o servidor NTP e aponta todos os servidores para esse servidor NTP e sincronizar o tempo pela primeira vez manualmente, irá reduzir os servidores de tempo diff b / w.

    
por 19.11.2010 / 21:43

Tags