在CentOS 8上安装Ceph 15(Octopus)集群

时间:2020-02-23 14:31:03  来源:igfitidea点击:

本教程将向我们展示如何在CentOS 8 Linux服务器上安装和配置Ceph存储集群。 Ceph是一个开源的,可大规模扩展的简化存储解决方案,它实现了分布式对象存储集群,并为对象,块和文件级存储提供了接口。我们在CentOS 8上安装的Ceph 15(Octopus)存储集群将使用Ansible作为部署的自动化方法。

Ceph集群组件

Ceph存储集群的基本组成

  • 监视器:Ceph监视器(ceph-mon)维护集群状态的映射,包括监视器映射,管理器映射,OSD映射和CRUSH映射
  • Ceph OSD:Ceph OSD(对象存储守护程序," ceph-osd")通过检查其他Ceph OSD守护程序的心跳来存储数据,处理数据复制,恢复,重新平衡,并向Ceph监视器和管理器提供一些监视信息。通常至少需要3个Ceph OSD才能实现冗余和高可用性。
  • MDS:Ceph元数据服务器(MDS,ceph-mds)代表Ceph文件系统存储元数据(即Ceph块设备和Ceph对象存储不使用MDS)。 Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls,find等),而不会给Ceph存储集群带来巨大负担。
  • Ceph Managers:一个Ceph Manager守护进程(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。

我们在CentOS 8上的Ceph Storage Cluster安装基于以下系统设计。

服务器名称CEPH组件服务器规格
cephadminceph-ansible2gb ram,1vcpus
cephmon01Ceph Monitor8GB内存,4vpcus
cephmon02Ceph MON,MGR,MDS8GB内存,4vpcus
cephmon03Ceph MON,MGR,MDS8GB内存,4vpcus
cephosd01Ceph OSD16GB内存,8vpcus
cephosd02Ceph OSD16gb ram,8vpcus
cephosd03Ceph OSD16gb ram,8vpcus

cephadmin节点将用于在CentOS 8上部署Ceph存储集群。

准备所有可启动节点,OSD,MON,MGR,MDS的节点

我们需要按照以下几个步骤准备所有节点。

  • 在每台服务器上设置正确的主机名
  • 设置正确的时间并配置实时NTP服务
  • 将具有IP地址的主机名添加到DNS服务器或者更新所有服务器上的/etc/hosts

每个主机上的/etc/hosts内容示例。

sudo tee -a /etc/hosts<<EOF
192.168.10.10  cephadmin
192.168.10.11  cephmon01
192.168.10.12  cephmon02
192.168.10.13  cephmon03
192.168.10.14  cephosd01
192.168.10.15  cephosd02
192.168.10.16  cephosd03
EOF

完成上述任务后,请安装基本软件包:

sudo dnf update
sudo dnf install vim bash-completion tmux

升级后重新启动每个服务器。

sudo dnf -y update && sudo reboot

准备Ceph管理节点

登录到管理节点:

$ssh theitroad@localhost

添加EPEL存储库:

sudo dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf config-manager --set-enabled PowerTools

安装Git:

sudo yum install git vim bash-completion

克隆Ceph Ansible存储库:

git clone https://github.com/ceph/ceph-ansible.git

选择我们想使用的ceph-ansible分支。命令语法为:

git checkout $branch

病态切换到支持Ceph章鱼版本的stable-5.0。

cd ceph-ansible
git checkout stable-5.0

安装Python pip。

sudo yum install python3-pip

使用pip和提供的requirements.txt安装Ansible和其他所需的Python库:

sudo pip3 install -r requirements.txt

确保将/usr/local/bin路径添加到PATH。

$echo "PATH=$PATH:/usr/local/bin" >>~/.bashrc
$source ~/.bashrc

确认已安装Ansible版本。

$ansible --version
ansible 2.9.7
  config file = /root/ceph-ansible/ansible.cfg
  configured module search path = ['/root/ceph-ansible/library']
  ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]

将SSH公钥复制到所有节点

在Ceph管理节点上设置SSH密钥对,并将公共密钥复制到所有存储节点。

