分布式存储Ceph集群搭建

Posted by     "Pyker" on Monday, November 16, 2020

TOC

1. 环境介绍

主机名 IP 角色 描述
ceph-70 10.80.75.70 控制机 管理节点
ceph-71 10.80.75.71 mon、mgr、osd 监控、管理、存储节点
ceph-72 10.80.75.72 osd 存储节点
ceph-73 10.80.75.73 osd 存储节点
ceph-client 10.80.73.94 client 挂载ceph存储的客户端

注意⚠️:ceph-71、ceph-72、ceph-73主机上都挂载了至少1快用于做osd的磁盘,该磁盘无需格式化、分区等操作。只要系统能识别到即可。这里识别到的名称为/dev/sdc。在3.11步骤需要使用。

2. 环境准备

以下操作无特殊说明5台机器上都要操作,这里只拿ceph-70演示

以下所有ceph-deploy的命令都是在ceph-70上操作的

# 修改主机名
$ hostname ceph-70
$ echo "ceph-70" > /etc/hostname

# 修改hosts解析
$ cat >> /etc/hosts << EOF
10.80.75.70 ceph-70
10.80.75.71 ceph-71
10.80.75.72 ceph-72
10.80.75.73 ceph-73
10.80.73.94 ceph-client
EOF

# 时间同步
$ ntpdate ntp1.aliyun.com

# 创建一个ceph用户
$ useradd user_00
$ passwd user_00

# 安装依赖包
$ yum install -y epel-release python-setuptools yum-plugin-priorities

# 无密码sudo
$ visudo
添加 user_00    ALL=(ALL)   NOPASSWD:ALL

# 准备密钥(只在ceph-70上操作)
$ su - user_00
$ ssh-keygen -t rsa

# 复制密钥到其他节点(只在ceph-70上操作)
$ ssh-copy-id user_00@ceph-71
$ ssh-copy-id user_00@ceph-72
$ ssh-copy-id user_00@ceph-73
$ ssh-copy-id user_00@ceph-client

# 配置传递给ceph-deploy的ssh用户名,也可以命令行加--username user_00代替。(只在ceph-70上操作)
$ cat >> ~/.ssh/config << EOF
cat ~/.ssh/config
Host ceph-71
    Hostname ceph-71
    User user_00
Host ceph-72
    Hostname ceph-72
    User user_00
Host ceph-72
    Hostname ceph-72
    User user_00
Host ceph-client
    Hostname ceph-client
    User user_00    
EOF    

3. 安装ceph集群

以下操作无特殊说明都是在ceph-70主机上操作

3.1 配置yum源

