ceph-ansible安装部署指南(centos-7.6)

ceph-ansible安装部署指南(centos-7.6)ceph ansible 安装部署指南 centos 7 6 本文档主要讲述如何基于社区发布的 Ceph N 版进行搭建 Ceph 集群 EC 策略 bluestore 以及对搭建过程中遇到的一些问题进行了解答 一 准备工作 一 配置主机名 A 配置主机节点 Ceph1 节点 hostnamectl static 一

大家好,我是讯享网,很高兴认识大家。

ceph-ansible安装部署指南(centos-7.6)

本文档主要讲述如何基于社区发布的Ceph-N版进行搭建Ceph集群(EC策略,bluestore)。以及对搭建过程中遇到的一些问题进行了解答。

<一> 准备工作

一、 配置主机名

hostnamectl --static set-hostname ceph1 

讯享网

其余节点以此类推。

B、修改域名解析文件:

讯享网vi /etc/hosts 

在各个集群和客户端节点的“/etc/hosts”中添加如下内容:

10.1.172.86 ceph1 10.1.172.87 ceph2 10.1.172.88 ceph3 10.1.172.88 ceph4 … 

二、 配置免密登录

讯享网ssh-keygen -t rsa for i in { 
   1..9}; do ssh-copy-id ceph$i; done 

输入ssh-keygen –t rsa后一路按回车使用默认配置。

三、 关闭防火墙

关闭本节点防火墙,需在所有Ceph节点执行如下命令:

systemctl stop firewalld systemctl disable firewalld systemctl status firewalld 

四、 关闭SELinux

关闭节点SELinux,需在所有节点执行。临时关闭,重启后失效命令:

讯享网setenforce 0 

永久关闭,重启后生效命令:

vi /etc/selinux/config 

修改文件SELINUX=disabled,如:

在这里插入图片描述
讯享网

五、 配置repo源

A、在所有集群和客户端节点建立ceph.repo

讯享网vi /etc/yum.repos.d/ceph.repo 

并加入以下内容:

[Ceph] name=Ceph packages for $basearch baseurl=http://download.ceph.com/rpm-nautilus/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=http://download.ceph.com/rpm-nautilus/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl=http://download.ceph.com/rpm-nautilus/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 

B、更新yum源

讯享网yum clean all && yum makecache 

C、安装epel源

yum -y install epel-release 

D、修改所有节点代理配置(如果需要)

讯享网vim /etc/environment 

添加如下内容使其支持相关依赖包的安装:

export http_proxy=http://{ 
   Proxy-User-Name}:{ 
   Proxy-Password}@<Proxy-Server-IP-Address>:<Proxy-Port> export https_proxy= http://{ 
   Proxy-User-Name}:{ 
   Proxy-Password}@<Proxy-Server-IP-Address>:<Proxy-Port> export ftp_proxy= http://{ 
   Proxy-User-Name}:{ 
   Proxy-Password}@<Proxy-Server-IP-Address>:<Proxy-Port> export no_proxy=127.0.0.1,localhost 

六、配置NTP服务

Ceph中会自动校验存储节点之间的时间,若不同节点之间时差较大,会有告警,因此执行如下步骤:

讯享网yum -y install ntp ntpdate 

2、 在所有集群和客户端节点备份旧配置。

cd /etc && mv ntp.conf ntp.conf.bak 

3、 以ceph1为NTP服务端节点,在ceph1新建NTP文件。

讯享网vi /etc/ntp.conf 

并新增如下内容作为NTP服务端:

restrict 127.0.0.1 restrict ::1 restrict 10.1.172.0 mask 255.255.255.0 server 127.127.1.0 fudge 127.127.1.0 stratum 8 

4、 在ceph2、ceph3及所有其他节点新建NTP文件。

讯享网vi /etc/ntp.conf 

并新增如下内容作为客户端:

server 10.1.172.86 

保存并退出。

讯享网systemctl start ntpd systemctl enable ntpd systemctl status ntpd 

2、 在除ceph1的所有节点强制同步server(ceph1)时间。

ntpdate ceph1 

3、 在除ceph1的所有节点写入硬件时钟,避免重启后失效。

讯享网hwclock –w 

4、 在除ceph1的所有节点安装并启动crontab工具。

yum install -y crontabs chkconfig crond on systemctl start crond crontab –e 

5、 添加以下内容,每隔10分钟自动与ceph1同步时间。

讯享网*/10 * * * * /usr/sbin/ntpdate 10.1.172.86 

<二> 安装ansible

如下操作都仅需在ceph1节点上操作。

一、 安装ceph-ansible

