0、说明:
采用ceph-deploy工具来安装N版,文中出现【all】表示需要在所有节点执行。【hostname】表示在当前主机节点执行
1、准备工作
1.1、节点配置
节点名称 | 网络 | 配置 |
---|---|---|
ceph-node-1 | 双网卡,一个数据网,一个通信网 | 2C/4G,一块数据硬盘 |
ceph-node-2 | 双网卡,一个数据网,一个通信网 | 2C/4G,一块数据硬盘 |
ceph-node-3 | 双网卡,一个数据网,一个通信网 | 2C/4G,一块数据硬盘 |
1.2、初始化
1.2.1、设置主机名
[all]
hostnamectl set-hostname [hostname]
1.2.2、免密登录
[ceph-node-1]
ssh-keygen
ssh-copy-id ceph-node-1
ssh-copy-id ceph-node-2
ssh-copy-id ceph-node-3
1.2.3、关闭防火墙和selinux
[all]
#关闭防火墙或者配置规则
monitor节点放行tcp 6789端口
ceph-osd节点放行tcp端口 6800:7300
1.3、时间同步
1.4、配置yum源
centos源:
curl -o /etc/yum.repos.d/CentOS-Base.repo
https://mirrors.aliyun.com/repo/Centos-7.repo
epel源:
wget -O /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-7.repo
ceph源:
tee /etc/yum.repos.d/ceph-nautilus.repo <<-EOF
[noarch]
name=noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
enabled=1
gpgcheck=0
[x86_64]
name=x86_64
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
enabled=1
gpgcheck=0
EOF
#重新缓存
yum clean all
yum makecache
2、安装ceph
2.1、在管理节点安装ceph-deploy
[ceph-node-1]
#安装
yum install ceph-deploy python-setuptools -y
#查看版本
ceph-deploy --version
2.0.1
#创建工作目录,用于存放配置文件
mkdir ~/ceph-deploy
2.2、创建mon节点
[ceph-node-1]
#创建cpeh-node-1为mon节点
ceph-deploy new --public-network 192.168.189.0/24 --cluster-network 192.168.190.0/24 ceph-node-1
#创建多个mon节点
#ceph-deploy new --public-network 192.168.189.0/24 --cluster-network 192.168.190.0/24 ceph-node-1 ceph-node-2 ceph-node-3
#查看生成的配置文件
ll
2.3、安装ceph软件包
#自动安装,默认使用官方yum源安装,也可以指定yum源
[ceph-node-1]
ceph-deploy install ceph-node-1 ceph-node-2 ceph-node-3
ceph-deploy install ceph-node-1 ceph-node-2 ceph-node-3 --repo-url http://mirrors.163.com/ceph/rpm-nautilus/el7/ --gpg-url http://mirrors.163.com/ceph/keys/release.asc
#手动安装,建议手动安装,需要在所有节点执行
[all]
yum install ceph ceph-mon ceph-mgr ceph-radosgw ceph-mds ceph-mgr-dashboard -y
2.4、初始化mon节点
[ceph-node-1]
#配置初始 monitor(s)、并收集所有密钥 ,后在当前目录会产生一些*.keyring,这是ceph组件间进行安全访问时所需要的
ceph-deploy mon create-initial
#查看mon服务是否允许
[all]
ps -ef|grep ceph-mon
2.5、复制配置文件到所有节点
[ceph-node-1]
#配置admin key到每个节点
ceph-deploy admin ceph-node-1 ceph-node-2 ceph-node-3
#查看
ll /etc/ceph
#查看集群状态
ceph -s
#Ceph 存储集群需要至少一个 Monitor 才能运行。为达到高可用,典型的 Ceph 存储集群会运行多个 Monitors,这样在单个 Monitor 失败时不会影响 Ceph 存储集群的可用性
#添加mon ,也可以创建mon时,直接指定多个mon节点
ceph-deploy mon add ceph-node-2 ceph-node-3
#新增 Monitor 后,Ceph 会自动开始同步并形成法定人数。你可以用下面的命令检查法定人数状态:
ceph quorum_status --format json-pretty
2.6、创建mgr节点并启用dashboard
[ceph-node-1]
#创建mgr节点
ceph-deploy mgr create ceph-node-1
#创建多个mgr节点
#ceph-deploy mgr create ceph-node-2 ceph-node-3
[all]
# 检测ceph-mgr是否已经运行起来->每个节点执行
ps -ef | grep ceph-mgr
#为每个节点安装ceph-mgr-dashboard,开启dashboard
ceph mgr module enable dashboard
# 确认开启mgr模块->每个节点执行
ceph mgr module ls | less
# 查看mgr/dashboard相关参数,这一步有值的话,可以进行配置->每个节点执行
ceph config ls | grep mgr/dashboard
# 配置dashboard相关->admin节点执行 可以试试每个节点执行?
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
ceph config set mgr mgr/dashboard/server_port 7000
ceph config set mgr mgr/dashboard/ssl false
# 删除配置->admin节点执行
ceph config rm mgr mgr/dashboard/server_addr
ceph config rm mgr mgr/dashboard/server_port
ceph config rm mgr mgr/dashboard/ssl
# 确认dashboard服务开启->每个节点执行
ceph mgr services
{
"dashboard": "http://0.0.0.0:7000/"
}
# 查看配置的最近10条日志,+代表新增配置,-代表删除配置->每个节点执行
ceph config log 10
# 创建该地址http://192.168.2.11:7000的访问用户密码->所有节点都可执行
# 注意访问地址以ceph -s 显示的active mgr节点地址为主,不一定为192.168.2.11
ceph dashboard ac-user-create cephuser cephpwd administrator
{"username": "cephuser", "lastUpdate": 1556949263, "name": null, "roles": ["administrator"], "password": "$2b$12$/jh6ww8qXVcRYXfw4x9LkOQk7WXORIfig1/5ikA5FBNhai2fXGNQG", "email": null}
# 访问页面的时候报500错误,通过查看/var/log/ceph/ceph-mgr.admin.log日志出现以下错误,重启三个节点就恢复正常了
2019-05-04 22:03:39.244 7f869b27e700 0 mgr[dashboard] [192.168.2.1:55174] [GET] [500] [0.004s] [cephuser] [1.3K] /api/summary
2019-05-04 22:03:39.244 7f869b27e700 0 mgr[dashboard] ['{"status": "500 Internal Server Error", "version": "3.2.2", "detail": "The server encountered an unexpected condition which prevented it from fulfilling the request.", "traceback": "Traceback (most recent call last):\\n File \\"/usr/lib/python2.7/site-packages/cherrypy/_cprequest.py\\", line 656, in respond\\n response.body = self.handler()\\n File \\"/usr/lib/python2.7/site-packages/cherrypy/lib/encoding.py\\", line 188, in __call__\\n self.body = self.oldhandler(*args, **kwargs)\\n File \\"/usr/lib/python2.7/site-packages/cherrypy/_cptools.py\\", line 221, in wrap\\n return self.newhandler(innerfunc, *args, **kwargs)\\n File \\"/usr/share/ceph/mgr/dashboard/services/exception.py\\", line 88, in dashboard_exception_handler\\n return handler(*args, **kwargs)\\n File \\"/usr/lib/python2.7/site-packages/cherrypy/_cpdispatch.py\\", line 34, in __call__\\n return self.callable(*self.args, **self.kwargs)\\n File \\"/usr/share/ceph/mgr/dashboard/controllers/__init__.py\\", line 649, in inner\\n ret = func(*args, **kwargs)\\n File \\"/usr/share/ceph/mgr/dashboard/controllers/summary.py\\", line 79, in __call__\\n \'mgr_host\': self._get_host(),\\n File \\"/usr/share/ceph/mgr/dashboard/controllers/summary.py\\", line 68, in _get_host\\n return services[\'dashboard\']\\nKeyError: \'dashboard\'\\n"}']
# 老本版写法
ceph config-key put mgr/dashboard/server_addr 0.0.0.0
ceph config-key put mgr/dashboard/server_port 7000
2.7、创建osd
#需要在每个节点上添加一个磁盘,
[ceph-node-1]
#添加osd节点
ceph-deploy osd create ceph-node-1 --data /dev/sdb
ceph-deploy osd create ceph-node-2 --data /dev/sdb
ceph-deploy osd create ceph-node-3 --data /dev/sdb
#查看osd状态
ceph osd tree
ceph -s
# 老版本写法
ceph-deploy disk zap node1 /dev/sdb
ceph-deploy disk zap node2 /dev/sdb
2.8、添加元数据服务器mds
#至少需要一个元数据服务器才能使用 CephFS,需要安装ceph-mds
[ceph-node-1]
ceph-deploy mds create ceph-node-1
2.9、添加rgw
#要使用 Ceph 的 Ceph对象网关组件,必须部署 RGW 例程,需要安装ceph-radosgw
[ceph-node-1]
ceph-deploy rgw create ceph-node-2
#配置对象网关实例
通过修改 Ceph 配置文件可以更改默认端口7480(比如改成 80 )。增加名为 [client.rgw.<client-node>] 的小节,
#把 <client-node> 替换成你自己 Ceph 客户端节点的短名称(即 hostname -s 的输出)。例如,你的节点名就是 client-node ,在 [global] 节后增加一个类似于下面的小节:
[ceph-node-2]
vim /etc/ceph/ceph.conf
[client.rgw.client-node]
rgw_frontends = "civetweb port=80"
#访问:http://<client-node>:80
#响应:
<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName></DisplayName>
</Owner>
<Buckets>
</Buckets>
</ListAllMyBucketsResult>