Ceph Deploy - Init

作者: Anoyi

2019.06.20 17:39*

▶ 机器列表

主机名 IP地址 配置 操作系统
ceph-admin 10.0.1.5 2C4G CentOS 7.5
ceph-node1 10.0.1.4 4C16G CentOS 7.5
ceph-node2 10.0.1.7 4C16G CentOS 7.5
ceph-node3 10.0.1.8 4C16G CentOS 7.5

▶ 准备工作

【ceph-node】安装 NTP

建议在 Ceph 节点上安装 NTP(特别是在 Ceph Monitor 节点上),以防止时钟漂移引起的问题。安装方法参考 CentOS 配置阿里云 NTP 服务

【ceph-node】安装 SSH server

使用命令 rpm -qa | grep ssh 查看是否已安装,
云服务器默认安装并启用,可忽略本步骤

# 安装
yum install openssh-server

# 启动
systemctl start sshd 

# 开机自动启动
systemctl enable sshd

【ceph-node】创建 CEPH DEPLOY 用户

用户名不能为 ceph,假设用户名为 anoyi,在每个 Ceph 节点执行

# 添加用户
sudo useradd -d /home/anoyi -m anoyi

# 设置密码
sudo passwd anoyi

# 确保 sudo 权限
echo "anoyi ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/anoyi
sudo chmod 0440 /etc/sudoers.d/anoyi

【ceph-admin】无密码 SSH

生成 SSH keys,不要使用 sudo 和 root 用户,passphrase 留空

ssh-keygen

复制 key 到每个 Ceph 节点

ssh-copy-id anoyi@ceph-node1
ssh-copy-id anoyi@ceph-node2
ssh-copy-id anoyi@ceph-node3

【所有机器】在 ONBOOT 上启用网络

进入目录 /etc/sysconfig/network-scripts,编辑名称类似 ifcfg-{iface} 的文件,设置 ONBOOT=yes

【所有机器】确保连通性

确保短主机名(hostname -s)能互相 ping 通,必要时需要人工配置 hosts

【所有机器】开放所需端口

Ceph Monitors 默认使用 6789 通信,Ceph OSDs 默认使用 6800:7300 通信。

如果使用 Firewalld,在 Monitors 主机上执行

sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent

在 OSDs 和 MDSs 主机上执行

sudo firewall-cmd --zone=public --add-service=ceph --permanent

【所有机器】SELINUX

禁用 SELINUX,编辑 /etc/selinux/config,设置 SELINUX=disabled

【ceph-admin】安装 Ceph-deploy

安装 EPEL

yum install epel-release -y

添加 ceph repo 源,添加文件 /etc/yum.repos.d/ceph.repo,内容如下

