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 ceph1
192.168.253.182 ceph2
192.168.253.183 ceph3
192.168.253.184 ceph-client
EOF
#关闭防火墙和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.181
192.168.253.182
192.168.253.183
[mgrs]
192.168.253.181
192.168.253.182
192.168.253.183
[mdss]
192.168.253.181
192.168.253.182
192.168.253.183
[osds]
192.168.253.181
192.168.253.182
192.168.253.183
[clients]
192.168.253.184
EOF
#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 <<EOF
mon_group_name: mons
osd_group_name: osds
mds_group_name: mdss
client_group_name: clients
mgr_group_name: mgrs
configure_firewall: false
ceph_origin: repository
ceph_repository: community
ceph_mirror: https://mirrors.ustc.edu.cn/ceph
ceph_stable_release: pacific
ceph_version_num: 16
ceph_stable_repo: "{{ ceph_mirror }}/rpm-{{ ceph_stable_release }}"
ceph_stable_key: https://mirrors.ustc.edu.cn/ceph/keys/release.asc
ip_version: ipv4
monitor_interface: ens18 #根据自己的网卡填写
public_network: 192.168.253.0/24
cluster_network: 192.168.253.0/24
cephx: true
copy_admin_key: true
osd_objectstore: bluestore
osd_auto_discovery: true
dashboard_enabled: false
copy_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: 235544320
EOF
#复制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
#如果需要删除集群
# 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节点名
接下很简单,再跑一遍playbook剧本,等个几分钟即可
# ansible-playbook -i hosts site.yml
再看下ceph状态,多了6个osd,存储空间也多了
看看osd的状态
为啥一部分是ssd,一部分是hdd呢,ceph1-3设置了ssd仿真
ceph-osd5、6没有勾选ssd仿真
后记:生命不息 折腾不止 继续搬砖