$ cat > /etc/yum.repos.d/ceph.repo << EOF
[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=1
priority=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
priority=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
EOF

3.2 防止ceph-deploy安装时覆盖原源

$ cat >> /etc/profile << EOF
export CEPH_DEPLOY_REPO_URL=http://mirrors.aliyun.com/ceph/rpm-luminous/el7
export CEPH_DEPLOY_GPG_URL=http://mirrors.aliyun.com/ceph/keys/release.asc
EOF
$ source /etc/profile
# 除了该方法还可以在ceph-deploy install 时指定 --repo-url参数,如步骤3.7。

3.3 安装ceph-deploy

$ yum update -y && yum install -y ceph-deploy

3.4 创建ceph-deploy工作目录

$ su - user_00
$ mkdir ~/ceph-cluster
$ cd ~/ceph-cluster

注意:⚠️不要使用sudo来运行ceph-deploy命令

# 任何时候出现安装错误,则可以执行以下的命令以清空Ceph的package以及擦除它的数据和配置:
$ ceph-deploy purge ceph-71 ceph-72 ceph-73
$ ceph-deploy purgedata ceph-71 ceph-72 ceph-73
$ ceph-deploy forgetkeys
$ rm -rf ceph.*

3.5 创建一个集群

# 若有多个节点,空格分隔
$ ceph-deploy new ceph-71
> 此时~/ceph-cluster目录下会生成配置文件、密钥文件和日志文件

3.6 修改配置文件

# 根据情况修改
$ vi ~/ceph-cluster/ceph.conf
[global]
fsid = 1260148c-a8bd-4d4e-ba31-bb694573121e
mon_initial_members = ceph-71
mon_host = 10.80.75.71
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 3
osd_pool_default_min_size = 2
public_network = 10.80.75.0/24

3.7 为其他节点安装ceph包

$ ceph-deploy install ceph-71 ceph-72 ceph-73
# 或者
$ ceph-deploy install ceph-71 ceph-72 ceph-73 --repo-url http://mirrors.aliyun.com/ceph/rpm-luminous/el7

3.8 部署ceph-mon并生成keyring

$ ceph-deploy mon create-initial
> 此时ceph-cluster目录下会出现多个组件的keyring文件

3.9 推送配置文件到所有ceph节点

$ ceph-deploy admin ceph-71 ceph-72 ceph-73

3.10 创建ceph-mgr管理节点

# 部署一个mgr,(Luminous版本开始要求需要)
$ ceph-deploy mgr create ceph-71
$ cat >> ~/ceph-cluster/ceph.conf <<EOF
[mgr]
mgr_modules = dashboard
EOF
$ ceph-deploy --overwrite-conf config push ceph-71 ceph-72 ceph-73
# 开启dashboard,默认7000端口 (ceph-71主机上操作)
$ ceph config-key put mgr/dashboard/server_addr 10.80.75.71 
$ ceph config-key put mgr/dashboard/server_port 7000

3.11 初始化添加3个osd

$ ceph-deploy osd create ceph-71 --data /dev/sdc
$ ceph-deploy osd create ceph-72 --data /dev/sdc
$ ceph-deploy osd create ceph-73 --data /dev/sdc

3.12 验证集群状态信息

$ ssh ceph-71 sudo ceph -s
  cluster:
    id:     1260148c-a8bd-4d4e-ba31-bb694573121e
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum ceph-71
    mgr: ceph-71(active)
    osd: 3 osds: 3 up, 3 in

4. 扩展ceph节点

4.1 新增节点组件

mds:在原有基础上新增一个ceph-mds组件,元数据服务。

mon:在原有基础上新增两个ceph-mon组件,为ceph-mon提供高可用。

mgr:在原有基础上新增两个ceph-mgr管理组件,为ceph-mgr提供高可用,官方建议只部署2个。

rgw:在原有基础上增加一个ceph-rgw组件,提供对象存储功能。

最终集群环境组件为:3个mon、1个mds、3个mgr、1个rgw、3个osd

4.2 修改配置文件

以下操作无特殊说明都是在ceph-70主机上操作

# 修改mon节点信息
$ vi ~/ceph-cluster/ceph.conf
[global]
fsid = 1260148c-a8bd-4d4e-ba31-bb694573121e
mon_initial_members = ceph-71,ceph-72,ceph-73
mon_host = 10.80.75.71,10.80.75.72,10.80.75.73
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 3
osd_pool_default_min_size = 2
public_network = 10.80.75.0/24

[mgr]
mgr_modules = dashboard

# 推送新配置至所有ceph节点
$ ceph-deploy --overwrite-conf config push ceph-71 ceph-72 ceph-73

4.2 新增一个metadata节点

如果要使用CephFS,就必须至少添加一个metadata server

# 这里将mds放在了ceph-71节点上
$ ceph-deploy mds create ceph-71

4.3 新增两个mon节点

为达到High Availability的效果,官方建议部署3个mon节点

$ ceph-deploy mon add ceph-72
$ ceph-deploy mon add ceph-73

4.4 查看法定ceph节点状态信息

在添加新的monitor之后,ceph会开始同步这些monitor。

$ ssh ceph-71 sudo ceph quorum_status --format json-pretty
{
    "election_epoch": 12,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "ceph-71",
        "ceph-72",
        "ceph-73"
    ],
    "quorum_leader_name": "ceph-71",
    "monmap": {
        "epoch": 3,
        "fsid": "1260148c-a8bd-4d4e-ba31-bb694573121e",
        "modified": "2020-11-10 18:21:55.151155",
        "created": "2020-11-10 17:57:40.425611",
        "features": {
            "persistent": [
                "kraken",
                "luminous"
            ],
            "optional": []
        },
        "mons": [
            {
                "rank": 0,
                "name": "ceph-71",
                "addr": "10.80.75.71:6789/0",
                "public_addr": "10.80.75.71:6789/0"
            },
            {
                "rank": 1,
                "name": "ceph-72",
                "addr": "10.80.75.72:6789/0",
                "public_addr": "10.80.75.72:6789/0"
            },
            {
                "rank": 2,
                "name": "ceph-73",
                "addr": "10.80.75.73:6789/0",
                "public_addr": "10.80.75.73:6789/0"
            }
        ]
    }
}

