6.集群组建

6.1.PVE集群部署要求

PVE集群部署有一定的要求,以下是《Proxmox6.2手册》对PVE集群部署的要求,摘录如下:

1)所有节点必须可以相互访问彼此的UDP 5404和UDP 5405端口,以确保corosync正常工作。

2)各节点日期和时间需要保持同步。

3)各节点之间要能够在TCP 22端口建立SSH通信。              

4)如果你需要配置HA,则最少需要3个物理服务器节点,以保证集群多数票机制生效。此外,还需要保证所有节点使用同一版本的Proxmox VE。

5)Proxmox VE集群网络只有在网络延时低于2ms 时(局域网内)才可以正常工作,建议为集群通信分配专用网卡,特别是在配置共享存储的情况下,分配专用网卡能确保集群通信的稳定可靠。

注意事项: 

1)PVE节点在没有创建虚拟机的情况下,可以加入其他节点创建的集群,也可以自己创建集群,让其他节点加入进来。

2)PVE节点如果创建了虚拟机,那么这台机器就只能通过创建集群 让其他的节点加入进来。

3)如果把一个节点从集群中删除掉之后,再以相同的主机名和IP地址进行加入。可能会产生错误,需要强制加入。

4)加入集群后将不允许再修改主机名和IP 地址。

5)一旦建立集群后,将不允许修改集群名称。

6.2.创建集群

创建集群操作可以在命令行控制台(ssh登录)下进行,也可以通过API调用完成,GUI 界面就是通过调用API来创建集群的(数据中心→集群)。

第一步:在节点1上创建名称为“dc-zz”的集群

在节点1中,选择“数据中心→集群→创建集群”,集群名称输入“dc-zz”,集群网络选择“br1ceph接口”的IP地址,如图42所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_项目实战

图42. 创建集群

如果要添加第二条链路作为备用链路,选择“添加”之后,添加第二条链路,再点击“创建”,即可创建。

注意1:根据规划,集群网络接口应该是“br1ceph_cluster接口”,但是在交付的时候,由于疏忽,集群网络都使用了“br1ceph接口”,虽然配置没有错,但是名称容易误导。所以在这里做一个说明,后续的配置中,集群网络使用了“br1ceph接口”,也就是“br1ceph接口”代表了集群网络。

注意2:确保为集群通信选择的网络未用于任何高流量负载,如(网络)存储或实时迁移。虽然集群网络本身只产生少量数据,但它对延迟非常敏感。

第二步:复制集群密钥,其他节点需要使用集群密钥才能加入集群

在节点1中,点击“加入信息”按钮,弹出界面如图43所示,接着点击“拷贝信息”来复制集群密钥。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_02

图43. 集群密钥

第三步:在节点2上,使用节点1的集群密钥,加入集群

在节点2中,点击“加入集群”按钮,粘贴“加入信息”,输入节点1的root密码,选择节点2的集群链路,最后点击“加入dc-zz”集群,如图44所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_03

图44. 节点2加入集群

第四步:在节点3上,使用节点1的集群密钥,加入集群

在节点3中,点击“加入集群”按钮,粘贴“加入信息”,输入节点1的root密码,选择节点3的集群链路,最后点击“加入dc-zz”集群,如图45所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_04

图45. 节点3加入集群

第五步:加入集群完成后需要刷新页面才能正常使用,全部加入完成后,就可以在一个节点上管理集群中所有的节点了,如图46所示。

单击“加入dc-zz”按钮之后后,集群加入过程将立即开始。节点加入集群后,其当前节点证书将被集群证书颁发机构(CA)签名的证书替换,这意味着当前会话将在几秒钟后停止工作。然后,可能需要强制重新加载Web 界面,并使用集群凭据重新登录。通俗点说,就是需要刷新下页面才能使用。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_05

图46. dc-zz集群正常使用

7.Ceph分布式存储

Ceph以其先进的去中心化设计,成为了分布式块存储领域的佼佼者,它可以将多台服务器中的硬盘聚合成一个集群,对外可提供文件存储、块存储、对象存储等多种形式,Ceph的另一个特点是数据采用多副本方式存储,避免由于单点故障造成的业务中断和数据丢失。

