分布式存储Ceph部署
配置实验环境
1. 安装镜像 CentOS-7.6
版本
链接:https://pan.baidu.com/s/16stKTebKwD4Nceh22RX2Nw
提取码:1234
2. 配置硬件,虚拟机来进行测试,本机至少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块固态盘
3. 网络规划
主机 管理网络 public网络 cluster网络
admin 192.168.70.3 1.1.1.3/24 无
mon01 192.168.70.4 1.1.1.4/24 无
mon02 192.168.70.5 1.1.1.5/24 无
mon03 192.168.70.6 1.1.1.6/24 无
osd01 192.168.70.7 1.1.1.7/24 2.2.2.7/24
osd02 192.168.70.8 1.1.1.8/24 2.2.2.8/24
osd03 192.168.70.9 1.1.1.9/24 2.2.2.9/24
4. 每台虚拟机均关闭selinux与防火墙
1. 关闭selinux
vim /etc/selinux/config 修改配置文件,需要下一次开机才生效
SELINUX=disabled 将配置文件SELinux的模式改成宽松模式
2. 关闭防火墙
firewall-cmd --set-default-zone=trusted 永久关闭防护墙
firewall-cmd --get-default-zone 查看防火墙当前状态
3. 重启计算机
reboot
5. 每台机器修改的主机名和对应的IP地址
vim changeip
#!/bin/bash
sed -i "s#.3#.$1#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]
hostnamectl set-hostname $2
systemctl restart network
bash changeip 5 主机名 $1是ip,$2是主机名传参时顺序千万不要传错了
6. 每台机器均开启yum缓存
- 开启yum缓存是为了采集rpm包,然后制作成自己的yum源,安装过程中不要执行yum clean all。
- 使用ceph-deploy命令进行安装时会默认会先执行yum clean all命令,所以在ceph-depoly install执行前将缓存的rpm包备份好。
1. 修改开启缓存的配置文件
vim /etc/yum.conf
cachedir=/soft 第二行,修改yum缓存的压缩包所保存的目录。
keepcache=1 第三行
2. 创建yum缓存文件所保存的目录
mkdir /soft
7. 每台机器升级操作系统并安装依赖包
yum -y update && yum -y upgrade && reboot
注意: 升级后需要重启计算机才能加载新内核 , 注意 , 一定要重启计算机。
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 zipqunzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-develnss_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 bisonsetuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfiggit bind-utils tmux elinks numactl iftop bwm-ng net-tools expect
9. 每台机器均配置ceph源
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 安装ceph软件包
ls /etc/yum.repos.d/ 查看ceph软件包的yum源
# ceph.repo
10. 每台计算机均修改ssh配置
- 加快远程链接速度,可选,但是建议做
sed -ri '/#UseDNS yes/c UseDNS no' /etc/ssh/sshd_config
systemctl restart sshd
11. 在管理节点添加hosts解析,地址为public_addr
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. 在管理节点制作密钥登陆所有其他节点
1. 制作秘钥对
ssh-keygen
2. 在管理节点编写脚本文件,注意所有的root密码均为123
yum -y install expect
vim ssh_id
#!/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 \"123\r\";exp_continue} }
"
done
3. 执行脚本文件
bash ssh_id
13. 在管理节点把/etc/hosts文件发给其他节点
1. 在管理节点编写脚本文件,将/etc/hosts文件发给其他节点
vim hosts.sh
#!/bin/bash
for i in 'mon01' 'mon02' 'mon03' 'osd01' 'osd02' 'osd03'
do
scp /etc/hosts root@$i:/etc/hosts
done
2. 执行脚本文件
bash hosts.sh
14. 配置ntp服务,保证集群服务器时间统一
- 统一时间非常重要,必须要做,统一时间用的是
utp
协议 - chrony服务端和客户端配置完成后,重启chronyd服务即可快速完成时间同步,在这之后就不要再手动去修改时间了,一切让时间服务器自己去同步。
chrony服务端:管理端(admin) 节点
1. 安装chrony服务
yum -y install chrony
2. 修改服务端配置文件,同步时间到阿里云
mv /etc/chrony.conf /etc/chrony.conf.bak 备份chrony时间同步的配置文件
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 # 无论是谁,能ping同本机都可以根本机的时间进行同步
local stratum 10
keyfile /etc/chrony.keys
logdir /var/log/chrony
stratumweight 0.05
noclientlog
logchange 0.5
EOF
3. 启动chronyd服务端
systemctl restart chronyd.service 重启chrony时间同步服务
systemctl enable chronyd.service 设置服务为开启自启
systemctl status chronyd.service 查看chrony时间同步服务当前状态
chrony客户端: 其他所有的节点,完全一样的配置与操作
1. 安装chrony服务
yum -y install chrony
2. 修改客户端配置文件,同步时间到管理端(admin)节点
mv /etc/chrony.conf /etc/chrony.conf.bak 备份chrony时间同步的配置文件
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. 启动chrony服务
systemctl restart chronyd.service 重启chrony时间同步服务
systemctl enable chronyd.service 设置服务为开启自启
systemctl status chronyd.service 查看chrony时间同步服务当前状态
4. 查看客户端当前的时间源
chronyc sources -vchronyc sources -v 查看客户端当前的时间源
# 210 Number of sources = 1
# MS Name/IP address Stratum Poll Reach LastRx Last sample
# ===============================================================================
# ^* admin 3 8 377 239 -450ns[ -786ns] +/- 19ms
部署Ceph存储
1. 创建工作目录
- 为所有节点都创建一个ceph工作目录,后续的工作都在该目录下进行,在管理节点运行下述命令
1. 在管理节点编写脚本文件
vim ceph.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
2. 执行脚本文件
bash ceph.sh
2. 在管理节点安装并配置ceph-deploy,这个命令可以远程部署其他节点的ceph软件
1. 在管理节点安装并配置ceph-depoly,在/etc/ceph目录下面进行
cd /etc/ceph/
yum -y install ceph-deploy
2. ceph-deploy 2.0.1默认部署的是mimic版本的ceph源,我们需要将ceph-deploy的源修改成luminous版本,在管理节点运行下述命令
cat >> /etc/profile << EOF
export CEPH_DEPLOY_REPO_URL=http://download.ceph.com/rpm-luminous/el7/ # 将ceph-deploy的源修改成luminous版本
export CEPH_DEPLOY_GPG_URL=https://download.ceph.com/keys/release.asc # 添加pgpcheck认证
EOF
source /etc/profile # 执行/etc/profile文件中的命令
3. 在管理节点为其他节点安装ceph软件
- 所有的主机都接入了管理网络,我们先通过管理网络部署完毕集群,部署成功后再修改ceph.conf配置文件指定的public_addr网络与cluster_addr网络,然后推送给所有节点,重启服务即可。
- 注意:使用ceph-deploy安装时会默认会先执行yum clean all命令,所以在ceph-depoly install执行前将缓存的rpm包备份好!!!
1. 备份本机之前已经缓存好的yum软件包
mkdir /back/
find /soft/ -name "*.rpm" -exec cp -r {} /back/ \;
2. 在管理节点为其他节点安装ceph软件包
cd /etc/ceph
ceph-deploy install mon0{1..3} osd0{1..3} # 安装软件包和依赖包
ceph-deploy install admin # admin节点安装ceph软件,可以充当客户端做测试
- ceph-deploy install本质就是在执行
# yum clean all 1.清空yum缓存
# yum -y install yum-plugin-priorities 2.安装yum插件和压缩包
# yum -y -q install ceph ceph-release ceph-common ceph-radosgw 3.安装ceph软件
4. 初始化集群
- 在管理节点运行下述命令,告诉ceph-depoly哪些是监控节点,命令成功后会在/etc/ceph下生成
ceph.conf
、ceph.log
、ceph.mon.keyring
文件。
1. 在管理节点生成监控节点的配置文件,日志文件,密钥环文件
cd /etc/ceph
ceph-deploy new mon01 mon02 mon03 # 生成monitor节点的配置文件,日志文件,密钥环文件
5. 配置初始 monitor(s)、并收集所有密钥
- 在管理节点运行下述命令
1. 创建监控节点
cd /etc/ceph # 需要在工作目录下检索密钥环文件
ceph-deploy mon create mon01 mon02 mon03 # 创建监控节点,监控节点为:mon01 mon02 mon03(默认会把在监控节点的配置文件从管理端推送给monitor节点的服务器, 并且默认在每一个监控节点启动服务)
ceph-deploy --overwrite-conf mon create-initial # 把监控节点的配置文件从管理端推送到每一个监控节点
ceph-deploy gatherkeys mon01 # 获取mon01的密钥环文件
6. 部署能够管理ceph集群的节点
- 部署能执行所有ceph命令的节点
1. 在管理节点创建admin节点
cd /etc/ceph
ceph-deploy admin admin mon01 mon02 mon03 osd01 osd02 osd03 # 第一个admin是选项 , 后续都是主机名
ceph-deploy admin 本质就是把ceph.client.admin.keyring传送到各个节点
7. 部署并激活osd节点
- 因为我们的例子中,每一个osd节点三块机械盘当数据盘,三块固态盘每块分别用做一个数据盘的–block-db(日志信息)和–block-wal(元数据信息)。
机械盘 | 固态盘
/dev/sdb | /dev/sde
/dev/sdc | /dev/sdf
/dev/sdd | /dev/sdg
- 在所有的osd服务器节点上对模拟的固态盘进行分区,执行脚本文件
1. 在三个osd节点上创建分区脚本文件
vim osd.sh
#!/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
2. 重启分区脚本文件
bash osd.sh
- 在管理节点执行下述脚本,部署并激活osd01、osd02、osd03上的所有osd节点。
1. 在管理端创建osd节点的脚本文件
vim osd_daemon.sh
#!/bin/bash
cd /etc/ceph
for i in `seq 1 3` # `seq 1 3`为1、2、3
do
ceph-deploy --overwrite-conf osd create osd0${i} --data /dev/sdb --block-db /dev/sde1 --block-wal /dev/sde2
# 创建osd1、2、3节点,sdb对应两个分区sde1和sde2
ceph-deploy --overwrite-conf osd create osd0${i} --data /dev/sdc --block-db /dev/sdf1 --block-wal /dev/sdf2
# 创建osd1、2、3节点,sdc对应两个分区sdf1和sdf2
ceph-deploy --overwrite-conf osd create osd0${i} --data /dev/sdd --block-db /dev/sdg1 --block-wal /dev/sdg2
# 创建osd1、2、3节点,sdd对应两个分区sdg1和sdg2
done
2. 在管理端执行osd节点的脚本文件
bash osd_daemon.sh
查看ceph状态,开启图形化界面
- 安装web图形化界面查看ceph状态,默认端口7000
1. 在管理节点执行下述命令,把mon01做成mgr节点
ceph-deploy mgr create mon01
2. 在mon01节点执行
ceph mgr module enable dashboard
- 测试
浏览器输入192.168.70.4:7000,可查看图形化界面
ceph -s 查看监控状态
# cluster:
# id: f5f99a03-8e21-41e6-8ccd-4c2dc4bd40c4
# health: HEALTH_OK
# services:
# mon: 3 daemons, quorum mon01,mon02,mon03
# mgr: mon01(active)
# osd: 9 osds: 9 up, 9 in
# data:
# pools: 0 pools, 0 pgs
# objects: 0 objects, 0B
# usage: 9.04GiB used, 171GiB / 180GiB avail
# pgs:
将本地缓存的rpm包打包成自己的源
- 这一步,主要是为了方便我们以后部署ceph,就不需要去网站找安装包了。
1. 除了admin管理节点以外,其他所有机器都执行
mkdir /abc/
find /soft/ -name "*.rpm" -exec cp -r {} /abc/ \;
2. 将所有节点的rpm包都汇总到admin管理节点的/abc/目录下
mkdir /abc/
scp -r root@mon01:/abc/* /abc/
scp -r root@mon02:/abc/* /abc/
scp -r root@mon03:/abc/* /abc/
scp -r root@osd01:/abc/* /abc/
scp -r root@osd02:/abc/* /abc/
scp -r root@osd03:/abc/* /abc/
3. 将admin管理节点/abc目录下所有汇总的rpm包都拷贝到本地的/bak目录下
cp /abc/* /bak/
mv /bak/ /ceph-luminous/
4. 制作yum源
yun -y install createrepo # 下载制作依赖关系的yum源工具
createrepo /ceph-luminous/
# 打开/ceph-luminous/,会生成一个repodata的目录
5. 将/ceph-luminous目录中所有的rpm包进行压缩
tar -zcf ceph-luminous.tar.gz /ceph-luminous/
部署过程中常见的错误
- 我们在执行脚本文件
bash osd_daemon.sh
,部署osd节点的时候。如果报错了,那么我们需要先进行磁盘清理,在重新部署osd节点。如下所示 :
1. 切换到osd节点的服务器,查看当前osd节点的部署情况
df -h # 查看当前osd节点的挂载使用情况(osd daemon ----> lvm -----> 裸盘)
lsblk # 查看osd节点的磁盘分区
2. 停止osd节点的所有服务
systemctl stop ceph-osd@0
systemctl stop ceph-osd@1
systemctl stop ceph-osd@2
3. 卸载osd节点的数据盘
umount /var/lib/ceph/osd/ceph-0
umount /var/lib/ceph/osd/ceph-1
umount /var/lib/ceph/osd/ceph-2
4. 删除vg卷组
vgs 查看卷组信息
# VG #PV #LV #SN Attr VSize VFree
# centos 1 2 0 wz--n- <19.00g 0
# ceph-1b334040-f508-4887-9f11-c7b0ad4f1025 1 1 0 wz--n- <20.00g 0
# ceph-33594263-78cd-41e4-b844-9b33eeb03876 1 1 0 wz--n- <20.00g 0
# ceph-4829e4fe-f5e0-477a-bc04-e1af93e13a82 1 1 0 wz--n- <20.00g 0
vgremove 1b334040-f508-4887-9f11-c7b0ad4f1025 卸载卷组里面的裸盘
vgremove 33594263-78cd-41e4-b844-9b33eeb03876 卸载卷组里面的裸盘
vgremove 4829e4fe-f5e0-477a-bc04-e1af93e13a82 卸载卷组里面的裸盘
5. 删除pv物理卷
pvs 查看物理卷
# PV VG Fmt Attr PSize PFree
# /dev/sda2 centos lvm2 a-- <19.00g 0
# /dev/sdb ceph-33594263-78cd-41e4-b844-9b33eeb03876 lvm2 a-- <20.00g 0
# /dev/sdc ceph-4829e4fe-f5e0-477a-bc04-e1af93e13a82 lvm2 a-- <20.00g 0
# /dev/sdd ceph-1b334040-f508-4887-9f11-c7b0ad4f1025 lvm2 a-- <20.00g 0
pvremove /dev/sdb 卸载物理卷
pvremove /dev/sdc 卸载物理卷
pvremove /dev/sdb 卸载物理卷
6. 在管理服务器(admin)上执行清理磁盘的任务
ceph-deploy disk zap osd01 /dev/sdb # osd02、osd03执行相同操作
ceph-deploy disk zap osd01 /dev/sdc # osd02、osd03执行相同操作
ceph-deploy disk zap osd01 /dev/sdd # osd02、osd03执行相同操作
ceph-deploy disk zap osd01 /dev/sde # osd02、osd03执行相同操作
ceph-deploy disk zap osd01 /dev/sdf # osd02、osd03执行相同操作
ceph-deploy disk zap osd01 /dev/sdg # osd02、osd03执行相同操作
7. 在osd服务器上重新分区
bash osd.sh
8. 在admin服务器上重新创建osd节点
bash osd_daemon.sh