A. 安装ansible

yum -y install ansible 
讯享网yum -y install git 

2、 配置“http.sslVerify”参数为“false”,跳过系统证书。

git config --global http.sslVerify false 

3、 下载ceph-ansible。

讯享网git clone -b stable-4.0 https://github.com/ceph/ceph-ansible.git --recursive 

二、 安装ceph-ansible依赖

A. 安装python-pip

yum install -y python-pip 

B. 将pip更新到最新版本

讯享网pip install –upgrade 

C. 检查并安装需要的软件版本

cd /home/ceph-ansible/ pip install -r requirements.txt 

三、 解决环境依赖问题

A. 所有节点安装依赖

讯享网yum install -y yum-plugin-priorities 
vim /home/ceph-ansible/roles/ceph-common/tasks/installs/redhat_community_repository.yml 

2、 注释如下代码:
在这里插入图片描述

讯享网vim /home/ceph-ansible/roles/ceph-grafana/tasks/configure_grafana.yml 

2、 注释如下代码:
在这里插入图片描述
D. 创建服务节点配置列表
在ceph-ansible目录内新建hosts文件。

vi /home/ceph-ansible/hosts 

并添加如下内容:
在这里插入图片描述
9节点图片太长了,所以示例图片中是两个节点为例。
该操作用于定义集群中的主机,以及每个主机在Ceph集群中扮演的角色。可根据整个集群的需要在集群节点上部署相应的应用。

各参数意义如下所示。

讯享网[mons] 作为Monitor节点 [mgrs] 作为MGR节点 [osds] 作为OSD节点,具体OSD配置在osds.yml文件中配置 [mdss] 作为MDS节点,文件存储中需要指定 [rgws] 作为RGW节点,对象存储中需要指定 [clients] 作为客户端节点 [grafana-server] 一般需要保留该参数,不然会报缺少的错误 

五、修改ceph-ansible配置文件

A、配置更名
在ansible部署时,必须传递相应的playbook给ansible-playbook命令。需要修改相应的playbook名称,然后修改对应的内容,使之满足集群部署的要求。
使用ceph-ansible提供的Ansible变量用来设置Ceph集群的配置。
所有选项及默认配置放在“group_vars”目录下,每种Ceph进程对应相关的配置文件。

cd /home/ceph-ansible/group_vars/ cp mons.yml.sample mons.yml cp mgrs.yml.sample mgrs.yml cp mdss.yml.sample mdss.yml cp rgws.yml.sample rgws.yml cp osds.yml.sample osds.yml cp clients.yml.sample clients.yml cp all.yml.sample all.yml 

B、添加ceph.conf配置参数
“all.yml”文件中,“ceph_conf_overrides”变量可用于覆盖ceph.conf中已配置的选项,或是增加新选项。
进入“all.yml”文件,修改“ceph_conf_overrides”这个参数。
vim all.yml
添加如下内容:

讯享网ceph_conf_overrides: global: osd_pool_default_pg_num: 64 osd_pool_default_pgp_num: 64 osd_pool_default_size: 3 mon: mon_allow_pool_create: true 

C、定义osd
osds.yml中可以对osd进行定义,支持两种方式设置OSD(object storage device)盘、WAL(write ahead log)盘和DB(data base)盘。
方法一:ceph-volume lvm batch方式
修改groups_vars路径下的osds.yml文件,根据需要指定“devices”,“dedicated_devices”和“bluestore_wal_devices”中的设备:
在这里插入图片描述

devices表示系统中的数据盘,可以与osds_per_device选项结合,设置每个磁盘上创建的OSD数量。
dedicated_devices即block.db。
bluestore_wal_devices即block.wal。
dedicated_devices和bluestore_wal_devices的磁盘不能为相同磁盘。
dedicated_devices和bluestore_wal_devices可以包含一个或多个磁盘。
系统会根据devices中的磁盘数量,以及osds_per_device,将dedicated_devices和bluestore_wal_devices下的磁盘进行均分。
单个OSD的block.db大于等于50GB,否则可能会以为block.db过小而安装报错。

方法二:ceph-volume,从逻辑卷中创建osd
修改groups_vars路径下的osds.yml文件,根据需要指定lvm_volumes属性下的所有OSD设备,包含几种不同的组合场景:
只指定数据盘。
指定数据盘+WAL。
指定数据盘+WAL+DB。
指定数据盘+DB。
使用此模式时需要事先在所有集群节点上创建对应的逻辑卷。
1、创建对应的vg。

/usr/sbin/vgcreate --yes -s 1G ceph-data /dev/sdd 