7.1.Ceph的注意事项

Proxmox VE提供了简单易用的Ceph 安装向导,选中集群中的一个节点,然后在菜单树中打开Ceph菜单区,就可以开始安装Ceph 了。

安装向导有多个步骤,每个步骤都需要执行成功才可以完成Ceph 安装。开始安装操作后,向导会自动从Proxmox VE 的Ceph 软件源下载软件包并完成安装。

完成第一个步骤后,还需要创建配置。对每个集群,生成的配置信息会自动分发到其他节点,所以该操作只需要执行一次即可。

创建的配置包括以下信息:

1)Public Network

为避免影响集群通信等其他对网络延迟敏感的服务,也为了提高Ceph 性能,强烈建议为Ceph 准备一个专门的独立网络,将Ceph流量隔离开来。

2) Cluster Network

进一步,还可以设置Cluster Network,将OSD复制和心跳流量隔离出来。这将有效降低public network的负载,并有效改善大规模Ceph集群的性能。

7.2.初始化Ceph安装和配置

每个节点都需要安装Ceph,每个节点的Ceph安装基本相同,这里只演示节点1的Ceph安装。

第一步:在节点1界面中,选择“Ceph→Install Ceph”,点击“Install Ceph”按钮,如图47所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_06

图47. Ceph安装向导

第二步:选择“设定→信息→Start octopus installation”,点击“Start octopus installation”按钮,如图48所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Ceph_07

图48. 选择15.2版本进行安装

第三步:选择“设定→安装”,输入“Y”之后,按回车键,自动安装Ceph,如图49所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_08

图49. 自动安装Ceph

第四步:安装完成之后,继续点击“下一步”按钮,安装成功之后,会提示安装成功的信息“installed ceph octopus successfully”,如图50所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_09

图50. Ceph安装成功

第五步:完成Ceph集群配置信息,包括公共网络IP、集群网络IP等信息,如图51所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_10

图51. Ceph集群配置

第六步:完成配置信息,Ceph安装成功,如图52所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_11

图52. Ceph安装成功

第七步:查看配置信息,如图53所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_12

图53. Ceph的配置信息

节点1的Ceph的配置信息如下所示:

[global]

     auth_client_required = cephx

     auth_cluster_required = cephx

     auth_service_required = cephx

     cluster_network = 10.129.253.31/24

     fsid = b7801b1e-2ef0-443f-9dce-00cbf90a6f45

     mon_allow_pool_delete = true

     mon_host = 10.129.254.31 10.129.254.33 10.129.254.32

     osd_pool_default_min_size = 2

     osd_pool_default_size = 3

     public_network = 10.129.254.31/24

[client]

     keyring = /etc/pve/priv/$cluster.$name.keyring

[mds]

     keyring = /var/lib/ceph/mds/ceph-$id/keyring

[mds.bve-node1]

     host = bve-node1

     mds_standby_for_name = pve

[mds.bve-node2]

     host = bve-node2

     mds_standby_for_name = pve

[mds.bve-node3]

     host = bve-node3

     mds standby for name = pve

[mon.bve-node1]

     public_addr = 10.129.254.31

[mon.bve-node2]

     public_addr = 10.129.254.32

[mon.bve-node3]

     public_addr = 10.129.254.33

7.3.配置Ceph监视器

Ceph安装完成之后,节点1出现“监视器”和“管理员”中,还需要把节点2和节点3添加进来。在本项目中,监视器节点和管理员节点信息如图54所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_13

图54. Ceph的配置信息

从图54中可以发现,监视器和管理网络使用的都是公共网络,没有使用集群网络。

第一步:在节点1的监视器中,创建另外两个节点的监视器,点击“创建”按钮,如图55所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_项目实战_14

图55. 创建节点2监视器

第二步:在节点1的管理员,创建另外两个节点的管理员,点击“创建”按钮,如图56所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_15

图56. 创建节点2管理员

 第三步:在Ceph监控界面查看节点的监视器和管理HA,选择“bve-node1→Ceph”,如图57所示。

Ceph的监控UI界面中,监视器和管理HA如图57中的红框所示:

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_16

图57. Ceph的监视器和管理HA界面

7.4.配置Ceph的OSD

