提示:Red Hat Ceph存储还支持在Red Hat OpenStack平台计算节点上部署OSDs、MONs、RGWs,但不支持部署mon和osd。
红帽Ceph存储,默认配置将所有流量放在一个网络上。生产环境中建议公共通信和集群通信配置单独的网络。公共网络用于客户端通信和与mon的通信。集群网络用于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.
略,具体Ansible操作见本博客Ansible文章。
/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部署的主目录。
变量 | 值 | 含义 |
---|---|---|
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集群作为测试学习使用。
变量 | 值 | 含义 |
---|---|---|
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
命令 | 含义 |
---|---|
ceph -s | 查看集群状态。 |
ceph -w | 动态观察集群更改。 |
ceph df | 查看集群剩余空间状态。 |
ceph osd df | 查看OSD使用情况。 |
ceph auth get-or-create | 创建用户。 |
aeph auth list | 查看用户列表。 |
ceph auth caps | 查看用户权限。 |
ceph auth del | 删除用户。 |
命令 | 含义 |
---|---|
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 |
1 [root@servera ~]# vi /etc/hosts
2 172.25.250.10 servera
3 172.25.250.12 serverc
4 172.25.250.13 serverd
5 172.25.250.14 servere
提示:主机名应该能正确解析主机名,若管理节点同时也是一个Ceph节点,也要确认能正确解析自己的主机名和IP地址。本实验环境此3.1步骤可省略。
1 [root@servera ~]# useradd student
2 [root@servera ~]# echo student | passwd --stdin student #创建非root的管理用户
3 [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用户
5 [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
6 [root@servera ~]# for i in {a..e}; do echo "====server${i}====";ssh root@server${i} 'echo "student ALL = (root) NOPASSWD:ALL" > /etc/sudoers'; done
7 [root@servera ~]# for i in {a..e}; do echo "====server${i}====";ssh root@server${i} 'chmod 0440 /etc/sudoers'; done
1 [root@servera ~]# su - student
2 [student@servera ~]$ ssh-keygen -f ~/.ssh/id_rsa -N ''
3 [student@servera ~]$ for i in {a..e}; do echo "====server${i}====";ssh-copy-id student@server$i;ssh-copy-id ceph@server$i; done
1 [student@servera ~]$ sudo vi /usr/share/ceph-ansible/ansible.cfg
2 log_path = /tmp/ansible.log #修改日志路径为student用户可写入的/tmp路径
3 deprecation_warnings = False #禁用在ansible-playbook输出结果相关必须要警告
提示:Ansible默认使用/etc/ansible/hosts作为Inventory文件,也可使用-f参数手动指定其他文件。
1 [student@servera ~]$ sudo vi /etc/ansible/hosts
2 [mons]
3 server[c:e]
4
5 [mgrs]
6 server[c:e]
7 [student@servera ~]$ ansible mons -m ping #测试mons组节点通信
8 [student@servera ~]$ ansible mgrs -m ping #测试mgrs组节点通信
9 [student@servera ~]$ ansible mons -m command -a id #通过命令测试mons组节点
10 [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文件中配置为对应的组。
1 [student@servera ~]$ cd /usr/share/ceph-ansible/
2 [student@servera ceph-ansible]$ sudo cp site.yml.sample site.yml
3 [student@servera ceph-ansible]$ sudo vi site.yml
4 #……
5 - hosts: osds
6 gather_facts: false
7 become: True
8 serial: 1 #在osd(80行左右)添加此行
提示:添加serial: 1添,会减慢了OSD的部署,但是使我们更有可能预测哪个OSD编号被分配给哪个OSD主机,以便将来的实验室练习。
1 [student@servera ~]$ cd /usr/share/ceph-ansible/group_vars/
2 [student@servera group_vars]$ sudo cp all.yml.sample all.yml
3 [student@servera group_vars]$ sudo vi all.yml
4 ---
5 dummy:
6 ntp_service_enabled: false #本实验采用chrony进行时钟同步
7 ceph_origin: repository
8 ceph_repository: rhcs
9 ceph_rhcs_version: "3"
10 ceph_repository_type: cdn
11 rbd_cache: "true" #开启RBD回写缓存
12 rbd_cache_writethrough_until_flush: "false" #在切换回写之前,不从写透开始。
13 rbd_client_directories: false #不要创建客户机目录(它们应该已经存在)。
14 monitor_interface: eth0
15 journal_size: 1024 #本环境存储设备很小,OSD日志比通常建议的要小
16 public_network: 172.25.250.0/24
17 cluster_network: "{{ public_network }}"
18 ceph_conf_overrides:
19 global:
20 mon_osd_allow_primary_affinity: 1
21 mon_clock_drift_allowed: 0.5 #允许MON时钟间隔最多0.5秒
22 osd_pool_default_size: 2
23 osd_pool_default_min_size: 1 #降低存储池复制大小的默认设置
24 mon_pg_warn_min_per_osd: 0 #见提示一
25 mon_pg_warn_max_per_osd: 0 #见提示二
26 mon_pg_warn_max_object_skew: 0 #见提示三
27 client:
28 rbd_default_features: 1 #仅为以后的练习启用一组特定的客户机功能
提示一:根据每个OSD的pg数量关闭集群健康警告。通常,第一个变量被设置为30,如果OSD中的每个“in”平均少于30个pg,集群就会发出警告。
提示二:此变量默认值为300,如果OSD中的每个“in”平均超过300个pg,集群就会发出警告,在本实验的小集群中可能没有很多pg,因此采用禁用。
提示三:根据某个池中对象的数量大于集群中一组池中对象的平均数量,关闭集群健康警告。同样,我们有一个非常小的集群,这避免了通常指示我们需要调优集群的额外警告。
1 [student@servera ~]$ cd /usr/share/ceph-ansible/
2 [student@servera ceph-ansible]$ ansible-playbook site.yml
提示:若部署成功,则对于每个MON节点,前面的命令输出应该显示failed=0。在playbook执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。
1 [student@servera ~]$ ssh ceph@serverc ceph -s
1 [student@servera ~]$ ssh ceph@serverc cat /etc/ceph/ceph.conf
1 [student@servera ~]$ ssh ceph@serverc ps aux | grep ceph-mon
1 [student@servera ~]$ cd /usr/share/ceph-ansible/group_vars/
2 [student@servera group_vars]$ sudo cp osds.yml.sample osds.yml
3 [student@servera group_vars]$ sudo vi osds.yml
4 ---
5 dummy:
6 osd_scenario: "collocated" #OSD使用并列的OSD形式
7 devices:
8 - /dev/vdb #使用/dev/vdb作为后端存储设备
1 [student@servera ~]$ sudo vi /etc/ansible/hosts
2 [mons]
3 server[c:e]
4
5 [mgrs]
6 server[c:e]
7
8 [osds]
9 server[c:e] #追加osds组
1 [student@servera ~]$ cd /usr/share/ceph-ansible/
2 [student@servera ceph-ansible]$ ansible-playbook site.yml
提示:若部署成功,则对于每个OSD节点,前面的命令输出应该显示failed=0。在playbook执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。
1 [student@servera ~]$ ssh ceph@serverc ceph -s
1 [student@servera ~]$ ssh ceph@serverc ceph -w #使用此命令监视集群事件
提示:ceph -w命令将继续显示集群的运行状况和当前事件。要终止该命令,可按ctrl+c。
1 [ceph@serverc ~]$ sudo systemctl stop ceph-mon.target #停止serverc的mon进程
2 [ceph@serverc ~]$ ceph -s #观察Ceph状态
1 [ceph@serverc ~]$ sudo systemctl start ceph-mon.target #重启开启mon进程
2 [ceph@serverc ~]$ sudo systemctl stop ceph-osd.target #停止serverc的osd进程
3 [ceph@serverc ~]$ ceph -s #观察Ceph状态
1 [ceph@serverc ~]$ ceph osd tree #查看osd情况
1 [ceph@serverc ~]$ sudo systemctl start ceph-osd.target #重启开启osd进程
2 [ceph@serverc ~]$ sudo systemctl stop ceph-osd@0 #停止serverc的osd id为0的进程
3 [ceph@serverc ~]$ ceph osd tree #查看osd情况
1 [ceph@serverc ~]$ sudo systemctl start ceph-osd@0 #重启开启osd 0进程
2 [ceph@serverc ~]$ ceph -s #观察Ceph状态
1 [ceph@serverc ~]$ ceph -v #查看Ceph版本
1 [student@servera ~]$ cd /usr/share/ceph-ansible/group_vars/
2 [student@servera group_vars]$ sudo cp clients.yml.sample clients.yml
3 [student@servera group_vars]$ sudo vi clients.yml
4 ---
5 dummy:
6 copy_admin_key: true
1 [student@servera ~]$ sudo vi /etc/ansible/hosts
2 [mons]
3 server[c:e]
4
5 [mgrs]
6 server[c:e]
7
8 [osds]
9 server[c:e]
10
11 [clients]
12 servera #追加client客户端
1 [student@servera ~]$ cd /usr/share/ceph-ansible/
2 [student@servera ceph-ansible]$ ansible-playbook site.yml
提示:若部署成功,则对于每个OSD节点,前面的命令输出应该显示failed=0。在playbook执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。
1 [kiosk@foundation0 ~]$ ssh ceph@servera #使用ceph用户登录servera
2 [ceph@servera ~]$ ceph -s #查看Ceph集群
1 [root@serverf ~]# useradd student
2 [root@serverf ~]# echo student | passwd --stdin student #创建非root的管理用户
3 [root@serverf ~]# useradd -d /home/student -m student; echo "student" | passwd --stdin student' #所有OSD server节点创建student用户
4 [root@serverf ~]# useradd -d /home/ceph -m ceph; echo "redhat" | passwd --stdin ceph'
5 [root@serverf ~]# echo "student ALL = (root) NOPASSWD:ALL" > /etc/sudoers'
6 [root@serverf ~]# chmod 0440 /etc/sudoers
1 [root@servera ~]# su - student
2 [student@servera ~]$ ssh-copy-id student@serverf;ssh-copy-id ceph@serverf
1 [student@servera ~]$ sudo vi /etc/ansible/hosts #配置Ansible Inventory
2 [student@servera ~]$ sudo vi /etc/ansible/hosts
3 [mons]
4 server[c:e]
5
6 [mgrs]
7 server[c:e]
8
9 [osds]
10 server[c:e]
11 serverf #追加serverf
12
13 [clients]
14 servera
1 devices:
2 - /dev/vdb
3 - /dev/vdc
4 - /dev/vdd #追加存储设备
1 [student@servera ~]$ cd /usr/share/ceph-ansible/
2 [student@servera ceph-ansible]$ ansible-playbook site.yml
提示:若部署成功,则对于每个OSD节点,前面的命令输出应该显示failed=0。在playbook执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。
1 [ceph@servera ~]$ ceph -s
1 [ceph@servera ~]$ ceph osd tree
1 [ceph@servera ~]$ ceph osd df