news 2026/4/18 8:06:37

Linux集群与分布式存储全面实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux集群与分布式存储全面实战指南

声明与使用说明

环境声明与注意事项

实验环境说明
本文档基于以下标准实验环境编写,实际部署时请根据您的环境进行调整

  • 操作系统:Rocky Linux 9.5(其他RHEL 9系衍生版也可参考)

  • 虚拟化平台:KVM(使用virt-manager/virsh进行管理)

  • 网络规划

    • 公共网络:192.168.88.0/24

    • 私有网络:192.168.99.0/24(用于Ceph后端)

  • 软件版本

    • Ansible 7.7.0

    • Ceph Quincy(v17)

    • Nginx 1.20+

    • Keepalived 2.2+

    • HAProxy 2.4+

重要提示

  1. 环境差异性:您的实际环境(IP地址、主机名、网卡名称、磁盘设备等)可能与文档不同,请务必根据实际情况调整配置

  2. 生产环境警告:本文档配置主要用于学习测试环境,生产环境需要考虑安全性、性能优化、备份策略等因素

  3. 技术思路优先:文档重点展示技术实现思路和架构设计,具体参数可根据需求调整

  4. 版本兼容性:不同软件版本间可能存在差异,建议先查阅官方文档

如何参考本文档

  1. 首先理解每个技术的核心概念和工作原理

  2. 根据您的实际环境规划网络拓扑和资源分配

  3. 参考配置思路,调整具体的IP地址、路径等参数

  4. 在测试环境中验证通过后再应用于生产

第一部分:集群概念与LVS负载均衡

一、集群基础概念

1.1 集群核心概念

集群定义:一组相互独立的计算机,通过网络连接形成统一的整体,为用户提供一组网络资源。

集群目的

  • 提高性能:通过多台计算机并行处理任务

  • 降低成本:相比超级计算机更经济实惠

  • 提高可扩展性:按需增加节点即可扩展性能

  • 增强可靠性:多节点冗余,避免单点故障

集群分类

  1. HA集群:高可用集群,确保服务持续可用

  2. LBC集群:负载均衡集群,分散请求压力

  3. HPC集群:高性能计算集群,用于科学计算

1.2 LVS基础架构

LVS(Linux Virtual Server):由章文嵩博士开发,已被集成到Linux内核中的高性能负载均衡解决方案。

核心组件

  1. IPVS模块:工作在内核空间,实现负载均衡

  2. ipvsadm工具:工作在用户空间,管理配置

LVS工作模式

  1. NAT模式:网络地址转换,调度器修改数据包地址

  2. DR模式:直接路由,真实服务器直接响应客户端

  3. TUN模式:隧道模式,用于跨网络部署

关键术语

  • 调度器:安装LVS的负载均衡服务器

  • 真实服务器(Real Server):实际提供服务的后端主机

  • VIP:虚拟IP地址,客户端访问的地址

  • DIP:调度器与真实服务器通信的地址

  • RIP:真实服务器的实际IP地址

常用调度算法

  • rr:轮询调度

  • wrr:加权轮询调度

  • lc:最少连接调度

  • wlc:加权最少连接调度

二、LVS-NAT模式实战部署

2.1 实验环境准备

网络拓扑规划

公共网络:192.168.88.0/24 私有网络:192.168.99.0/24

主机配置清单

主机名IP地址角色配置要求
pubserver192.168.88.240Ansible控制节点已存在
client192.168.88.10测试客户端网关:192.168.88.5
lvs1192.168.88.5, 192.168.99.5LVS调度器双网卡配置
web1192.168.99.100Web服务器网关:192.168.99.5
web2192.168.99.200Web服务器网关:192.168.99.5
2.2 详细部署步骤

步骤1:请自行创建并配置虚拟机

步骤2:验证网络连通性

# 在lvs1上开启路由转发 [root@lvs1 ~]# cat /proc/sys/net/ipv4/ip_forward # 如果返回0,则开启路由转发 [root@lvs1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward # 测试网络连通性 [root@client ~]# ping -c 2 192.168.99.100 [root@client ~]# ping -c 2 192.168.99.200

步骤3:配置Ansible自动化管理

# 在pubserver上配置Ansible [root@pubserver ~]# dnf -y remove ansible-core [root@pubserver ~]# dnf -y install /root/ansible-7.7.0-1.el9.noarch.rpm [root@pubserver ~]# mkdir cluster; cd cluster/ # 创建Ansible配置文件 [root@pubserver cluster]# vim ansible.cfg [defaults] inventory = inventory host_key_checking = false module_name = shell # 创建主机清单 [root@pubserver cluster]# vim inventory [clients] client ansible_ssh_host=192.168.88.10 [webservers] web1 ansible_ssh_host=192.168.99.100 web2 ansible_ssh_host=192.168.99.200 [lbs] lvs1 ansible_ssh_host=192.168.88.5 [all:vars] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=a # 测试Ansible连接 [root@pubserver cluster]# ansible all -m ping # 更新Web服务器repo文件 [root@pubserver cluster]# ansible webservers -a \ "sed -i '/88/s/88/99/' /etc/yum.repos.d/rocky.repo"

