欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

001.Ansible部署RHCS存储集群

程序员文章站 2022-03-11 07:57:03
一 前期准备1.1 前置条件至少有三个不同的主机运行monitor (MON)节点;至少三个直接存储(非外部SAN硬件)的OSD节点主;至少两个不同的manager (MGR)节点;如果使用CephFS,则至少有两个完全相同配置的MDS节点;如果使用Ceph对象网关,则至少有两个不同的RADOSGW... ......

一 前期准备

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 部署节点配置主机名

  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步骤可省略。

3.2 创建相关用户

  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

3.3 配置部署节点免密钥

  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

3.4 配置ansible inventory

  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文件中配置为对应的组。

3.5 创建site.yml

  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主机,以便将来的实验室练习。

3.6 创建all.yml

  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,因此采用禁用。
提示三:根据某个池中对象的数量大于集群中一组池中对象的平均数量,关闭集群健康警告。同样,我们有一个非常小的集群,这避免了通常指示我们需要调优集群的额外警告。

3.7 正式部署ceph集群

  1 [student@servera ~]$ cd /usr/share/ceph-ansible/
  2 [student@servera ceph-ansible]$ ansible-playbook site.yml

提示:若部署成功,则对于每个mon节点,前面的命令输出应该显示failed=0。在playbook执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。

3.8 确认验证ceph集群

  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

3.9 创建osds.yml

  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作为后端存储设备

3.10 配置ansible inventory

  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组

3.11 正式部署osd节点

  1 [student@servera ~]$ cd /usr/share/ceph-ansible/
  2 [student@servera ceph-ansible]$ ansible-playbook site.yml

提示:若部署成功,则对于每个osd节点,前面的命令输出应该显示failed=0。在playbook执行过程中,可能会有许多非致命的警告,它们不会被当做“失败”任务,可以忽略。

3.12 确认验证osd节点

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

3.13 测试及验证

  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版本

3.14 创建client.yml

  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

3.15 配置ansible inventory

  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客户端