《构建高可用Linux服务器 第3版》—— 2.4 系统维护时应该注意的地方

简介:

本节书摘来自华章出版社《构建高可用Linux服务器 第3版》一 书中的第2章,第2.4节,作者:余洪春 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.4 系统维护时应该注意的地方

无论是自己的内网开发机器还是线上的生产机器,我们在操作时都应该谨慎,否则系统很容易发生Crash的情况。就算我们能用备份很快恢复,在恢复时间之内,我们也会损失大量的数据,而且如果万一恢复不了,那就是灾难性的了。

2.4.1 服务器硬件改动进入了Emergency模式

同事在处理一台CentOS 5.8服务器时,他在机器上移走了一块硬盘,然后就直接启动机器,忽然发现系统进了Emergency模式,于是他连忙跑过来找我。我第一句就是问他:你改动了硬件没?他说他移走硬盘后就直接启动了,不是跟Windows Server 2003一样吗,有什么问题?我跟他讲解了一下Linux系统下/etc/fatab的语法及作用,最后边操作边告诉他整个解决步骤,如下所示。

1)在Emergency模式下输入root密码进入单用户模式。

2)修改/etc/fstab文件时会出现“Read-only file system”,如何处理?重新将其装载成读写模式,命令如下:

mount -o remount,rw /
这句话的作用是将/分区设置成可读写。

3)编辑/etc/fatab文件,将移除的硬盘用#号屏蔽掉,然后重启服务器,故障解除。

2.4.2 如何以普通用户的身份编辑无权限的文件

如果普通用户用vim编辑nginx.conf等配置文件,保存的时候会提示:没有root权限,解决办法是在保存时加上以下命令:

:w !sudo tee %
这条命令的含义是把当前编辑的文件内容当做标准输入并输入到命令sudo tee文件名里去。也就是将sudo保存为当前文件名,这是一个相当管用的命令,不过这个命令比较拗口,我采用谐音记忆的方法记住了它,其实多练习几次自然就熟悉此命令了。

2.4.3 在Linux下配置最大文件打开数的方法

在Linux下部署应用(特别是Squid服务器时)的时候,有时会遇上“Socket/File:Cant open so many files”问题;这也会影响服务器的最大并发数。其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,如果是生产服务器用,很容易就会达到这个数量。

1.查看方法

我们可以用“ulimit-a”命令来查看所有限制值,命令如下所示:

ulimit-a
命令显示结果如下所示:

core file size     (blocks, -c) 0

data seg size      (kbytes, -d) unlimited

scheduling priority       (-e) 0

file size        (blocks, -f) unlimited

pending signals         (-i) 16126

max locked memory    (kbytes, -l) 32

max memory size     (kbytes, -m) unlimited

open files           (-n) 1024

pipe size      (512 bytes, -p) 8

POSIX message queues   (bytes, -q) 819200

real-time priority       (-r) 0

stack size       (kbytes, -s) 10240

cpu time        (seconds, -t) unlimited

max user processes       (-u) 16126

virtual memory     (kbytes, -v) unlimited

file locks           (-x) unlimited
其中open files(-n)1024是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的套接字数量,可影响MySQL的并发连接数目)。这个值可用ulimit命令修改,但ulimit命令修改的数值只对当前登录用户目前使用的环境有效,系统重启或用户退出后就会失效。

系统的总限制是在:/proc/sys/fs/file-max。我们可以通过cat命令查看其目前的值,修改/etc/sysctl.conf也可以控制这个数值。

另外还有一个知识点,使用/proc/sys/fs/file-nr可以看到整个系统目前使用的文件句柄数量。

查找文件句柄问题的时候,还有一个很实用的程序lsof。可以很方便看到某个进程打开了哪些句柄,也可以看到某个文件/目录被什么进程占用了。

2.修改方法

若要令修改ulimits的数值永久生效,则必须修改配置文档,可以将ulimit修改命令放入/etc/profile里面,不过,这个方法实在不方便。还有一个方法是修改/etc/sysctl.conf。我修改后测试过,发现它不会改变用户的ulimits-a,只改变/proc/sys/fs/file-max的值。

而我以前的做法是修改/etc/security/limits.conf,其中有很详细的注释,文件内容修改如下所示:

* soft nofile 32768

