项目场景:

提示:centos 8测试环境中,将通过二进制安装的服务添加到systemd服务管理中,并对其进行测试,看是否能满足线上需求,即开机自动启动。由于添加到systemd的服务并未达到想象中的开机自启动的效果,因此需要对服务器进行不断的重启。


问题描述

提示:通过使用reboot、shutdown -h now、init 0 等关机重启命令后,系统界面直接黑屏,并没有任何提示信息,但是通过ping 主机的IP地址,一直的是通的,端口是不通的,通过多次重启关机,发现操作系统从执行完关机重启命令后,将近5分钟的时间系统才能正常登录,在此期间ping ip地址一直是通,,直到启动系统时会丢3~4ping包,说明操作系统并未真正的进行关机而是卡在停止某个服务中。


原因分析:

提示:系统启动后,逐一将相关服务通过systemctl stop xx.service,在进行启动,看中间的时间间隔是否过长,同时使用journalctl 命令进行查询上次重启日志信息。

1、配置journalctl,否则将会出现以下报错信息:

centos启动慢 centos开机很慢_dba

2、配置如下:

# 修改配置文件
# sed -i 's/#Storage=auto/Storage=auto/g' /etc/systemd/journald.conf 

# 修改后
# grep 'Storage' /etc/systemd/journald.conf
 Storage=auto

# 创建journal日志目录
# mkdir /var/log/journal  如果已经有了就不用创建

# 重启journald.service
# systemctl restart systemd-journald.service

3、 journal日志设置完毕后,对服务进行重启操作,并使用journal -rb -1 查看日志得出:

centos启动慢 centos开机很慢_centos_02

4、查询到系统重启或者关闭时,系统卡在停止mariadb服务上,重点对mariadb进行检查,可登录到mysql服务中进行查看;

show variables like '%innodb_buffer_pool%';

 

centos启动慢 centos开机很慢_dba_03

 其中参数:innodb_buffer_pool_dump_at_shutdown,即当数据库实例或者正常关闭的时候,将缓冲池(buffer_pool)的数据导入保存到磁盘文件(即数据库的数据目录下的ib_buffer_pool文件)数据库启动后会自动加载到将缓冲池(buffer_pool)中

centos启动慢 centos开机很慢_dba_04

详情可查看官方文档:MySQL :: MySQL 8.0 Reference Manual :: 15.8.3.6 Saving and Restoring the Buffer Pool State


解决方案:

提示:关闭缓冲池开机自动加载,同时开启缓冲池开机手动加载,详情如下:

1、关闭 缓冲池自动加载,innodb_buffer_pool_load_at_startup=0

        修改/etc/my.cnf 添加 innodb_buffer_pool_load_at_startup=0 选项,重启mysqld服务即可。

        为啥不能在数据库直接修改?因为 innodb_buffer_pool_load_at_startup是只读文件,所以只能在配置文件修改:

centos启动慢 centos开机很慢_centos_05

 2、开启缓冲池手动加载  innodb_buffer_pool_load_now =1

MariaDB [(none)]> SET GLOBAL innodb_buffer_pool_load_now=1;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> SHOW STATUS LIKE 'Innodb_buffer_pool_load_status';
+--------------------------------+--------------------------------------------------+
| Variable_name                  | Value                                            |
+--------------------------------+--------------------------------------------------+
| Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 220721 10:00:09 |
+--------------------------------+--------------------------------------------------+
1 row in set (0.002 sec)

至此,数据库/操作系统服务重启时间长的问题进行解决,同时服务器/数据库重启时间慢,相信以上这并不是唯一的原因,重点的还是要根据日志信息进行分析排查,最终解决故障问题。