步骤4:部署Web服务器

# 创建网页模板 [root@pubserver cluster]# vim index.html Welcome to {{ ansible_hostname }} # 创建Web服务器部署Playbook [root@pubserver cluster]# vim 01_config_web.yml --- - name: config web hosts: webservers tasks: - name: install nginx yum: name: nginx state: present - name: copy index template: src: index.html dest: /usr/share/nginx/html/index.html - name: start nginx service: name: nginx state: started enabled: true # 执行Playbook [root@pubserver cluster]# ansible-playbook 01_config_web.yml # 验证Web服务 [root@pubserver cluster]# curl http://192.168.99.100/ [root@pubserver cluster]# curl http://192.168.99.200/

步骤5:配置LVS-NAT模式

# 持久化开启路由转发 [root@pubserver cluster]# vim 02_config_nat_sysctl.yml --- - name: config sysctl hosts: lbs tasks: - name: modify kernel args sysctl: name: net.ipv4.ip_forward value: '1' sysctl_set: true sysctl_file: /etc/sysctl.conf notify: flush args handlers: - name: flush args shell: "sysctl -p" # 执行配置 [root@pubserver cluster]# ansible-playbook 02_config_nat_sysctl.yml # 安装LVS软件 [root@pubserver cluster]# vim 03_install_lvs.yml --- - name: install lvs hosts: lbs tasks: - name: install soft yum: name: ipvsadm state: present [root@pubserver cluster]# ansible-playbook 03_install_lvs.yml # ipvsadm命令详解 # -A: 添加虚拟服务器 # -E: 编辑虚拟服务器 # -D: 删除虚拟服务器 # -t: TCP服务 # -u: UDP服务 # -s: 指定调度算法 # -a: 添加真实服务器 # -r: 指定真实服务器地址 # -w: 设置权重 # -m: NAT模式 # -g: DR模式

步骤6:配置LVS规则

# 在lvs1上配置LVS规则 [root@lvs1 ~]# ipvsadm -Ln # 创建虚拟服务器(轮询算法) [root@lvs1 ~]# ipvsadm -A -t 192.168.88.5:80 -s rr # 添加真实服务器 [root@lvs1 ~]# ipvsadm -a -t 192.168.88.5:80 \ -r 192.168.99.100:80 -w 1 -m [root@lvs1 ~]# ipvsadm -a -t 192.168.88.5:80 \ -r 192.168.99.200:80 -w 2 -m # 查看配置 [root@lvs1 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.88.5:80 rr -> 192.168.99.100:80 Masq 1 0 0 -> 192.168.99.200:80 Masq 2 0 0 # 测试负载均衡 [root@client ~]# for i in {1..6}; do curl http://192.168.88.5; done

步骤7:调整调度算法

# 修改为加权轮询算法 [root@lvs1 ~]# ipvsadm -E -t 192.168.88.5:80 -s wrr [root@lvs1 ~]# ipvsadm -Ln # 验证权重生效 [root@client ~]# for i in {1..6}; do curl http://192.168.88.5; done

三、LVS-DR模式实战部署

3.1 实验环境重构

网络拓扑调整
所有节点位于同一网段:192.168.88.0/24

主机重新配置

# 清理并重建Web主机 [root@server1 ~]# vm remove web1 web2 [root@server1 ~]# vm clone web1 web2 # 重新配置IP地址 [root@server1 ~]# vm setip web1 192.168.88.100 [root@server1 ~]# vm setip web2 192.168.88.200 # 清理LVS-NAT规则 [root@lvs1 ~]# ipvsadm -C [root@lvs1 ~]# ipvsadm -Ln # 关闭lvs1的eth1网卡 [root@lvs1 ~]# nmcli connection down eth1
3.2 DR模式详细部署

步骤1:调整Ansible配置

# 更新主机清单 [root@pubserver cluster]# vim inventory [clients] client ansible_ssh_host=192.168.88.10 [webservers] web1 ansible_ssh_host=192.168.88.100 web2 ansible_ssh_host=192.168.88.200 [lbs] lvs1 ansible_ssh_host=192.168.88.5 [all:vars] ansible_ssh_user=root ansible_ssh_pass=a # 测试连接 [root@pubserver cluster]# ansible all -m ping # 重新部署Web服务 [root@pubserver cluster]# ansible-playbook 01_config_web.yml

步骤2:配置虚拟IP地址

# 在调度器上配置VIP [root@pubserver cluster]# ansible lbs -a \ "ifconfig eth0:0 192.168.88.15/24" # 在真实服务器上配置VIP(lo回环接口) [root@pubserver cluster]# ansible webservers -a \ "ifconfig lo:0 192.168.88.15/32" # 验证VIP配置 [root@pubserver cluster]# ansible lbs,webservers -a \ "ip a s | grep 192.168"

步骤3:配置ARP抑制参数

# 创建DR模式内核参数配置Playbook [root@pubserver cluster]# vim 05_config_dr_sysctl2.yml --- - name: config kernel args hosts: webservers tasks: - name: modify kernel args blockinfile: path: /etc/sysctl.conf block: | net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.lo.arp_ignore=1 net.ipv4.conf.all.arp_announce=2 net.ipv4.conf.lo.arp_announce=2 notify: flush args handlers: - name: flush args shell: "sysctl -p" # 执行配置 [root@pubserver cluster]# ansible-playbook 05_config_dr_sysctl2.yml # 验证配置 [root@pubserver cluster]# ansible webservers -m shell -a \ "tail -6 /etc/sysctl.conf"

步骤4:配置LVS-DR规则

# 在lvs1上配置DR模式规则 [root@lvs1 ~]# ipvsadm -A -t 192.168.88.15:80 -s wrr [root@lvs1 ~]# ipvsadm -a -t 192.168.88.15:80 \ -r 192.168.88.100:80 -w 1 -g [root@lvs1 ~]# ipvsadm -a -t 192.168.88.15:80 \ -r 192.168.88.200:80 -w 2 -g # 查看配置 [root@lvs1 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.88.15:80 wrr -> 192.168.88.100:80 Route 1 0 6 -> 192.168.88.200:80 Route 2 0 6 # 测试负载均衡 [root@client ~]# for i in {1..6}; do curl http://192.168.88.15; done

四、Keepalived高可用集群

4.1 Keepalived概述

Keepalived功能

  1. LVS规则管理

  2. 真实服务器健康检查

  3. VIP管理

  4. 基于VRRP协议实现高可用

4.2 实验环境准备

新增节点

  • lvs2: 192.168.88.6(备用调度器)

清理环境

# 创建lvs2主机 [root@server1 ~]# vm clone lvs2 [root@server1 ~]# vm setip lvs2 192.168.88.6 # 清理lvs1原有配置 [root@lvs1 ~]# ipvsadm -C [root@lvs1 ~]# ifconfig eth0:0 down [root@lvs1 ~]# reboot # 更新Ansible配置 [root@pubserver cluster]# vim inventory [lbs] lvs1 ansible_ssh_host=192.168.88.5 lvs2 ansible_ssh_host=192.168.88.6
4.3 Keepalived详细配置

步骤1:安装软件

# 创建安装Playbook [root@pubserver cluster]# vim 06_inst_lvs_kp.yml --- - name: install soft hosts: lbs tasks: - name: install pkgs yum: name: ipvsadm,keepalived state: present # 执行安装 [root@pubserver cluster]# ansible-playbook 06_inst_lvs_kp.yml

步骤2:配置lvs1(主节点)

# 编辑Keepalived配置文件 [root@lvs1 ~]# vim /etc/keepalived/keepalived.conf global_defs { router_id lvs1 #vrrp_strict # 注释或删除此行 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.88.15/24 dev eth0 label eth0:0 } } virtual_server 192.168.88.15 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.88.100 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.88.200 80 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } # 启动服务 [root@lvs1 ~]# systemctl enable --now keepalived [root@lvs1 ~]# ipvsadm -Ln [root@lvs1 ~]# ip a s | grep 192.168

步骤3:配置lvs2(备节点)

# 复制配置文件 [root@lvs2 ~]# scp root@192.168.88.5:/etc/keepalived/keepalived.conf \ /etc/keepalived/ # 修改配置 [root@lvs2 ~]# vim /etc/keepalived/keepalived.conf router_id lvs2 state BACKUP priority 50 # 启动服务 [root@lvs2 ~]# systemctl start keepalived [root@lvs2 ~]# ipvsadm -Ln

步骤4:验证高可用功能

# 测试真实服务器健康检查 [root@web1 ~]# systemctl stop nginx [root@lvs1 ~]# ipvsadm -Ln [root@web1 ~]# systemctl start nginx [root@lvs1 ~]# ipvsadm -Ln # 测试调度器故障转移 [root@lvs1 ~]# ip a s | grep 88.15 [root@lvs1 ~]# systemctl stop keepalived [root@lvs1 ~]# ip a s | grep 88.15 [root@lvs2 ~]# ip a s | grep 88.15 # 验证服务连续性 [root@client ~]# for i in {1..6}; do curl http://192.168.88.15; done