$ssh-keygen

-- Copy pubkey, example:
for host in cephmon01 cephmon02 cephmon03 cephosd01 cephosd02 cephosd03; do
 ssh-copy-id theitroad@localhost$host
done

在Admin节点上为所有存储节点创建ssh配置文件。

# This is my ssh config file
$vi ~/.ssh/config 
Host cephadmin
    Hostname 192.168.10.10
    User root
Host cephmon01
    Hostname 192.168.10.11
    User root
Host cephmon02
    Hostname 192.168.10.12
    User root
Host cephmon03
    Hostname 192.168.10.13
    User root
Host cephosd01
    Hostname 192.168.10.14
    User root
Host cephosd02
    Hostname 192.168.10.15
    User root
Host cephosd03
    Hostname 192.168.10.16
    User root
  • 将Hostname值替换为节点的IP地址,并将User值替换为我们安装为的远程用户。

不使用root进行SSH时

对于普通用户安装,请使节点上所有存储上的远程用户执行无密码sudo。

echo -e 'Defaults:user !requiretty\nusername ALL = (root) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/ceph
sudo chmod 440 /etc/sudoers.d/ceph

其中,将username替换为~/.ssh/config文件中配置的用户名。

配置Ansible库存和Playbook

在管理节点上创建Ceph集群组变量文件

cd ceph-ansible
cp group_vars/all.yml.sample  group_vars/all.yml
vim group_vars/all.yml

编辑文件以配置ceph集群

ceph_release_num: 15
cluster: ceph

# Inventory host group variables
mon_group_name: mons
osd_group_name: osds
rgw_group_name: rgws
mds_group_name: mdss
nfs_group_name: nfss
rbdmirror_group_name: rbdmirrors
client_group_name: clients
iscsi_gw_group_name: iscsigws
mgr_group_name: mgrs
rgwloadbalancer_group_name: rgwloadbalancers
grafana_server_group_name: grafana-server

# Firewalld/NTP
configure_firewall: True
ntp_service_enabled: true
ntp_daemon_type: chronyd

# Ceph packages
ceph_origin: repository
ceph_repository: community
ceph_repository_type: cdn
ceph_stable_release: octopus

# Interface options
monitor_interface: eth0
radosgw_interface: eth0

# DASHBOARD
dashboard_enabled: True
dashboard_protocol: http
dashboard_admin_user: admin
dashboard_admin_password: theitroad@localhost

grafana_admin_user: admin
grafana_admin_password: theitroad@localhost

如果群集和公共网络有单独的网络,请相应地定义它们。

public_network: "192.168.3.0/24"
cluster_network: "192.168.4.0/24"

根据需要配置其他参数。

设置OSD设备。

我有三个OSD节点,每个节点都有一个原始块设备/dev/sdb

$lsblk 
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda       8:0    0 76.3G  0 disk 
├─sda1    8:1    0 76.2G  0 part /
├─sda14   8:14   0    1M  0 part 
└─sda15   8:15   0   64M  0 part /boot/efi
sdb       8:16   0   50G  0 disk 
sr0      11:0    1 1024M  0 rom

列出要使用的OSD原始块设备。

$cp group_vars/osds.yml.sample group_vars/osds.yml
$vim group_vars/osds.yml
copy_admin_key: true
devices:
  - /dev/sdb

创建一个新的ceph节点ansible库存:

vim hosts

正确设置库存文件。以下是我的库存。修改列表组的方式是我们希望在群集节点中安装服务的方式。

# Ceph admin user for SSH and Sudo
[all:vars]
ansible_ssh_user=root
ansible_become=true
ansible_become_method=sudo
ansible_become_user=root

# Ceph Monitor Nodes
[mons]
cephmon01
cephmon02
cephmon03

# MDS Nodes
[mdss]
cephmon01
cephmon02
cephmon03

# RGW
[rgws]
cephmon01
cephmon02
cephmon03

# Manager Daemon Nodes
[mgrs]
cephmon01
cephmon02
cephmon03

