ceph集群部署(自用)

发布时间 2023-06-15 14:00:04作者: 羽喬

<准备工作>

一、 配置主机名

A、配置主机节点
Ceph1节点:

hostnamectl --static set-hostname ceph1
其余节点以此类推。

B、修改域名解析文件:

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

192.168.58.240 ceph1
192.168.58.200 ceph2
192.168.58.50 ceph3

二、 配置免密登录

需配置ceph1节点对所有主/客户机节点的免密(包括ceph1本身),如果有客户端,也需要配置客户端client1节点对所有主/客户机节点的免密(包括client1本身)。配置方法如下:
在ceph1节点生成公钥,并发放到各个主机/客户机节点。

ssh-keygen -t rsa
for i in {1..3}; 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中会自动校验存储节点之间的时间,若不同节点之间时差较大,会有告警,因此执行如下步骤:

A. 安装ntp服务
1、 在所有节点安装NTP。

yum -y install ntp ntpdate
2、 在所有集群和客户端节点备份旧配置。

mv /etc/ntp.conf /etc/ntp.conf.bak
3、 以ceph1为NTP服务端节点,在ceph1新建NTP文件。

vim /etc/ntp.conf
并新增如下内容作为NTP服务端:

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

 

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

vim /etc/ntp.conf
并新增如下内容作为客户端:

server 192.168.58.240
保存并退出。

 

B. 启动NTP服务
1、 在ceph1节点启动NTP服务,并检查状态。

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 192.168.58.240

<二> 安装ansible

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

一、 安装ceph-ansible

A. 安装ansible

yum -y install ansible

B. 安装ceph-ansible
1、 确保环境上安装了git,可通过以下方式安装。

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 /root/ceph-ansible/
pip install -r requirements.txt

三、 解决环境依赖问题

A. 所有节点安装依赖

yum install -y yum-plugin-priorities

B. 解决rpm_key依赖问题
1、 进入redhat_community_repository.yml。

vim /root/ceph-ansible/roles/ceph-common/tasks/installs/redhat_community_repository.yml

2、 注释如下代码:

C. 解决grafana依赖问题
1、 进入configure_grafana.yml。

vim /root/ceph-ansible/roles/ceph-grafana/tasks/configure_grafana.yml
2、 注释如下代码:

 

D. 创建服务节点配置列表
写入hosts文件。

vi /etc/ansible/hosts
并添加如下内容:

 节点图片太长了,所以示例图片中是两个节点为例。

该操作用于定义集群中的主机,以及每个主机在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 /root/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

vim osd.yml

 

 

2、 定义Ceph集群配置
在all.yml中,设置前端网络类型,端口,每个RGW节点的RGW实例数。配置可以如下:

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

radosgw_frontend_type
RGW前端类型,根据需要选填

radosgw_frontend_port
RGW前端端口,根据需要选填

radosgw_num_instances
设置每个节点上RGW的实例个数,此时RGW的访问端口基于radosgw_frontend_port指定的端口号递增。

 

配置playbook

该ceph-ansible项目的根目录有一个示例playbook,名为site.yml.sample。该playbook在大多数情况下都可以正常工作,但默认情况下,它包括了可能不适用于集群设置的每个daemon group 。执行以下步骤来准备剧本。

重命名示例playbook,根据集群的需要对playbook进行修改:

cp site.yml.sample site.yml

ansible-playbook -i /etc/ansible/hosts site.yml

 

进入ceph tool容器后查看ceph状态,会发现状态是HEALTH_WARN,下面有一行提示:mons are allowing insecure global_id reclaim 解决办法:禁用不安全模式 ceph config set mon auth_allow_insecure_global_id_reclaim false 稍后再次查看,ceph status就变成HEALTH_OK了

 

 

ceph学习补充

 数据先映射逻辑概念的pg里,然后通过映射pg到多个osd实现存储,不直接映射到osd是因为逻辑概念的pg不会存在损坏,但是osd可能会损坏,一旦损坏会发生大量的数据迁移

数据会通过crush算法,分散存储在多个psd上,当为复制池时,副本数量假设为2,那么这三个osd上分散存储的数据会在另两个osd上在存储一份

pg跟osd在池创建的时候就已经绑定了

 

 扩容:

 

横向扩容:vim /etc/ansible/hosts 在osd下添加主机

纵向扩容:vim ceph-ansible/group_vars/osd.yml下添加硬盘

执行ansible-playbook site.yml