vlambda博客
学习文章列表

centos 8通过ceph-ansible快速部署ceph16(pacific)

        前记:ceph 16.2.0 pacific于4月份发布,上个星期Rocky Linux(8.4)第一个正式版发布,开始准备在Rocky上部署看看,结果掉到坑了,跑了好几遍ceph-ansible 6.0的playbook的剧本,发现并不支持Rocky Linux,自己改了部分配置文件,后续还是一堆坑。那我就回到centos7.9测试,结果是跑一遍发现安装不了,一看镜像站点下el7下的目录都是空的。。。

        翻阅了下官网,16版支持的版本需要CentOS 8 Ubuntu18.04和20.4以及Debian 10以上操作系统版本,没法子,那就来一遍centos8的部署啦啦啦啦

        ceph在14版之前常用的工具是ceph-deploy,从15版开始已经放弃了ceph-deploy工具,官方推荐cephadm,但是cephadm部署的基于容器的,centos7为docker,centos8为podman,虽然容器化是大势所趋,不过存储这种基础架构多套一层就多一层故障域,也不算什么好事。也许ceph-ansible是更好的选择吧


硬件环境:pve7.0 虚拟机 8核+8G+100G系统盘+3个100G数据盘

操作系统:centos 8

ceph版本:pacific 16.2.4

部署方式:ceph-ansible

ceph-ansible是用于部署Ceph分布式系统的Ansible脚本。

