分布式存储ceph部署篇
1、 安装完操作系统
镜像:
centos7.6
镜像下载地址:
链接:https://pan.baidu.com/s/1IuJ5mL5H_4M8U-TlGaxkg 提取码:56c7
2、 配置完硬件
如果用的是真机部署线上环境
•硬件配置请参考egon老师的附件:《附件1: DELL服务器配置》
• ceph安装配置介绍与优化见:《附件2: ceph安装配置介绍与主机优化》
如果用的是虚拟机实验来测试,本机至少16G
admin节点: 1.5G内存2块网卡
mon01: 1.5G内存2块网卡
mon02: 1.5G内存2块网卡
mon03: 1.5G内存2块网卡
osd01 2G内存3块网卡 3块机械盘3块固态盘
osd02 2G内存3块网卡 3块机械盘3块固态盘
osd03 2G内存3块网卡 3块机械盘3块固态盘
虚拟机实验环境请注意:
•1、除了osd节点外,其他节点的硬盘盘不要挂太多,否则cpu占用过多导致虚拟机启动不了,因为都是虚拟出来的
•2、虚拟磁盘空间为20G即可
•3、把虚拟机无关的硬件都删掉,比如usb、声卡、打印机等
3、网络规划
注意:
•若是生产环境,上述ip必须设置成固定ip
•注意关闭 NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
4、每台机器均关闭selinux与防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
systemctl stop firewalld.service
systemctl disable firewalld.service
librados2 ceph-mon ceph-common ceph-mgr ceph-base librbd1 ceph-osd
5、每台主机规范主机名
[root@admin ~]# cat rewriteip.sh
#!/bin/bash
hostnamectl set-hostname $1
sed -i "s#3#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i "s#3#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth1
systemctl restart network
6、 每台主机均开启yum缓存
sed -ri '2c cachedir=/soft' /etc/yum.conf
sed -ri '3c keepcache=1' /etc/yum.conf
mkdir /soft
注意注意注意:yum clean all会将缓存文件夹内缓存的rpm包都清理掉,需要特别注意的是
•1、如果你打算采集rpm包,然后制作成自己的yum源,安装过程中不要手贱执行yum clean all
•2、ceph-deploy在安装时会执行yum clean all命令,然后再按照,所以请在ceph-deploy install 前将一些缓存的包备份好
Ps:关闭yum自动更新:
默认不会安装yum-con,我们也无需关闭yum自动更新
但如果你自己安装了: yum install yum-cron -y,则会默认开启yum更新,请记得关闭
# cat s/etc/yum/yum-cron.conf update_messages = no download_updates = no
7、 每台机器升级操作系统并安装依赖包
如果采用的不是官网源,而是自定义的yum源,那么下述命令中就不需要执行yum install epel-release -y安装epel源了,切记
yum install epel-release -y && yum update -y && yum upgrade -y && reboot
升级后需要重启计算机才能加载新内核,注意,一定要重启计算机
#升级前
系统:CentOS Linux release 7.6.1810 (Core) 内核:3・10・ 0-957・el7・x86_64
# reboot重启后
系统:CentOS Linux release 7.9.2009 (Core)
内核:3.10.0-1160.2 4.1.el7.x86_64 # 升级后
8、每台机器均安装常用软件
yum -y install python-setuptools python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2- devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools expect
9、每台机器均配置ceph源
如果用的是自己的yum源,则无需下述操作
wget https://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpm
rpm -ivh ceph-release-1-1.el7.noarch.rpm
#等我们自己制作自己的yum源后就不需要安装这个包来产生官方源了,但保留着该rpm包吧,如果某天 想找官网的包它就可以派上用场了
mv ceph-release-1-1.el7.noarch.rpm /soft
了解(可能会出bug)
#官方源地址
https://download.ceph.com/
#找到对应版本即可,例如luminous https://download.ceph.com/rpm-luminous/el7/x86_64/
所以我们如果没有安装ceph-release-1-1.el7.noarch.rpm,也可以以自己配置源
[ceph]
name=ceph baseurl=https://download.ceph.com/rpm-luminous/el7/x86_64/ enabled=1
gpgcheck=0
#当然也可以使用阿里云,但阿里云也都是从官方搞过来的,阿里云肯定是快一些,所以看你自己了, egon是喜欢自己直接从官网搞,然后再制作成自己的源 http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64
如果想用egon制作ceph源头,请下载
链接:https://pan.baidu.cOm/s/1IuJ5mL5H 4M8U-TlGaxkg 提取码:56c7
然后参照《07部署自己的ceph源》
10、 每台机器均修改ssh配置
加快远程链接速度,可选,但建议做
sed -ri '/#UseDNS yes/c UseDNS no' /etc/ssh/sshd_config
systemctl restart sshd
11、 在管理节点添加hosts解析,地址为public_addr
!!!注意地址为 publijaddr
!!!注意地址为 publijaddr
!!!注意地址为 publijaddr
cat >> /etc/hosts << EOF
1.1.1.3 admin
1.1.1.4 mon01
1.1.1.5 mon02
1.1.1.6 mon03
1.1.1.7 osd01
1.1.1.8 osd02
1.1.1.9 osd03
EOF
12、 在管理节点制作密钥登录所有其他节点
制作秘钥对
ssh-keygen
在管理节点执行下述脚本(前提:目标主机的root密码均为1)
记得安装 yum install expect -y
[root@admin ~]# cat mianmi.sh
#!/bin/bash
for i in 'admin' 'mon01' 'mon02' 'mon03' 'osd01' 'osd02' 'osd03'
do
expect -c "
spawn ssh-copy-id -i root@$i
expect {
\"(yes/no)\" {send \"yes\r\";exp_continue}
\"password\" {send \"1\r\";exp_continue}
} "
done
13、 在管理节点把/etc/hosts发给其他节点
[root@admin ~]# cat sent.sh
#!/bin/bash
for i in 'mon01' 'mon02' 'mon03' 'osd01' 'osd02' 'osd03'
do
scp /etc/hosts root@$i:/etc/hosts
done
14、 配置ntp服务,保证集群服务器时间统一
统一时间非常重要,必须要做
大前提:chrony服务端客户端配置完后,重启chronyd服务即可快速完成时间同步,在这之后就不要再 手动去修改时间了,一切让时间服务器自己去同步
chrony服务端:admin节点
# 1、安装
yum -y install chrony
# 2、修改配置文件
mv /etc/chrony.conf /etc/chrony.conf.bak
cat > /etc/chrony.conf << EOF
server ntp1.aliyun.com iburst minpoll 4 maxpoll 10
server ntp2.aliyun.com iburst minpoll 4 maxpoll 10
server ntp3.aliyun.com iburst minpoll 4 maxpoll 10
server ntp4.aliyun.com iburst minpoll 4 maxpoll 10
server ntp5.aliyun.com iburst minpoll 4 maxpoll 10
server ntp6.aliyun.com iburst minpoll 4 maxpoll 10
server ntp7.aliyun.com iburst minpoll 4 maxpoll 10
driftfile /var/lib/chrony/drift
makestep 10 3
rtcsync
allow 0.0.0.0/0
local stratum 10
keyfile /etc/chrony.keys
logdir /var/log/chrony
stratumweight 0.05
noclientlog
logchange 0.5
EOF
# 4、启动chronyd服务
#最好重启,这样无论原来是否启动都可以重新加载配置
systemctl restart chronyd.service
systemctl enable chronyd.service
systemctl status chronyd.service
chrony客户端:其他节点,完全一样的配置与操作
#下述步骤一次性粘贴到每个客户端执行即可
#1、安装 chrony
yum -y install chrony
#2、需改客户端配置文件
mv /etc/chrony.conf /etc/chrony.conf.bak
cat > /etc/chrony.conf << EOF
server admin iburst
driftfile /var/lib/chrony/drift makestep 10 3
rtcsync
local stratum 10
keyfile /etc/chrony.key
logdir /var/log/chrony stratumweight 0.05
noclientlog
logchange 0.5
EOF
#3、启动 chronyd
systemctl restart chronyd.service
systemctl enable chronyd.service
systemctl status chronyd.service
若想了解时间服务器细节请点击:https://www.cnblogs.com/linhaifeng/articles/14699550.html
15、 创建工作目录
为所有节点都创建一个ceph工作目录,后续的工作都在该目录下进行,在admin节点运行下述命令
[root@admin ~]# cat create.sh
#!/bin/bash
for host in 'admin' 'mon01' 'mon02' 'mon03' 'osd01' 'osd02' 'osd03'
do
ssh root@$host mkdir -p /etc/ceph
[ $? -eq 0 ] && echo "$host make directory '/etc/ceph' successful"
done
16、 在管理节点安装并配置ceph-deploy
管理节点安装并配置ceph-deploy,在/etc/ceph/目录下面进行,
cd /etc/ceph/
yum -y install ceph-deploy
ceph-deploy 2.0.1默认部署的是mimic版的ceph,若想安装其他版本的ceph,比如luminous,需要修 改ceph-deploy的源,在管理节点运行下述命令
cat >> /etc/profile « EOF
export CEPH_DEPL0Y_REP0_URL=http://download.ceph.com/rpm-luminous/el7/
export CEPH_DEPLOY_GPG_URL=https://download.ceph.com/keys/release.asc
EOF
source /etc/profile
17、 在管理节点为其他节点安装ceph包
先为其他节点安装
cd /etc/ceph
ceph-deploy install mon0{1..3} osd0{1..3}
再为自己安装
ceph-deploy install admin
注意:所有主机都接入了管理网络,我们先通过管理网络部署完毕集群,部署成功后再修改ceph.conf 配置文件指定public_addr网络与cluster_addr网络,然后推送给所有节点,重启服务即可
了解
• 1、ceph-deploy instalI本质就是在执行
yum clean all
yum -y install yum-plugin-priorities
yum -y -q install ceph ceph-release ceph-common ceph-radosgw
#2、如果我们没有修改过源,也可以用一releas e手动指定版本
ceph-deploy install 一一release luminous mon0{1..3} osd0{1..3}
18、 初始化集群
在管理节点运行下述命令,告诉ceph-deploy哪些是监控节点,命令成功后会在/etc/ceph下生成 ceph.conf、 ceph.log、 ceph.mon.keyring文件
cd /etc/ceph
ceph-deploy new mon01 mon02 mon03
如果报错,首先看看主机名是否都按照规定设置,是否与hosts文件保持一致,然后在依次执行下述步 骤
#1、检查防火墙有没有关闭
iptables -F getenforce
setenforce 0
#2、删除之前版本ceph残留的文件
rm -rf /etc/ceph/*
rm -rf /var/lib/ceph/*/*
rm -rf /var/log/ceph/*
rm -rf /var/run/ceph/*
#3、重新进入工作目录,执行命令
cd /etc/ceph/
ceph-deploy new mon01 mon02 mon03
19、 配置初始monitor(s)s并收集所有密钥
在管理节点运行下述命令
cd /etc/ceph
ceph-deploy mon create mon01 mon02 mon03
ceph-deploy --overwrite-conf mon create-initial
ceph-deploy gatherkeys mon01
注意:只有在安装Hammer或更高版时才会创建bootstrap-rgw密钥环。
一旦这些密钥在本地目录中,您就可以设置新的osd等。
# ls /etc/ceph
ceph.conf #ceph的配置文件
ceph-deploy-ceph.log #monitor 的日志
ceph.mon.keyring # monitor 的密钥环文件
20、 部署admin节点
部署admin节点,以后可以在各个节点执行ceph命令,在管理节点运行下述命令
cd /etc/ceph
ceph-deploy admin admin mon01 mon02 mon03 osd01 osd02 osd03 # 第 1个 admin 是选项, 后续的都是主机名
#本质就是把ceph.client.admin.keyring传送到各个节点
21、 部署并激活osd节点
因为我们例子中,每个osd节点三块机械盘当数据盘,三块固态盘每块分两个分区分别用做一个数据盘 的–block-db 和–block-wal
机械盘
/dev/sdb
/dev/sdc
/dev/sdd
固态盘
/dev/sde
/dev/sdf
/dev/sdg
在所有osd节点执行下述脚本,为固态盘分区
#!/bin/bash
SSDS="e f g"
for i in ${SSDS}; do
parted -s /dev/sd${i} mklabel gpt
parted -s /dev/sd${i} mkpart primary 0% 50%
parted -s /dev/sd${i} mkpart primary 51% 100%
done
在管理节点执行下述脚本,部署并激活osdoi、osd02、osd03上的所有osd
#!/bin/bash
cd /etc/ceph
for i in 'osd01' 'osd02' 'osd03'
do
ceph-deploy --overwrite-conf osd create ${i} --data /dev/sdb --block-db /dev/sde1 --block-wal /dev/sde2
ceph-deploy --overwrite-conf osd create ${i} --data /dev/sdc --block-db /dev/sdf1 --block-wal /dev/sdf2
ceph-deploy --overwrite-conf osd create ${i} --data /dev/sdd --block-db /dev/sdg1 --block-wal /dev/sdg2
done
补充排错:若出现以下报错
解决方法如下:
1.查看磁盘
[root@osd01 ~]# df
tmpfs 1013940 52 1013888 1% /var/lib/ceph/osd/ceph-0
tmpfs 1013940 52 1013888 1% /var/lib/ceph/osd/ceph-1
tmpfs 1013940 52 1013888 1% /var/lib/ceph/osd/ceph-2
了解osd daemon ---> lv ---> 裸盘
[root@osd01 ~]# systemctl status ceph-osd@0
● ceph-osd@10.service - Ceph object storage daemon osd.10
Loaded: loaded (/usr/lib/systemd/system/ceph-osd@.service; enabled-runtime; vendor preset: disabled)
Active: active (running) since Thu 2021-05-20 10:29:11 CST; 5h 47min ago
2.停服务
[root@osd01 ~]# systemctl stop ceph-osd@0
[root@osd01 ~]# systemctl stop ceph-osd@1
[root@osd01 ~]# systemctl stop ceph-osd@2
3.卸载磁盘
[root@osd01 ~]# umount /var/lib/ceph/osd/ceph-0
[root@osd01 ~]# umount /var/lib/ceph/osd/ceph-1
[root@osd01 ~]# umount /var/lib/ceph/osd/ceph-2
4.删除
[root@osd01 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 1 0 wz--n- <99.00g 0
ceph-18772c6c-6822-4217-ac27-ece1ee1b99e9 1 1 0 wz--n- <20.00g 0
ceph-1dc94278-8cbf-4b8c-94f5-0550e69d2586 1 1 0 wz--n- <20.00g 0
ceph-acdf1c1e-bbbd-4ea4-b0f2-ed3404368218 1 1 0 wz--n- <20.00g 0
[root@osd01 ~]# vgremove 18772c6c-6822-4217-ac27-ece1ee1b99e9
[root@osd01 ~]# vgremove 1dc94278-8cbf-4b8c-94f5-0550e69d2586
[root@osd01 ~]# vgremove acdf1c1e-bbbd-4ea4-b0f2-ed3404368218
[root@osd01 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <99.00g 0
/dev/sdb ceph-18772c6c-6822-4217-ac27-ece1ee1b99e9 lvm2 a-- <20.00g 0
/dev/sdc ceph-1dc94278-8cbf-4b8c-94f5-0550e69d2586 lvm2 a-- <20.00g 0
/dev/sdd ceph-acdf1c1e-bbbd-4ea4-b0f2-ed3404368218 lvm2 a-- <20.00g 0
[root@osd01 ~]# pvremove /dev/sdb
[root@osd01 ~]# pvremove /dev/sdc
[root@osd01 ~]# pvremove /dev/sdb
5.
然后在admin服务器上执行清理磁盘的任务
[root@admin ceph]# ceph-deploy disk zap osd01 /dev/sdb
[root@admin ceph]# ceph-deploy disk zap osd01 /dev/sdc
[root@admin ceph]# ceph-deploy disk zap osd01 /dev/sdd
[root@admin ceph]# ceph-deploy disk zap osd01 /dev/sde
[root@admin ceph]# ceph-deploy disk zap osd01 /dev/sdf
[root@admin ceph]# ceph-deploy disk zap osd01 /dev/sdg
6.在osd服务器上重新分区
#!/bin/bash
SSDS="e f g"
for i in ${SSDS}; do
parted -s /dev/sd${i} mklabel gpt
parted -s /dev/sd${i} mkpart primary 0% 50%
parted -s /dev/sd${i} mkpart primary 51% 100%
done
7.在admin服务器上重新执行
ceph-deploy --overwrite-conf osd create osd01 --data /dev/sdb --block-db /dev/sde1 --block-wal /dev/sde2
ceph-deploy --overwrite-conf osd create osd01 --data /dev/sdc --block-db /dev/sdf1 --block-wal /dev/sdf2
ceph-deploy --overwrite-conf osd create osd01 --data /dev/sdd --block-db /dev/sdg1 --block-wal /dev/sdg2
ceph
了解:
ceph-deploy osd create中的–data选项后面是作为数据盘的设备,–block-db选项后面是db分 区,–block-wal选项后面是wal分区;db和wal通常部署在NVMe SSD上以提高写入性能,如果没有配 置NVMe SSD或者直接使用NVMe SSD作为数据盘,则不需要–block-db和–block-wal,只需要-- data指定数据盘即可。
#数据日志存在不同的盘符
ceph-deploy --overwrite-conf osd create osd01 --data vgb/lvb --block-db
ssd_vgh1/ssd_lvh1 --block-wal ssd_vgh2/ssd_lvh2
#ps :省略db与wal的说明,只指定data则为(创建于同一个盘)
ceph-deploy osd create node1 --data /dev/sdb
22、在admin节点修改配置文件
[root@admin ceph]# cat ceph.conf
[global]
fsid = cfd076f5-a4f1-4eca-9511-074371a21112
mon_initial_members = mon01, mon02, mon03
mon_host = 1.1.1.4,1.1.1.5,1.1.1.6
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
##如果有两块可以连通的网卡,配置public_network和cluster_network,如果是测试环境没有,就 不配置
public_network = 1.1.1.0/24 #公共网络
cluster_network = 2.2.2.0/24 #集群网络
mon_pg_warn_max_per_osd = 1000
osd_pool_default_size = 3
osd_pool_default_min_size = 2
#后面开启mgr模块会用到这个配置
[mgr]
mgr modules = dashboard
[osd]
osd_max_write_size = 1024
osd_recovery_op_priority = 1
osd_recovery_max_active = 1
osd_recovery_max_single_start = 1
osd_recovery_max_chunk = 1048576
osd_recovery_threads = 1 osd_max_backfills = 1
osd_scrub_begin_hour = 22 osd_scrub_end_hour = 7
osd_recovery_sleep = 0
osd_crush_update_on_start = false ##如果初始化的时候,把该值设置为true,然后重启所有 osd。不然创建完pool会提示:100.000% pgs unknown100.000% pgs unknowno 所有osd都加入, 集群ok后,再统一把该值设置为false,然后重启所有osd
在管理节点把新的配置文件推送到其他节点
cd /etc/ceph
ceph-deploy --overwrite-conf config push mon01 mon02 mon03 osd01 osd03
去admin以外的其他节点重启服务,注意该有的pubi c与cluster网络都需要提前配置好
方式1、重启ceph的所有守护进程
#systemctl restart ceph.target
方式2、按类型启动守护进程
# systemctl restart ceph-mgr.target
# systemctl restart ceph-osd@id
# systemctl restart ceph-mon.target
# systemctl restart ceph-mds.target
# systemctl restart ceph-radosgw.target
查看结果
#找到osd・5所在的节点
ceph osd tree
#去该节点执行命令,查看网络
ceph daemon /var/run/ceph/ceph-osd.5.asok config show | grep cluster_addr
ceph daemon /var/run/ceph/ceph-osd.5.asok config show | grep public_addr
23、开启监控模块
在L版本的Ceph中新增了 manager daemon
在管理节点执行下述命令,把mon01做成mgr节点
ceph-deploy mgr create mon01
在mon01节点执行
ceph mgr moodule enable dashboard
浏览器输入:http://mon01的ip地址:7000
可以在mon01节点查看
ceph mgr dump #查看集群支持的模块 ceph mgr services # 查看服务 systemctl status ceph-mgr.target netstat -tulnp |grep 7000
提醒:目前mgr功能模块可能还存在选举问题,如果多mgr节点都开启,可能会出现web页面取不到 数据,建议只开启一个mgr节点服务,然后关闭其他节点mgr服务。