由图3可知,各节点服务器支持八个盘位,其中sdc和sdd组成RAID1,作为系统盘使用,所以Ceph的OSD需要选择未做RAID的硬盘,每个节点的OSD只有6个。

本项目中,三个节点的Ceph的OSD磁盘配置信息如图58、图59所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_项目实战_17

图58. OSD配置信息-1

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Ceph_18

图59. OSD配置信息-2

第一步:创建节点1的OSD

从节点1中登录集群,在节点1中,选择“Ceph→OSD→创建:OSD”,在磁盘中,逐次添加sda、sdb、sde、sdf、sdg、sdh这6块没有被使用的磁盘,数据库磁盘和WAL磁盘保持默认即可,如图60所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_项目实战_19

图60. 创建OSD

注意,在本项目中,数据库磁盘(DB Disk)和WAL磁盘(WAL Disk)我都选择了默认方式,其实做一下硬盘规划会更好。

第二步:节点1的OSD状态,如图61所示.

从图61中可以看到,有2块SSD盘,有4块HDD盘,还可以针对OSD磁盘进行启动、重启和停止等操作。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_20

图61. 节点1的OSD状态

第三步:节点2的OSD状态,如图62所示。

从图62中可以看到,有2块SSD盘,有4块HDD盘,还可以针对OSD磁盘进行启动、重启和停止等操作。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_21

图62. 节点2的OSD状态

第四步:节点3的OSD状态,如图63所示.

从图63中可以看到,有2块SSD盘,有4块HDD盘,还可以针对OSD磁盘进行启动、重启和停止等操作。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_22

图63. 节点3的OSD状态

第五步:也可以在配置信息的Crush Map查看集群的OSD配置

选择任意节点登录集群,选择“bve-node1→Ceph→配置→Crush Map”,从Crush Map中可以查看集群的OSD配置信息如下所示:

Crush Map:

# begin crush map

tunable choose_local_tries 0

tunable choose_local_fallback_tries 0

tunable choose_total_tries 50

tunable chooseleaf_descend_once 1

tunable chooseleaf_vary_r 1

tunable chooseleaf_stable 1

tunable straw_calc_version 1

tunable allowed_bucket_algs 54

# devices

device 0 osd.0 class ssd

device 1 osd.1 class ssd

device 2 osd.2 class hdd

device 3 osd.3 class hdd

device 4 osd.4 class hdd

device 5 osd.5 class hdd

device 6 osd.6 class ssd

device 7 osd.7 class ssd

device 8 osd.8 class hdd

device 9 osd.9 class hdd

device 10 osd.10 class hdd

device 11 osd.11 class hdd

device 12 osd.12 class ssd

device 13 osd.13 class ssd

device 14 osd.14 class hdd

device 15 osd.15 class hdd

device 16 osd.16 class hdd

device 17 osd.17 class hdd

# types

type 0 osd

type 1 host

type 2 chassis

type 3 rack

type 4 row

type 5 pdu

type 6 pod

type 7 room

type 8 datacenter

type 9 zone

type 10 region

type 11 root

# buckets

host bve-node1 {

    id -3        # do not change unnecessarily

    id -4 class ssd        # do not change unnecessarily

    id -5 class hdd        # do not change unnecessarily

    # weight 32.603

    alg straw2

    hash 0    # rjenkins1

    item osd.0 weight 1.747

    item osd.1 weight 1.747

    item osd.2 weight 7.277

    item osd.3 weight 7.277

    item osd.4 weight 7.277

    item osd.5 weight 7.277

}

host bve-node2 {

    id -7        # do not change unnecessarily

    id -8 class ssd        # do not change unnecessarily

    id -9 class hdd        # do not change unnecessarily

    # weight 32.603

    alg straw2

    hash 0    # rjenkins1

    item osd.6 weight 1.747

    item osd.7 weight 1.747

    item osd.8 weight 7.277

    item osd.9 weight 7.277

    item osd.10 weight 7.277

    item osd.11 weight 7.277

}

