阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ansible部署RHCS存储集群详解

264次阅读
没有评论

共计 10153 个字符,预计需要花费 26 分钟才能阅读完成。

一 前期准备

1.1 前置条件

  • 至少有三个不同的主机运行 monitor (MON)节点;
  • 至少三个直接存储 (非外部 SAN 硬件) 的 OSD 节点主;
  • 至少两个不同的 manager (MGR)节点;
  • 如果使用 CephFS,则至少有两个完全相同配置的 MDS 节点;
  • 如果使用 Ceph 对象网关,则至少有两个不同的 RADOSGW 节点。
  • 一个部署节点,可以使用 ceph-ansible 包中的 Ansible 剧本来部署和配置集群。
提示:Red Hat Ceph 存储还支持在 Red Hat OpenStack 平台计算节点上部署 OSDs、MONs、RGWs,但不支持部署 mon 和 osd。
红帽 Ceph 存储,默认配置将所有流量放在一个网络上。生产环境中建议公共通信和集群通信配置单独的网络。公共网络用于客户端通信和与 mon 的通信。集群网络用于 OSD 心跳、复制、回填和恢复流量。

1.2 准备工作

  • 具备相同操作系统的集群节点,建议 RHEL7;
  • 配置软件仓库(CentOS epel 源、Ubuntu apt 源、RedHat 使用 subscription-manager 命令注册系统);
  • 所有节点配置网络及 NTP 时间同步;
  • 关闭 selinux 与防火墙,或放通所有相关流量和端口;
  • 在部署节点安装 ansbile;
  • 添加 hosts,并确保能正确解析到所有主机;
  • 配置部署节点使用 Ansible 任务的用户到其他所有节点可以 ssh 免密登录;
  • 验证部署节点能够在集群节点上能正常运行 ansible 任务。

1.3 其他注意事项

  1. OSD 磁盘不建议使用 RAID,Ceph 使用复制或纠删码来保护数据
  2. 在生产环境部署 Ceph 集群,为便于管理,OSD 主机应尽量使用统一的硬件。尽可能配置数量、大小和名称都相同的磁盘,有助于确保性能一致,并且简化故障排除;
  3. 需要确认每个 OSD 主机提供的 OSD 的数量。密度较小的存储集群意味着 osd 守护进程分布到更多的主机上,分发工作负载。密度较高的存储意味着重平衡和数据恢复需要更高的流量

附一:组件端口说明

Monitor
6789/TCP:Communication within the Ceph cluster
Manager
7000/TCP:Communication with the Ceph Manager dashboard
8003/TCP:Communication with the Ceph Manager RESTful API via HTTPS
9283/TCP:Communication with the Ceph Manager Prometheus plug-in
OSD
6800-7300/TCP:Each OSD uses three ports in this range: one for communicating with clients and monitors over the public network; one for sending data to other OSDs over a cluster network,or over the public network if the former does not exist; and another for exchanging heartbeat packets over a cluster network or over the public network if the former does not exists.
RADOS Gateway
7480/TCP:RADOS Gateway uses port 7480/TCP,but you can change it, for example to port 80/TCP,or to port 443/TCP if using the SSL/TLS service.

二 部署相关知识点

2.1 Ansible 介绍

略,具体 Ansible 操作见本博客 Ansible 文章。

2.2 Ansible 部署 Ceph 相关 yml

/usr/share/ceph-ansible/group_vars/all.yml:所有节点相关 yml 配置;
/usr/share/ceph-ansible/group_vars/osds.yml:所有 OSD 节点的 yml 配置;
/usr/share/ceph-ansible/group_vars/client.yml:客户端节点的 yml 配置。
/usr/share/ceph-ansible:运行 Ansible 部署的主目录。

2.3 yml 主要相关参数

  • all.yml 参数