* hard nofile 65535```
这样可以将文件句柄限制统一改成软32768,硬65536。配置文件最前面的内容是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制。这里要值得注意的是:其中的硬限制是实际的限制,而软限制,是warning限制,它只会给出warning;其实ulimit命令本身就分软硬设置,加-H就代表硬限制,加-S就代表软限制。默认显示的是软限制,如果运行ulimit命令修改时没有加上-H或-S,就是两个参数一起改变。

不过,这种做法仅对当前配置有效,如果重启系统,则完全失效。正确的做法应该是“编辑/etc/rc.loal文件”,在其后添加如下内容:


ulimit -SHn 65535


注意 如果想使shell及系统重启以后系统的最大文件打开数的修改值均生效,建议以上两个步都操作。



我们可以用以下脚本nginx_limit.sh来查看nginx进程能打开的最大文件打开数,内容如下:


for pid in 'ps aux |grep nginx | grep -v grep| awk '{print$2}''

do

cat /proc/${pid}/limits |grep 'Max open files'

done
如果是非nginx的其他进程,可以用下面的方法来判断,命令如下所示:


cat /proc/2976/limits | grep "Max open files"
命令显示结果如下所示,表示修改是生效的:


Max open files 65535 65535 files
其中,2976为httpd进程的pid值,我们可以通过ps命令得到,这种方法可以精确得到当前进程打开文件的最大打开数。

####2.4.4 在crontab下正确防止脚本运行冲突

如果某脚本要运行30分钟,可以在crontab里把脚本间隔设为至少一小时来避免冲突。而比较糟的情况是可能该脚本在执行周期内没有完成,接着第二个脚本又开始运行了。如何确保只有一个脚本实例运行呢?一个好用的方法是利用lockf(FreeBSD 8.1下为lockf,CentOS 5.8下为flock),在脚本执行前先检测能否获取某个文件锁,以防止脚本运行冲突。

lockf的参数如下。

-k:一直等待获取文件锁。

-s:silent,不发出任何信息,即使拿不到文件锁。

-t seconds:设定timeout的时间是seconds秒,如果超过时间,则自动放弃。

执行以下crontab计划任务前,需获取临时文件create.lock的文件锁,此项crontab计划任务的内容如下(以FreeBSD 8.1 x86_64举例说明):


*/10**** (lockf -s -t 0 /tmp/create.lock /usr/bin/python /home/project/cron/create_tab.py

          >> /home/project/logs/create.log 2>&1)
AI 代码解读
目录
打赏
0
0
0
0
1408
分享
相关文章
|
17天前
|
Websoft9:为开发者打造的高效 Linux 服务器面板
Websoft9 是一款以开源应用部署与管理为核心的服务器面板,采用“环境即服务”模式。它通过运行环境标准化、自动化配置、安全融合和资源管理四个方面实现平台与环境的深度协同。支持多语言框架预集成、云原生组件整合,提供 200+ 应用模板一键部署,并具备全流程安全防护和统一资源监控能力,助力开发者高效管理和扩展应用环境。
43 0
【阿里云】控制台使用指南:从创建ECS到系统诊断测评
本文介绍了如何通过阿里云获取ECS云服务器并进行操作系统配置与组件安装,以实现高效的资源管理和系统监控。阿里云凭借强大的基础设施和丰富的服务成为用户首选。文中详细描述了获取ECS、RAM授权、开通操作系统控制台及组件安装的步骤,并展示了如何利用控制台实时监控性能指标、诊断系统问题及优化性能。特别针对idle进程进行了深入分析,提出了优化建议。最后,建议定期进行系统健康检查,并希望阿里云能推出更友好的低成本套餐,满足学生等群体的需求。
92 17
【阿里云】控制台使用指南:从创建ECS到系统诊断测评
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
67 27
|
3天前
|
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
38 20
CentOS 7.9系统备份:每日定期发送最新备份文件到另一台服务器。
注意,这个解决方案忽略了很多细节,例如错误处理和通知、备份版本控制、循环处理旧的备份文件等等。此外,你也应该尽量保持源服务器和目标服务器之间快速,稳定且安全的网络连接,并且目标服务器应该有足够的空间用于存放每天的备份文件。如果你需要更高级的备份解决方案,可能需要考虑一下使用专门的备份工具或者服务。
31 18
|
8天前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
57 10
|
20天前
|
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
59 8
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
|
10天前
|
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
41 0
|
19天前
|
Windows系统云服务器配置多用户登录
本教程介绍了在Windows云服务器上配置远程桌面服务的详细步骤,包括安装桌面会话主机和远程桌面授权、允许多用户远程连接以及配置新用户并加入远程桌面用户组。通过添加角色和功能、设置组策略以及管理用户权限,实现多用户同时登录和远程访问。按照指引操作,可顺利完成服务器的远程访问配置,提升管理和使用效率。
43 0

热门文章

最新文章