学习目标
- 理解本节涉及的核心主题:高级 Linux 管理、高可用性与负载均衡、设置高可用集群、无法连接网络。
- 掌握重点命令或工具:
ping、traceroute、$PATH、du、df。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:高级 Linux 管理、高可用性与负载均衡、设置高可用集群、无法连接网络、检查网络接口配置、使用
ping和traceroute调试网络问题 - 重点命令:
ping、traceroute、$PATH、du、df - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
高级 Linux 管理
高可用性与负载均衡
设置高可用集群
高可用集群通过多个节点协同工作,确保服务的持续可用性和故障恢复能力。常用的高可用集群管理工具包括 Pacemaker 和 Corosync。
集群基础概念
- 高可用性(HA)的定义与目标
高可用性旨在通过冗余和故障转移机制,确保关键服务在单点故障时依然可用,最小化服务中断时间。 - 主从架构与对等架构
- 主从架构(Master-Slave Architecture)
一个主节点负责管理和协调,从节点提供备份和冗余服务。 - 对等架构(Peer-to-Peer Architecture)
所有节点在架构上对等,任何节点都可以接管服务,实现更高的冗余和负载均衡。
- 主从架构(Master-Slave Architecture)
使用 Pacemaker 和 Corosync 配置高可用集群
Pacemaker 和 Corosync 是 Linux 环境下常用的高可用集群管理工具,负责资源的监控、管理和故障转移。
安装与配置 Pacemaker 和 Corosync
-
安装 Pacemaker 和 Corosync
sudo apt update sudo apt install pacemaker corosync -
配置 Corosync
编辑 Corosync 配置文件/etc/corosync/corosync.conf:sudo nano /etc/corosync/corosync.conf示例配置:
totem { version: 2 secauth: on cluster_name: my_cluster transport: udpu interface { ringnumber: 0 bindnetaddr: 192.168.1.0 mcastaddr: 239.255.1.1 mcastport: 5405 } } nodelist { node { ring0_addr: node1.example.com nodeid: 1 } node { ring0_addr: node2.example.com nodeid: 2 } } quorum { provider: corosync_votequorum expected_votes: 2 two_node: 1 }说明:
bindnetaddr:网络地址,用于节点之间的通信。mcastaddr和mcastport:多播地址和端口。nodelist:集群中的节点列表。quorum:仲裁设置,确保集群的一致性。
-
启动并启用 Corosync 和 Pacemaker 服务
sudo systemctl enable corosync sudo systemctl start corosync sudo systemctl enable pacemaker sudo systemctl start pacemaker -
验证集群状态
sudo crm status
配置集群节点与通信
确保所有集群节点的 corosync.conf 配置一致,并能够通过网络互相通信。可以使用以下命令检查节点间的连接:
sudo corosync-cfgtool -s
示例输出:
Ring0 multicast send channel status:
cluster: my_cluster
nodeid: 1
synced: yes
link: 1.1
创建与管理集群资源(如虚拟 IP, 服务)
-
使用
crm命令行界面sudo crm configure -
定义资源
示例:创建一个虚拟 IP 资源primitive vip ocf:heartbeat:IPaddr2 \ params ip="192.168.1.100" cidr_netmask="24" \ op monitor interval="30s"示例:创建一个 Web 服务资源
primitive web_server ocf:heartbeat:apache \ op monitor interval="30s" timeout="20s" -
创建资源组
将相关资源组合在一起,作为一个整体进行管理。group web_group vip web_server -
配置约束
定义资源之间的依赖关系和优先级。- 位置约束:指定资源在哪个节点上运行。
location web_group_loc web_group rule score=1000 node=node1.example.com - 顺序约束:确保资源按特定顺序启动。
order web_order inf: vip web_server
- 位置约束:指定资源在哪个节点上运行。
-
保存并退出配置
commit exit
配置资源约束与故障转移策略
通过资源约束,可以定义在发生故障时,集群如何处理资源的迁移和恢复。
- 设置资源优先级
primitive web_server ocf:heartbeat:apache \ params ... \ meta target-role="Started" is-managed="true" score="1000" - 配置故障转移策略
设置在资源失败时,集群自动将资源迁移到其他节点。constraint colocation web_with_vip inf: web_server vip constraint order web_before_vip inf: web_server vip
示例与应用场景
- 高可用 Web 服务
配置虚拟 IP 和 Web 服务器资源,实现 Web 服务的高可用性。当主节点故障时,集群自动将服务迁移到备份节点,确保服务持续可用。 - 数据库高可用集群
配置数据库资源和虚拟 IP,实现数据库的高可用性和故障转移,保障数据服务的稳定性。
集群资源管理与故障切换
有效的集群资源管理和故障切换机制能够确保在节点或资源故障时,系统能够快速恢复服务,最小化业务中断时间。
监控集群状态
使用 crm status 或 crm_mon 命令实时监控集群状态和资源运行情况。
sudo crm status
示例输出:
Cluster status
Last updated: Fri Apr 27 12:34:56 2024
Last change: Fri Apr 27 12:30:00 2024 by root via cibadmin on node1
Stack: corosync
Current DC: node1 (version 1.1.12) - partition with quorum
Last updated: Fri Apr 27 12:34:56 2024
Last change: Fri Apr 27 12:30:00 2024 by root via cibadmin on node1
Online Nodes: node1 node2
Resources:
web_group (ocf::heartbeat:apache): Started node1
vip (ocf::heartbeat:IPaddr2): Started node1
手动与自动故障切换
- 自动故障切换
Pacemaker 会根据配置的健康检查和约束规则,自动检测故障并执行资源迁移,确保服务的持续可用性。 - 手动故障切换
在特定情况下,管理员可能需要手动触发故障切换操作。sudo crm resource move web_group node2.example.com
集群日志与故障排除
集群日志对于故障排查和性能优化至关重要。Pacemaker 和 Corosync 的日志通常记录在 /var/log/syslog 或 /var/log/messages 中。
- 查看集群日志
sudo journalctl -u pacemaker -u corosync - 常见故障排查步骤
- 确认节点间网络通信正常
ping node2.example.com - 检查集群服务状态
sudo systemctl status pacemaker sudo systemctl status corosync - 查看资源状态
sudo crm status - 分析日志文件中的错误信息
sudo grep -i "error" /var/log/syslog
- 确认节点间网络通信正常
示例与应用场景
- 企业级应用高可用性
通过配置 Pacemaker 和 Corosync,实现关键业务应用(如 ERP 系统、数据库)的高可用性,确保业务连续性。 - 虚拟化环境高可用性
在虚拟化平台(如 KVM)上配置高可用集群,确保虚拟机的持续可用性和自动故障恢复。
常见问题与解决方案
常见问题与解决方案
在日常 Linux 系统管理中,管理员可能会遇到各种问题。以下是一些常见问题及其解决方案,帮助您快速定位和解决问题。
无法连接网络
无法连接网络可能导致系统无法访问外部资源或无法与其他设备通信。以下是排查和解决网络连接问题的常见步骤。
检查网络接口配置
-
查看 IP 地址与子网掩码(使用
ip addr,ifconfig)
使用ip addrip addr show示例输出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever使用
ifconfigifconfig示例输出:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 ... -
检查网关配置(使用
ip route,route命令)
使用ip routeip route show示例输出:
default via 192.168.1.1 dev eth0 proto static 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100使用
routeroute -n示例输出:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 -
检查 DNS 配置(查看
/etc/resolv.conf)cat /etc/resolv.conf示例输出:
nameserver 8.8.8.8 nameserver 8.8.4.4说明:
- 确保 DNS 服务器地址正确,可以尝试使用公共 DNS 服务器(如 Google DNS
8.8.8.8、8.8.4.4)或企业内部 DNS。
- 确保 DNS 服务器地址正确,可以尝试使用公共 DNS 服务器(如 Google DNS
使用 ping 和 traceroute 调试网络问题
-
测试与网关的连通性(
ping gateway_ip)
测试宿主机与默认网关的连接是否正常。ping -c 4 192.168.1.1示例输出:
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.123 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.110 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.105 ms 64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.098 ms --- 192.168.1.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3064ms rtt min/avg/max/mdev = 0.098/0.109/0.123/0.011 ms说明:
- 成功的 ping 表明宿主机与网关之间的基本连接正常。
-
测试与外部网络的连通性(
ping google.com)
测试宿主机是否能够访问外部网络和解析域名。ping -c 4 google.com示例输出:
PING google.com (142.250.72.14) 56(84) bytes of data. 64 bytes from lga34s11-in-f14.1e100.net (142.250.72.14): icmp_seq=1 ttl=115 time=10.2 ms 64 bytes from lga34s11-in-f14.1e100.net (142.250.72.14): icmp_seq=2 ttl=115 time=10.1 ms 64 bytes from lga34s11-in-f14.1e100.net (142.250.72.14): icmp_seq=3 ttl=115 time=10.3 ms 64 bytes from lga34s11-in-f14.1e100.net (142.250.72.14): icmp_seq=4 ttl=115 time=10.2 ms --- google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 10.105/10.205/10.305/0.100 ms说明:
- 成功的 ping 表明宿主机能够访问外部网络并正确解析域名。
-
跟踪路由路径(
traceroute google.com)
使用traceroute命令跟踪数据包到达目标的路径,帮助定位网络中断的位置。traceroute google.com示例输出:
traceroute to google.com (142.250.72.14), 30 hops max, 60 byte packets 1 192.168.1.1 (192.168.1.1) 1.123 ms 0.987 ms 1.045 ms 2 10.0.0.1 (10.0.0.1) 5.678 ms 5.654 ms 5.632 ms 3 203.0.113.1 (203.0.113.1) 10.345 ms 10.321 ms 10.298 ms ... 10 lga34s11-in-f14.1e100.net (142.250.72.14) 15.678 ms 15.654 ms 15.632 ms说明:
- 每一跳显示数据包经过的路由器地址和响应时间。
- 如果在某一跳出现
*,表示该跳路由器未响应,可能存在网络问题。
命令找不到
当尝试运行某个命令时,系统提示 command not found,可能是由于该命令未安装或其路径未包含在 $PATH 环境变量中。
检查 $PATH 环境变量
-
查看当前的 PATH 设置(
echo $PATH)echo $PATH示例输出:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games -
添加缺失的路径到 PATH(
export PATH=$PATH:/new/path)
临时添加路径,仅对当前终端会话有效。export PATH=$PATH:/opt/custom/bin说明:
- 将
/opt/custom/bin添加到现有的 PATH 中。
- 将
-
永久添加到配置文件(如
~/.bashrc,~/.profile)
编辑用户的 shell 配置文件,确保 PATH 设置在每次登录时生效。nano ~/.bashrc添加以下行:
export PATH=$PATH:/opt/custom/bin保存并退出,然后重新加载配置文件:
source ~/.bashrc
查找命令的安装路径
-
使用
which查找命令路径(which command_name)
which命令显示指定命令的可执行文件路径。which ls示例输出:
/bin/ls -
使用
whereis查找命令及其相关文件(whereis command_name)
whereis命令显示命令的二进制文件、源代码和手册页的位置。whereis gcc示例输出:
gcc: /usr/bin/gcc /usr/lib/gcc /usr/share/man/man1/gcc.1.gz -
使用
find查找命令文件(find / -type f -name "command_name" 2>/dev/null)
find命令在指定目录下搜索符合条件的文件。sudo find / -type f -name "docker" 2>/dev/null示例输出:
/usr/bin/docker /usr/local/bin/docker说明:
- 使用
sudo提升权限,搜索系统所有目录。 2>/dev/null将错误输出(如权限拒绝)重定向到空设备,避免杂乱的错误信息。
- 使用
磁盘空间不足
磁盘空间不足会导致系统无法正常运行,应用程序无法写入数据,甚至系统崩溃。及时发现和释放磁盘空间是系统维护的重要任务。
使用 du 和 df 查找磁盘占用
-
使用
df -h查看整体磁盘空间状态
df命令显示文件系统的磁盘空间使用情况,-h选项以人类可读的格式显示。df -h示例输出:
Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 20G 28G 42% / tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/sdb1 100G 60G 40G 60% /data说明:
- Filesystem:文件系统名称或设备。
- Size:总大小。
- Used:已使用空间。
- Avail:可用空间。
- Use%:使用百分比。
- Mounted on:挂载点。
-
使用
du -sh /path/to/directory查看特定目录的占用情况
du命令估算文件和目录的磁盘使用量,-s显示总计,-h以人类可读的格式显示。du -sh /var/log示例输出:
500M /var/log -
使用
du -ah / | sort -n -r | head -n 20查找占用空间最多的文件与目录
此命令递归扫描根目录下所有文件和目录,按大小降序排序,显示前20个占用空间最多的项。sudo du -ah / | sort -hr | head -n 20示例输出:
2.0G /var/log 1.5G /var/log/nginx 1.2G /var/log/mysql 500M /var/www/html ...说明:
-a:显示所有文件和目录。sort -hr:按人类可读的格式逆序排序。head -n 20:显示前20个结果。
清理临时文件与日志文件
-
删除不必要的临时文件(清理
/tmp,/var/tmp目录)sudo rm -rf /tmp/* sudo rm -rf /var/tmp/*说明:
- 使用
rm -rf命令强制删除目录中的所有文件和子目录。 - 警告:确保
/tmp和/var/tmp中没有重要数据,避免误删关键文件。
- 使用
-
使用
journalctl --vacuum-time=7d清理旧的 systemd 日志
journalctl是用于查看 systemd 日志的工具,--vacuum-time选项用于删除超过指定时间的日志。sudo journalctl --vacuum-time=7d说明:
- 删除7天前的日志,释放磁盘空间。
-
删除不需要的日志文件(如
/var/log/\*.log)sudo rm -f /var/log/*.log sudo rm -rf /var/log/apache2/* sudo rm -rf /var/log/mysql/*说明:
- 删除特定服务的日志文件,根据实际情况选择性删除。
- 警告:确保删除的日志文件不再需要,或先备份重要日志。
-
使用
apt-get clean清理包缓存
apt-get clean命令清理本地已下载的包文件,释放磁盘空间。sudo apt-get clean说明:
- 清理
/var/cache/apt/archives/目录中的.deb包文件。
- 清理
本节总结
- 本节主要围绕 高级 Linux 管理、高可用性与负载均衡、设置高可用集群、无法连接网络、检查网络接口配置 展开。
- 需要重点掌握的命令或工具包括:
ping、traceroute、$PATH、du、df。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
ping、traceroute、$PATH、du、df。