host bve-node3 {

    id -10        # do not change unnecessarily

    id -11 class ssd        # do not change unnecessarily

    id -12 class hdd        # do not change unnecessarily

    # weight 32.603

    alg straw2

    hash 0    # rjenkins1

    item osd.12 weight 1.747

    item osd.13 weight 1.747

    item osd.14 weight 7.277

    item osd.15 weight 7.277

    item osd.16 weight 7.277

    item osd.17 weight 7.277

}

root default {

    id -1        # do not change unnecessarily

    id -2 class ssd        # do not change unnecessarily

    id -6 class hdd        # do not change unnecessarily

    # weight 97.808

    alg straw2

    hash 0    # rjenkins1

    item bve-node1 weight 32.603

    item bve-node2 weight 32.603

    item bve-node3 weight 32.603

}

# rules

rule replicated_rule {

    id 0

    type replicated

    min_size 1

    max_size 10

    step take default

    step chooseleaf firstn 0 type host

    step emit

}

rule rule-ssd {

    id 1

    type replicated

    min_size 1

    max_size 10

    step take default class ssd

    step chooseleaf firstn 0 type host

    step emit

}

rule rule-hdd {

    id 2

    type replicated

    min_size 1

    max_size 10

    step take default class hdd

    step chooseleaf firstn 0 type host

    step emit

}

# end crush map

7.5.配置CephFS

7.5.1.创建CephFS

选择“bve-node1→Ceph→CephFS→创建CephFS”,选择默认值创建CephFS,创建之后如图64所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Ceph_23

图64. 创建CephFS

7.5.2.元数据服务器配置

选择“bve-node1→Ceph→CephFS→元数据服务器→创建”,将节点1添加进来,如图65所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_24

图65. 添加元数据服务器节点

将节点1添加到元数据服务器之后,再用同样的方法将节点2、节点3添加到元数据服务器之中去,如图66所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_25

图66. 元数据服务器信息

添加好元数据服务器节点之后,可以在Ceph监控界面看到元数据服务器的监控信息,如图67所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Ceph_26

图67. 元数据服务器监控界面

7.6.配置Pools资源池

7.6.1.节点1配置Pools资源池

在Pools资源池配置之前,节点1的Pools界面如图68所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Ceph_27

图68. 节点1的Pools界面

第一步:创建ssd_storage存储

选择“bve-node1→Ceph→Pools→创建”,点击“创建”按钮,创建名称为“ssd_storage”的存储,创建之后如图69所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Ceph_28

图69. 创建ssd_storage存储

根据官方的文档,pg_num这个数值比较关键,如果不合适的话,Ceph会告警,官方建议:

若少于5个OSD, 设置pg_num为128。

5~10个OSD,设置pg_num为512。

10~50个OSD,设置pg_num为4096。

我每个节点有6个OSD,三个节点共18个OSD,pg_num这里我设置为64,也没啥告警。可能是目前数据量比较少吧。目前我对Ceph还不是吃得透,所以后续还会继续研究。

第二步:创建hdd_storage存储

选择“bve-node1→Ceph→Pools→创建”,点击“创建”按钮,创建名称为“hdd_storage”的存储,创建之后如图70所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_29

图70. 创建hdd_storage存储

第三步:创建完成之后,节点1左侧的存储菜单树中会出现这两个存储名称,如图71所示,正常情况下,就可以在ssd_storage、hdd_storage上安装虚拟机了。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_30

图71. ssd_storage与hdd_storage存储

第四步:节点1左侧的存储菜单树中各个存储状态查看,如图72、图73、图74所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_31

图72. cephfs存储状态

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_32

图73. local存储状态

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_33

图74. local-zfs存储状态

非常抱歉,“hdd_storage”和“ssd_storage”的存储状态图忘记截图,客户没有开放远程,无法提供截图,将就看吧。

7.6.2.节点2配置Pools资源池

节点2的Pools资源池配置与节点1的相似,不再赘述。

7.6.3.节点3配置Pools资源池

节点3的Pools资源池配置与节点1的相似,不再赘述。

7.7.Ceph磁盘管理

7.7.1.OSD磁盘下线   

如果想要把一个Ceph的OSD磁盘更换下来,先选中OSD磁盘,接着按“停止”按钮先停止OSD服务,接着再按“Out”按钮,这个时候OSD.10的状态如图75所示,就可以把该磁盘取出。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_34