2、基于vg创建lv。

讯享网/usr/sbin/lvcreate -l 300 -n osd-data2 ceph-data 

3、 确认lv创建情况

lvs 

一般没有特殊需求时,只要osds.yml配需要的盘即可,其他均使用Ceph默认配置,如下对象所示。

讯享网vim site.yml 

在hosts选项下,增加rgws的定义:

- hosts: - mons - osds - mdss - rgws - nfss #- rbdmirrors - clients - mgrs #- iscsigws #- scsi-gws #- for backward compatibility only! # - grafana-server #- rgwloadbalancers 
讯享网ceph_origin: repository ceph_repository: community ceph_mirror: http://download.ceph.com ceph_stable_release: nautilus ceph_stable_repo: "{ 
   { ceph_mirror }}/rpm-{ 
   { ceph_stable_release }}" ceph_stable_redhat_distro: el7 monitor_interface: enp133s0 journal_size: 5120 public_network: 10.1.172.0/0 cluster_network: 10.1.206.0/0 osd_objectstore: bluestore Rados Gateway options radosgw_frontend_type: beast radosgw_frontend_port: 12345 radosgw_interface: "{ 
   {monitor_interface}}" radosgw_num_instances: 3 

常用参数说明:
monitor_interface
Public Network的网口设备ID

rgw_create_pools: defaults.rgw.buckets.data: pg_num: 1024 size: "" defaults.rgw.buckets.index: pg_num: 1024 size: "" # SYSTEMD # # ceph_rgw_systemd_overrides will override the systemd settings # for the ceph-rgw services. # For example,to set "PrivateDevices=false" you can specify: ceph_rgw_systemd_overrides: Service: PrivateDevices: False 

国内比较快的源可以选择:

讯享网http://mirrors.ustc.edu.cn/ceph/ 

可以将此地址替换到/etc/yum.repo.d/ceph.repo中,以及上面的group_vars/all.yml中。

E、文件存储配置
1、配置site.yml,同上面的对象存储,但增加- mdss。
2、定义ceph集群配置。
修改all.yml,通过查找CephFS关键字修改配置如下:

ceph_origin: repository ceph_repository: community ceph_mirror: http://download.ceph.com ceph_stable_release: nautilus ceph_stable_repo: "{ 
   { ceph_mirror }}/rpm-{ 
   { ceph_stable_release }}" ceph_stable_redhat_distro: el7 monitor_interface: enp133s0 journal_size: 5120 public_network: 10.1.172.0/24 cluster_network: 10.1.206.0/24 osd_objectstore: bluestore # CEPHFS # cephfs: cephfs # name of the ceph filesystem cephfs_data_pool: name: "{ 
   { cephfs_data if cephfs_data is defined else 'cephfs_data' }}" pg_num: "{ 
   { osd_pool_default_pg_num }}" pgp_num: "{ 
   { osd_pool_default_pg_num }}" rule_name: "replicated_rule" type: 1 # erasure_profile: "" # expected_num_objects: "" application: "cephfs" size: "{ 
   { osd_pool_default_size }}" min_size: "{ 
   { osd_pool_default_min_size }}" cephfs_metadata_pool: name: "{ 
   { cephfs_metadata if cephfs_metadata is defined else 'cephfs_metadata' }}" pg_num: "{ 
   { osd_pool_default_pg_num }}" pgp_num: "{ 
   { osd_pool_defaultpg_num }}" rule_name: "replicated_rule" type: 1 # erasure_profile: "" # expected_num_objects: "" application: "cephfs" size: "{ 
   { osd_pool_default_size }}" min_size: "{ 
   { osd_pool_default_min_size }}" cephfs_pools: - "{ 
   { cephfs_data_pool }}" - "{ 
   { cephfs_metadata_pool }}" 

实际配置可以如下对象所示:

<三>、ceph集群部署

一、 部署集群

讯享网ansible-playbook -vv -i hosts site.yml 
ceph health detail 

显示HEALTH_OK则集群健康。

二、 删除集群

讯享网ansible-playbook -vv -i hosts infrastructure-playbooks/purge-cluster.yml 
ps aux|grep ceph |awk '{print $2}'|xargs kill -9 ps -ef|grep ceph 

确保此时所有ceph进程都已经关闭!!!如果没有关闭,多执行几次