五、HAProxy负载均衡

5.1 HAProxy概述

HAProxy特点

  • 支持TCP/HTTP层负载均衡

  • 高性能,支持高并发

  • 提供健康检查和状态监控

  • 支持多种调度算法

工作模式

  • mode http:HTTP应用代理

  • mode tcp:TCP层负载均衡

  • mode health:仅健康检查

常用调度算法

  • roundrobin:轮询

  • static-rr:加权轮询

  • leastconn:最少连接

  • source:基于源IP

5.2 HAProxy实战部署

步骤1:环境准备

# 重新配置lvs1为haproxy节点 [root@pubserver cluster]# vim 07_install_haproxy.yml --- - name: config haproxy hosts: lvs1 tasks: - name: stop keepalived service: name: keepalived state: stopped enabled: false - name: remove softs yum: name: ipvsadm,keepalived state: absent - name: modify hostname shell: "hostnamectl set-hostname haproxy" - name: install haproxy yum: name: haproxy state: present # 执行配置 [root@pubserver cluster]# ansible-playbook 07_install_haproxy.yml

步骤2:配置HAProxy

# 编辑HAProxy配置文件 [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg # 删除64行后所有内容,添加以下配置: listen webservers bind 0.0.0.0:80 mode http balance roundrobin server web1 192.168.88.100:80 check inter 2000 rise 2 fall 5 server web2 192.168.88.200:80 check inter 2000 rise 2 fall 5 # 参数说明: # check:启用健康检查 # inter:检查间隔(毫秒) # rise:连续成功次数认为健康 # fall:连续失败次数认为故障 # 启动服务 [root@haproxy ~]# systemctl start haproxy [root@haproxy ~]# ss -antlp | grep haproxy # 测试负载均衡 [root@client ~]# for i in {1..6}; do curl http://192.168.88.5; done

步骤3:启用状态监控页面

# 添加状态监控配置 [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg listen stats bind 0.0.0.0:1080 stats refresh 30s stats uri /stats stats auth admin:admin # 重启服务 [root@haproxy ~]# systemctl restart haproxy [root@haproxy ~]# ss -antlp | grep haproxy # 访问监控页面 # 浏览器访问:http://192.168.88.5:1080/stats # 用户名/密码:admin/admin

第二部分:Ceph分布式存储

一、Ceph基础架构

1.1 Ceph核心组件

Ceph架构

  1. MON(Monitor):集群状态管理和监控

  2. MGR(Manager):集群管理和监控接口

  3. OSD(Object Storage Daemon):数据存储和复制

  4. MDS(Metadata Server):CephFS元数据管理

  5. RGW(RADOS Gateway):对象存储网关

数据存储逻辑

  • Object:存储的基本单元

  • Pool:数据的逻辑分区

  • PG(Placement Group):数据分布单元

  • CRUSH算法:数据分布算法

1.2 实验环境准备

硬件要求

  • 三台Ceph节点(ceph1、ceph2、ceph3)

  • 每节点:4GB内存 + 3块20GB额外硬盘

网络规划

ceph1: 192.168.88.11 ceph2: 192.168.88.12 ceph3: 192.168.88.13 client: 192.168.88.10

二、Ceph集群部署

2.1 环境准备

步骤1:创建并配置虚拟机

# 创建Ceph节点 [root@server1 ~]# vm clone ceph1 ceph2 ceph3 # 配置IP地址 [root@server1 ~]# vm setip ceph1 192.168.88.11 [root@server1 ~]# vm setip ceph2 192.168.88.12 [root@server1 ~]# vm setip ceph3 192.168.88.13 # 配置主机名 [root@server1 ~]# ssh 192.168.88.11 [root@bogon ~]# echo ceph1 > /etc/hostname [root@bogon ~]# poweroff # 同样配置ceph2、ceph3 # 为每个节点添加3块20GB硬盘 # 调整内存为4GB

步骤2:配置Ansible管理

# 创建Ceph专用目录 [root@pubserver ~]# mkdir ceph; cd ceph/ # 配置Ansible [root@pubserver ceph]# vim ansible.cfg [defaults] inventory = inventory module_name = shell host_key_checking = false roles_path = roles # 创建主机清单 [root@pubserver ceph]# vim inventory [ceph] ceph1 ansible_ssh_host=192.168.88.11 ceph2 ansible_ssh_host=192.168.88.12 ceph3 ansible_ssh_host=192.168.88.13 [clients] client ansible_ssh_host=192.168.88.10 [all:vars] ansible_ssh_user=root ansible_ssh_pass=a # 验证配置 [root@pubserver ceph]# ansible all -m ping # 检查硬件配置 [root@pubserver ceph]# ansible ceph -m shell -a "free -h" [root@pubserver ceph]# ansible ceph -a "lsblk"