图75. OSD磁盘卸载

7.7.2.OSD磁盘上线

OSD磁盘加载与OSD磁盘卸载过程刚好相反,先把磁盘插进服务器的盘位中,接着先按“in”按钮,等“in”图标变为绿色之后,再按“启动”按钮启动OSD服务,过几秒钟之后,OSD便会恢复正常,不再演示截图。

8.OSD磁盘故障排查案例

第一步:Ceph的监控界面发现OSD掉线,但是并没有产生告警

本项目在客户现场稳定运行了半年,基本上没有出现过故障,这次去客户现场巡查,在Ceph的WEB UI监控界面中,发现了Ceph有一个OSD磁盘掉线了,如图76所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_项目实战_35

图76. OSD磁盘掉线

在图76中,OSD总额是18(有18块OSD磁盘),“在线”且是“进入”状态的有17块OSD磁盘,“掉线”且是“输出”状态的有1块OSD磁盘。注意,这里的“进入”和“输出”翻译得不够好,翻译成“加载”和“卸载”还比这个要好一些。

令我不解的是,OSD磁盘掉线也算是一个不大不小的故障了吧,但是在Ceph的WEB UI监控界面的告警栏中,竟然没有任何告警提示!!!竟然没有任何告警提示!!!竟然没有任何告警提示!!!Ceph的自带监控系统缺乏必要的告警功能,不能满足生产级的项目需求,难怪一些大厂在使用Ceph搭建分布式存储时,都使用Zabbix进行监控。

第二步:进一步排查,确认掉线的OSD磁盘

进一步直接从Ceph的OSD去查找掉线的OSD磁盘,最后发现在节点2上,Ceph有一个OSD.10的磁盘掉线了,如图77和图78所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_项目实战_36

图77. WEB UI中的Ceph OSD状态

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_项目实战_37

图78. 命令行中的Ceph OSD状态

第三步:一顿猛如虎操作,然并卵

在Ceph后台一顿命令操作,包括OSD.10的重启、停止、启动、加载、卸载之后,OSD.10仍然无法上线,又再操作一顿命令,然并卵,直接到机房去看吧,看看哪块硬盘不亮了。

第四步:在机房现场找到故障硬盘

到机房之后,发现节点2服务器上有一块机械盘的灯不亮了,故障硬盘找到了,如图79所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_38

图79. 节点2的机械硬盘灯不亮了

第五步:物理拆卸进行检查

将硬盘拆卸下来进行检查,如图80、图81所示。经现场检查,发现硬盘的两个螺丝钉在松动,插槽里边是干净的,不知道是不是跟这螺丝松动有关。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_39

图80. 拆卸故障硬盘

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_40

图81. 检查故障硬盘

第六步:重新插入硬盘,对故障OSD执行“启动”、“输入”操作

将硬盘松动的那两个螺丝拧紧之后,重新将故障硬盘插入盘位中,然后执行“启动”、“输入”操作,然并卵,故障硬盘一直掉线中,如图82所示。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Ceph_41

图82. 故障硬盘无法上线

第七步:向服务器厂家报故障,厂家建议故障硬盘返厂检测

折腾一阵子之后,故障硬盘始终无法上线,只好打电话给服务器硬件厂家报故障,厂家反馈白牌服务器的硬盘容易出问题,建议把故障硬盘拆卸下来,返厂进行检测。

9.一些常用的Ceph/OSD命令

1)常见命令查看Ceph/OSD状态

root@pve-node1:~# ceph df

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_42

root@pve-node1:~# ceph osd df 

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_43

root@pve-node1:~# ceph status

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_44

root@pve-node1:~# ceph osd stat

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_45

root@pve-node1:~# ceph osd tree

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_超融合_46

2)常见命令lsblk查看节点所有块设备

root@pve-node1:~# lsblk

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Ceph_47

 从上图中可以发现,sdc和sdd盘不属于Ceph盘,它其实是系统盘,做了RAID1的。

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_48

root@pve-node2:~# lsblk

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Ceph_49

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_Proxmox VE_50

root@pve-node3:~# lsblk

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_OSD故障_51

Proxmox VE+Ceph超融合项目实战以及OSD故障排查(下)_项目实战_52