在Linux系统中进行集群管理,核心目标是实现多台服务器节点的统一调度、配置同步与服务协同,降低人工逐台操作的成本,提升整体架构的稳定性和可扩展性。

集群管理基础环境准备
搭建集群前需要先规划节点角色,通常分为管理节点和 worker 节点,管理节点负责下发指令,worker 节点执行具体任务。首先需要确保所有节点处于同一内网,且网络互通,可以通过 ping 命令测试节点间的连通性。
1. 配置主机名与hosts映射
为每台节点设置唯一的主机名,避免节点识别混乱,同时配置/etc/hosts文件实现主机名到IP的映射,后续操作可以直接使用主机名代替IP地址。
在管理节点执行以下命令设置主机名:
# 设置管理节点主机名为master hostnamectl set-hostname master # 设置worker节点主机名,在对应worker节点执行 hostnamectl set-hostname worker1 hostnamectl set-hostname worker2
编辑所有节点的/etc/hosts文件,添加所有节点的IP和主机名映射:
# 假设管理节点IP为192.168.0.10,worker1为192.168.0.11,worker2为192.168.0.12 192.168.0.10 master 192.168.0.11 worker1 192.168.0.12 worker2
2. 配置SSH免密登录
集群管理依赖管理节点向worker节点下发指令,配置SSH免密登录可以避免每次执行命令都需要输入密码,提升操作效率。
在管理节点生成SSH密钥对:
# 生成RSA密钥对,一路回车使用默认配置即可 ssh-keygen -t rsa
将管理节点的公钥复制到所有worker节点:
# 复制公钥到worker1节点,需要输入worker1的root密码 ssh-copy-id root@worker1 # 复制公钥到worker2节点 ssh-copy-id root@worker2
配置完成后,在管理节点执行ssh root@worker1可以直接登录worker1节点,无需输入密码。
集群配置同步与批量操作
1. 配置文件同步
当需要统一修改所有节点的配置文件时,可以使用scp命令结合循环实现批量同步,也可以使用专门的同步工具如rsync。
以下示例实现将管理节点的/etc/nginx/nginx.conf配置文件同步到所有worker节点:
# 定义所有worker节点主机名数组
workers=("worker1" "worker2")
# 循环遍历所有worker节点,同步配置文件
for node in ${workers[@]}; do
echo "同步配置文件到 $node"
scp /etc/nginx/nginx.conf root@$node:/etc/nginx/nginx.conf
done
2. 批量执行命令
需要在所有节点执行同一命令时,可以编写简单的脚本实现批量下发,避免逐台登录操作。
以下脚本实现在所有worker节点查看nginx服务状态:
workers=("worker1" "worker2")
for node in ${workers[@]}; do
echo "===== $node 服务状态 ====="
ssh root@$node "systemctl status nginx"
done
集群服务部署与负载均衡
常见的集群服务部署采用主从或多主架构,配合负载均衡组件实现流量分发。以Nginx作为负载均衡器,后端部署多个应用节点为例。
1. 后端应用节点部署
在所有worker节点部署相同的应用服务,确保服务端口、配置一致,这里以部署简单的HTTP服务为例:
# 在worker节点安装nginx yum install -y nginx # 启动nginx服务并设置开机自启 systemctl start nginx systemctl enable nginx
2. 负载均衡配置
在管理节点部署Nginx作为负载均衡器,修改/etc/nginx/nginx.conf配置文件,添加 upstream 模块定义后端节点池:
http {
# 定义后端应用节点池
upstream app_cluster {
server worker1:80;
server worker2:80;
}
server {
listen 80;
server_name localhost;
location / {
# 将请求转发到后端节点池
proxy_pass http://app_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
配置完成后重载Nginx服务使配置生效:
nginx -t systemctl reload nginx
集群状态监控与维护
集群运行过程中需要定期监控节点状态、服务状态和资源使用情况,及时发现异常节点。
- 节点存活监控:可以通过定时脚本ping所有节点,记录不可达的节点
- 服务状态监控:定期检查核心服务的运行状态,异常时自动重启
- 资源监控:使用
top、free、df等命令查看CPU、内存、磁盘使用情况,避免资源耗尽
以下脚本实现每5分钟检查所有worker节点的nginx服务状态,服务异常时尝试重启:
workers=("worker1" "worker2")
for node in ${workers[@]}; do
# 检查nginx服务是否运行
status=$(ssh root@$node "systemctl is-active nginx")
if [ "$status" != "active" ]; then
echo "$(date) $node nginx服务异常,尝试重启"
ssh root@$node "systemctl restart nginx"
fi
done
可以将该脚本添加到crontab定时任务中,实现自动化监控维护。
常见问题排查
问题1:SSH免密登录配置后仍然需要输入密码
排查思路:检查~/.ssh目录权限是否为700,~/.ssh/authorized_keys文件权限是否为600,权限异常会导致免密登录失效。
问题2:配置文件同步后服务不生效
排查思路:检查配置文件语法是否正确,同步后是否执行了服务重载或重启操作,部分服务需要重启才能加载新配置。
问题3:负载均衡请求只到部分节点
排查思路:检查upstream配置的后端节点地址是否正确,节点服务是否正常运行,防火墙是否放通了对应端口。