步骤3:基础环境配置

# 更新yum源 [root@pubserver ~]# tar -xf /root/ceph_soft.tar.gz -C /root/ [root@pubserver ~]# cp /root/ceph_soft/ceph-client/* /var/ftp/rpms/ [root@pubserver ~]# createrepo --update /var/ftp/rpms/ # 分发repo文件 [root@pubserver ceph]# vim 01_update_yum.yml --- - name: update yum hosts: all tasks: - name: upload file copy: src: /etc/yum.repos.d/rocky.repo dest: /etc/yum.repos.d/rocky.repo # 配置主机名解析 [root@pubserver ceph]# vim /etc/hosts 192.168.88.10 client 192.168.88.11 ceph1 192.168.88.12 ceph2 192.168.88.13 ceph3 [root@pubserver ceph]# vim 02_update_hosts.yml --- - name: update hosts hosts: all tasks: - name: add host resolv copy: src: /etc/hosts dest: /etc/hosts

步骤4:时间同步配置

# 配置Chrony时间服务 [root@pubserver ~]# timedatectl set-timezone Asia/Shanghai [root@pubserver ~]# vim /etc/chrony.conf allow 192.168.88.0/24 local stratum 10 [root@pubserver ~]# systemctl enable chronyd [root@pubserver ~]# systemctl restart chronyd # 配置客户端时间同步 [root@pubserver ceph]# cp -r /usr/share/ansible/roles/rhel-system-roles.timesync/ ./roles/timesync [root@pubserver ceph]# vim 03_timesync.yml --- - name: config ntp hosts: all vars: timesync_ntp_servers: - hostname: 192.168.88.240 iburst: true roles: - timesync [root@pubserver ceph]# ansible-playbook 03_timesync.yml

步骤5:搭建私有容器仓库

# 导入Ceph镜像 [root@pubserver ~]# cd /root/ceph_soft/ceph-server/ [root@pubserver ceph-server]# docker load -i ceph17.tar.xz # 配置私有仓库 [root@pubserver ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["http://192.168.88.240:5000"], "insecure-registries":["192.168.88.240:5000"] } [root@pubserver ~]# systemctl enable --now docker [root@pubserver ceph-server]# docker push 192.168.88.240:5000/ceph/ceph:v17 # 安装必要软件 [root@pubserver ceph]# vim 04_inst_pkgs.yml --- - name: install pkgs hosts: ceph tasks: - name: install pkgs yum: name: - python39 - podman - lvm2 state: present # 配置私有镜像仓库 [root@pubserver ceph]# vim 05_config_priv_registry.yml --- - name: config private registry hosts: ceph tasks: - name: add quay.io blockinfile: path: /etc/containers/registries.conf block: | [[registry]] location = "192.168.88.240" insecure = true
2.2 Ceph集群初始化

步骤1:初始化第一个节点

# 在ceph1上执行 [root@ceph1 ~]# scp 192.168.88.240:/root/ceph_soft/ceph-server/cephadm /root/ [root@ceph1 ~]# chmod +x cephadm # 初始化集群 [root@ceph1 ~]# ./cephadm bootstrap \ --mon-ip 192.168.88.11 \ --initial-dashboard-password=123456 \ --dashboard-password-noupdate \ --skip-monitoring-stack # 等待3分钟,验证初始化 [root@ceph1 ~]# podman images [root@ceph1 ~]# podman ps # 安装管理工具 [root@ceph1 ~]# dnf -y install ceph-common [root@ceph1 ~]# ceph -s

步骤2:集群扩容

# 同步SSH密钥 [root@ceph1 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph1 [root@ceph1 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph2 [root@ceph1 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph3 # 查看当前主机 [root@ceph1 ~]# ceph orch host ls # 添加其他节点 [root@ceph1 ~]# ceph orch host add ceph2 192.168.88.12 [root@ceph1 ~]# ceph orch host add ceph3 192.168.88.13 # 等待并验证 [root@ceph1 ~]# ceph orch host ls [root@ceph1 ~]# ceph orch ls

步骤3:调整集群配置

# 调整mon和mgr数量 [root@ceph1 ~]# ceph orch apply mon --placement="3 ceph1 ceph2 ceph3" [root@ceph1 ~]# ceph orch apply mgr --placement="3 ceph1 ceph2 ceph3" # 等待调整完成 [root@ceph1 ~]# ceph orch ls [root@ceph1 ~]# ceph -s

步骤4:添加OSD存储

