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 设置开机启动即可。

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