目录
框架![](https://i-blog.csdnimg.cn/blog_migrate/931d03803480d727b39a54b45cfe866c.png)
节点规划
节点名字 | ip | ceph |
owncloud | 192.168.64.128 | xxxx |
master1 | 192.168.64.150 | mon,mgr |
master2 | 192.168.64.151 | osd |
master3 | 192.168.64.152 | osd |
部署环境准备
所有节点更改hosts文件,关闭防火墙,关闭selinux,时间同步,添加ceph源和docker源,这个就不演示了,搭建过k8s集群必做的操作。
关于ceph源
centos7
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/
enabled=1
gpgcheck=0
priority=1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=0
priority=1
centos8
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el8/x86_64/
enabled=1
gpgcheck=0
priority=1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el8/noarch/
enabled=1
gpgcheck=0
priority=1
ceph集群部署
根据节点规划首先配置master1到所有节点免密功能
[root@master1 ceph-install]# ssh-keygen
[root@master1 ceph-install]# ssh-copy-id master2
[root@master1 ceph-install]# ssh-copy-id master3
[root@master1 ceph-install]# ssh-copy-id owncloud
在master1节点安装ceph部署工具
注意: 只在ceph_node1上安装,因为它是部署节点,其它节点不用安装
[root@master1 ceph-install]# yum install ceph-deploy -y
在master1上创建集群
必须建立一个集群配文件
[root@master1 ceph-install]# pwd
/root/ceph-install
[root@master1 ceph-install]# ls -al
总用量 8
drwxr-xr-x 2 root root 6 10月 17 14:37 .
dr-xr-x---. 31 root root 4096 10月 17 14:21 ..
[root@master1 ceph-install]#
在管理节点master1上创建集群
[root@master1 ceph-install]# ceph-deploy new master1
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy new master1
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] func : <function new at 0x7fef452f9de8>
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7fef44a717a0>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] ssh_copykey : True
[ceph_deploy.cli][INFO ] mon : ['master1']
[ceph_deploy.cli][INFO ] public_network : None
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] cluster_network : None
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] fsid : None
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO ] making sure passwordless SSH succeeds
[master1][DEBUG ] connected to host: master1
[master1][DEBUG ] detect platform information from remote host
[master1][DEBUG ] detect machine type
[master1][DEBUG ] find the location of an executable
[master1][INFO ] Running command: /usr/sbin/ip link show
[master1][INFO ] Running command: /usr/sbin/ip addr show
[master1][DEBUG ] IP addresses found: [u'172.21.0.1', u'172.20.0.1', u'172.18.0.1', u'172.19.0.1', u'192.168.64.150', u'172.17.0.1']
[ceph_deploy.new][DEBUG ] Resolving host master1
[ceph_deploy.new][DEBUG ] Monitor master1 at 192.168.64.150
[ceph_deploy.new][DEBUG ] Monitor initial members are ['master1']
[ceph_deploy.new][DEBUG ] Monitor addrs are ['192.168.64.150']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...
[root@master1 ceph-install]# ls -al
总用量 20
drwxr-xr-x 2 root root 75 10月 17 14:39 .
dr-xr-x---. 31 root root 4096 10月 17 14:39 ..
-rw-r--r-- 1 root root 199 10月 17 14:39 ceph.conf
-rw-r--r-- 1 root root 3021 10月 17 14:39 ceph-deploy-ceph.log
-rw------- 1 root root 73 10月 17 14:39 ceph.mon.keyring
[root@master1 ceph-install]#
说明:
ceph.conf:集群配置文件
ceph-deploy-ceph.log:使用ceph-deploy部署的日志记录
ceph.mon.keyring:验证key文件
然后就是在所有ceph节点安装ceph软件
即在master1,master2,master3安装ceph和ceph-radosgw软件包
[root@master1 ceph-install]# yum install ceph ceph-radosgw -y
[root@master1 ceph-install]# ceph -v
ceph version 13.2.10 (564bdc4ae87418a232fc901524470e1a0f76d641) mimic (stable)
注意:版本安装需要一致
方然也可以直接使用命令安装,网速好的话,可以用ceph-deploy install master1 master2 master3 命令来安装。ceph-deploy命令会自动通过公网官方的源安装(网速不给力就不要用这种)
在ceph客户端安装ceph-common软件
这里的客户端就是即将使用ceph这个集群的节点,即我们的owncloud节点
创建mon监控组件
创建配置文件目录,并创建一个配置文件,并手动创建一个集群的UUID,再增加监控网络,网段为试验集群的物理网络。
[root@master1 ceph-install]# touch /etc/ceph/ceph.conf
[root@master1 ceph-install]# uuidgen
1c983db6-36a6-48a8-82b3-e9c32d10c27b
[root@master1 ceph-install]# cat /etc/ceph/ceph.conf
[global]
fsid = 1c983db6-36a6-48a8-82b3-e9c32d10c27b # 生成的UUID号
mon initial members = master1 # 主机名
mon host = 192.168.64.150 # 对应的IP
public network = 192.168.64.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
[root@master1 ceph-install]#
监控节点master1初始化
[root@master1 ceph-install]# ceph-deploy mon create-initial
这里由于之前在这台机器上搭建过ceph,所以报错了,此时使用命令
[root@master1 ceph-install]# ceph-deploy --overwrite-conf config push master1
然后使用ceph -s命令测试,报错如下:
这是因为没有将配置信息同步到其他节点上,将配置文件信息同步到所有ceph集群节点
[root@master1 ceph-install]# ceph-deploy admin master2
[root@master1 ceph-install]# ceph-deploy admin master3
此时使用命令测试一下
[root@master1 ceph-install]# ceph health
HEALTH_OK
[root@master1 ceph-install]# ceph -s
cluster:
id: 1d7c82b2-c526-4bf2-902b-3385629d51c8
health: HEALTH_OK
services:
mon: 1 daemons, quorum master1
mgr: no daemons active
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
[root@master1 ceph-install]#
创建mgr管理组件
该组件的主要作用是分担和扩展monitor的部分功能, 减轻monitor的负担,让更好地管理ceph存储系统ceph dashboard图形管理就需要用到mgr。
[root@master1 ceph-install]# ceph-deploy mgr create master1
补充:mgr也可以是多个节点,即主备模式,同一时刻只有一个mgr节点工作,其他节点处于standby状态。使用命令ceph-deploy mgr create master1 master2 master3即可。此时ceph -s 显示mgr字段应该是这样的 mgr: master1(active),standbys:master2,master3。。。
这个管理组件最明显的作用就是帮助我们管理osd,例如在添加完osd磁盘之后,装mgr和没有装mgr的区别如下图:
创建osd磁盘
Ceph OSD(Object Storage Device): 功能是存储与处理数据,并通过检查其他OSD守护进程的心跳来向Ceph Monitors提供一些监控信息。
因为我是VMware虚拟机,添加完硬盘之后记得重启一下机器,我在master2,master3各添加了一个10G的硬盘
加入之前先格式化一下,使用zap清理一下磁盘,zap的具体释义如下,但是如果是空闲磁盘,则无需格式化也行,像我这里是虚拟机专门为ceph添加的一块磁盘,可以不用执行zap命令,为了演示命令,还是执行一下。
[root@master1 ceph-install]# ceph-deploy disk zap master2 /dev/sdb
[root@master1 ceph-install]# ceph-deploy disk zap master3 /dev/sdb
格式化完成之后就可以加入osd磁盘了
[root@master1 ceph-install]# ceph-deploy osd create --data /dev/sdb master2
[root@master1 ceph-install]# ceph-deploy osd create --data /dev/sdb master3
测试一下
添加其他节点到ceph集群中
其他节点只需要安装ceph和ceph-radosgw相关包,并同步相关配置信息到该加入节点,即ceph-deploy admin这个命令,最后使用ceph-deploy osd create把要加入的节点的硬盘加入进来即可。
至此,一个简单的ceph集群就搭建好了,当然,这里面还有很多的配置没有加上,有没有实现高可用,今天的主要目的就是如何使用。
对象存储搭建
ceph在最开始的时候就讲过,它有文件存储,块存储和对象存储三种方式,
文件存储:类似一个大的目录,多个客户端都可以挂载过来使用
- 优点: 利于数据共享
- 缺点: 速度较慢
块存储:类似一个block设备,客户端可以格式化,挂载并使用,和用一个硬盘一样。
- 优点: 和本地硬盘一样,直接使用
- 缺点: 数据不共享
对象存储:看作是一个综合了文件存储和块存储优点的大硬盘,可以挂载,也可以通过URL来访问。
- 优点: 速度快,数据共享
- 缺点: 成本高,不兼容现有的模式
这里我们只暂且实验对象存储,其他的两种后期再学习
创建对象存储网关
rgw(对象存储网关): 为客户端访问对象存储的接口
即我们把我们ceph集群的可以使用osd硬盘作为一个接口提供给其他使用
rgw的创建非常简单,在任意的ceph集群节点上创建rgw即可,并验证一下7480端口
[root@master1 ceph-install]# ceph-deploy rgw create master1
[root@master1 ceph-install]# lsof -i |grep 7480
radosgw 12141 ceph 39u IPv4 212014 0t0 TCP *:7480 (LISTEN)
对象网关创建成功后,后面的项目中我们会通过master1的对象网关来连接就可以使用了。
创建owncloud应用
这里我们使用docker部署的方式
准备好docker-compose.yml和.env文件
详细介绍见官网:Installing with Docker :: ownCloud Documentation
[root@owncloud owncloud]# cat .env
OWNCLOUD_VERSION=10.0
OWNCLOUD_DOMAIN=localhost
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin
HTTP_PORT=8080
[root@localhost owncloud]# cat docker-compose.yml
version: "3"
volumes:
files:
driver: local
mysql:
driver: local
redis:
driver: local
services:
owncloud:
image: owncloud/server:${OWNCLOUD_VERSION}
container_name: owncloud_server
restart: always
ports:
- ${HTTP_PORT}:8080
depends_on:
- mariadb
- redis
environment:
- OWNCLOUD_DOMAIN=${OWNCLOUD_DOMAIN}
- OWNCLOUD_DB_TYPE=mysql
- OWNCLOUD_DB_NAME=owncloud
- OWNCLOUD_DB_USERNAME=owncloud
- OWNCLOUD_DB_PASSWORD=owncloud
- OWNCLOUD_DB_HOST=mariadb
- OWNCLOUD_ADMIN_USERNAME=${ADMIN_USERNAME}
- OWNCLOUD_ADMIN_PASSWORD=${ADMIN_PASSWORD}
- OWNCLOUD_MYSQL_UTF8MB4=true
- OWNCLOUD_REDIS_ENABLED=true
- OWNCLOUD_REDIS_HOST=redis
healthcheck:
test: ["CMD", "/usr/bin/healthcheck"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- files:/mnt/data
mariadb:
image: mariadb:10.5
container_name: owncloud_mariadb
restart: always
environment:
- MYSQL_ROOT_PASSWORD=owncloud
- MYSQL_USER=owncloud
- MYSQL_PASSWORD=owncloud
- MYSQL_DATABASE=owncloud
command: ["--max-allowed-packet=128M", "--innodb-log-file-size=64M"]
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-u", "root", "--password=owncloud"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- mysql:/var/lib/mysql
redis:
image: redis:6
container_name: owncloud_redis
restart: always
command: ["--databases", "1"]
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- redis:/data
[root@owncloud owncloud]#
[root@owncloud owncloud]# docker-compose up -d
[root@owncloud owncloud]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6ef3486939d owncloud/server:10.0 "/usr/bin/entrypoint…" 14 seconds ago Up 13 seconds (health: starting) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp owncloud_server
172c5cf0db76 mariadb:10.5 "docker-entrypoint.s…" 17 seconds ago Up 14 seconds (healthy) 3306/tcp owncloud_mariadb
2eb019b6be58 redis:6 "docker-entrypoint.s…" 17 seconds ago Up 14 seconds (healthy) 6379/tcp owncloud_redis
[root@owncloud owncloud]#
web界面输入:localhostip:8080,账号密码admin,最后界面如下
ceph对象存储对接owncloud
owncloud搭建好后,我们需要使用ceph分布式存储与其对接打造私有云盘. 我们选择ceph对象存储的原因:
- 对象存储能实现数据共享, 可实现多人同时访问进行读写(块存储不能实现数 据共享)
- 文件存储类型也能实现数据共享,但文件存储需要文件系统挂载
- 对象存储比文件存储类型速度快
安装s3工具
通过s3对接
S3 (Simple Storage Service 简单存储服务): 可以把S3看作是一个超大的硬盘, 里面存放数据资源
- 资源包括文件,图片,视频等,这些资源统称为对象.
- 这些对象存放在存储段里,在S3里存储段叫做bucket.
[root@owncloud owncloud]# yum install s3cmd -y
创建连接ceph对象网关用户
[root@owncloud owncloud]# cat /root/.s3cfg
[default]
access_key = 7523TDKY1R4BAOCUWD9A
secret_key = VZVuGP8KmMxt6Ej9NzTu67y1u0oEk7RkqJdrKKVN
host_base = 192.168.64.150:7480
host_bucket = 192.168.64.150:7480/%(bucket)
cloudfront_host = 192.168.64.150:7480
use_https = False
说明:
access_key与secret_key的值对应上面创建用户时产生的
192.168 .64.150为ceph集群节点中mon监控的IP,有多个mon的话可以随 意写其中一个
use_https = False 代表我们使用http,不使用https,后面的web界面中ssl就不选择
创建用于owncloud的bucket
[root@owncloud owncloud]# s3cmd mb s3://owncloud
Bucket 's3://owncloud/' created
[root@owncloud owncloud]#
[root@owncloud owncloud]# s3cmd ls
2021-10-17 09:16 s3://owncloud
注意: 多个用户连接同一个对象网关也不能创建同名的bucket, 因为一个对象存 储看作一个大硬盘, bucket就像里面的子目录,不能同名。
配置接口
接下来就可以去登录owncloud的web端进行配置
外部存储那里选择Amazon S3,然后就是配置
我们的ceph存储就添加进来了
我们添加一个文件
再去查看ceph集群状态,证明我们的文件已经存储到集群中
参考文章: