Linux系统运维
- 在 Ubuntu 20.04 上为超大数据盘分区
- 自动重启sz_driver脚本
- 每天21点自动统计tcp连接数脚本
- 自动清除15天前的日志脚本
- check_and_sync.sh
- ubuntu系统一网卡多IP配置
- 麒麟v10查询激活授权
- 儒来部署步骤-20250514
- Docker容器的导入和导出
- 创建容器四代网关协议代理适配器rulr-v4gw-adapter
- 解决Ubuntu服务器时间与本地时间不一致问题
- docker-compose 导出导入容器教程
- Docker/DockerHub 国内镜像源/加速列表(6月18日更新-长期维护)
在 Ubuntu 20.04 上为超大数据盘分区
在 Ubuntu 20.04 上为超大数据盘(如 20TB 或更大)分区时,建议使用 gdisk 或 parted 而不是 fdisk,因为 fdisk 对于超过 2TB 的磁盘可能存在限制。下面是使用 gdisk 和 parted 的详细步骤:
使用 gdisk 分区步骤 1:安装 gdisk如果还没有安装 gdisk,先进行安装:
sh复制代码
sudo apt updatesudo apt install gdisk
步骤 2:列出磁盘列出所有磁盘以确认目标磁盘设备(假设为 /dev/sdb):
sh复制代码
sudo fdisk -l
步骤 3:使用 gdisk 创建新分区使用 gdisk 分区工具:
sh复制代码
sudo gdisk /dev/sdb
在 gdisk 交互界面中执行以下步骤:
- 输入 n 创建新分区。
- 接受默认的分区编号(通常是 1)。
- 接受默认的第一个扇区。
- 接受默认的最后一个扇区以使用整个磁盘空间。
- 输入 w 写入分区表并退出。
使用 parted 分区步骤 1:安装 parted如果还没有安装 parted,先进行安装:
sh复制代码
sudo apt updatesudo apt install parted
步骤 2:列出磁盘列出所有磁盘以确认目标磁盘设备(假设为 /dev/sdb):
sh复制代码
sudo parted -l
步骤 3:使用 parted 创建新分区使用 parted 分区工具:
sh复制代码
sudo parted /dev/sdb
在 parted 交互界面中执行以下步骤:
- 输入 mklabel gpt 创建新的 GPT 分区表。
- 输入 mkpart primary ext4 0% 100% 创建一个主分区,使用整个磁盘。
- 输入 quit 退出 parted。
步骤 4:格式化分区使用 mkfs 命令格式化新创建的分区(假设分区是 /dev/sdb1):
sh复制代码
sudo mkfs.ext4 /dev/sdb1
步骤 5:创建挂载点创建一个目录作为挂载点,例如 /mnt/data:
sh复制代码
sudo mkdir /mnt/data
步骤 6:挂载分区挂载新创建的分区到 /mnt/data:
sh复制代码
sudo mount /dev/sdb1 /mnt/data
步骤 7:自动挂载设置(可选)为了在系统重启后自动挂载分区,需要编辑 /etc/fstab 文件。首先获取新分区的 UUID:
sh复制代码
sudo blkid /dev/sdb1
然后编辑 /etc/fstab 文件:
sh复制代码
sudo nano /etc/fstab
添加以下内容(使用你实际的 UUID):
sh复制代码
UUID=你的UUID /mnt/data ext4 defaults 0 2
保存并退出编辑器。
检查挂载最后,验证挂载是否正确:
sh复制代码
df -h
通过这些步骤,你应该能够在 Ubuntu 20.04 上成功地为超大数据盘分区、格式化并挂载。
自动重启sz_driver脚本
#!/bin/bash
#########################################################################
# 使用方法:
# chmod +x /home/shuncom/services/scripts/sz_driver_mon.sh
# 00 03 * * 05 /bin/bash /home/shuncom/services/scripts/sz_driver_mon.sh
#########################################################################
sleep 30
set -i
source ~/.bashrc
# 当前时间
current_time="`date +%Y%m%d%H%M%S`"
# sz_driver的pid
sz_driver_pid="`pidof sz_driver`"
# 日志文件路径
sz_driver_mon_log="/home/shuncom/services/log/sz_server/${current_time}-sz_driver-mon.log"
# 判断sz_driver是否启动,没有启动时退出脚本并写入日志
if [ -z "${sz_driver_pid}" ]; then
echo -e "${current_time} sz_driver not start" >> ${sz_driver_mon_log}
exit 1
fi
# 重启驱动
/bin/sh /home/shuncom/services/scripts/driver stop >/dev/null 2>&1
sleep 10
/bin/sh /home/shuncom/services/scripts/driver start >/dev/null 2>&1
sleep 10
/bin/sh /home/shuncom/services/scripts/driver status | grep 'is running' >/dev/null 2>&1
# 如果重启失败,退出脚本,写入日志
if [ $? -ne 0 ]; then
echo -e "${current_time} sz_driver restart failed" >> ${sz_driver_mon_log}
exit 1
fi
# 如果重启成功,退出脚本,写入日志
echo -e "${current_time} sz_driver restart success" >> ${sz_driver_mon_log}
exit 1
每天21点自动统计tcp连接数脚本
#!/bin/bash
#sudo chmod +x /home/shuncom/net_conn_count.sh
#crontab -e | 0 21 * * * /home/shuncom/net_conn_count.sh
# 获取当前时间
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
# 获取 TCP 6011 端口的连接数
conn_count=$(netstat -an | grep ':6011' | grep -i tcp | wc -l)
# 获取网卡 eth0 的接收和发送数据包数
# 第3列为接收包,第11列为发送包
read rx_packets tx_packets <<< $(cat /proc/net/dev | awk '/eth0:/ {gsub(/:/,""); print $3, $11}')
# 写入日志文件
echo "$timestamp TCP 6011连接数: $conn_count, eth0接收包: $rx_packets, 发送包: $tx_packets" >> /home/shuncom/net_conn_count.log
自动清除15天前的日志脚本
#!/bin/bash
#0 1 * * * /home/shuncom/auto_del_sz_log.sh
# 设置变量
target_dir="/home/shuncom/services/log/sz_server"
log_file="/home/shuncom/log/del_driver_log.log"
current_time="$(date '+%Y-%m-%d %H:%M:%S')"
# 执行删除操作并记录日志
echo "[$current_time] Start deleting files older than 15 days in $target_dir" >> "$log_file"
find "$target_dir" -type f -mtime +15 -print -delete >> "$log_file" 2>&1
echo "[$current_time] Deletion complete." >> "$log_file"
echo "---------------------------------------------" >> "$log_file"
check_and_sync.sh
#!/bin/bash
#chmod +x /home/shuncom/bin/check_and_sync.sh
#30 1 * * * /home/shuncom/bin/check_and_sync.sh
# 检查是否有名为“shun-sync”的进程
PROCESS_NAME="shun-sync"
PROCESS_ID=$(pgrep -f $PROCESS_NAME)
# 如果找到进程,则杀掉该进程
if [ ! -z "$PROCESS_ID" ]; then
kill $PROCESS_ID
echo "$(date): Killed process $PROCESS_NAME with PID $PROCESS_ID" >> /home/shuncom/log/check_and_sync.log
fi
# 执行sttsync脚本
sh /home/shuncom/bin/sttsync
echo "$(date): Executed sttsync script" >> /home/shuncom/log/check_and_sync.log
ubuntu系统一网卡多IP配置
#ubuntu18.04配置
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 222.222.63.231/24
- 192.168.3.11/24
gateway4: 192.168.3.1
routes:
- to: 222.222.63.0/24
via: 222.222.63.1
nameservers:
addresses:
- 202.96.209.5
- 223.5.5.5
network:
ethernets:
eth0:
addresses:
- 172.17.20.17/24
- 192.168.1.17/24
gateway4: 192.168.1.1
routes:
- to: 172.17.20.0/24
via: 172.17.20.254
nameservers:
addresses:
- 114.114.114.114
version: 2
#ubuntu14.04配置
# 主IP地址配置(eth0)
auto eth0
iface eth0 inet static
address 192.168.1.19
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.0.5
# 子IP地址配置(eth0:1)
auto eth0:1
iface eth0:1 inet static
address 10.2.2.19
netmask 255.255.255.0
gateway 10.2.2.1
dns-nameservers 202.96.209.5
ip route add default via 192.168.1.1 dev eth0 metric 100
ip route add default via 10.2.2.1 dev eth0:1 metric 200
麒麟v10查询激活授权
你当前系统中安装了部分与激活相关的组件:
✅ 已安装组件说明:
kylin-activation-ukey-driver-1.0-1.p01.ky10.x86_64
libkylin-activation-3.0-64.p69.ky10.x86_64
这说明你系统中安装了:
libkylin-activation:激活相关的库;
ukey-driver:支持通过 USB Key(UKey)激活的驱动模块。
❌ 但缺失核心工具:
没有安装主控工具 kylin-activation 命令行工具本体,也就是你无法通过命令 kylin-activation status 检查激活状态的根本原因。
✅ 解决方案
你需要安装完整的 kylin-activation 工具包。请尝试以下方式之一:
🔧 方法一:使用 yum 安装主工具包
sudo yum install kylin-activation
如果提示找不到软件包,很可能是你的系统未配置银河麒麟官方的商业源。你可以尝试添加银河麒麟官方源(需要授权账户)或使用离线 RPM 包。
🔧 方法二:查找并安装 RPM 包(适用于无网络环境)
如果你有镜像安装介质或离线软件包仓库,可以手动安装:
cd /path/to/rpm-packages/
sudo rpm -ivh kylin-activation-*.rpm
🔧 方法三:使用 GUI 检查激活状态(如果有图形界面)
在图形界面中进入:
“控制中心” → “系统信息” 或 “关于本机”
部分版本会显示激活状态。
✅ 临时替代检测方法
你可以尝试查看系统日志中是否有激活信息:
grep -i activation /var/log/messages
也可以查看授权库中是否有激活文件:
银河麒麟 V10 自带激活工具,通常命令如下:
sudo kylin-activation status
如果命令存在,会返回类似以下内容:
✅ 已激活状态:
当前系统已激活
激活码:XXXX-XXXX-XXXX-XXXX
激活时间:2024-10-01
激活类型:永久授权
❌ 未激活状态:
当前系统未激活
请联系银河麒麟客服获取激活码
如果你无法安装 GUI,但又想临时运行这个工具,可以安装 xvfb(虚拟帧缓冲)模拟图形界面运行:
sudo yum install -y xorg-x11-server-Xvfb
xvfb-run kylin-activation status
儒来部署步骤-20250514
儒来平台部署
部署前全局系统优化
ubuntu18.04更换阿里云源
cp /etc/apt/sources.list /etc/apt/sources.list.bak
cat > /etc/apt/sources.list << EOF
deb https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
EOF
apt update && apt upgrade -y
sudo hostnamectl set-hostname rulr-1
中国:
apt-get install ntpdate -y &&\
if ! crontab -l | grep "ntpdate" &>/dev/null; then
(echo "*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1"; crontab -l) | crontab
fi
越南:
apt-get install ntpdate -y &&\
if ! crontab -l | grep "ntpdate" &>/dev/null; then
(echo "*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1"; crontab -l) | crontab
fi
埃塞俄比亚
apt-get install ntpdate -y &&\
if ! crontab -l | grep "ntpdate" &>/dev/null; then
(echo "*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1"; crontab -l) | crontab
fi
cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
#net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 20480
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20
vm.swappiness = 0
net.core.somaxconn = 20480
vm.overcommit_memory = 1
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216
net.ipv4.tcp_wmem = 4096 131072 1048576
net.ipv4.tcp_rmem = 4096 131072 1048576
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_fastopen = 3
fs.aio-max-nr = 1048576
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
EOF
sysctl -p
cat >> /etc/security/limits.conf << EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
root soft nproc 65535
root hard nproc 65535
root soft nofile 65535
root hard nofile 65535
EOF
su -
ulimit -n
# 查看系统语言
echo $LANG
en_US.UTF-8
# 如果系统语言不是"en_US.UTF-8"时按下面的步骤进行修改,选中en_US.UTF-8 UTF-8
# dpkg-reconfigure locales
上下键: 连续内容上下移动光标 tab键: 不连续内容移动光标 space键: 选中内容,确认
安装docker、docker-compose(rulr-1 至 rulr-5)
上传 docker_debs_2021_Rulr6.zip
scp -P 53022 shuncomlog@shuncom.3322.org:/home/shuncomlog/rulr/docker_debs_2021_Rulr6.zip ./
sudo apt install -y unzip
unzip docker_debs_2021_Rulr6.zip &&\
cd docker_debs_2021_Rulr6 &&\
dpkg -i *.deb &&\
mv docker-compose-Linux-x86_64_1.29.2 /usr/bin/docker-compose &&\
chmod +x /usr/bin/docker-compose &&\
usermod -aG docker shuncom &&\
id shuncom &&\
docker -v &&\
docker-compose version
第一章、部署应用-1
rulr-1
sudo su
sudo docker network create --subnet=172.18.0.0/16 rulr-network &&\
sudo docker network ls
su - shuncom
scp -P 53022 -r shuncomlog@shuncom.3322.org:/home/shuncomlog/rulr/30.16/* ./
cd /home/shuncom
tar -zxvf servers-20250512.tar.gz
tar -zxvf www-20250512.tar.gz
mkdir -p /home/shuncom/log/dubbo/registry/cache &&\
mkdir -p /home/shuncom/log/nginx &&\
mkdir -p /home/shuncom/log/shuncom-oauth2-server/tomcat &&\
mkdir -p /home/shuncom/log/web-maintain &&\
mkdir -p /home/shuncom/log/web-things &&\
mkdir -p /home/shuncom/log/web-user &&\
mkdir -p /home/shuncom/log/model-proxy-server
cat > /home/shuncom/compose/.env << EOF
RULR_MYSQL=172.17.20.17
RULR_ZOOKEEPER=172.17.20.15
RULR_REDIS=172.17.20.15
RULR_INFLUXDB=172.17.20.16
RULR_RABBITMQ=172.17.20.15
HOSTIP=172.17.20.11
WEB_HOST=172.17.20.11
WEB_PORT=443
RULR_1=172.17.20.11
RULR_3=172.17.20.13
RULR_4=172.17.20.14
JAVA_IMAGE=openjdk:8-alpine3.9-tini
DB_USER=shuncom
EOF
sudo chown -R root.root /home/shuncom/www &&\
sudo chown -R shuncom.shuncom /home/shuncom/www/rulr
2核cpus 改为1.4
vi docker-compose.yml
%s/'2.8'/'1.4'/gc
rulr-model-proxy-server.jar包从rulr-2获取
在rulr-2执行:
scp -r /home/shuncom/servers/model-proxy-server/ shuncom@172.17.20.11:/home/shuncom/servers/
docker image load -i nginx_1.20.2.tar &&\
docker image load -i openjdk_8-alpine3.9.tar &&\
docker image load -i openjdk_8-alpine3.9-tini.tar
docker-compose build &&\
docker-compose up -d &&\
docker-compose ps
脚本路径:本地部署\RulrDeploy\ServiceComponents\ops_tools
执行 installCleanLog31.sh 安装清理逻辑
执行rotateNginxLog31.sh 安装清理nginx日志配置
第二章、部署应用-2
rulr-2
sudo su
docker network create --subnet=172.18.0.0/24 rulr-network &&\
docker network ls
su - shuncom
scp -P 53022 -r shuncomlog@shuncom.3322.org:/home/shuncomlog/rulr/30.17/* ./
cd /home/shuncom/
tar -zxvf servers-20250512.tar.gz
mkdir -p /home/shuncom/log/dtumt-connect &&\
mkdir -p /home/shuncom/log/engine-action-server &&\
mkdir -p /home/shuncom/log/engine-alarm-server &&\
mkdir -p /home/shuncom/log/engine-timing-server &&\
mkdir -p /home/shuncom/log/engine-trigger-server &&\
mkdir -p /home/shuncom/log/model-converter-server &&\
mkdir -p /home/shuncom/log/model-event-server &&\
mkdir -p /home/shuncom/log/model-proxy-server &&\
mkdir -p /home/shuncom/log/model-task-schedule
cat > /home/shuncom/compose/.env << EOF
RULR_MYSQL=172.17.20.17
RULR_ZOOKEEPER=172.17.20.15
RULR_REDIS=172.17.20.15
RULR_INFLUXDB=172.17.20.16
RULR_RABBITMQ=172.17.20.15
HOSTIP=172.17.20.12
WEB_HOST=172.17.20.11
WEB_PORT=443
RULR_1=172.17.20.11
RULR_3=172.17.20.13
RULR_4=172.17.20.14
JAVA_IMAGE=openjdk:8-alpine3.9-tini
DB_USER=shuncom
EOF
2核cpus 改为1.4
%s/'2.8'/'1.4'/gc
3核cpus 改为1.5
%s/'3'/'1.5'/gc
cd /home/shuncom/compose/ &&\
docker load -i openjdk_8-ffmpeg.tar &&\
docker load -i openjdk_8-alpine3.9.tar &&\
docker load -i openjdk_8-alpine3.9-tini.tar &&\
docker-compose build &&\
docker-compose up -d &&\
docker-compose ps
su - shuncom
chmod +x /home/shuncom/ops_tools/*
/home/shuncom/ops_tools/installCleanLog31.sh
第三章、部署应用-3
rulr-3
sudo su
docker network create --subnet=172.18.0.0/16 rulr-network
docker network ls
su - shuncom
scp -P 53022 -r shuncomlog@shuncom.3322.org:/home/shuncomlog/rulr/30.18/* ./
cd /home/shuncom/
tar -zxvf servers-20250512.tar.gz
tar -zxvf www-20250512.tar.gz
su - shuncom
mkdir -p /home/shuncom/log/advice-server &&\
mkdir -p /home/shuncom/log/batch-proxy-server &&\
mkdir -p /home/shuncom/log/dtumt-connect &&\
mkdir -p /home/shuncom/log/dubbo/registry/cache &&\
mkdir -p /home/shuncom/log/model-data-resolver &&\
mkdir -p /home/shuncom/log/model-task-batch &&\
mkdir -p /home/shuncom/log/nginx &&\
mkdir -p /home/shuncom/log/pph-proxy-handler/tomcat &&\
mkdir -p /home/shuncom/log/push-tripartite &&\
mkdir -p /home/shuncom/log/shuncom-onbon-server
cat > /home/shuncom/compose/.env << EOF
RULR_MYSQL=172.17.20.17
RULR_ZOOKEEPER=172.17.20.15
RULR_REDIS=172.17.20.15
RULR_INFLUXDB=172.17.20.16
RULR_RABBITMQ=172.17.20.15
HOSTIP=172.17.20.13
WEB_HOST=172.17.20.11
WEB_PORT=443
RULR_1=172.17.20.11
RULR_3=172.17.20.13
RULR_4=172.17.20.14
JAVA_IMAGE=openjdk:8-alpine3.9-tini
DB_USER=shuncom
EOF
%s/'2.8'/'1.4'/gc
cd /home/shuncom/compose/ &&\
docker image load -i nginx_1.20.2.tar &&\
docker image load -i openjdk_8-alpine3.9.tar &&\
docker image load -i openjdk_8-alpine3.9-tini.tar &&\
docker-compose build &&\
docker-compose up -d &&\
docker-compose ps
su - shuncom
chmod +x /home/shuncom/ops_tools/*
/home/shuncom/ops_tools/installCleanLog31.sh
sudo /home/shuncom/ops_tools/rotateNginxLog31.sh
第四章、部署应用-4
rulr-4
sudo su
docker network create --subnet=172.18.0.0/16 rulr-network &&\
docker network ls
su - shuncom
应用资源来自 192.168.30.41
scp -P 53022 -r shuncomlog@shuncom.3322.org:/home/shuncomlog/rulr/30.41/* ./
cd /home/shuncom/
tar -zxvf servers-20250512.tar.gz
mkdir -p /home/shuncom/log/dtumt-connect &&\
mkdir -p /home/shuncom/log/dtumt-handler &&\
mkdir -p /home/shuncom/log/dtumt-transmission &&\
mkdir -p /home/shuncom/log/dubbo/registry/cache &&\
mkdir -p /home/shuncom/log/gateway-connect &&\
mkdir -p /home/shuncom/log/gateway-handler &&\
mkdir -p /home/shuncom/log/gateway-proxy-handler &&\
mkdir -p /home/shuncom/log/light-connect-gateway &&\
mkdir -p /home/shuncom/log/light-connect-tcp &&\
mkdir -p /home/shuncom/log/light-proxy-handler &&\
mkdir -p /home/shuncom/log/mt-event-server &&\
mkdir -p /home/shuncom/log/nginx &&\
mkdir -p /home/shuncom/log/tripartite-connect &&\
mkdir -p /home/shuncom/log/tripartite-connect-sensor
cat > /home/shuncom/compose/.env << EOF
RULR_MYSQL=172.17.20.17
RULR_ZOOKEEPER=172.17.20.15
RULR_REDIS=172.17.20.15
RULR_INFLUXDB=172.17.20.16
RULR_RABBITMQ=172.17.20.15
HOSTIP=172.17.20.14
WEB_HOST=172.17.20.11
WEB_PORT=443
RULR_1=172.17.20.11
RULR_3=172.17.20.13
RULR_4=172.17.20.14
JAVA_IMAGE=openjdk:8-alpine3.9-tini
DB_USER=shuncom
EOF
cd /home/shuncom/compose/ &&\
docker image load -i nginx-tcp-24.08.19.tar &&\
docker image load -i nginx-tcp.tar &&\
docker image load -i openjdk_8-alpine3.9.tar &&\
docker image load -i openjdk_8-alpine3.9-tini.tar
#如果是2核做如下修改:
vi docker-compose.yml
%s/'2.8'/'1.4'/gc
cp docker-compose.yml docker-compose.yml.bak
vi docker-compose.yml
修改docker-compose.yml,先运行 set paste
# nginx-tcp:
# image: nginx-tcp
# build:
# context: ./
# dockerfile: NginxTcp
%s/image: nginx-tcp/image: nginx-tcp:24.08.19/gc
docker-compose build &&\
docker-compose up -d &&\
docker-compose ps
脚本路径:本地部署\RulrDeploy\ServiceComponents\ops_tools
执行./installCleanLog31.sh 安装清理逻辑
执行sudo ./rotateNginxLog31.sh 安装清理nginx日志配置
第五章、部署中间件
rulr-5
sudo su
docker network create --subnet=172.18.0.0/16 rulr-network &&\
docker network ls
2 创建应用目录
su - shuncom
scp -P 53022 -r shuncomlog@shuncom.3322.org:/home/shuncomlog/rulr/rediszoorabbitmq/* ./
mkdir -p /home/shuncom/rulr/conf/redis &&\
mkdir -p /home/shuncom/logs/rabbitmq &&\
mkdir -p /home/shuncom/rulr/conf/rabbitmq &&\
chmod 757 /home/shuncom/logs/rabbitmq &&\
chmod 757 /home/shuncom/rulr/conf/rabbitmq &&\
mkdir -p /home/shuncom/rulr/conf/zookeeper &&\
mkdir -p /home/shuncom/compose
cat > /home/shuncom/compose/.env << EOF
RULR_MYSQL=172.17.20.17
RULR_ZOOKEEPER=172.17.20.15
RULR_REDIS=172.17.20.15
RULR_INFLUXDB=172.17.20.16
RULR_RABBITMQ=172.17.20.15
HOSTIP=172.17.20.15
WEB_HOST=172.17.20.11
WEB_PORT=443
RULR_1=172.17.20.11
RULR_3=172.17.20.13
RULR_4=172.17.20.14
JAVA_IMAGE=openjdk:8-alpine3.9-tini
DB_USER=shuncom
EOF
3 上传应用配置文件
cd /home/shuncom/compose &&\
cp redis-5.0.14/6379.conf ../rulr/conf/redis/ &&\
cp rabbitmq-3.7.26/rabbitmq.conf ../rulr/conf/rabbitmq/ &&\
chmod 667 /home/shuncom/rulr/conf/rabbitmq/rabbitmq.conf &&\
cp zookeeper-3.5.8/log4j.properties ../rulr/conf/zookeeper/ &&\
cp zookeeper-3.5.8/zoo.cfg ../rulr/conf/zookeeper/
(4) compose
# 配置文件上传(docker-compose.yml)
# cd /home/shuncom/compose
docker image load -i rabbitmq_3.7.26.tar &&\
docker image load -i redis_5.0.14.tar &&\
docker image load -i zookeeper_3.5.8.tar
cp docker-compose.yml docker-compose.yml.bak
vi docker-compose.yml
删除mysql infuxdb部分内容
如何是2核CPU
%s/'2.8'/'1.4'/gc
#如果内存小于8G,这里要修改一下把4096改为2048
vi /home/shuncom/rulr/conf/rabbitmq/rabbitmq.conf
vm_memory_high_watermark.absolute=2048MB
%s/4096/2048/gc
4 启动应用服务并查看服务状态
cd /home/shuncom/compose &&\
docker-compose up -d &&\
docker-compose ps
5 rabbitmq开启web管理
docker exec -it rulr-rabbit bash
rabbitmq-plugins enable rabbitmq_management
exit
6 应用访问测试
(1) 访问redis
docker exec -it rulr-redis bash
redis-cli -h 127.0.0.1 -a 'sz_clighting' -p 6379
127.0.0.1:6379> CONFIG get maxclients
1) "maxclients"
2) "10000"
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> exit
root@f39b51dab023:/data# redis-cli --version
redis-cli 5.0.14
root@f39b51dab023:/data# exit
(2) 访问rabbitmq
URL: http://172.17.20.15:15672/
Username: shuncom_mq
Password: sz_clighting_mq
需要开启WEB管理。可通过以下方式(查看服务状态):
docker exec -it rulr-rabbit rabbitmqctl status
(3) 访问zookeeper
docker exec -it rulr-zookeeper bash
zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 1] quit
root@2ad68fbb302e:/apache-zookeeper-3.5.8-bin# exit
第六章、部署InfluxDB
rulr-6
sudo su
1 下载influxdb软件包
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.10_linux_amd64.tar.gz
scp -P 53022 -r shuncomlog@shuncom.3322.org:/home/shuncomlog/rulr/influxdb/influxdb-1.8.10_linux_amd64.tar.gz ./
2 安装influxdb
tar -zxvf influxdb-1.8.10_linux_amd64.tar.gz &&\
mv influxdb-1.8.10-1 influxdb &&\
useradd -M -s /usr/sbin/nologin influxdb &&\
id influxdb
uid=1601(influxdb) gid=1601(influxdb) groups=1601(influxdb)
3 配置influxdb配置文件
cat > /home/shuncom/influxdb/etc/influxdb/influxdb.conf << EOF
reporting-disabled = false
bind-address = "127.0.0.1:8088"
[meta]
dir = "/home/shuncom/influxdb/var/lib/influxdb/meta"
[data]
dir = "/home/shuncom/influxdb/var/lib/influxdb/data"
wal-dir = "/home/shuncom/influxdb/var/lib/influxdb/wal"
series-id-set-cache-size = 100
[coordinator]
[retention]
[shard-precreation]
[monitor]
[http]
enabled = true
bind-address = ":8086"
auth-enabled = false
[logging]
[subscriber]
[[graphite]]
[[collectd]]
[[opentsdb]]
[[udp]]
[continuous_queries]
[tls]
EOF
4 将InfluxDB服务加入systemd
cat > /lib/systemd/system/influxdb.service << EOF
[Unit]
Description=InfluxDB is an open-source, distributed, time series database
Documentation=https://docs.influxdata.com/influxdb/
After=network-online.target
[Service]
User=influxdb
Group=influxdb
LimitNOFILE=65536
ExecStart=/home/shuncom/influxdb/usr/bin/influxd -config /home/shuncom/influxdb/etc/influxdb/influxdb.conf \$INFLUXD_OPTS
KillMode=control-group
Restart=on-failure
RestartSec=2s
[Install]
WantedBy=multi-user.target
Alias=influxdb.service
EOF
5 设置InfluxDB日志
cat > /etc/rsyslog.d/influxdb.conf << EOF
### InfluxDB Rules ###
if \$programname == 'influxd' then {
action(type="omfile" file="/home/shuncom/influxdb/var/log/influxdb/influxd.log")
stop
}
EOF
# 重启rsyslog服务
systemctl restart rsyslog.service
# 修改配置文件并加入系统定时日志切割任务
cat > /home/shuncom/influxdb/etc/logrotate.d/influxdb << EOF
/home/shuncom/influxdb/var/log/influxdb/influxd.log {
daily
rotate 7
missingok
dateext
copytruncate
compress
}
EOF
chown -R influxdb.influxdb /home/shuncom/influxdb/ &&\
chmod 757 /home/shuncom/influxdb/var/log/influxdb/
6 启动InfluxDB
systemctl daemon-reload &&\
systemctl start influxdb.service &&\
systemctl enable influxdb.service &&\
systemctl status influxdb.service
cat >> ~/.bashrc << EOF
export PATH=/home/shuncom/influxdb/usr/bin:\$PATH
EOF
source ~/.bashrc
su - shuncom
cat >> ~/.bashrc << EOF
export PATH=/home/shuncom/influxdb/usr/bin:\$PATH
EOF
source ~/.bashrc
exit
influx -version
InfluxDB shell version: 1.8.10
7 InfluxDB管理员创建
(1) 创建管理员
influx
show users
create user root with password 'root_influxdb' with all privileges
show users
exit
(2) 开启influxdb认证
修改influxdb.conf配置文件,
sudo vi /home/shuncom/influxdb/etc/influxdb/influxdb.conf
将[http]标签下"auth-enabled = false"
改为"auth-enabled = true"
(3) 重启InfluxDB服务
systemctl restart influxdb.service
(4) InfluxDB认证登录
influx -host 127.0.0.1 -port 8086 -username root -password 'root_influxdb'
create database rulr_things;
2 设置库数据保留规则
use rulr_things;
CREATE RETENTION POLICY three_days ON rulr_things DURATION 3d REPLICATION 1;
CREATE RETENTION POLICY seven_days ON rulr_things DURATION 7d REPLICATION 1;
CREATE RETENTION POLICY half_year ON rulr_things DURATION 180d REPLICATION 1;
CREATE RETENTION POLICY one_year ON rulr_things DURATION 365d REPLICATION 1;
show retention policies;
3 创建用户
create user shuncom with password 'shuncom_influxdb_passwd';
grant all privileges on rulr_things to shuncom;
show grants for shuncom;
exit
部署Mysql 延迟从库步骤看第七章:
第七章、部署Mysql主库
rulr-7
sudo su
1 下载mysql软件包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
scp -P 53022 -r shuncomlog@shuncom.3322.org:/home/shuncomlog/rulr/mysql/* ./
2 安装mysql
(1) 安装mysql依赖包
apt install libaio1 -y
(2) 解压mysql安装包
tar -xf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz &&\
mv mysql-8.0.20-linux-glibc2.12-x86_64/ /home/shuncom/mysql/
(3) 创建mysql用户
groupadd -g 1600 mysql &&\
useradd -g mysql -u 1600 -M -s /sbin/nologin mysql &&\
id mysql
uid=1600(mysql) gid=1600(mysql) groups=1600(mysql)
(4) 创建存放数据库文件的目录并赋予mysql安装目录的属主和属组都是mysql
mkdir -p /home/shuncom/mysql/data/ &&\
chown -R mysql.mysql /home/shuncom/mysql/
3 配置mysql my.cnf文件
cat > /etc/my.cnf << EOF
[client]
port = 3306
default-character-set = utf8mb4
socket = /home/shuncom/mysql/data/mysql.sock
[mysql]
no-auto-rehash
[mysqld]
default-time_zone = '+00:00'
user = mysql
port = 3306
basedir = /home/shuncom/mysql
datadir = /home/shuncom/mysql/data
socket = /home/shuncom/mysql/data/mysql.sock
bind-address = 0.0.0.0
pid-file = /home/shuncom/mysql/data/mysqld.pid
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
log-error = /home/shuncom/mysql/data/mysqld.log
slow_query_log = ON
long_query_time = 2
slow_query_log_file = /home/shuncom/mysql/data/mysql-slow.log
max_connections = 1024
open_files_limit = 65535
innodb_buffer_pool_size = 2G
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M
transaction_isolation = READ-UNCOMMITTED
# transaction_isolation = READ-COMMITTE
default-storage-engine = innodb
innodb_file_per_table = on
innodb_flush_method = O_DIRECT
interactive_timeout = 1800
wait_timeout = 1800
innodb_open_files=1500
innodb_io_capacity=5000
innodb_buffer_pool_instances=4
innodb_autoextend_increment=64
innodb_purge_threads=1
innodb_purge_batch_size=150
innodb_write_io_threads=4
innodb_read_io_threads=4
innodb_concurrency_tickets=2500
explicit_defaults_for_timestamp = 1
skip-name-resolve
lower_case_table_names = 1
server-id = 1
skip-log-bin
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysqldump]
quick
max_allowed_packet = 32M
EOF
4 初始化mysql 数据库
/home/shuncom/mysql/bin/mysqld --initialize --user=mysql --basedir=/home/shuncom/mysql --datadir=/home/shuncom/mysql/data
5 将mysql服务加入到systemd
cat > /lib/systemd/system/mysqld.service << EOF
[Unit]
Description=MySQL Server 8.0.20
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/home/shuncom/mysql/data/mysqld.pid
TimeoutSec=0
PermissionsStartOnly=true
# ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd
ExecStart=/home/shuncom/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize --pid-file=/home/shuncom/mysql/data/mysqld.pid \$MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
LimitNOFILE = 65535
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
EOF
6 启动mysql数据库
systemctl daemon-reload &&\
systemctl start mysqld.service &&\
systemctl enable mysqld.service &&\
systemctl status mysqld.service
cat >> ~/.bashrc << EOF
export PATH=/home/shuncom/mysql/bin:\$PATH
EOF
source ~/.bashrc
su - shuncom
cat >> ~/.bashrc << EOF
export PATH=/home/shuncom/mysql/bin:\$PATH
EOF
source ~/.bashrc
exit
mysql --version
mysql Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL)
7 修改mysql数据库密码
grep 'temporary password' /home/shuncom/mysql/data/mysqld.log
2022-09-06T07:24:22.857237Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: x2z?tj79y,dI
mysql -uroot -p'tji?RNa1Ly9N'
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Sz_clighting';
flush privileges;
exit;
4.1 mysql导库,部署主从,先部署好了再做建库、导库
1 创建库、创建用户并赋权
mysql -u root -p'Sz_clighting'
CREATE DATABASE rulr_things DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
create user "shuncom"@"%" identified by "sh_clighting";
grant all on rulr_things.* to "shuncom"@"%";
exit
2 导入表结构和表数据
mkdir -p /home/shuncom/update_mysql/ &&\
chmod +x /home/shuncom/update_mysql/update_mysql.sh
2、如果初始化脚本低于当前部署版本,应用迁移工具(rulr-db-migrate_vx.x.x.jar)进行升级
(2) 部署jdk
tar -xzf jdk-8u251-linux-x64.tar.gz &&\
mv jdk1.8.0_251/ /usr/local/jdk/
cat >> ~/.bashrc << EOF
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/jre/lib/rt.jar
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
source ~/.bashrc
su - shuncom
cat >> ~/.bashrc << EOF
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/jre/lib/rt.jar
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
source ~/.bashrc
exit
(4) 查看jdk版本
java -version
java version "1.8.0_251"
Mysql 升级前查看 max_binlog_cache_size 大小,并记录值,否则有可能报销
mysql -u root -p'Sz_clighting'
show variables like "%max_binlog%";
3、如果 max_binlog_cache_size < 33554432
set global max_binlog_cache_size=33554432;
show variables like "%max_binlog%";
4、更新完成后,还原max_binlog_cache_size配置(如果有修改)
mysql -u root -p'Sz_clighting'
set global max_binlog_cache_size=8388608;
show variables like "%max_binlog%";
当前SQL导入与维护方式已更新!
1、执行初始化sql脚本
mysql -u shuncom -p'sh_clighting'
use rulr_things
source /home/shuncom/v3.11.11__aliyun_init_db_dump.sql
cd /home/shuncom/update_mysql
vi update_mysql.sh
修改初始版本(本例是v3.11.11),升级版本 v3.11.11
修改jdk路径 /usr/local/jdk/
保存退出
./update_mysql.sh
mkdir -p log/shuncom-db-migrate
第八章、Mysql主、从复制
1、主从节点开启log_bin,配置文件中移除 skip-log-bin 配置项
2、增加主从复制配置 [mysqld]
a、主节点
vi /etc/my.cnf
server-id = 1
log-bin = /home/shuncom/mysql/data/mysql-bin
binlog_cache_size = 4M
binlog_format = mixed
max_binlog_cache_size = 8M
max_binlog_size = 512M
expire_logs_days = 14
gtid_mode = ON
enforce_gtid_consistency = ON
重启mysql服务
systemctl restart mysqld.service
b、从节点
vi /etc/my.cnf
server-id = 2
slave-skip-errors=1007,1022,1050,1062,1169
relay-log=/home/shuncom/mysql/data/relay-log
max_relay_log_size=512M
relay-log-purge=ON
read-only
gtid_mode = ON
enforce_gtid_consistency = ON
重启mysql服务
systemctl restart mysqld.service
3、创建主从复制账户
a、以root登录主节点
mysql -u root -p'Sz_clighting'
b、创建复制用户(用户名、密码为示例),并授予权限
CREATE USER 'replicator'@'%' IDENTIFIED BY 'Passw0rd';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS\G; -- 获取 MASTER_LOG_FILE、MASTER_LOG_POS
4、从节点开启复制
a、以root用户登录从节点
mysql -u root -p'Sz_clighting'
b、开启复制
CHANGE MASTER TO
MASTER_HOST='172.17.20.17',
MASTER_PORT=3306,
MASTER_USER='replicator',
MASTER_PASSWORD='Passw0rd',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=868,
get_master_public_key=1;
CHANGE MASTER TO MASTER_DELAY = 3600;
START SLAVE;
SHOW SLAVE STATUS\G;
Docker容器的导入和导出
导出指定docker镜像
docker save -o xampp_7.tar ef5954c4d0d1
恢复上面导出的镜像
docker load -i xampp_7.tar
镜像改名
docker tag c1b6ba59135e amazoncorretto:8u352-alpine3.16-tini
修改镜像版本
docker commit <container_name_or_id> <new_image_name>:<tag>
1. 停止容器
docker-compose down
2. 导出镜像
导出 docker-compose 中定义的所有镜像:
docker-compose config | awk '/image:/{print $2}' | xargs -I {} docker save -o {}.tar {}
这将为 docker-compose.yml 中定义的所有镜像创建 .tar 文件。
3. 导出数据卷(如果有使用数据卷)
如果容器使用了数据卷并且你想备份这些数据卷,可以使用以下命令:
首先,列出容器使用的数据卷:
docker volume ls
然后,导出特定的数据卷(例如 my_volume):
docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar czf /backup/my_volume.tar.gz -C /volume .
4. 打包为 tar.gz
将导出的镜像和数据卷一起打包为 tar.gz 文件:
tar czf docker_backup.tar.gz *.tar *.tar.gz
拷贝文件到目标服务器
将 docker_backup.tar.gz 文件拷贝到目标服务器,可以使用 scp 或其他文件传输工具。
scp docker_backup.tar.gz user@target_server:/path/to/destination
在目标服务器上恢复
1. 解压 tar.gz 文件
在目标服务器上解压 docker_backup.tar.gz 文件:
tar xzf docker_backup.tar.gz
2. 加载镜像
加载导出的Docker镜像:
for image in *.tar; do docker load -i $image; done
docker load -i mongodb:24.8.9.1.tar &&\
docker load -i mysql:24.8.2.tar &&\
docker load -i rabbitmq:24.8.2.tar &&\
docker load -i redis:3.2.2.tar &&\
docker load -i szdriver:24.8.9.7.tar &&\
docker load -i javaapp:24.8.9.2.tar
3. 还原数据卷(如果有备份数据卷)
还原数据卷:
docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar xzf /backup/my_volume.tar.gz -C /volume
4. 启动容器
确保 docker-compose.yml 文件已复制到目标服务器,然后启动容器:
docker-compose up -d
创建容器四代网关协议代理适配器rulr-v4gw-adapter
1,线上平台Rulr服务_New_5 (121.199.1.127) 导出镜像
docker stop rulr-v4gw-adapter
docker save -o amazoncorretto.tar c1b6ba59135e
docker start rulr-v4gw-adapter
scp -P 53022 amazoncorretto.tar shuncomlog@shuncom.3322.org:/home/shuncomlog/
2,当前平台导入镜像
scp -P 53022 shuncomlog@shuncom.3322.org:/home/shuncomlog/amazoncorretto.tar ./
docker load -i amazoncorretto.tar
docker images #查看镜像的id
docker tag <镜像id> amazoncorretto:8u352-alpine3.16-tini
cat >> /home/shuncom/compose/.env << EOF
JAVA_IMAGE=amazoncorretto:8u352-alpine3.16-tini
EOF
vi /home/shuncom/compose/docker-compose.yml
:set paste #粘贴文本不会乱格式
# 四代网关协议代理适配器
rulr-v4gw-adapter:
container_name: rulr-v4gw-adapter
image: ${JAVA_IMAGE}
volumes:
- /home/shuncom/servers/v4gw-adapter:/rulr/app
- /home/shuncom/config/servers:/home/shuncom/config/servers
- /home/shuncom/log:/home/shuncom/log
ports:
- "9011:9011"
working_dir: /rulr/app
command: java -Xms256m -Xmx512m -XX:MaxDirectMemorySize=128m -jar v4gw-adapter.jar --appMode=2
restart: always
networks:
- rulr-network
deploy:
resources:
limits:
cpus: '1.4'
memory: 1024M
cd /home/shuncom/compose
docker-compose up -d
解决Ubuntu服务器时间与本地时间不一致问题
在使用Ubuntu服务器时,常常会遇到系统时间与本地时间不一致的问题。这种时间差异可能导致日志时间错乱、调度任务执行异常等问题。本文将详细介绍如何在Ubuntu服务器中调整时间,使其与本地时间一致。
一、检查当前系统时间和时区
首先,您需要了解当前系统时间和时区设置。
查看当前系统时间
使用以下命令查看当前系统时间:
date
解释:
date:显示当前的系统日期和时间。
查看当前时区设置
通过以下命令查看当前时区:
timedatectl
解释:
timedatectl:显示系统时间和时区的详细信息,包括当前时间、UTC时间、本地时间以及时区。
输出示例:
Local time: Mon 2024-09-02 15:04:23 CSTUniversal time: Mon 2024-09-02 07:04:23 UTCRTC time: Mon 2024-09-02 07:04:23Time zone: Asia/Shanghai (CST, +0800)
解释:
Local time:本地时间,即系统当前使用的时间。
Universal time:协调世界时(UTC)。
RTC time:硬件时钟时间。
Time zone:当前设置的时区。
二、设置正确的时区
若发现时区设置不正确,可以通过以下步骤调整时区。
列出可用时区
使用以下命令查看所有可用的时区:
timedatectl list-timezones
解释:
list-timezones:列出系统中所有可用的时区。
设置正确的时区
假设要将时区设置为 Asia/Shanghai(中国标准时间),可以使用以下命令:
sudo timedatectl set-timezone Asia/Shanghai
解释:
set-timezone Asia/Shanghai:将系统时区设置为 Asia/Shanghai。
设置完成后,可以再次使用 timedatectl命令确认时区是否正确。
三、同步系统时间
在设置正确时区后,确保系统时间与网络时间服务器同步。
安装NTP服务
使用 NTP(网络时间协议)来同步系统时间。首先安装NTP服务:
sudo apt updatesudo apt install -y ntp
解释:
apt update:更新包列表。
apt install ntp:安装NTP服务。
启动并启用NTP服务
安装完成后,启动NTP服务并设置为开机自启:
sudo systemctl start ntpsudo systemctl enable ntp
解释:
systemctl start ntp:启动NTP服务。
systemctl enable ntp:设置NTP服务为开机自启。
检查NTP同步状态
可以通过以下命令检查NTP的同步状态:
ntpq -p
解释:
ntpq -p:显示NTP服务器的状态和同步情况。
输出示例:
remote refid st t when poll reach delay offset jitter==============================================================================*time.google.com .GOOG. 1 u 42 64 377 24.7 -0.5 0.004
解释:
remote:远程NTP服务器的地址。
refid:参考ID。
delay:与NTP服务器的通信延迟。
offset:本地时间与NTP服务器的时间差。
jitter:时间波动的程度。
带 *的行表示当前同步的NTP服务器。
四、调整硬件时钟
硬件时钟(RTC)可能与系统时间不同步,需要进行校准。
将系统时间写入硬件时钟
使用以下命令将系统时间写入硬件时钟:
sudo hwclock --systohc
解释:
hwclock --systohc:将系统时间同步到硬件时钟。
设置硬件时钟为UTC时间
通常,硬件时钟设置为UTC时间是最佳实践,这样可以避免跨时区调整带来的问题:
sudo timedatectl set-local-rtc 0
解释:
set-local-rtc 0:将硬件时钟设置为UTC时间。
五、验证时间同步状态
完成所有配置后,重新检查时间和时区设置,确保所有设置正确:
重新检查系统时间和时区
timedatectl
验证NTP服务是否正常运行
sudo systemctl status ntp
解释:
systemctl status ntp:查看NTP服务的运行状态,确保其正常运行。
原理与分析说明表
步骤
原理说明
查看当前时间和时区通过 timedatectl命令检查当前系统时间、UTC时间、硬件时钟时间和时区设置。
设置正确时区通过 timedatectl设置系统时区,使系统时间符合本地时区标准。
同步系统时间使用NTP服务同步系统时间,确保服务器时间准确无误。
调整硬件时钟将系统时间同步到硬件时钟,避免重启后时间不同步的问题。
验证同步状态确认NTP服务和时间同步状态,确保服务器时间与本地时间一致。
总结
通过本文的详细讲解,您可以确保Ubuntu服务器的时间与本地时间保持一致。首先检查并设置正确的时区,然后通过NTP服务同步系统时间,最后调整硬件时钟以确保时间同步无误。这些步骤能够有效解决由于时区或时间设置错误导致的服务器时间与本地时间不一致的问题,确保系统的稳定性和准确性。
docker-compose 导出导入容器教程
Docker/DockerHub 国内镜像源/加速列表(6月18日更新-长期维护)
链接地址:https://cloud.tencent.com/developer/article/2485043
前言
本列表自 2024 年维护以来,受到广大开发者热情欢迎,目前以帮助数十万开发者拉取docker镜像。许多曾经常用的国内镜像站(包括各种云服务商和高校镜像站)已经无法使用。因此,本人开始搜索并汇总了目前可用的镜像站和镜像加速地址,并定期测试它们的可用性,公益更新这个列表。
本列表为科研工作者提供 docker 镜像网站,网络不好的同学可以使用镜像,或者推荐给身边有需要的朋友使用这些 docker 镜像。
注意:本文仅供学术研究使用。⚠️长期更新,强烈建议收藏!
6 月 18 日确认可用:https://dev.xuanyuan.dev (该源需要登录,速度稳定,支持群晖nas,极空间nas等)
6 月 18 日确认可用:https://docker.xuanyuan.me
docker hub 镜像搜索功能:https://dockers.xuanyuan.me,方便大家搜索正确的 docker tags。
docker 中文配置文档:https://dockerdocs.xuanyuan.me
国内主流 Docker Hub 镜像加速站清单
地址 |
运营方 |
类型 |
说明 |
---|---|---|---|
https://docker.xuanyuan.me |
轩辕镜像免费版 |
Cloudflare+境内CDN |
官网支持搜索镜像、配置简单、有会员解答群、屏蔽违法内容、境内公司运营(非常稳定) |
https://dev.xuanyuan.dev |
轩辕镜像会员版 |
Cloudflare+境内CDN |
需要登录,速度稳定,支持爱快,群晖,极空间,威联通 nas,支持搜索镜像、配置简单、有会员解答群、屏蔽违法内容、境内公司运营(非常稳定) |
https://mirror.ccs.tencentyun.com |
腾讯云 |
境内CDN |
仅腾讯云服务器内推荐使用 |
https://xxx.mirror.aliyuncs.com |
阿里云 |
境内CDN |
仅阿里云服务器内推荐使用(https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images?spm=a2c4g.11186623.0.i7) |
使用教程
为了加速镜像拉取,使用以下命令设置 registry mirror
支持系统:Ubuntu 22.04+、Debian 10+、CentOS 8+
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.xuanyuan.me"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
使用DockerHub 代理,以下以 docker.xuanyuan.me 为例:可以根据列表自行替换
docker pull docker.xuanyuan.me/library/mysql:5.7
说明:library是一个特殊的命名空间,它代表的是官方镜像。如果是某个用户的镜像就把library替换为镜像的用户名。
Linux
运行以下命令进行配置
#!/bin/sh
cat <<-EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.xuanyuan.me"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
这适用于Ubuntu 22.04、Debian、CentOS 8、Fedora、Arch Linux、openSUSE Leap 42.1等系统。
macOS(Docker For Mac)
对于macOS上的Docker For Mac用户,您可以通过以下步骤配置镜像加速服务:
1、点击桌面顶栏的docker图标,选择Preferences。
2、在 Daemon 标签下的 Registry mirrors 列表中加入以下镜像地址:
https://docker.xuanyuan.me
3、点击Apply & Restart按钮使设置生效。
Windows(Docker For Windows)
Windows系统上的Docker For Windows用户可以按照以下步骤配置镜像加速服务:
- 在桌面右下角状态栏中右键docker图标,修改在Docker Daemon标签页中的json。
- 将以下地址加入"registry-mirrors"的数组里。
https://docker.xuanyuan.me
- 点击Apply,重新生成Docker环境以使配置生效。
更多可用镜像
DockerHub镜像仓库 |
镜像加速器地址 |
---|---|
镜像使用说明 657 |
https://dockerhub.icu(0913 测试不可用) |
|
hub.rat.dev |
|
docker.wanpeng.top |
镜像使用说明 250 |
https://doublezonline.cloud |
镜像使用说明 76 |
https://docker.mrxn.net(1102 测试不可用) |
镜像使用说明 45 |
https://lynn520.xyz(1102 测试不可用) |
镜像使用说明 30 |
https://ginger20240704.asia(1102 测试不可用) |
DockerHub 镜像加速代理 102 |
https://docker.anyhub.us.kg(0831测试已不可用) |
Dockerhub镜像加速说明 70 |
https://docker.wget.at(1102 测试不可用) |
镜像使用说明 38 |
https://docker.awsl9527.cn(0913 测试不可用) |
镜像使用说明 19 |
https://dislabaiot.xyz |
Docker Proxy 镜像加速 92(来源地址 22) |
https://dockerpull.com(1102 测试不可用)https://dockerproxy.cn(0913 新增)(1102 测试不可用) |
Docker Hub Container Image Library 16 |
https://docker.fxxk.dedyn.io |
docker-registry-mirrors 77: 支持 Docker Hub, GitHub, Google, k8s, Quay, Microsoft 等镜像仓库. |
dhub.kubesre.xyz(0913 测试不可用) |
AtomHub 可信镜像仓库平台 27(只包含基础镜像,共336个) |
https://atomhub.openatom.cn |
DaoCloud 镜像站 90 |
https://docker.m.daocloud.io |
已失效DockerHub镜像仓库 |
|
Docker镜像加速站 1(因流量太大,作者已关停) |
|
Docker镜像加速站 |
|
镜像使用说明 3 |
|
|
docker.1panel.live(1102 测试不可用) |
|
|
|
|
此列表只收录无需限定条件的DockerHub镜像源,感谢这些公益服务者。
Docker Compose 安装与使用教程请看:
本文系转载,前往查看