# 添加所有可用磁盘作为OSD [root@ceph1 ~]# ceph orch apply osd --all-available-devices # 或手动添加每个磁盘 [root@ceph1 ~]# ceph orch daemon add osd ceph1:/dev/vdb [root@ceph1 ~]# ceph orch daemon add osd ceph1:/dev/vdc [root@ceph1 ~]# ceph orch daemon add osd ceph1:/dev/vdd # 同样为ceph2、ceph3添加 # 验证集群状态 [root@ceph1 ~]# ceph -s [root@ceph1 ~]# ceph orch ls

步骤5:访问Ceph Dashboard

浏览器访问:https://192.168.88.11:8443 用户名:admin 密码:123456

三、Ceph块存储(RBD)

3.1 RBD基础操作

步骤1:创建存储池

# 查看现有存储池 [root@ceph1 ~]# ceph osd pool ls # 创建RBD存储池 [root@ceph1 ~]# ceph osd pool create rbd 64 [root@ceph1 ~]# ceph osd pool application enable rbd rbd # 查看存储空间 [root@ceph1 ~]# ceph df

步骤2:管理RBD镜像

# 创建镜像 [root@ceph1 ~]# rbd create img1 --size 10G [root@ceph1 ~]# rbd ls # 查看镜像信息 [root@ceph1 ~]# rbd info img1 # 调整镜像大小 [root@ceph1 ~]# rbd resize img1 --size 20G [root@ceph1 ~]# rbd resize img1 --size 15G --allow-shrink # 删除镜像 [root@ceph1 ~]# rbd remove img1
3.2 客户端使用RBD

步骤1:客户端配置

# 安装必要软件 [root@client ~]# dnf -y install ceph-common # 获取集群配置文件 [root@client ~]# scp root@192.168.88.11:/etc/ceph/ceph.conf /etc/ceph/ [root@client ~]# scp root@192.168.88.11:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ # 验证连接 [root@client ~]# ceph -s

步骤2:使用块设备

# 创建镜像 [root@client ~]# rbd create img1 --size 10G [root@client ~]# rbd ls # 映射镜像到本地 [root@client ~]# rbd map img1 [root@client ~]# lsblk # 格式化并挂载 [root@client ~]# mkfs.xfs /dev/rbd0 [root@client ~]# mkdir /data [root@client ~]# mount /dev/rbd0 /data/ # 验证使用 [root@client ~]# df -hT | grep rbd [root@client ~]# cp /etc/hosts /data/ # 卸载和取消映射 [root@client ~]# umount /data [root@client ~]# rbd unmap img1
3.3 RBD高级功能

步骤1:镜像快照管理

# 创建镜像并写入数据 [root@client ~]# rbd create img2 --size 10G [root@client ~]# rbd map img2 [root@client ~]# mkfs.xfs /dev/rbd0 [root@client ~]# mount /dev/rbd0 /mnt/ [root@client ~]# cp /etc/hosts /etc/passwd /mnt/ # 创建快照 [root@client ~]# rbd snap create img2 --snap img2-sn [root@client ~]# rbd snap ls img2 # 模拟数据损坏 [root@client ~]# rm -rf /mnt/* # 恢复快照(需先卸载) [root@client ~]# umount /mnt [root@client ~]# rbd unmap img2 [root@client ~]# rbd snap rollback img2 --snap img2-sn # 重新挂载验证 [root@client ~]# rbd map img2 [root@client ~]# mount /dev/rbd0 /mnt/ [root@client ~]# ls /mnt/

步骤2:快照保护与克隆

# 保护快照 [root@client ~]# rbd snap protect img2 --snap img2-sn [root@client ~]# rbd snap ls img2 # 基于快照克隆 [root@client ~]# rbd clone img2 --snap img2-sn img2-clone1 [root@client ~]# rbd clone img2 --snap img2-sn img2-clone2 [root@client ~]# rbd ls # 使用克隆镜像 [root@client ~]# rbd map img2-clone1 [root@client ~]# mount /dev/rbd0 /data/ [root@client ~]# ls /data/ # 合并父子镜像 [root@client ~]# rbd flatten img2-clone2 [root@client ~]# rbd info img2-clone2 # 清理资源 [root@client ~]# umount /data [root@client ~]# rbd unmap img2-clone1 [root@client ~]# rbd snap unprotect img2 --snap img2-sn [root@client ~]# rbd snap rm img2 --snap img2-sn [root@client ~]# rbd rm img2

步骤3:自动挂载配置

# 创建测试镜像 [root@client ~]# rbd create img-auto --size 10G [root@client ~]# rbd map img-auto [root@client ~]# mkfs.xfs /dev/rbd0 [root@client ~]# mount /dev/rbd0 /data/ # 配置自动映射 [root@client ~]# vim /etc/ceph/rbdmap rbd/img-auto id=admin,keyring=/etc/ceph/ceph.client.admin.keyring [root@client ~]# systemctl enable --now rbdmap # 配置自动挂载 [root@client ~]# vim /etc/fstab /dev/rbd/rbd/img-auto /data xfs noauto 0 0 # 测试重启后自动挂载 [root@client ~]# reboot [root@client ~]# df -h | grep data

