安装ceph流程
预检
一、部署服务器安装
1、新加软件包源
用 Ceph 的最新主稳定版名字替换 {ceph-stable-release}
(如 firefly
),用你的Linux发行版名字替换 {distro}
(如 el6
为 CentOS 6 、 el7
为 CentOS 7 、 rhel6
为 Red Hat 6.5 、 rhel7
为 Red Hat 7 、 fc19
是 Fedora 19 、 fc20
是 Fedora 20 )
# vim /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
2、安装ceph-deploy
# yum install ceph-deploy
二、节点服务器安装
1、安装NTP服务
# yum install ntp ntpdate ntp-doc
# vim /etc/ntp.conf
server ntp服务器地址 iburst
# systemctl restart ntp
# systemctl enable ntp
2、创建CEPH用户
ceph-deploy
工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo
的权限
并且用户名不能叫ceph,部署服务器到节点的普通用户需要免密登陆
# useradd {username}
允许无密码 SSH 登录
# ssh-keygen
把公钥拷贝到各 Ceph 节点
# ssh-copy-id {username}@node1
# ssh-copy-id {username}@node2
# ssh-copy-id {username}@node3
部署服务器和节点修改/etc/hosts 使服务器可以解析hostname
用 ping
短主机名( hostname -s
)的方式确认网络联通性
192.168.xxx.111 node1
192.168.xxx.222 node2
192.168.xxx.333 node3
3、关闭防火墙
关闭部署服务器和节点的防火墙
# systemctl stop firewalld
# systemctl stop iptables
# systemctl disable firewalld
# systemctl disable iptables
4、关闭selinux
在 CentOS 和 RHEL 上, SELinux 默认为 Enforcing
开启状态
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
# getenforce
5、优先级/首选项
# yum install yum-plugin-priorities
CEPH存储集群
一、创建集群
1、创建指定目录
ceph-deploy
会把文件输出到当前目录,所以请确保在此目录下以普通用户执行 ceph-deploy
# mkdir -p /tools/my-cluster
# cd /tools/my-cluster
2、创建集群
# ceph-deploy new node1 node2 node3
3、安装CEPH
# ceph-deploy install admin-node node1 node2 node3
4、配置初始monitor
# ceph-deploy mon create-initial
5、确认文件
完成上述操作后,当前目录里应该会出现这些密钥环:
{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring
{cluster-name}.bootstrap-mds.keyring
{cluster-name}.bootstrap-rgw.keyring
二、添加osd
1、列出node 可用磁盘
# ceph-deploy disk list node1
# ceph-deploy disk list node2
# ceph-deploy disk list node3
2、杀死、擦除、销毁-----设备的分区表和内容
执行前确定磁盘名称正确
# ceph-deploy disk zap node1 /dev/sdb
# ceph-deploy disk zap node2 /dev/sdb
# ceph-deploy disk zap node3 /dev/sdb
3、初始化osd磁盘
# ceph-deploy osd create node1 --data /dev/sdb
# ceph-deploy osd create node2 --data /dev/sdb
# ceph-deploy osd create node3 --data /dev/sdb
4、复制配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点
# ceph-deploy admin admin-node node1 node2 node3
5、检查集群健康状态
用root执行
# ceph health
# ceph -s
等 peering 完成后,集群应该达到 active + clean
状态
三、启用cephfs
1、启用mds服务
至少需要一个元数据服务器才能使用 CephFS
# ceph-deploy mds create node1
2、创建pool
CephFS 需要两个 Pools,cephfs_data 和 cephfs_metadata,分别存储文件数据和文件元数据。
# ceph osd pool create cephfs_data 128 128
# ceph osd pool create cephfs_metadata 64 64
一般 metadata pool 可以从相对较少的 PGs 启动, 之后可以根据需要增加 PGs,存储着 CephFS 文件的元数据
3、创建CephFS
metadata,data按照顺序。
# ceph fs new cephfs cephfs_metadata cephfs_data
4、查看CephFS
# ceph fs ls
四、挂载CephFS
挂载cephfs有两种方式,kernel driver和fuse
1、kernel driver挂载
1)关闭认证情况
# sudo mkdir /mnt/wyl
# sudo mount -t ceph 192.168.xxx.111:/ /mnt/wyl
设置开机自动挂载/etc/fstab
# 192.168.xxx.111:/ /mnt/wyl ceph noatime,_netdev 0 2
2)启用认证情况
# cat ceph.client.admin.keyring
[client.admin]
key = AQBSdU5bT27AKxAAvKoWQdGpSuNRCHjC4B8DVA==
# mount -t ceph 192.168.xxx.111:/ /mnt/wyl -o name=admin,secret=AQBSdU5bT27AKxAAvKoWQdGpSuNRCHjC4B8DVA==
3) 查看认证方式
auth的值为none为禁用,cephx为启用
# cat /etc/ceph/ceph.conf
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
2、fuse挂载
1)安装挂载工具
# yum -y install ceph-fuse ceph
2)将存储节点的admin秘钥拷贝到本地
# ssh root@node1 "ceph-authtool -p /etc/ceph/ceph.client.admin.keyring" > admin.key
3)赋予权限
# chmod 600 admin.key
4)执行挂载
# mount -t ceph node1:/ /mnt -o name=admin,secretfile=admin.key
# df -hT
5)设置开机自动挂载/etc/fstab
id=admin,conf=/etc/ceph/ceph.conf /mnt fuse.ceph defaults 0 0
常见问题
一、admin_socket: exception getting command descriptions: [Errno 2] No such file or directory问题解决
解决方法
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/*
二、命令mount -t ceph xxx 或者 mount.ceph xxx挂载cephfs时,提示"mount error 22 = Invalid argument"。
解决方法
1、查看密钥,可知用户名admin的密钥如下:
# sudo cat ./ceph.client.admin.keyring
[client.admin]
key = AQDYoQFd0Xr+CRAAIwRmwD7yWim2Nzq44wRwqw==
2、直接指定密钥挂载
# sudo mount.ceph node1:6789:/ ~/client_cephfs_mnt/ -o name=admin,secret=AQDYoQFd0Xr+CRAAIwRmwD7yWim2Nzq44wRwqw==
三、无法删除image报rbd: error: image still has watchers
解决方法
1、查看当前image上的watcher
# rbd status foo
watcher=192.168.xxx.111:0/1135656048 client.4172 cookie=1
2、把该watcher加入黑名单:
# ceph osd blacklist add 192.168.xxx.111:0/1135656048
blacklisting 192.168.xxx.111:0/1135656048 until 2017-10-18 12:04:19.103313 (3600 sec)
3、删除该image:
# rbd rm foo
Removing image: 100% complete...done.
4、查询黑名单列表
# ceph osd blacklist ls
listed 1 entries
192.168.xxx.111:0/1135656048 2017-10-18 12:04:19.103313
5、从黑名单移出一个客户端:
# ceph osd blacklist rm 192.168.xxx.111:0/1135656048
un-blacklisting 192.168.xxx.111:0/1135656048
6、清空黑名单:
# ceph osd blacklist clear
removed all blacklist entries
四、Ceph client无法连接至集群问题解决
解决方法
1、确定节点mon已启
覆盖配置执行ceph-deploy mon create-initial
# ceph-deploy --overwrite-conf mon create-initial
五、mon 挂掉后的快速恢复
解决方法
1、移除该mon
# ceph mon remove node1
2、清理该mon的文件
# rm -rf /var/lib/ceph/mon/*
https://blog.csdn.net/kong62/article/details/76998969
六、Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
其实执行代码:
ceph osd pool delete ecpool ecpool –yes-i-really-really-mean-it
就可以完成删除,但是此时有时候会报错:
这是由于没有配置mon节点的 mon_allow_pool_delete 字段所致,解决办法就是到mon节点进行相应的设置。
解决方案
1、打开mon节点的配置文件
# vi /etc/ceph/ceph.conf
2、在配置文件中添加如下内容
mon_allow_pool_delete = true
3、重启所有节点ceph-mon,osd服务:
# systemctl restart ceph-mon.target
4、执行删除pool命令
# ceph osd pool delete ecpool ecpool –yes-i-really-really-mean-it
yum install ceph-deploy.noarch -y
mkdir ceph-cluster
cd ceph-cluster/
ceph-deploy new k8s-ceph-0001 k8s-ceph-0002 k8s-ceph-0003
ceph-deploy mon create-initial
ceph-deploy admin k8s-ceph-0001 k8s-ceph-0002 k8s-ceph-0003
ceph-deploy mgr create k8s-ceph-0001 k8s-ceph-0002 k8s-ceph-0003
配置
一、ceph.conf文件配置
[global]
fsid = 1235bE62-8ae1-difg-893a-892a675757c6
mon_initial_members = ceph-node01,ceph-node02,ceph-node03
mon_host = 192.168.170.11,192.168.170.12,192.168.170.13
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public_network = 192.168.170.0/22 #管理网络
cluster_network = 192.168.180.0/22 #集群网络
mon_pg_warn_max_per_osd = 1000 #每个osd上pg数量警告值,这个可以根据具体规划来设定
osd_pool_default_size = 3 #默认副本数为3
osd_pool_default_min_size = 2 #最小副本数为2,也就是只能坏一个
mon_osd_full_ratio = .85 #存储使用率达到85%将不再提供数据存储
mon_osd_nearfull_ratio = .70 #存储使用率达到70%集群将会warn状态
osd_deep_scrub_randomize_ratio = 0.01 #随机深度清洗概率,值越大,随机深度清洗概率越高,太高会影响业务
[osd]
osd_max_write_size = 1024 #默认90M,一次写操作最小值
osd_recovery_op_priority = 1 #默认为10, 1-63 osd修复操作的优先级, 。值越小,优先级越低
osd_recovery_max_active = 1 #限定每个osd上同时有多少个pg可以同时进行recover
osd_recovery_max_single_start = 1 # 和osd_recovery_max_active一起使用,要理解其含义。假设我们配置osd_recovery_max_single_start为1,osd_recovery_max_active为3,那么,这意味着OSD在某个时刻会为一个PG启动一个恢复操作,而且最多可以有三个恢复操作同时处于活动状态。
osd_recovery_max_chunk = 1048576 #默认为8388608, 设置恢复数据块的大小,以防网络阻塞
osd_recovery_threads = 1 #恢复数据所需的线程数
osd_max_backfills = 1 #集群故障后,最大backfill数为1,太大会影响业务
osd_scrub_begin_hour = 22 #清洗开始时间为晚上22点
osd_scrub_end_hour = 7 #清洗结束时间为早上7点
osd_recovery_sleep = 0 #默认为0,recovery的时间间隔,会影响recovery时常,如果recovery导致业务不正常,可以调大该值,增加时间间隔
osd_crush_update_on_start = false # 新加的osd会up/in,但并不会更新crushmap,prepare+active期间不会导致数据迁移
概念
一、pg_num和pgp_num概念
pg_num:存储池的目录个数
pgp_num:pg可用的osd排列组合数量
1、仅增大pg_num
因为pgp_num没变,pg的osd组合仍只能从当前pgp_num种组合里面挑选,导致新增的pg和旧pg会有重复的osd组合,该现象称之为分裂;此时pg和osd的映射没有变
2、继续增大pgp_num,使其等于pg_num
旧pg没有变化,但新增pg的osd组合发生变化,即开始重新分布
常用命令
一、查看mon节点上所有启动的ceph服务
# systemctl list-units --type=service|grep ceph
二、打印存储池列表
# ceph osd lspools