共计 10153 个字符,预计需要花费 26 分钟才能阅读完成。
一 前期准备
1.1 前置条件
- 至少有三个不同的主机运行 monitor (MON)节点;
- 至少三个直接存储 (非外部 SAN 硬件) 的 OSD 节点主;
- 至少两个不同的 manager (MGR)节点;
- 如果使用 CephFS,则至少有两个完全相同配置的 MDS 节点;
- 如果使用 Ceph 对象网关,则至少有两个不同的 RADOSGW 节点。
- 一个部署节点,可以使用 ceph-ansible 包中的 Ansible 剧本来部署和配置集群。
1.2 准备工作
- 具备相同操作系统的集群节点,建议 RHEL7;
- 配置软件仓库(CentOS epel 源、Ubuntu apt 源、RedHat 使用 subscription-manager 命令注册系统);
- 所有节点配置网络及 NTP 时间同步;
- 关闭 selinux 与防火墙,或放通所有相关流量和端口;
- 在部署节点安装 ansbile;
- 添加 hosts,并确保能正确解析到所有主机;
- 配置部署节点使用 Ansible 任务的用户到其他所有节点可以 ssh 免密登录;
- 验证部署节点能够在集群节点上能正常运行 ansible 任务。
1.3 其他注意事项
- OSD 磁盘不建议使用 RAID,Ceph 使用复制或纠删码来保护数据
- 在生产环境部署 Ceph 集群,为便于管理,OSD 主机应尽量使用统一的硬件。尽可能配置数量、大小和名称都相同的磁盘,有助于确保性能一致,并且简化故障排除;
- 需要确认每个 OSD 主机提供的 OSD 的数量。密度较小的存储集群意味着 osd 守护进程分布到更多的主机上,分发工作负载。密度较高的存储意味着重平衡和数据恢复需要更高的流量
附一:组件端口说明
二 部署相关知识点
2.1 Ansible 介绍
2.2 Ansible 部署 Ceph 相关 yml
2.3 yml 主要相关参数
- all.yml 参数
- osds.ym
2.4 客户端相关命令
2.5 对象 object 相关命令
三 正式部署
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
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 输出结果相关必须要警告
[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 组节点
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 行左右)添加此行
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 #仅为以后的练习启用一组特定的客户机功能
3.7 正式部署 Ceph 集群
[student@servera ~]$ cd /usr/share/ceph-ansible/
[student@servera ceph-ansible]$ ansible-playbook site.yml
3.8 确认验证 Ceph 集群
[student@servera ~]$ ssh ceph@serverc ceph -s
[student@servera ~]$ ssh ceph@serverc cat /etc/ceph/ceph.conf
[student@servera ~]$ ssh ceph@serverc ps aux | grep ceph-mon
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
3.12 确认验证 OSD 节点
[student@servera ~]$ ssh ceph@serverc ceph -s
[student@servera ~]$ ssh ceph@serverc ceph -w #使用此命令监视集群事件
3.13 测试及验证
[ceph@serverc ~]$ sudo systemctl stop ceph-mon.target #停止 serverc 的 mon 进程
[ceph@serverc ~]$ ceph -s #观察 Ceph 状态
[ceph@serverc ~]$ sudo systemctl start ceph-mon.target #重启开启 mon 进程
[ceph@serverc ~]$ sudo systemctl stop ceph-osd.target #停止 serverc 的 osd 进程
[ceph@serverc ~]$ ceph -s #观察 Ceph 状态
[ceph@serverc ~]$ ceph osd tree #查看 osd 情况
[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 情况
[ceph@serverc ~]$ sudo systemctl start ceph-osd@0 #重启开启 osd 0 进程
[ceph@serverc ~]$ ceph -s #观察 Ceph 状态
[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
3.17 确认验证
[kiosk@foundation0 ~]$ ssh ceph@servera #使用 ceph 用户登录 servera
[ceph@servera ~]$ ceph -s
#查看 Ceph 集群
四 扩容 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
4.7 确认验证
[ceph@servera ~]$ ceph -s
[ceph@servera ~]$ ceph osd tree
[ceph@servera ~]$ ceph osd df
: