离线环境下多台服务器的时间同步
在互联网中,我们的服务器一般都是联网的,所以服务器的时间同步一般都是通过ntp服务来实现的。但是在离线环境下,我们的服务器是无法联网的,
因为无法联网,所以无法使用ntp服务来同步时间。那么在离线环境下,我们如何实现多台服务器的时间同步呢?这里我们可以使用docker来实现。
核心思想就是在一台服务器上启动一个ntp服务,然后将这个ntp服务的时间同步到其他服务器上。
为什么使用docker服务来构建ntp服务器,因为docker服务可以在离线环境下安装,而且安装非常方便,只需要将docker镜像文件拷贝到离线环境下的服务器上。
还有一方面原因,如果安装例如离线的ntp服务,那么需要安装很多依赖包,安装依赖包就意味着会面领依赖性冲突等问题,导致安装过程比较繁琐。
1. 在一台服务器上启动ntp服务(docker)
使用的是 cturra/ntp镜像,此镜像是使用chrony来构建ntp服务器的
- docker 方式
1
2# 使用docker构建
docker run -d --name ntp --restart=always --cap-add SYS_TIME -p 123:123/udp -v /etc/localtime:/etc/localtime:ro cturra/ntp
-d:以后台模式启动容器。
–name ntp:为容器指定名称为“ntp”。
–restart=always:当容器停止或重启时自动重新启动容器。
–cap-add SYS_TIME:向容器授予sys_time功能,该功能允许容器更改系统时间并与外部进行时间同步。
-p 123:123/udp:将容器的123端口映射到主机的123 UDP端口,用于接收NTP时间同步信息。
-v /etc/localtime:/etc/localtime:ro:将宿主机上的/etc/localtime文件挂载到容器中的相应位置,以便容器能够使用宿主机的时区设置。
cturra/ntp:镜像名称,表示要在容器中运行的NTP服务镜像。
实测可以不加 -v /etc/localtime:/etc/localtime:ro, 该容器可能同步了宿主机的时区, 如果不需要修改宿主机时间,则去除cap-add SYS_TIME
- docker-compose 方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# docker-compose.yml
version: '3.9'
services:
ntp:
image: cturra/ntp:latest
container_name: ntp
restart: always
ports:
- 123:123/udp
environment:
- NTP_SERVERS=127.127.1.1
- LOG_LEVEL=0
- TZ=Asia/Shanghai
- NOCLIENTLOG=false
NTP_SERVERS=127.127.1.1
使用本地时间作为ntp服务器的时间源,如果不设置,则使用默认的时间源。由于是离线环境,所以使用本地时间作为时间源。
以供其他服务器同步。
2. 在其他服务器上同步ntp服务器的时间
1 | # 修改timedatectl配置文件 |
192.168.1.127
为第一步的ntp服务器地址
3. 重启时间同步服务
1 | # 重启时间同步服务 |