小提示:当给Ceph安装多个monitor之后,应该确保每个monitor节点的时间同步。

4.5 新增两个mgr节点

Ceph Manager daemon工作在active/standby的模式。添加多manager,可以保证如果一个manager或host宕掉,另一个manager可以无缝接管过来。可以通过ceph -s命令看到active和standby的manager。

$ ceph-deploy mgr create ceph-72 ceph-73

4.6 新增一个rgw节点

要部署Ceph Object Gateway组件,就必须部署一个RGW实例。默认端口7480

$ ceph-deploy rgw create ceph-71

至此ceph集群扩展完成!可以通过ceph -s查看集群。也可以用3.10步骤的管理页面打开。

$ ssh ceph-71 sudo ceph -s
  cluster:
    id:     1260148c-a8bd-4d4e-ba31-bb694573121e
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph-71,ceph-72,ceph-73
    mgr: ceph-71(active), standbys: ceph-72, ceph-73
    osd: 3 osds: 3 up, 3 in
    rgw: 2 daemons active

  data:
    pools:   5 pools, 40 pgs
    objects: 267 objects, 136MiB
    usage:   4.63GiB used, 85.4GiB / 90.0GiB avail
    pgs:     40 active+clean

  io:
    client:   0B/s rd, 0op/s rd, 0op/s wr

5. 客户端使用ceph rbd存储

5.1 给客户端安装ceph

$ ceph-deploy install ceph-client 

5.2 推送配置文件到客户端

将Ceph配置文件和ceph.client.admin.keyring拷贝到ceph-client上,并且授予读权限。

$ ceph-deploy admin ceph-client
$ ssh ceph-client sudo chmod +r /etc/ceph/ceph.client.admin.keyring

5.3 创建PG Pool

$ ceph osd pool create mypool 8 8   # 8是该pool的PG的数量,下面在说PG数量原则。

5.4 初始化该PG Pool可用于rbd

$ rbd pool init mypool

5.5 创建一个块设备

# 创建一个rbd卷
$ rbd create foo --pool mypool --size 4096 --image-feature layering -m 10.80.75.71 -k /etc/ceph/ceph.client.admin.keyring

# 查看所创建的rbd卷
$ rbd info foo -p mypool

5.6 映射rbd卷到块设备

以下操作均在ceph-client上执行

# rbd卷映射到系统块设备上, /dev/rbd0格式
$ rbd map mypool/foo --name client.admin -m 10.80.75.71 -k /etc/ceph/ceph.client.admin.keyring

# 格式化/dev/rbd0块设备
$ mkfs.ext4 /dev/rbd0

# 挂载块设备
$ mkdir /mnt/rbdfile
$ mount /dev/rbd0 /mnt/rbdfile

至此客户端挂载块设备rbd完成! 5.6 步骤可以在多台客户端执行,从而挂载同一个rbd,达到共享数据。

注意:mkfs.ext4 格式化只在第一次挂载的时候执行。后续不需要执行,防止数据丢失。

「真诚赞赏,手留余香」

云原生与运维

真诚赞赏,手留余香

使用微信扫描二维码完成支付


comments powered by Disqus