在CentOS 8上安装Ceph 15(Octopus)集群
本教程将向我们展示如何在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组件 | 服务器规格 |
---|---|---|
cephadmin | ceph-ansible | 2gb ram,1vcpus |
cephmon01 | Ceph Monitor | 8GB内存,4vpcus |
cephmon02 | Ceph MON,MGR,MDS | 8GB内存,4vpcus |
cephmon03 | Ceph MON,MGR,MDS | 8GB内存,4vpcus |
cephosd01 | Ceph OSD | 16GB内存,8vpcus |
cephosd02 | Ceph OSD | 16gb ram,8vpcus |
cephosd03 | Ceph OSD | 16gb 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
- 清除集群