四、Ceph文件存储(CephFS)

4.1 CephFS部署

步骤1:创建CephFS

# 创建存储池 [root@ceph1 ~]# ceph osd pool create cephfs_data 128 [root@ceph1 ~]# ceph osd pool create cephfs_meta 128 # 创建文件系统 [root@ceph1 ~]# ceph fs new myfs cephfs_meta cephfs_data [root@ceph1 ~]# ceph fs ls # 部署MDS服务 [root@ceph1 ~]# ceph orch apply mds myfs --placement='3 ceph1 ceph2 ceph3' # 验证状态 [root@ceph1 ~]# ceph -s

步骤2:客户端挂载

# 获取认证密钥 [root@client ~]# cat /etc/ceph/ceph.client.admin.keyring # 找到 key = AQAVfwtmJmI/CRAAKg1mVOsRIHcTvQckllYZsA== # 挂载CephFS [root@client ~]# mkdir /mydata [root@client ~]# mount -t ceph 192.168.88.11:/ /mydata \ -o name=admin,secret=AQAVfwtmJmI/CRAAKg1mVOsRIHcTvQckllYZsA== # 验证挂载 [root@client ~]# df -hT | grep ceph [root@client ~]# cp /etc/hosts /mydata/ [root@client ~]# umount /mydata

五、Ceph对象存储(RGW)

5.1 RGW部署

步骤1:启动RGW服务

# 部署RGW网关 [root@ceph1 ~]# ceph orch apply rgw myrgw \ --placement="3 ceph1 ceph2 ceph3" \ --port 8080 # 验证部署 [root@ceph1 ~]# ceph orch ls | grep rgw # 访问测试 # 浏览器访问:http://192.168.88.11:8080
5.2 客户端使用对象存储

步骤1:创建S3用户

# 创建用户 [root@client ~]# radosgw-admin user create \ --uid=testuser \ --display-name="Test User" \ --email=test@example.com \ --access-key=12345 \ --secret-key=67890 # 查看用户信息 [root@client ~]# radosgw-admin user info --uid=testuser

步骤2:配置S3客户端

# 安装AWS CLI [root@client ~]# yum -y install awscli2 # 配置访问凭证 [root@client ~]# aws configure --profile=ceph AWS Access Key ID [None]: 12345 AWS Secret Access Key [None]: 67890 Default region name [None]: us-east-1 Default output format [None]: json # 查看配置 [root@client ~]# cat /root/.aws/credentials

步骤3:对象存储操作

# 创建存储桶 [root@client ~]# aws --profile=ceph \ --endpoint=http://192.168.88.11:8080 \ s3 mb s3://testbucket \ --region us-east-1 # 列出存储桶 [root@client ~]# aws --profile=ceph \ --endpoint=http://192.168.88.11:8080 \ s3 ls # 上传文件 [root@client ~]# aws --profile=ceph \ --endpoint=http://192.168.88.11:8080 \ s3 cp /etc/hosts s3://testbucket/ \ --acl=public-read-write # 下载文件 [root@client ~]# wget -O downloaded.txt \ http://192.168.88.11:8080/testbucket/hosts
5.3 应用集成示例
# 配置Nginx访问对象存储中的图片 [root@client ~]# dnf -y install nginx [root@client ~]# vim /usr/share/nginx/html/index.html <html> <head> <title>Ceph对象存储测试</title> </head> <body> <h1>测试Ceph对象存储</h1> <img src="http://192.168.88.11:8080/testbucket/hosts"> </body> </html> [root@client ~]# systemctl start nginx # 浏览器访问:http://192.168.88.10

第三部分:故障排查与优化

一、常见问题排查

1.1 LVS相关故障

问题1:Keepalived启动后看不到VIP

可能原因

  1. 防火墙阻止VRRP通信

  2. 网络接口配置错误

  3. 配置文件语法错误

  4. 多播地址冲突

解决方案

# 检查防火墙 firewall-cmd --list-all | grep vrrp firewall-cmd --add-service=vrrp --permanent firewall-cmd --reload # 检查网络接口 ip link show eth0 ifconfig eth0:0 # 检查Keepalived日志 journalctl -u keepalived -f tail -f /var/log/messages # 验证配置文件 keepalived -t -f /etc/keepalived/keepalived.conf

问题2:DR模式ARP问题

解决方案

# 检查ARP抑制配置 sysctl -a | grep arp_ignore sysctl -a | grep arp_announce # 临时修复 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce # 验证ARP表 arp -an | grep VIP
1.2 Ceph相关故障

问题1:OSD添加失败

解决方案

