跳过坑的经验值得大家仔细参考!
不多说, 开始我们的步骤
硬件:
硬件准备(至少三个以上节点,节点不够可使用虚拟机)
节点 | IP | 数据盘(osd) | 角色 |
ceph1 | 192.168.100.2(public) 110.110.100.2(cluster) | osd.1(ssd) osd.2(ssd) | mon,mgr,osd |
ceph2 | 192.168.100.3(public) 110.110.100.3(cluster) | osd.3(ssd) osd.4(ssd) | mon,mgr,osd |
ceph3 | 192.168.100.4(public) 110.110.100.4(cluster) | osd.5(ssd) osd.6(ssd) | mon,mgr,osd |
ceph4 | 192.168.100.5(public) 110.110.100.5(cluster) | osd.7(ssd) osd.8(ssd) | osd |
建议双网口,public为连接集群外部的业务端口,cluster为集群内部的心跳和数据交换端口,public和cluster可使用相同网段,但建议都为独立网卡,每个节点硬盘和硬盘容量大小以及性能最好保持一致,否则容易出现莫名奇妙的错误,老旧硬盘建议先使用硬件raid或zfs组成性能和容量相当的逻辑盘。
1、关闭防火墙和selinux(个人生产环境已在对外端口放置了防火墙,所以主机之间有内部专用交换机连接,对于无防火墙的不建议关闭防火墙,而采取开放端口的策略):
###不解释了,运行后建议重启服务器
#禁用selinux
setenforce 0
#建议直接使用下面语句后重启服务器
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#禁用防火墙,firewalld
systemctl stop firewalld && systemctl disable firewalld
2、配置服务器之间的免密登陆:
###先每个主机单独ssh-keygen:
ssh-keygen
#然后一路回车直到生成完毕
cp ~/.ssh/{id_rsa.pub,authorized_keys}
###在第一个节点执行:
for i in{2..4};do scp ceph$i:~/.ssh/id_rsa.pub ~/.ssh/idrsa_$i;done
cat ~/.ssh/idrsa_* >> ~/.ssh/authorized_keys
for i in {2..4};do scp ~/.ssh/authorized_keys $i:~/.ssh/;done
####终极大法(建议):
#第一个管理节点使用nfs共享home目录,其它节点共享挂载home目录,然后在第一个节点运行下面语句即可;
ssh-keygen
cp ~/.ssh/{id_rsa.pub,authorized_keys}
3、配置时间同步(非常重要):
###所有节点:
yum install -y chrony
systemctl start chronyd && systemctl enable chronyd
#批量执行语句:
for i in {1..4};do ssh $i yum install -y chrony;done
for i in {1..4};do ssh $i systemctl start chronyd && systemctl enable chronyd;done
###第一个节点:
vim /etc/chrony.conf
pool ntp1.aliyun.com iburst
#或
server ntp1.aliyun.com iburst
allow 192.168.100.0/24
allow 110.110.100.0/24
###其他节点:
vim /etc/chrony.conf
server 192.168.100.2 iburst
###如果出现无法连接同步主机的情况,请检查防火墙设置和chrony.keys, 建议注释掉下面这行:
#keyfile /etc/chrony/chrony.keys
4、安装ceph,建议使用yum或dnf 安装:
###选择安装可先查看可安装的模块:
yum list | grep ceph
#mon节点需要安装:
yum install ceph ceph-base ceph-mon
#mgr节点需要安装,建议全部安装:
yum install ceph-mgr ceph-mgr-dashboard
#所有需要挂载硬盘的节点都要安装:
yum install ceph-osd
###建议直接全部安装:
yum install ceph-*
##这里是 yum list | grep ceph 中主要的可选择模块:
ceph.x86_64 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-base.x86_64 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-common.x86_64 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-grafana-dashboards.noarch 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-mds.x86_64 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-mgr.x86_64 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-mgr-dashboard.noarch 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-mgr-diskprediction-local.noarch 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-mgr-k8sevents.noarch 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-mgr-modules-core.noarch 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-mgr-rook.noarch 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-mon.x86_64 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-osd.x86_64 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-prometheus-alerts.noarch 2:17.2.6-4.el9s @centos-ceph-quincy
##之所以不建议生产环境关闭selinux,因为现在大部分的系统安装都配置了相应selinux的准许模块
ceph-selinux.x86_64 2:17.2.6-4.el9s @centos-ceph-quincy
ceph-volume.noarch 2:17.2.6-4.el9s @centos-ceph-quincy
5、从第一个节点进入/etc/ceph目录,配置ceph集群,设置认证keyring及ca证书等
###进入/etc/ceph目录
cd /etc/ceph
手动配置集群mon并启动mon节点:
###第一个mon节点
#配置keyring,临时存储在/tmp目录下:
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
### 授权ceph
chown ceph:ceph /tmp/ceph.mon.keyring
### 生成mon.map, fsid 使用uuidgen生成,并与下方ceph.conf文件中的一致
monmaptool --create --add ceph1 110.110.100.2 --add ceph2 110.110.100.3 --add ceph3 110.110.100.4 --fsid 0bd47374-8167-4bbc-bf12-3a59d4ddd50d /tmp/mon.map
chown ceph:ceph /tmp/mon.map
### 建立mon文件夹一般为{ceph-hostname}
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph1
### 初始化启动mon节点
sudo -u ceph ceph-mon --cluster ceph --mkfs -i ceph1 --monmap /tmp/mon.map --keyring /tmp/ceph.mon.keyring
###验证mon是否启动
systemctl status ceph-mon@ceph1
ceph -s
##########################################################################
### 配置并启动其它mon节点
for i in {2,3};do scp /etc/ceph/ceph.client.admin.keyring $i:/etc/ceph/;done
for i in {2,3};do scp /tmp/ceph.mon.keyring $i:/tmp/;done
for i in {2,3};do scp /tmp/mon.map $i:/tmp/;done
for i in {2,3};do scp /var/lib/ceph/bootstrap-osd/ceph.keyring $i:/var/lib/ceph/bootstrap-osd/;done
###分别进入另外的mon节点,或直接使用批量执行语句
sudo chown ceph:ceph /tmp/ceph.mon.keyring
sudo -u ceph ceph-mon --cluster ceph --mkfs -i ceph2 --monmap /tmp/mon.map --keyring /tmp/ceph.mon.keyring
ceph全局配置参考,可只要前面14行,其他可根据自己实际需求设置:
[global]
###fsid可使用uuidgen直接生成
fsid = 0bd47374-8167-4bbc-bf12-3a59d4ddd50d
mon_initial_members = ceph1, ceph2, ceph3
mon_host = 192.168.100.2, 192.168.100.3, 192.168.100.4
cluster_network = 110.110.100.0/24
public_network = 192.168.100.0/24
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_journal_size = 8172
osd_pool_default_size = 3
osd_pool_default_min_size = 2
osd_pool_default_pg_num = 333
osd_pool_default_pgp_num = 333
osd_crush_chooseleaf_type = 1
osd_deep_scrub_interval = 1209600
mon osd full ratio = .90
mon osd nearfull ratio = .80
osd op threads = 8
journal aio = true
journal dio = true
journal queue max ops = 10000
journal queue max bytes = 335544320
filestore queue max ops = 5000
filestore queue committing max ops = 5000
filestore queue max bytes = 1048576000
ms nocrc = true
rbd op threads = 4
rbd cache size = 268435456
rbd cache max dirty = 134217728
rbd cache max dirty age = 5
rbd cache max dirty object = 64
[client]
rbd cache = true
#rbd cache size = 67108864
rbd cache writethrough until flush = true
[mon]
mon_allow_pool_delete = true
mon_clock_drift_allowed = 2
[mgr]
mgr_modules = dashboard
6、配置mgr节点,一般在mon节点下启用,可只启用一个,建议2个以上:
###进入第一个mon节点,ceph1为hostname:
ceph mon enable-msgr2
mkdir /var/lib/ceph/mgr/ceph-ceph1
chown ceph:ceph /var/lib/ceph/mgr/ceph-ceph1
ceph-authtool --create-keyring /etc/ceph/ceph.mgr.ceph1.keyring --gen-key -n mgr.ceph1 --cap mon 'allow profile mgr' --cap osd 'allow *' --cap mds 'allow *'
ceph auth import -i /etc/ceph/ceph.mgr.ceph1.keyring
ceph auth get-or-create mgr.ceph1 -o /var/lib/ceph/mgr/ceph-ceph1/keyring
###设置dashboard服务地址和指定服务端口
ceph config set mgr mgr/dashboard/ceph1/server_addr 110.110.100.2
ceph config set mgr mgr/dashboard/ceph1/server_port 28081
###启用dashboard
ceph mgr module enable dashboard
systemctl enable ceph-mon@ceph1 --now
###确认服务已启用
netstat -lntp|grep ceph-mon
###如启用其它mgr节点,其步骤与此相同,但整个集群mgr服务只会在一个节点启用,可使用haproxy将正在启用的几点作为主节点,其它为backup,做高可用
###查看当前mgr服务节点信息:
ceph mgr services
### dashboard 启用ssl:
openssl req -new -nodes -x509 \
-subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 \
-keyout dashboard.key -out dashboard.crt -extensions v3_ca
ceph dashboard set-ssl-certificate -i dashboard.crt
ceph dashboard set-ssl-certificate-key -i dashboard.key
###或者
ceph dashboard create-self-signed-cert
###开启ssl认证:
ceph config set mgr mgr/dashboard/ssl true
###重启mgr并确认已经使用https:
####配置dashboard访问用户和密码:
#查看已有账户:
ceph dashboard ac-user-show
#配置密码文件并创建新用户admin,可改为自己想要的名字:
vim /etc/ceph/admin.secret
23029402349ASFEwer
#创建admin用户并使用admin.secret文件中的字符串作为密码
ceph dashboard ac-user-create admin -i ./sf admin.secret
###访问ceph mgr services中dashboard后提示的地址,在浏览器中访问并使用创建的用户登陆即可
7、集群添加osd;
###从mon节点复制keyring到所有需要挂载osd的节点
for i in {2..4};do scp /var/lib/ceph/bootstrap-osd/ceph.keyring $i:/var/lib/ceph/bootstrap-osd/ceph.keyring;done
chown ceph:ceph /var/lib/ceph/bootstrap-osd/ceph.keyring
######################################
###全新硬盘可直接加入集群:
lsblk
#确认需要添加的磁盘路径后,使用ceph-volume添加;
ceph-volume lvm create --data /dev/sda
ceph-volume lvm create --data /dev/sdb
#其它节点操作相同
###已经使用过的硬盘需要先擦除和zap:
#清除磁盘内容
wipefs -af /dev/sda
#重新zap 该磁盘
ceph-volume lvm zap /dev/sda
#将磁盘加入集群
ceph-volume lvm create --data /dev/sda
########确认硬盘上线
ceph osd tree