部署Ceph分布式存储

一、环境准备

1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

2. 关闭selinux
setenforce 0

3. 关闭NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager

4. 配置hosts
cat >> /etc/hosts << 'EOF'
## Ceph Node
192.168.2.101 cephnode1
192.168.2.102 cephnode2
192.168.2.103 cephnode3
EOF

5. 配置主机名(分别设置)
hostnamectl set-hostname cephnode1
hostnamectl set-hostname cephnode2
hostnamectl set-hostname cephnode3

6. 配置文件描述符
cat >> /etc/security/limits.conf << EOF
* soft nproc 11000
* hard nproc 11000
* soft nofile 655350
* hard nofile 655350
EOF

7. 内核参数优化
echo 'vm.swappiness = 0' >> /etc/sysctl.conf
sysctl -p

8. 同步时间
/bin/cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
systemctl restart chronyd
systemctl enable chronyd

9. 设置read_ahead
echo "8192" > /sys/block/sda/queue/read_ahead_kb

10. 设置I/O Scheduler
- SSD要用noop,SATA/SAS使用deadline
示例:
echo "deadline" >/sys/block/sd[x]/queue/scheduler
echo "noop" >/sys/block/sd[x]/queue/scheduler

11. 配置免密登录(master->node)
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@cephnode1
ssh-copy-id -i /root/.ssh/id_rsa.pub root@cephnode2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@cephnode3

节点hostname要和hosts配置文件中的主机名保持一致

二、配置ceph源

  1. 配置阿里云ceph源
cat > /etc/yum.repos.d/ceph.repo << 'EOF'
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
EOF
  1. 下载阿里云base源和epel源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  1. 重建yum缓存
yum clean all
yum makecache

离线环境配置

  1. 下载安装包以及依赖(online主机)
yum install yum-utils createrepo
mkdir ceph-offline
yumdownloader --resolve --destdir ceph-offline ceph-deploy-2.0.1-0.noarch  ceph-12.2.13-0.el7.x86_64 ceph-radosgw
createrepo ceph-offline
tar -zcf ceph-offline.tar.gz ceph-offline
  1. 离线主机配置
1. 解压
tar -zxf ceph-offline.tar.gz -C /usr/local/src
2. 配置yum源
cat > /etc/yum.repos.d/ceph.repo << EOF
[ceph]
name=ansible
baseurl=file:///usr/local/src/ceph-offline
gpgcheck=0
enabled=1
EOF

3. 重建缓存
yum clean all
yum makecache

三、安装ceph

所有节点

yum install ceph

Master节点

yum install ceph-deploy ceph-radosgw

四、集群配置

创建ceph集群

mkdir ceph-cluster
cd ceph-cluster
ceph-deploy new cephnode1 cephnode2 cephnode3

更新配置文件命令

ceph-deploy --overwrite-conf config push cephnode1 cephnode2 cephnode3

生成密钥

生成monitor检测集群所使用的的秘钥

ceph-deploy mon create-initial

public_network = 192.168.2.0/24

ceph-deploy --overwrite-conf config push cephnode1 cephnode2 cephnode3

安装Ceph CLI

方便执行一些管理命令

ceph-deploy admin cephnode1 cephnode2 cephnode3

配置mgr

用于管理集群

ceph-deploy mgr create cephnode1 cephnode2 cephnode3

部署rgw

对象存储时候会用,可多节点部署,用nginx做LB+HA

## 部署rgw服务ceph-deploy rgw create cephnode1 cephnode2

以civetweb作为前端配置:

## 配置ceph.conf,加入如下:
[client.rgw.cephnode1]
rgw_frontends = "civetweb port=7480"
host = 192.168.2.101

[client.rgw.cephnode2]
rgw_frontends = "civetweb port=7480"
host = 192.168.2.102

## 同步配置文件
ceph-deploy --overwrite-conf config push cephnode1 cephnode2 cephnode3

### radosgw重启服务
systemctl restart ceph-radosgw.target
  1. [client.rgw.]字段,其中“GATEWAY-NODE”为所在网关节点的短主机名,即:hostname -s;
  2. [client.rgw.]字段与[global]字段在相同层级,且1个网关节点使用1个字段;
  3. 验证
http://rgw_ip:7480
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName/>
</Owner>
<Buckets/>
</ListAllMyBucketsResult>

部署MDS(CephFS)

ceph-deploy mds create cephnode1 cephnode2 cephnode3 

添加osd

ceph-deploy osd create --data /dev/sdb cephnode1
ceph-deploy osd create --data /dev/sdb cephnode2
ceph-deploy osd create --data /dev/sdb cephnode3
  1. 直接加入裸盘即可,不需要格式化挂载
  2. 执行命令时候,需要在ceph-cluster集群目录下