[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.huaweicloud.com/ceph/rpm-{ceph-stable-release}/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.huaweicloud.com/ceph/keys/release.asc

{ceph-stable-release} 为稳定版本名,详情 http://docs.ceph.com/docs/master/releases,此处选择版本 nautilus, 则执行

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

安装 Ceph-deploy

sudo yum install -y ceph-deploy

【ceph-node】TTY

待补充。。。

【ceph-admin】配置 ~/.ssh/config

Host ceph-node1
    Hostname ceph-node1
    User anoyi
Host ceph-node2
    Hostname ceph-node2
    User anoyi
Host ceph-node3
    Hostname ceph-node3
    User anoyi

作用,免去执行 ceph-deploy 命令时指定 --username anoyi

▶ 集群搭建(STORAGE CLUSTER)

首先,在 ceph-admin 节点,创建用于维护部署的配置文件和密钥的文件夹

mkdir anoyi-cluster
cd anoyi-cluster

如果部署过程遇到问题,即可清除部署过程产生的数据和配置

ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*

不要使用 sudo 命令或 root 用户执行 ceph-deploy 命令

1、初始化

ceph-deploy new ceph-node1

执行完毕后,会生成如下文件

ceph.conf         ceph.log          ceph.mon.keyring

2、配置 ceph.conf

如果有多个网络接口,在 [global] 下配置 public network

# 格式
public network = {ip-address}/{bits}

# 示例
public network = 10.1.2.0/24

如果是在 ipv6 环境,执行

echo ms bind ipv6 = true >> ceph.conf

3、安装 ceph 包

ceph-deploy install \
--repo-url https://mirrors.huaweicloud.com/ceph/rpm-nautilus/el7 \
--gpg-url https://mirrors.huaweicloud.com/ceph/keys/release.asc \
ceph-node1 ceph-node2 ceph-node3

4、部署初始 Monitor 并收集密钥

ceph-deploy mon create-initial

执行完毕后,会生成如下文件

ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.bootstrap-mgr.keyring  
ceph.client.admin.keyring
ceph.mon.keyring
ceph.bootstrap-osd.keyring

5、复制配置文件和管理密钥到 ceph-node

ceph-deploy admin ceph-node1 ceph-node2 ceph-node3

执行完毕后,使用 ceph CLI 时就无需每次指定 Monitor 地址和 ceph.client.admin.keyring

6、创建 manager daemon

ceph-deploy mgr create ceph-node1

7、添加 OSD

查看 ceph-node 的块设备信息,在 ceph-node1 上执行

lsblk

输出内容如下

NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0                 2:0    1    4K  0 disk
sda                 8:0    0   64G  0 disk
├─sda1              8:1    0    1G  0 part /boot
└─sda2              8:2    0   63G  0 part
  ├─rootvg-tmplv  253:0    0    2G  0 lvm  /tmp
  ├─rootvg-usrlv  253:1    0   10G  0 lvm  /usr
  ├─rootvg-swaplv 253:2    0    2G  0 lvm  [SWAP]
  ├─rootvg-optlv  253:3    0    2G  0 lvm  /opt
  ├─rootvg-homelv 253:4    0    1G  0 lvm  /home
  ├─rootvg-varlv  253:5    0    8G  0 lvm  /var
  └─rootvg-rootlv 253:6    0    8G  0 lvm  /
sdb                 8:16   0   32G  0 disk
└─sdb1              8:17   0   32G  0 part /mnt/resource
sr0                11:0    1 1024M  0 rom

使用 sdb 创建 OSD 前,需要清空分区

ceph-deploy disk zap ceph-node1 /dev/sdb

创建 OSD

ceph-deploy osd create --data /dev/sdb ceph-node1

接着,在 ceph-node2 和 ceph-node3 上做同样的操作

8、查看集群状态

ssh ceph-node1 sudo ceph -s

输出内容类似如下,即为正常

  cluster:
    id:     17333331-0d8d-4aa5-9a37-7f166d6e02d2
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum ceph-node1 (age 2h)
    mgr: ceph-node1(active, since 2h)
    osd: 3 osds: 3 up (since 2m), 3 in (since 2m)

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 90 GiB / 93 GiB avail
    pgs:

▶ 集群扩展

添加 Monitors

ceph-deploy mon add ceph-node2
ceph-deploy mon add ceph-node3

如果出现类似如下错误

[INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-node2.asok mon_status
[ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory

需要修改配置 ceph.conf 添加 public network

[global]
fsid = 17333331-0d8d-4aa5-9a37-7f166d6e02d2
mon_initial_members = ceph-node1
mon_host = 10.0.1.4
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

public network = 10.0.1.0/24

由于出错的原因,添加 Monitor 时,需要添加 --overwrite-conf 覆盖错误的配置

ceph-deploy --overwrite-conf mon add ceph-node2

一旦添加新的 Ceph Monitor,Ceph 将开始同步 Monitor 并选举 Leader,检查 Monitors 集群状态,在任意 ceph-node 上执行

ceph quorum_status --format json-pretty

添加 Managers

Ceph Manager 以 active/standby 模式运行,部署多个高可用

ceph-deploy mgr create ceph-node2 ceph-node3

查看状态,执行命令 ssh ceph-node1 sudo ceph -s

  cluster:
    id:     17333331-0d8d-4aa5-9a37-7f166d6e02d2
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 19m)
    mgr: ceph-node1(active, since 3h), standbys: ceph-node2, ceph-node3
    osd: 3 osds: 3 up (since 49m), 3 in (since 49m)

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 90 GiB / 93 GiB avail
    pgs:

▶ 对象数据存储与检索

创建测试文件

echo "hello ceph" > testfile.txt

创建 pool

ceph osd pool create mytest 128

此处 pg_num 设置为 128 ,参考 A PRESELECTION OF PG_NUM

存储文件

rados put test-object-1 testfile.txt --pool=mytest

查看 pool 中对象

rados -p mytest ls

查看对象位置

ceph osd map mytest test-object-1

输出结果

osdmap e46 pool 'mytest' (2) object 'test-object-1' -> pg 2.74dc35e2 (2.2) -> up ([1,0,2], p1) acting ([1,0,2], p1)

删除对象

rados rm test-object-1 --pool=mytest

删除 pool

ceph osd pool rm mytest

默认情况下,由于安全原因,会出现如下错误

Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool mytest.  If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.

解决方式一

ceph tell mon.\* injectargs '--mon-allow-pool-delete=true'
ceph osd pool rm mytest mytest --yes-i-really-really-mean-it

解决方式二,编辑 /etc/ceph/ceph.conf,添加如下内容

[mon]
mon allow pool delete = true

然后重启下服务,再执行删除操作

systemctl restart ceph-mon.target
ceph osd pool rm mytest mytest --yes-i-really-really-mean-it

▶ 相关文档

评论

评论

昵称
邮箱