变量
含义
fetch_directory
~/ceph-ansible-keys
用于将身份验证密钥复制到集群节点的临时目录的位置。
ceph_origin
repository
Ceph 来源,repository 表示使用包存储库
ceph_repository
rhcs
用于安装 Red Hat 的存储库 Ceph 存储。rhcs 使用官方红帽 Ceph 存储包。
ceph_repository_type
cdn or iso
rhcs 的安装源,CDN 或本地 ISO 映像。
ceph_rhcs_iso_path
path to iso
如果使用 iso 存储库类型,则指向 Red Hat Ceph 存储 iso 的路径。
ceph_rhcs_version
3
Red Hat Ceph 安装的版本。
monitor_interface
network interface
Monitor 用于侦听的网络接口。
public_network
address and netmask
集群的公共网络的子网,如 192.168.122.0/24。
cluster_network
address and netmask
集群专用网络的子网。默认设置为 public_network 的值。
journal_size
size in MB
分配给 OSD 日志的大小。应该是预期的两倍。在大多数情况下不应小于 5120 MB。
提示:可以在 group_vars/all.yml 中将 common_single_host_mode 这个特殊参数设置为 true。用于部署一个单节点、集所有功能于一身的 Ceph 集群作为测试学习使用。
  • osds.ym
变量
含义
osd_scenario
collocated
or non-collocated
OSD 日志部署类型。
devices
用于 OSDs 的设备的名称列表。
用于并行 OSD 数据和日志分区或非并行 OSD 数据分区的设备。
dedicated_devices
用于非并列 OSD 期刊的设备名称列表。
OSD 日志设备。
并置方案:假定所有 OSD 主机具有相同的硬件并使用相同的设备名称。
group_vars/osds.yml 配置示例:
osd_scenario: “collocated”
devices:
– /dev/sdb
– /dev/sdc
– /dev/sdd
非并置方案:将不同的存储设备用于 OSD 数据和 OSD 日志。
group_vars/osds.yml 配置示例:
osd_scenario: “non-collocated”
devices:
– /dev/sdb
– /dev/sdc
dedicated_devices:
– /dev/sdd
– /dev/sde

2.4 客户端相关命令

命令
含义
ceph -s
查看集群状态。
ceph -w
动态观察集群更改。
ceph df
查看集群剩余空间状态。
ceph osd df
查看 OSD 使用情况。
ceph auth get-or-create
创建用户。
aeph auth list
查看用户列表。
ceph auth caps
查看用户权限。
ceph auth del
删除用户。

2.5 对象 object 相关命令

命令
含义
rados -p pool_name ls
查看一个 pool 中的 object。
rados -p pool_name put object_name file_path
上传一个文件作为对象。
rados -p pool_name get object_name file_path
以文件的形式检索 object。
rados -p pool_name stat object_name
显示 object 的统计数据。
rados -p pool_name rm object_name
删除一个 object。

三 正式部署

节点
类型
IP
备注
servera
部署节点
172.25.250.10
 
serverc
mons
mgrs
osds
172.25.250.12
 
serverd
mons
mgrs
osds
172.25.250.13
 
servere
mons
mgrs

osds

172.25.250.14
 

3.1 部署节点配置主机名

[root@servera ~]# vi /etc/hosts
172.25.250.10 servera
172.25.250.12 serverc
172.25.250.13 serverd
172.25.250.14 servere
提示:主机名应该能正确解析主机名,若管理节点同时也是一个 Ceph 节点,也要确认能正确解析自己的主机名和 IP 地址。本实验环境此 3.1 步骤可省略。

3.2 创建相关用户

[root@servera ~]# useradd student
[root@servera ~]# echo student | passwd –stdin student  #创建非 root 的管理用户
[root@servera ~]# for i in {a..e}; do echo “====server${i}====”;ssh root@server${i} ‘useradd -d /home/student -m student; echo “student” | passwd –stdin student’; done                #所有 OSD server 节点创建 student 用户
[root@servera ~]# for i in {a..e}; do echo “====server${i}====”;ssh root@server${i} ‘useradd -d /home/ceph -m ceph; echo “redhat” | passwd –stdin ceph’; done
[root@servera ~]# for i in {a..e}; do echo “====server${i}====”;ssh root@server${i} ‘echo “student ALL = (root) NOPASSWD:ALL” > /etc/sudoers’; done
[root@servera ~]# for i in {a..e}; do echo “====server${i}====”;ssh root@server${i} ‘chmod 0440 /etc/sudoers’; done