五、Ceph常用命令

查看集群状态
ceph -s
ceph health

实时输出日志
ceph -w

查看磁盘
ceph osd tree

查看集群使用情况
ceph df

查看ceph存储池
ceph osd lspools

dump命令
ceph mon dump
ceph mgr dump
ceph osd dump
ceph pg dump

检查ceph monitor OSD 和PG状态
ceph osd stat
ceph pg stat

查看集群的认证密钥
ceph auth list

如果健康检测提示:

ceph health detail
HEALTH_WARN mons are allowing insecure global_id reclaim
AUTH_INSECURE_GLOBAL_ID_RECLAIM_ALLOWED mons are allowing insecure global_id reclaim
 mon.cephnode1 has auth_allow_insecure_global_id_reclaim set to true
 mon.cephnode2 has auth_allow_insecure_global_id_reclaim set to true
 mon.cephnode3 has auth_allow_insecure_global_id_reclaim set to true

执行:

ceph config set mon auth_allow_insecure_global_id_reclaim false

六、CephFs文件系统

PG_Num计算公式

( Target PGs per OSD ) x ( OSD # ) x ( %Data ) / ( Size )

  • Target PGs per OSD:预估每个OSD的PG数,一般取100计算。当预估以后集群OSD数不会增加时,取100计算;当预估以后集群OSD数会增加一倍时,取200计算。
  • OSD #:集群OSD数量。
  • %Data:预估该pool占该OSD集群总容量的近似百分比。
  • Size:该pool的副本数。

最终pg_num的计算结果取接近计算值的2次幂,以提高CRUSH算法效率。例如:计算值为200时,取256作为结果。pgp_num的值应设置为与pg_num一致

创建CephFs

# 安装MDS(metadata server)服务
ceph-deploy mds create cephnode1 cephnode2 cephnode3

# CephFS 需要两个 Pools: cephfs-data 和 cephfs-metadata, 分别存储文件数据和文件元数据
ceph osd pool create cephfs-data 256 256
ceph osd pool create cephfs-metadata 32 32

## 设置副本数
ceph osd pool set cephfs-data size 2
ceph osd pool set cephfs-metadata size 3

## 修改pg和pgp数量
ceph osd pool set cephfs-data pg_num 256
ceph osd pool set cephfs-data pgp_num 256

##
限制池内object个数
ceph osd pool set-quota cephfs-data max_objects 102400

## 限制存储数据大小
ceph osd pool set-quota cephfs-data max_bytes 80G

# 验证
rados lspools
ceph osd pool get cephfs-data pg_num
ceph osd pool get cephfs-data pgp_num
ceph osd pool get cephfs-data size
ceph osd pool get-quota cephfs-data

一般 metadata pool 可以从相对较少的 PGs 启动, 之后可以根据需要增加 PGs. 因为 metadata pool 存储着 CephFS 文件的元数据, 为了保证安全, 最好有较多的副本数. 为了能有较低的延迟, 可以考虑将 metadata 存储在 SSDs 上.

# 创建一个 CephFS, 名字为 cephfs:
ceph fs new cephfs cephfs-metadata cephfs-data

# 验证至少有一个 MDS 已经进入 Active 状态
ceph fs status cephfs

# 在 Monitor 上, 创建一个用户,用于访问CephFs
ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data, allow rw pool=cephfs-metadata'

# 验证key是否生效
ceph auth get client.cephfs

# 检查CephFs和mds状态
ceph mds stat
ceph fs ls
ceph fs status

删除CephFS

1. 停止ceph-mds
systemctl stop ceph-mds@k8s-master
systemctl stop ceph-mds@k8s-node1
systemctl stop ceph-mds@k8s-node2
2. 配置ceph.conf
vim ceph.conf
mon_allow_pool_delete = true
3. 推送配置文件到节点,并重启mon服务
ceph-deploy --overwrite-conf config push cephnode1 cephnode2 cephnode3
systemctl restart ceph-mon.target
4. 删除文件系统以及对应pool
ceph mds fail 0
ceph fs rm cephfs --yes-i-really-mean-it
ceph osd pool delete cephfs-metadata cephfs-metadata --yes-i-really-really-mean-it
ceph osd pool delete cephfs-data cephfs-data --yes-i-really-really-mean-it

挂载 CephFS

kernel client方式

mkdir /cephfs

#手动挂载
mount -t ceph 192.168.2.101:6789,192.168.2.102:6789,192.168.2.103:6789:/ /cephfs/ -o name=cephfs,secret=AQDHjeddHlktJhAAxDClZh9mvBxRea5EI2xD9w==

# 自动挂载
echo "192.168.2.101:6789,192.168.2.102:6789,192.168.2.103:6789:/ /cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev,noatime 0 0" | sudo tee -a /etc/fstab

# 验证是否挂载成功
stat -f /cephfs
df -h

FUSE client方式

# 安装ceph-fuse
yum install -y ceph-fuse

# 拷贝ceph集群配置文件到客户端并修改权限
scp root@192.168.2.101:/etc/ceph/ceph.conf /etc/ceph/
chmod 644 /etc/ceph/ceph.conf
vim /etc/ceph/ceph.client.cephfs.keyring
// 内容复制mon节点ceph auth get client.cephfs的内容

# 使用ceph-fuse 挂载 CephFS
mkdir /cephfs/
# 手动挂载
ceph-fuse --keyring  /etc/ceph/ceph.client.cephfs.keyring  --name client.cephfs -m 192.168.2.101:6789,192.168.2.102:6789,192.168.2.103:6789  /cephfs/

# 自动挂载
echo "none /cephfs fuse.ceph ceph.id=cephfs[,ceph.conf=/etc/ceph/ceph.conf],_netdev,defaults 0 0"| sudo tee -a /etc/fstab
或
echo "id=cephfs,conf=/etc/ceph/ceph.conf /mnt/ceph2  fuse.ceph _netdev,defaults 0 0"| sudo tee -a /etc/fstab

# 验证
stat -f /cephfs
df -h

查看ceph文件存储相关命令

rados lspools
rados -p cephfs-metadata ls --all
rados -p cephfs-data ls --all

自动挂载fstab配置

{ipaddress}:{port}:/ {mount}/{mountpoint} {filesystem-name}     [name=username,secret=secretkey|secretfile=/path/to/secretfile],[{mount.options}]

举例:

10.10.10.10:6789:/    /mnt/ceph    ceph    name=admin,secretfile=/etc/ceph/secret.key,noatime    0     0

七、MDS主备与主主切换

1、配置主主模式

  • 当cephfs的性能出现在MDS上时,就应该配置多个活动的MDS。通常是多个客户机应用程序并行的执行大量元数据操作,并且它们分别有自己单独的工作目录。这种情况下很适合使用多主MDS模式。
  • 配置MDS多主模式
    每个cephfs文件系统都有一个max_mds设置,可以理解为它将控制创建多少个主MDS。注意只有当实际的MDS个数大于或等于max_mds设置的值时,mdx_mds设置才会生效。例如,如果只有一个MDS守护进程在运行,并且max_mds被设置为两个,则不会创建第二个主MDS。
# 设置cephfs的mds数为2(cephfs为之前创建的fs名称)
ceph fs set cephfs max_mds 2
# 验证
ceph mds stat

1.3、配置备用MDS
即使有多个活动的MDS,如果其中一个MDS出现故障,仍然需要备用守护进程来接管。因此,对于高可用性系统,实际配置max_mds时,最好比系统中MDS的总数少一个。

但如果你确信你的MDS不会出现故障,可以通过以下设置来通知ceph不需要备用MDS,否则会出现insufficient standby daemons available告警信息:

ceph fs set <fs> standby_count_wanted 0 

2、还原单主MDS

2.1、设置max_mds

# ceph fs set cephfs max_mds 1

2.2 删除不需要的rank

ceph mds deactivate cephfs:2

八、Ceph Dashboard

配置Ceph Dashboard

1、在每个mgr节点安装
yum install ceph-mgr-dashboard

2、开启mgr功能
ceph mgr module enable dashboard

3、生成并安装自签名的证书
ceph dashboard create-self-signed-cert
或者禁用ssl
ceph config set mgr mgr/dashboard/ssl false

4、设置监听IP
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0

5、设置监听端口
ceph config set mgr mgr/dashboard/ssl_server_port 8443
或者
ceph config set mgr mgr/dashboard/server_port 8448

6、创建一个dashboard登录用户名密码
echo '123456' > ac-user-create.key
ceph dashboard ac-user-create admin -i ac-user-create.key administrator

7、生效配置
ceph mgr module disable dashboard
ceph mgr module enable dashboard

8、查看服务访问方式
ceph mgr services

9、开启prometheus监控
ceph mgr module enable prometheus

开启Object Gateway管理功能

1、创建rgw用户,并将对应的key通过base64命令编码转换后写入写入对应keyring文件
radosgw-admin user create --uid=objectuser --display-name="Object Stoage User" --system

## 查看用户信息
radosgw-admin user info --uid=objectuser

2、设置rgw用户以及认证
ceph dashboard set-rgw-api-user-id objectuser
ceph dashboard set-rgw-api-access-key -i rgw-api-access.keyring
ceph dashboard set-rgw-api-secret-key -i rgw-api-secret.keyring

3、配置rgw协议,IP和端口
ceph dashboard set-rgw-api-ssl-verify False
ceph dashboard set-rgw-api-scheme http
ceph dashboard set-rgw-api-host 192.168.2.101
ceph dashboard set-rgw-api-port 7480

4、重启rgw服务,并刷新web页面
systemctl restart ceph-radosgw.target

配置文件详解

[global]#全局设置
fsid = xxxxxxxxxxxxxxx                           #集群标识ID 
mon host = 10.0.1.1,10.0.1.2,10.0.1.3            #monitor IP 地址
auth cluster required = cephx                    #集群认证
auth service required = cephx                           #服务认证
auth client required = cephx                            #客户端认证
osd pool default size = 3                             #最小副本数 默认是3
osd pool default min size = 1                           #PG 处于 degraded 状态不影响其 IO 能力,min_size是一个PG能接受IO的最小副本数
public network = 10.0.1.0/24                            #公共网络(monitorIP段) 
cluster network = 10.0.2.0/24                           #集群网络
max open files = 131072                                 #默认0#如果设置了该选项,Ceph会设置系统的max open fds
mon initial members = node1, node2, node3               #初始monitor (由创建monitor命令而定)
##############################################################
[mon]
mon data = /var/lib/ceph/mon/ceph-$id
mon clock drift allowed = 1                             #默认值0.05#monitor间的clock drift
mon osd min down reporters = 13                         #默认值1#向monitor报告down的最小OSD数
mon osd down out interval = 600      #默认值300      #标记一个OSD状态为down和out之前ceph等待的秒数
##############################################################
[osd]
osd data = /var/lib/ceph/osd/ceph-$id
osd mkfs type = xfs                                     #格式化系统类型
osd max write size = 512 #默认值90                   #OSD一次可写入的最大值(MB)
osd client message size cap = 2147483648 #默认值100    #客户端允许在内存中的最大数据(bytes)
osd deep scrub stride = 131072 #默认值524288         #在Deep Scrub时候允许读取的字节数(bytes)
osd op threads = 16 #默认值2                         #并发文件系统操作数
osd disk threads = 4 #默认值1                        #OSD密集型操作例如恢复和Scrubbing时的线程
osd map cache size = 1024 #默认值500                 #保留OSD Map的缓存(MB)
osd map cache bl size = 128 #默认值50                #OSD进程在内存中的OSD Map缓存(MB)
osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier" #默认值rw,noatime,inode64  #Ceph OSD xfs Mount选项
osd recovery op priority = 2 #默认值10              #恢复操作优先级,取值1-63,值越高占用资源越高
osd recovery max active = 10 #默认值15              #同一时间内活跃的恢复请求数 
osd max backfills = 4  #默认值10                  #一个OSD允许的最大backfills数
osd min pg log entries = 30000 #默认值3000           #修建PGLog是保留的最大PGLog数
osd max pg log entries = 100000 #默认值10000         #修建PGLog是保留的最大PGLog数
osd mon heartbeat interval = 40 #默认值30            #OSD ping一个monitor的时间间隔(默认30s)
ms dispatch throttle bytes = 1048576000 #默认值 104857600 #等待派遣的最大消息数
objecter inflight ops = 819200 #默认值1024           #客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限
osd op log threshold = 50 #默认值5                  #一次显示多少操作的log
osd crush chooseleaf type = 0 #默认值为1              #CRUSH规则用到chooseleaf时的bucket的类型
##############################################################
[client]
rbd cache = true #默认值 true      #RBD缓存
rbd cache size = 335544320 #默认值33554432           #RBD缓存大小(bytes)
rbd cache max dirty = 134217728 #默认值25165824      #缓存为write-back时允许的最大dirty字节数(bytes),如果为0,使用write-through
rbd cache max dirty age = 30 #默认值1                #在被刷新到存储盘前dirty数据存在缓存的时间(seconds)
rbd cache writethrough until flush = false #默认值true  #该选项是为了兼容linux-2.6.32之前的virtio驱动,避免因为不发送flush请求,数据不回写
              #设置该参数后,librbd会以writethrough的方式执行io,直到收到第一个flush请求,才切换为writeback方式。
rbd cache max dirty object = 2 #默认值0              #最大的Object对象数,默认为0,表示通过rbd cache size计算得到,librbd默认以4MB为单位对磁盘Image进行逻辑切分
      #每个chunk对象抽象为一个Object;librbd中以Object为单位来管理缓存,增大该值可以提升性能
rbd cache target dirty = 235544320 #默认值16777216    #开始执行回写过程的脏数据大小,不能超过 rbd_cache_max_dirty
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值