# 检查磁盘状态 ceph orch device ls # 清理磁盘 ceph orch device zap <hostname> <device> --force # 手动添加OSD ceph-volume lvm create --data /dev/vdb # 查看日志 journalctl -u ceph-osd@<osd_id> -f

问题2:集群健康状态异常

解决方案

# 查看详细健康状态 ceph health detail # 检查MON状态 ceph mon stat ceph mon dump # 检查PG状态 ceph pg stat ceph pg dump # 修复PG ceph pg repair <pg_id>

二、性能优化建议

2.1 LVS优化
# 调整内核参数 vim /etc/sysctl.conf net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_fin_timeout = 30 # 应用配置 sysctl -p # 调整连接超时 ipvsadm --set tcp tcpfin udp
2.2 Ceph优化
# 调整OSD参数 ceph config set osd osd_memory_target 4GB ceph config set osd bluestore_cache_size_hdd 1GB ceph config set osd bluestore_cache_size_ssd 3GB # 调整PG数量 ceph osd pool set <poolname> pg_num 128 ceph osd pool set <poolname> pgp_num 128 # 启用压缩(如果CPU充足) ceph osd pool set <poolname> compression_algorithm snappy ceph osd pool set <poolname> compression_mode aggressive

总结

本文详细介绍了从基础的LVS负载均衡到Ceph分布式存储的完整部署流程。通过实践这些步骤,您可以掌握:

  1. 负载均衡技术:LVS NAT/DR模式、Keepalived高可用、HAProxy应用层负载

  2. 分布式存储:Ceph集群部署、块存储、文件存储、对象存储

  3. 自动化管理:Ansible批量配置管理

  4. 故障排查:常见问题定位与解决

技术选型建议

  • 高并发四层负载:LVS+Keepalived

  • 应用层精细控制:HAProxy

  • 统一存储平台:Ceph(块/文件/对象存储)

  • 自动化运维:Ansible

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:14:14

Docker容器化排错全攻略:2025年常见问题与解决方案

前言&#xff1a;Docker生态环境的现状截至2025年&#xff0c;Docker已经成为企业应用部署的主流选择&#xff0c;但随之而来的各种问题也让开发者和运维人员头疼不已。本文将从实践经验出发&#xff0c;全面梳理Docker容器化过程中最常见的各类问题&#xff0c;并提供系统的排…

作者头像 李华
网站建设 2026/4/15 17:39:11

如何将零信任架构与现有企业网络体系结合,给出分步实施建议?

将零信任架构融入现有企业网络&#xff0c;绝非简单的技术替换&#xff0c;而是一次战略性的安全范式转移。其核心是从传统的“信任但验证”的城堡护城河模式&#xff0c;转向“永不信任&#xff0c;始终验证”的动态智能安全模型以下是每个阶段的关键任务和行动指南&#xff0…

作者头像 李华
网站建设 2026/4/16 1:14:46

使用PyTorch实现简单的图像分类CNN模型

使用PyTorch实现简单的图像分类CNN模型 在深度学习领域&#xff0c;图像分类是计算机视觉中最基础也最核心的任务之一。无论是识别照片中的物体、自动驾驶中的道路检测&#xff0c;还是医学影像分析&#xff0c;背后都离不开高效的卷积神经网络&#xff08;CNN&#xff09;。然…

作者头像 李华
网站建设 2026/4/18 5:43:23

PyTorch安装常见错误汇总:GPU不可用?CUDA版本不匹配?

PyTorch安装常见错误汇总&#xff1a;GPU不可用&#xff1f;CUDA版本不匹配&#xff1f; 在深度学习项目启动的第一天&#xff0c;最让人崩溃的不是模型跑不通&#xff0c;而是——torch.cuda.is_available() 返回了 False。 明明买了RTX 4090&#xff0c;结果训练速度还不如同…

作者头像 李华
网站建设 2026/4/18 8:01:30

为什么销售团队越靠经验带,越容易崩?

你应该见过这种情况&#xff1a;你问销售&#xff1a;“这个月目标稳不稳&#xff1f;” -他说&#xff1a;“问题不大。”你再问细一点&#xff1a; “客户到底推进到哪了&#xff1f;” -他又说&#xff1a;“聊得挺好&#xff0c;对方挺认可。”继续追问&#xff1a; “下一…

作者头像 李华
网站建设 2026/4/17 18:27:13

从零开始学深度学习:PyTorch基础语法+GPU加速实例

从零开始学深度学习&#xff1a;PyTorch基础语法与GPU加速实战 在深度学习项目中&#xff0c;最让人头疼的往往不是模型设计本身&#xff0c;而是环境配置——“为什么别人的代码在我机器上跑不起来&#xff1f;”、“明明装了CUDA怎么is_available()还是False&#xff1f;”这…

作者头像 李华