3.3 配置部署节点免密钥

[root@servera ~]# su - student
[student@servera ~]$ ssh-keygen -f ~/.ssh/id_rsa -N ''[student@servera ~]$ for i in {a..e}; do echo"====server${i}====";ssh-copy-id student@server$i;ssh-copy-id ceph@server$i; done
 

3.4 配置 Ansible Inventory

[student@servera ~]$ sudo vi /usr/share/ceph-ansible/ansible.cfg
log_path = /tmp/ansible.log		        #修改日志路径为 student 用户可写入的 /tmp 路径
deprecation_warnings = False		#禁用在 ansible-playbook 输出结果相关必须要警告
提示:Ansible 默认使用 /etc/ansible/hosts 作为 Inventory 文件,也可使用 - f 参数手动指定其他文件。

[student@servera ~]$ sudo vi /etc/ansible/hosts
[mons]
server[c:e]

[mgrs]
server[c:e]
[student@servera ~]$ ansible mons -m ping  #测试 mons 组节点通信
[student@servera ~]$ ansible mgrs -m ping  #测试 mgrs 组节点通信
[student@servera ~]$ ansible mons -m command -a id #通过命令测试 mons 组节点
[student@servera ~]$ ansible mgrs -m command -a id #通过命令测试 mgrs 组节点

提示:ceph ansible playbook 为每种 Ceph 节点类型使用一个主机组:monitors 节点使用 mons, osds 节点使用 osds,managers 节点使用 mgrs,MDSs 使用 mdss, Ceph 客户端使用 clients, RADOS 网关节点使用 raws, iSCSI 网关使用 iscsi-gws,启用 RBD mirroring 使用 rd-mirror。
因此需要需要根据 Ceph 主机的角色将它们在对应的 Inventory 文件中配置为对应的组。

3.5 创建 site.yml

[student@servera ~]$ cd /usr/share/ceph-ansible/
[student@servera ceph-ansible]$ sudo cp site.yml.sample site.yml
[student@servera ceph-ansible]$ sudo vi site.yml
#……
– hosts: osds
  gather_facts: false
  become: True
  serial: 1                  #在 osd(80 行左右)添加此行

提示:添加 serial: 1 添,会减慢了 OSD 的部署,但是使我们更有可能预测哪个 OSD 编号被分配给哪个 OSD 主机,以便将来的实验室练习。

3.6 创建 all.yml

[student@servera ~]$ cd /usr/share/ceph-ansible/group_vars/
[student@servera group_vars]$ sudo cp all.yml.sample all.yml
[student@servera group_vars]$ sudo vi all.yml

dummy:
ntp_service_enabled: false   #本实验采用 chrony 进行时钟同步
ceph_origin: repository
ceph_repository: rhcs
ceph_rhcs_version: “3”
ceph_repository_type: cdn
rbd_cache: “true”    #开启 RBD 回写缓存
rbd_cache_writethrough_until_flush: “false” #在切换回写之前,不从写透开始。
rbd_client_directories: false  #不要创建客户机目录(它们应该已经存在)。
monitor_interface: eth0
journal_size: 1024    #本环境存储设备很小,OSD 日志比通常建议的要小
public_network: 172.25.250.0/24
cluster_network: “{{public_network}}”
ceph_conf_overrides:
  global:
    mon_osd_allow_primary_affinity: 1
    mon_clock_drift_allowed: 0.5  #允许 MON 时钟间隔最多 0.5 秒
    osd_pool_default_size: 2
    osd_pool_default_min_size: 1  #降低存储池复制大小的默认设置
    mon_pg_warn_min_per_osd: 0  #见提示一
    mon_pg_warn_max_per_osd: 0  #见提示二
    mon_pg_warn_max_object_skew: 0  #见提示三
  client:
    rbd_default_features: 1   #仅为以后的练习启用一组特定的客户机功能