讯享网umount /var/lib/ceph/osd/* rm -rf /var/lib/ceph/osd/* rm -rf /var/lib/ceph/mon/* rm -rf /var/lib/ceph/mds/* rm -rf /var/lib/ceph/bootstrap-mds/* rm -rf /var/lib/ceph/bootstrap-osd/* rm -rf /var/lib/ceph/bootstrap-rgw/* rm -rf /var/lib/ceph/bootstrap-mgr/* rm -rf /var/lib/ceph/tmp/* rm -rf /etc/ceph/* rm -rf /var/run/ceph/* 

同时清理主节点中my-cluster目录下的所有内容:

cd /root/my-cluster/ rm * 

三、 升级集群

讯享网ansible-playbook -vv -i hosts infrastructure-playbooks/rolling_update.yml 

<四> 集群扩容

一、 添加ceph mon节点

1、 在集群的hosts文件的[mons]群组下添加新的Ceph Monitor节点。

2、 确认ansible可以连接到节点。

ansible all -i hosts -m ping 

3、 运行脚本。
法一:
切换到ansible主目录,在主目录运行site.yml脚本。

讯享网ansible-playbook –vv -i hosts site.yml 
cp infrastructure-playbook/add-mon.yml add-mon.yml ansible-playbook -i hosts add-mon.yml 

二、 添加ceph osd节点

讯享网cp ./infrastructure-playbooks/add-osd.yml ./add-osd.yml 

2、在集群的hosts文件的[osds]群组下增加新的OSD节点名。
在这里插入图片描述

3、确认Ansible可以连接到节点。

ansible all -i hosts -m ping 

4、 运行脚本。

讯享网ansible-playbook -i host add-osd.yml 

在这里插入图片描述

2、和A步骤后面一样。

三、添加ceph mds节点

1、 在集群hosts文件中的[mdss]群组中添加新的MDS节点名。
在这里插入图片描述

2、修改主目录下site.yml脚本里的mdss配置,将注释符删除。
在这里插入图片描述

3、在主目录下运行脚本。

ansible-playbook -i hosts site.yml 

<五> Q&A

一、 ntp服务同步时报错

讯享网ps –ef|grep xntpd root  6192 0 15:49 pts/1 00:00:00 grep xntpd 
lsof –i:123 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ntpd 17337 ntp 16u IPv4 33887 0t0 UDP *:ntp ntpd 17337 ntp 17u IPv6 33888 0t0 UDP *:ntp ntpd 17337 ntp 18u IPv4 33893 0t0 UDP localhost:ntp ntpd 17337 ntp 19u IPv4 33894 0t0 UDP ceph4:ntp ntpd 17337 ntp 20u IPv6 33895 0t0 UDP ceph4:ntp ntpd 17337 ntp 21u IPv6 33896 0t0 UDP localhost:ntp 

然后

讯享网kill -9 17337 

ntpdate X.X.X.X ntpdate[17423]: adjust time server 10.4.128.181 offset -0.000021 sec 

即可同步成功。

二、 集群告警mons are allowing insecure global_id reclaim

集群告警mons are allowing insecure global_id reclaim时,只需要配置:

讯享网ceph config set mon mon_warn_on_insecure_global_id_reclaim false ceph config set mon mon_warn_on_insecure_global_id_reclaim_allowed false 

即可消除。

三、 集群告警1 daemons have recently crashed

集群告警1 daemons have recently crashed一般是说明某个进程出现过crash的现象。在这种情况下,需要输入:

ceph crash ls-new 

查看crash具体信息:

讯享网ID ENTITY NEW 2021-05-27_01:59:30.050354Z_86a2497c-da90-4c1d-a121-13477adee12d mon.ceph3 * 

可以看出在2021-05-27_01:59:30.05035出现过ceph-mon crash。前面的ID复制下来,输入:

ceph crash info <crash-id> 

可以看到具体的crash信息,根据具体类型定位原因。
如果不是重要问题,可以通过:
ceph crash archive <crash-id> 消除告警,或 ceph crash archive-all
还可通过 ceph config set mgr mgr/crash/warn_recent_interval 0
完全禁用这种警告(不建议)。

四、 另一种方法新增ceph-osd

当集群需要扩容时,可以用另一种方法增加ceph-osd,使用比较方便的工具ceph-deploy自动部署新osd。首先下载安装ceph-deploy部署工具:

讯享网yum –y install ceph-deploy 

在/etc/ceph/文件夹下(放ceph.conf的地方),执行:

ceph-deploy gatherkeys <node-name> 

执行
ceph-deploy osd create --data /dev/vda <node-name>
即可添加新osd到集群中。
如遇到报:Insufficient Free Extents for a Logical Volume,详细比如:

讯享网Insufficient free extents (0) in volume group vg1: 5119 required。 

则表明是之前搭建集群osd创立失败过,存储逻辑卷没有删除导致没有更多空间分配新的逻辑卷。这时需要手动执行:

fdisk –l 

查看所有的逻辑卷,发现确实有很多并未挂载的逻辑卷,再执行:

讯享网vgremove <vg-name> 

一个一个进行手动删除,删除后,再执行上述

ceph-deploy osd create --data /dev/vdi <node-name> 

命令即可创建成功。如果创建成功后,有pg incomlete等警告,可以通过ceph health detail查看详细原因,一般可能是某个池min_size设置过大导致,删除池后重新建立min_size更小的池即可。

五、 新增ceph-rgw

讯享网[client.rgw.node4] rgw_frontends = "civetweb port=80" 

并将此配置推送到其他节点:

ceph-deploy --overwrite-conf config push <node-name> 

然后安装ceph object gateway:

讯享网ceph-deploy install --rgw <gateway-node1> [<gateway-node2> ...] 

安装RGW实例:

ceph-deploy rgw create <node-name> 

一旦RGW开始运行,我们就可以通过端口7480(如果没有修改的话)来访问。如:

讯享网http://<node-name>:7480 

如果RGW运行正常,它应该返回类似的信息:

<ListAllMyBucketsResult> <Owner> <ID>anonymous</ID> <DisplayName/> </Owner> <Buckets/> </ListAllMyBucketsResult> 

剩下的创建用户的步骤都应该在RGW节点上运行。

六、 创建文件系统时报不支持EC数据池问题

当拥有一个ceph_metadata元数据副本类型池和一个ceph_data数据EC类型池时,建立文件系统:

讯享网ceph fs new cephfs cephfs_metadata cephfs_data 

N版可能会报:

Error EINVAL: pool 'cephfs_data' (id '11') is an erasure-coded pool. Use of an EC pool for the default data pool is discouraged; see the online CephFS documentation for more information. Use --force to override. 

加上—force后:

讯享网ceph fs new cephfs cephfs_metadata cephfs_data --force 

也可能会报:

Error EINVAL: pool 'cephfs_data' (id '11') is an erasure-coded pool, with no overwrite support 
讯享网ceph osd pool set cephfs_data allow_ec_overwrites true 

再执行
ceph fs new cephfs cephfs_metadata cephfs_data –force
就可以创建文件系统成功。

七、 手动增加ceph对象网关(每节点多网关)

1、 查看/etc/ceph/ceph.conf,确定已有rgw的keyring的位置,一般是在/var/lib/ceph/radosgw/下(本次拿该路径为例)。
2、 在/var/lib/ceph/radosgw/下新建ceph-rgw.ceph1.rgw1文件夹。
3、 创建keyring文件:

ceph-authtool --create-keyring /var/lib/ceph/radosgw/ceph-rgw.ceph1.rgw1/keyring 

4、 修改keyring文件权限:

讯享网chown ceph:ceph /var/lib/ceph/radosgw/ceph-rgw.ceph1.rgw1/keyring 

5、 生成ceph-radosgw服务对应的用户和Key:
ceph-authtool /var/lib/ceph/radosgw/ceph-rgw.ceph1.rgw1/keyring -n [client.rgw.ceph1.rgw1] --gen-key
(中括号内是名字,可参考已有rgw名字)

6、 为用户添加访问权限:

ceph-authtool -n client.rgw.ceph1.rgw1 --cap osd 'allow rwx' --cap mon 'allow rwx' /var/lib/ceph/radosgw/ceph-rgw.ceph1.rgw1/keyring 

7、 导入keyring到集群中:

讯享网ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.rgw.ceph1.rgw1 -i /var/lib/ceph/radosgw/ceph-rgw.ceph1.rgw1/keyring 

8、 查看集群中是否已有对应的用户:

ceph auth list 

9、 配置ceph.conf:
vim /etc/ceph/ceph.conf,新增内容:

讯享网[client.rgw.ceph1.rgw1] host = ceph1 keyring = /var/lib/ceph/radosgw/ceph-rgw.ceph1.rgw1/keyring log file = /var/log/ceph/ceph-rgw-ceph1.rgw1.log rgw frontends = beast endpoint=10.4.128.181:8081 rgw thread pool size = 512 

10、 在cd /etc/systemd/system/ceph-radosgw.target.wants/中:

cp -a ceph-radosgw\@rgw.ceph1.rgw0.service ceph-radosgw\@rgw.ceph1.rgw1.service 

然后systemctl start
即可启动完成,并通过systemctl enable 设置开机启动即可。

小讯
上一篇 2025-01-25 11:37
下一篇 2025-04-05 13:13

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/31408.html