Ansible是一种自动化运维工具,基于Python开发,集合了众多运维工具(Puppet、CFEngine、Chef、Func、Fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

Ansible基于模块工作,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。

ceph网络:我这次就用的一个虚拟网卡,生产环境建议把public和cluster网络分开

ceph1: 192.168.253.181

ceph2: 192.168.253.182

ceph3: 192.168.253.183

ceph-client: 192.168.253.184

# 4台虚拟机都最小化安装centos8

#配置hosts


# cat >> /etc/hosts <<EOF 192.168.253.181 ceph1192.168.253.182 ceph2192.168.253.183 ceph3192.168.253.184 ceph-clientEOF

#关闭防火墙和selinux

# systemctl stop firewalld && systemctl disable firewalld # setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#安装常用软件包

# yum -y install vim-enhanced lrzsz tree bash-completion net-tools wget bzip2 lsof zip unzip gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel chrony

#配置epel源

# yum install -y epel-release yum-plugin-fastestmirror# yum clean all && yum makecache

#配置主机时间同步

# systemctl restart chronyd.service && systemctl enable chronyd.service

#安装python3环境

# yum install python36 -y# ln -s /usr/bin/pip3.6 /usr/bin/pip

#配置

下面在ansible部署的服务器配置

#配置免密登录

# ssh-keygen -t rsa -P ""# for i in {181..184}; do ssh-copy-id 192.168.253.$i; done

#创建目录/soft 将ceph-ansible 克隆到这里

# mkdir /soft && cd /soft

#git克隆加选项-b 指定你需要克隆的版本号

# git clone -b v6.0.11 https://github.com/ceph/ceph-ansible.git

#安装ansible

# yum install ansible -y

#解决ansible的一些环境依赖

# pip install netaddr -i https://pypi.tuna.tsinghua.edu.cn/simple # pip install -r ceph-ansible/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

#配置ansible的hosts

# cat > /soft/ceph-ansible/hosts <<EOF[mons]192.168.253.181192.168.253.182192.168.253.183[mgrs]192.168.253.181192.168.253.182192.168.253.183[mdss]192.168.253.181192.168.253.182192.168.253.183[osds]192.168.253.181192.168.253.182192.168.253.183[clients]192.168.253.184EOF


#group_vars目录

Ceph集群的配置将通过使用ceph-ansible提供的ansible变量来设置。所有这些选项及其默认值都定义在ceph-ansible项目根部的group_vars/目录中。在group_vars/目录里面有很多Ansible配置文件的样本,通过文件名与每种Ceph守护进程相关。例如,osds.yml.sample包含了OSD守护进程的所有默认配置。all.yml.sample文件是一个特殊的group_vars文件,适用于集群中的所有主机。

all.yml文件中定义的配置,作用于集群中的所有进程类型上,在安装过程中,所有进程的安装步骤都可以使用

其他类似于osd.yml的文件,只适用于特定的进程组,只作用于特定进程的安装过程;例如osd.yml只适用于与osd相关的配置

重点来看all.yml文件中的配置

group_vars目录下创建all.yml文件,内容如下

# cat > ceph-ansible/group_vars/all.yml <<EOFmon_group_name: monsosd_group_name: osdsmds_group_name: mdssclient_group_name: clientsmgr_group_name: mgrsconfigure_firewall: falseceph_origin: repositoryceph_repository: communityceph_mirror: https://mirrors.ustc.edu.cn/cephceph_stable_release: pacificceph_version_num: 16ceph_stable_repo: "{{ ceph_mirror }}/rpm-{{ ceph_stable_release }}"ceph_stable_key: https://mirrors.ustc.edu.cn/ceph/keys/release.ascip_version: ipv4monitor_interface: ens18 #根据自己的网卡填写public_network: 192.168.253.0/24 cluster_network: 192.168.253.0/24cephx: truecopy_admin_key: trueosd_objectstore: bluestoreosd_auto_discovery: truedashboard_enabled: falsecopy_admin_key: true#ceph.conf配置以及优化参数ceph_conf_overrides:  global: osd_pool_default_size: 3 osd_pool_default_min_size: 1 mon_allow_pool_delete: true max_open_files: 131072 mon: auth_allow_insecure_global_id_reclaim: false mon_clock_drift_allowed: 1 mon_osd_min_down_reporters: 13 mon_osd_down_out_interval: 600 osd: osd_journal_size: 20000 osd_max_write_size: 512 osd_client_message_size_cap: 2147483648 osd_deep_scrub_stride: 131072 osd_map_cache_size: 1024 osd_recovery_op_priority: 2 osd_recovery_max_active: 10 osd_max_backfills: 4 osd_min_pg_log_entries: 30000 osd_max_pg_log_entries: 100000 osd_mon_heartbeat_interval: 40 ms_dispatch_throttle_bytes: 1048576000 objecter_inflight_ops: 819200 osd_op_log_threshold: 50 osd_crush_chooseleaf_type: 0 journal_max_write_bytes: 1073714824 journal_max_write_entries: 10000 client: rbd_cache: true rbd_cache_size: 335544320 rbd_cache_max_dirty: 134217728 rbd_cache_max_dirty_age: 30 rbd_cache_writethrough_until_flush: false rbd_cache_max_dirty_object: 2 rbd_cache_target_dirty: 235544320EOF

#复制mon、osd、mgr、mds的yml文件


# cd /soft/ceph-ansible/group_vars/# for i in {mons,osds,mgrs,mdss};do cp $i.yml.sample $i.yml;done

#在ceph-ansible的根目录下,执行如下命令,开始部署过程cd /soft/ceph-ansible/

# cp site.yml.sample site.yml# ansible-playbook -i hosts site.yml

centos 8通过ceph-ansible快速部署ceph16(pacific)

#如果需要删除集群

# ansible-playbook -i hosts infrastructure-playbooks/purge-cluster.yml


ceph扩容

既然是分布式存储,那集群扩容是少不了的

这里我新增加两个虚拟机,ceph-osd5(192.168.253.185)和ceph-osd6(192.168.253.186),和前面的虚拟机一样的配置,1块100G系统盘,3块100G的数据盘

#操作步骤

#配置ssh免秘登录


# ssh-copy-id 192.168.253.185# ssh-copy-id 192.168.253.186

#在集群的hosts文件的[osds]群组下增加新的OSD节点名

centos 8通过ceph-ansible快速部署ceph16(pacific)

接下很简单,再跑一遍playbook剧本,等个几分钟即可

# ansible-playbook -i hosts site.yml


centos 8通过ceph-ansible快速部署ceph16(pacific)

再看下ceph状态,多了6个osd,存储空间也多了

centos 8通过ceph-ansible快速部署ceph16(pacific)

看看osd的状态

centos 8通过ceph-ansible快速部署ceph16(pacific)

为啥一部分是ssd,一部分是hdd呢,ceph1-3设置了ssd仿真

centos 8通过ceph-ansible快速部署ceph16(pacific)

ceph-osd5、6没有勾选ssd仿真


后记:生命不息 折腾不止 继续搬砖