# set OSD (Object Storage Daemon) Node
[osds]
cephosd01
cephosd02
cephosd03

# Grafana server
[grafana-server]
cephosd01

在CentOS 8上部署Ceph 15(Octopus)集群

通过将示例剧本复制到ceph-ansible项目的根目录site.yml.sample来创建Playbook文件。

cp site.yml.sample site.yml

运行Playbook。

ansible-playbook -i hosts site.yml

如果安装成功,则运行状况检查应返回"确定"。

...
TASK [show ceph status for cluster ceph] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** *****
Sunday 10 Jan 2017  20:12:33 +0200 (0:00:00.721)       0:09:00.180 ** **** **** ** 
ok: [cephmon01 -> cephmon01] => 
  msg:
  - '  cluster:'
  - '    id:     b64fac77-df30-4def-8e3c-1935ef9f0ef3'
  - '    health: HEALTH_OK'
  - ' '
  - '  services:'
  - '    mon: 3 daemons, quorum ceph-mon-02,ceph-mon-03,ceph-mon-01 (age 6m)'
  - '    mgr: ceph-mon-03(active, since 38s), standbys: ceph-mon-02, ceph-mon-01'
  - '    mds: cephfs:1 {0=ceph-mon-02=up:active} 2 up:standby'
  - '    osd: 3 osds: 3 up (since 4m), 3 in (since 4m)'
  - '    rgw: 3 daemons active (ceph-mon-01.rgw0, ceph-mon-02.rgw0, ceph-mon-03.rgw0)'
  - ' '
  - '  task status:'
  - '    scrub status:'
  - '        mds.ceph-mon-02: idle'
  - ' '
  - '  data:'
  - '    pools:   7 pools, 132 pgs'
  - '    objects: 215 objects, 9.9 KiB'
  - '    usage:   3.0 GiB used, 147 GiB/150 GiB avail'
  - '    pgs:     0.758% pgs not active'
  - '             131 active+clean'
  - '             1   peering'
  - ' '
  - '  io:'
  - '    client:   3.5 KiB/s rd, 402 B/s wr, 3 op/s rd, 0 op/s wr'
  - ' '
....

这是我的安装输出完成后的屏幕截图。

在CentOS 8上验证Ceph集群安装

登录到集群节点之一并进行一些验证,以确认Ceph Storage Cluster在CentOS 8上的安装成功。

$ssh theitroad@localhost
# ceph -s
  cluster:
    id:     b64fac77-df30-4def-8e3c-1935ef9f0ef3
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-mon-02,ceph-mon-03,ceph-mon-01 (age 22m)
    mgr: ceph-mon-03(active, since 16m), standbys: ceph-mon-02, ceph-mon-01
    mds: cephfs:1 {0=ceph-mon-02=up:active} 2 up:standby
    osd: 3 osds: 3 up (since 20m), 3 in (since 20m)
    rgw: 3 daemons active (ceph-mon-01.rgw0, ceph-mon-02.rgw0, ceph-mon-03.rgw0)
 
  task status:
    scrub status:
        mds.ceph-mon-02: idle
 
  data:
    pools:   7 pools, 121 pgs
    objects: 215 objects, 11 KiB
    usage:   3.1 GiB used, 147 GiB/150 GiB avail
    pgs:     121 active+clean

我们可以在活动的MGR节点上访问Ceph仪表板。

使用在group_vars/all.yml文件中配置的凭据登录。对我来说,这些是:

dashboard_admin_user: admin
dashboard_admin_password: theitroad@localhost

然后,我们可以在群集上创建具有不同访问级别的更多用户。

可以在为grafana服务器组名设置的节点上访问Grafana仪表板。默认情况下,该服务应在端口3000上进行侦听。

使用配置为访问管理控制台的访问凭据。

grafana_admin_user: admin
grafana_admin_password: theitroad@localhost

第2天的运作

ceph-ansible在" infrastructure-playbooks"目录中提供了一组剧本,以便执行一些基本的Day-2操作。

  • 添加osd
  • 缩小osd
  • 清除集群