跳至主要內容
服务器时间回拨导致的 BUG:修复与预防全攻略

服务器时间回拨导致的 BUG:修复与预防全攻略

"你的服务器跑得太快了,NTP 一声令下把时钟回调 5 秒——这 5 秒的时光倒流,对人类无感,对程序是毁灭性的。"

一、什么是时钟回拨?

时钟回拨(Clock Rollback / Clock Drift),指的是服务器的系统时间出现向后跳转的现象——当前获取到的系统时间,比之前记录的时间更早。

举个最直观的例子:

  • 节点上一次生成 ID 的时间戳是 1712123456789 毫秒
  • 由于系统时间调整,当前获取到的时间变成了 1712123456788 毫秒
  • 时间往回走了 1 毫秒——这就是一次典型的时钟回拨

郑天祺大约 10 分钟运维运维时间同步服务器
mysql 数据安全的“双1模式”

mysql数据安全的“双1模式”是指通过两种关键机制来确保数据的安全性和可靠性:二进制日志(Binary Log)重做日志(Redo Log)。这两种日志共同作用,提供了强大的数据保护和恢复能力。以下是关于“双1模式”的总结:
mysql的双1策略指的是这两个参数的值都是1

sync_binlog=1;
innodb_flush_log_at_trx_commit=1;

郑天祺大约 8 分钟数据库MySQL数据安全运维
springboot打jar包分离资源文件

一、配置pom文件插件

    <build>
        <!-- jar包名 -->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- 分离lib -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- 依赖包输出目录,将来不打进jar包里 -->
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <excludeTransitive>false</excludeTransitive>
                            <stripVersion>false</stripVersion>
                            <includeScope>runtime</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- copy资源文件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.3.0</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                </resource>
                            </resources>
                            <outputDirectory>${project.build.directory}/resources</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- 打jar包时忽略配置文件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <excludes>
                        <exclude>**/*.yml</exclude>
                        <exclude>**/*.xml</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!-- spring boot repackage -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.6.0</version>
                <configuration>
                    <layout>ZIP</layout>
                    <includes>
                        <include>
                            <groupId>non-exists</groupId>
                            <artifactId>non-exists</artifactId>
                        </include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- maven 打包时跳过测试 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

郑天祺大约 2 分钟CICDSpringBoot打包运维
软件安装及高可用部署(三)

本文介绍了MYSQL安装

一、卸载mariadb

# 查看 mariadb 的安装包
rpm -qa | grep mariadb
# 卸载 mariadb 的安装包
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps
# 再次查看
rpm -qa | grep mariadb

郑天祺大约 7 分钟CICD运维部署高可用
软件安装及高可用部署(二)

本文介绍了Nginx安装

一、修改主机名

以 nginx-master 为例,修改所有服务器的对应的主机名。

vim /etc/hostname
# 删除所有的内容,修改为要修改的主机名
nginx01
vim /etc/hosts
#在第一行最后追加主机名,有127.0.0.1内容的这行
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
nginx01
# 重启服务器
reboot

郑天祺大约 3 分钟CICD高可用部署运维
软件安装及高可用部署(一)

本文介绍了磁盘挂载、JDK安装、Keepalived安装

一、硬盘挂载

(1)查看设备的挂载情况

lsblk或lsblk –f或者fdisk -l
img
img

(2)分区

fdisk /dev/vdb 其中/dev/vdb表示上图未挂载的硬盘
分区步骤如下图,下图以/dev/sdb为例
img
img
img


郑天祺大约 2 分钟CICD运维部署高可用Keepalived
SpringCloud运维接口

注意:默认端点 path 前面有一级 /actuator ,例如:http://服务地址/actuator/info

Endpoint ID	Description
auditevents	显示应用暴露的审计事件 (比如认证进入、订单失败)
info	显示应用的基本信息
health	显示应用的健康状态
metrics	显示应用的度量信息
metrics/{name}	显示应用指定名称的度量信息,例如:http://localhost:8080/actuator/metrics/system.cpu.count
loggers	显示和修改配置的loggers
logfile	返回log file中的内容(如果logging.file或者logging.path被设置)
httptrace	显示HTTP足迹,最近100HTTP request/repsponse
env	显示当前的环境特性
env/{name}	显示指定名称的环境信息,例如:http://localhost:8080/actuator/spring.application.name
flyway	显示数据库迁移路径的详细信息
liquidbase	显示Liquibase 数据库迁移的纤细信息
shutdown	让你逐步关闭应用
mappings	显示所有的@RequestMapping路径
scheduledtasks	显示应用中的调度任务
threaddump	执行一个线程dump
heapdump	返回一个GZip压缩的JVM堆dump

郑天祺小于 1 分钟springSpringCloud运维Actuator
DNS

1、介绍

	在互联网中是用IP来标识一台服务器的。IP地址虽然能够代表一台设备,但是由于记忆起来比较困难,所以将其替换成一个能够理解和识别的名字,这个名字我们称作为域名。

	在域名后面会定义一个IP地址用来指向网站服务器。DNS负责域名到IP地址的对应。

	DNS 是域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它将域名和IP地址相互映射的一个分布式数据库,在数据库中保存域名与IP的对照关系,从而使人更方便地访问互联网。

	DNS解析是分布式存储的,从结构上来说最顶层是,根域名服务器(ROOT DNS Server),存储260个顶级域名服务器的IP地址。对于Ipv4来说全球有13个根域名服务器,它储存了每个域(如.com .net .cn)的解析和域名服务器的地址信息。简单的说,根域名服务器就是存放顶级域名服务器地址的。

	在根域名服务器下一级就是,顶级域名服务器。例如.com的域名服务器,存储的是一些一级域名的权威DNS服务器地址(如toutiao.com的DNS)。

	顶级域名又称一级域名,顶级域名可以分为三类,即gTLD、ccTLD和New gTLD:

	gTLD:国际顶级域名(generic top-level domains,gTLD),例如:.com/.net/.org等都属于gTLD;

	ccTLD:国家和地区顶级域名(country code top-level domains,简称ccTLD),例如:中国是.cn域名,日本是.jp域名;

	New gTLD:新顶级域名(New gTLD),例如:.xyz/.top/.red/.help等新顶级域名。

郑天祺大约 5 分钟网络DNS网络运维