提示一:根据每个 OSD 的 pg 数量关闭集群健康警告。通常,第一个变量被设置为 30,如果 OSD 中的每个“in”平均少于 30 个 pg,集群就会发出警告。
提示二:此变量默认值为 300,如果 OSD 中的每个“in”平均超过 300 个 pg,集群就会发出警告,在本实验的小集群中可能没有很多 pg,因此采用禁用。
提示三:根据某个池中对象的数量大于集群中一组池中对象的平均数量,关闭集群健康警告。同样,我们有一个非常小的集群,这避免了通常指示我们需要调优集群的额外警告。

3.7 正式部署 Ceph 集群

[student@servera ~]$ cd /usr/share/ceph-ansible/
[student@servera ceph-ansible]$ ansible-playbook site.yml
Ansible 部署 RHCS 存储集群详解
提示:若部署成功,则对于每个 MON 节点,前面的命令输出应该显示 failed=0。在 playbook 执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。

3.8 确认验证 Ceph 集群

[student@servera ~]$ ssh ceph@serverc ceph -s
Ansible 部署 RHCS 存储集群详解
[student@servera ~]$ ssh ceph@serverc cat /etc/ceph/ceph.conf
Ansible 部署 RHCS 存储集群详解
[student@servera ~]$ ssh ceph@serverc ps aux | grep ceph-mon
Ansible 部署 RHCS 存储集群详解

3.9 创建 osds.yml

[student@servera ~]$ cd /usr/share/ceph-ansible/group_vars/
[student@servera group_vars]$ sudo cp osds.yml.sample osds.yml
[student@servera group_vars]$ sudo vi osds.yml

dummy:
osd_scenario: “collocated”   #OSD 使用并列的 OSD 形式
devices:
  – /dev/vdb    #使用 /dev/vdb 作为后端存储设备

3.10 配置 Ansible Inventory

[student@servera ~]$ sudo vi /etc/ansible/hosts
[mons]
server[c:e]

[mgrs]
server[c:e]

[osds]
server[c:e]     #追加 osds 组

3.11 正式部署 OSD 节点

[student@servera ~]$ cd /usr/share/ceph-ansible/
[student@servera ceph-ansible]$ ansible-playbook site.yml
Ansible 部署 RHCS 存储集群详解
提示:若部署成功,则对于每个 OSD 节点,前面的命令输出应该显示 failed=0。在 playbook 执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。

3.12 确认验证 OSD 节点

[student@servera ~]$ ssh ceph@serverc ceph -s
Ansible 部署 RHCS 存储集群详解
[student@servera ~]$ ssh ceph@serverc ceph -w		#使用此命令监视集群事件
提示:ceph - w 命令将继续显示集群的运行状况和当前事件。要终止该命令,可按 ctrl+c。

3.13 测试及验证

[ceph@serverc ~]$ sudo systemctl stop ceph-mon.target	#停止 serverc 的 mon 进程
[ceph@serverc ~]$ ceph -s				        #观察 Ceph 状态
Ansible 部署 RHCS 存储集群详解
[ceph@serverc ~]$ sudo systemctl start ceph-mon.target	#重启开启 mon 进程
[ceph@serverc ~]$ sudo systemctl stop ceph-osd.target	#停止 serverc 的 osd 进程
[ceph@serverc ~]$ ceph -s				        #观察 Ceph 状态
Ansible 部署 RHCS 存储集群详解
[ceph@serverc ~]$ ceph osd tree				#查看 osd 情况
Ansible 部署 RHCS 存储集群详解
[ceph@serverc ~]$ sudo systemctl start ceph-osd.target	#重启开启 osd 进程
[ceph@serverc ~]$ sudo systemctl stop ceph-osd@0	        #停止 serverc 的 osd id 为 0 的进程
[ceph@serverc ~]$ ceph osd tree				#查看 osd 情况
Ansible 部署 RHCS 存储集群详解
[ceph@serverc ~]$ sudo systemctl start ceph-osd@0	#重启开启 osd 0 进程
[ceph@serverc ~]$ ceph -s				#观察 Ceph 状态
Ansible 部署 RHCS 存储集群详解
[ceph@serverc ~]$ ceph -v			#查看 Ceph 版本

3.14 创建 client.yml

[student@servera ~]$ cd /usr/share/ceph-ansible/group_vars/
[student@servera group_vars]$ sudo cp clients.yml.sample clients.yml
[student@servera group_vars]$ sudo vi clients.yml

dummy:
copy_admin_key: true

3.15 配置 Ansible Inventory

[student@servera ~]$ sudo vi /etc/ansible/hosts
[mons]
server[c:e]

[mgrs]
server[c:e]

[osds]
server[c:e]

[clients]
servera     #追加 client 客户端

3.16 正式部署 client 节点

[student@servera ~]$ cd /usr/share/ceph-ansible/
[student@servera ceph-ansible]$ ansible-playbook site.yml
Ansible 部署 RHCS 存储集群详解
提示:若部署成功,则对于每个 OSD 节点,前面的命令输出应该显示 failed=0。在 playbook 执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。

3.17 确认验证

[kiosk@foundation0 ~]$ ssh ceph@servera			#使用 ceph 用户登录 servera
[ceph@servera ~]$ ceph -s					#查看 Ceph 集群
Ansible 部署 RHCS 存储集群详解

四 扩容 Ceph 集群

4.1 扩容前置条件

  • 在不中断服务的前提下,扩展 ceph 集群存储容量
  • 可通过 ceph-ansible 以两种方式扩展集群中的存储:
    • 可以添加额外 OSD 主机到集群(scale-out)
    • 可以添加额外存储设备到现有的 OSD 主机(scale-up)
  • 开始部署额外的 OSD 前,需确保集群处于 HEALTH_OK 状态
  • 相关主机解析已正常添加指 hosts

4.2 创建相关用户

[root@serverf ~]# useradd student
[root@serverf ~]# echo student | passwd –stdin student          #创建非 root 的管理用户
[root@serverf ~]# useradd -d /home/student -m student; echo “student” | passwd –stdin student’                                                #所有 OSD server 节点创建 student 用户
[root@serverf ~]# useradd -d /home/ceph -m ceph; echo “redhat” | passwd –stdin ceph’
[root@serverf ~]# echo “student ALL = (root) NOPASSWD:ALL” > /etc/sudoers’
[root@serverf ~]# chmod 0440 /etc/sudoers

4.3 配置部署节点免密钥

[root@servera ~]# su - student
[student@servera ~]$ ssh-copy-id student@serverf;ssh-copy-id ceph@serverf

4.4 扩容额外的 OSD 主机

[student@servera ~]$ sudo vi /etc/ansible/hosts  #配置 Ansible Inventory
[student@servera ~]$ sudo vi /etc/ansible/hosts
[mons]
server[c:e]

[mgrs]
server[c:e]

[osds]
server[c:e]
serverf       #追加 serverf

[clients]
servera

4.5 添加额外 OSD 存储设备

devices:
  - /dev/vdb
  - /dev/vdc
  - /dev/vdd						#追加存储设备

4.6 正式部署 OSD 节点

[student@servera ~]$ cd /usr/share/ceph-ansible/
[student@servera ceph-ansible]$ ansible-playbook site.yml
Ansible 部署 RHCS 存储集群详解
提示:若部署成功,则对于每个 OSD 节点,前面的命令输出应该显示 failed=0。在 playbook 执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。

4.7 确认验证

[ceph@servera ~]$ ceph -s
Ansible 部署 RHCS 存储集群详解
[ceph@servera ~]$ ceph osd tree
Ansible 部署 RHCS 存储集群详解
[ceph@servera ~]$ ceph osd df
Ansible 部署 RHCS 存储集群详解

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10153字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中