环境:ubuntu-server 16.04,两台arm服务器 分别为node1和node2,node1和node2分别安装monitor和3个osd,在node1上部署MDS,ceph
一、准备工作
systemctl stop ufw #禁用防火墙
systemctl disable ufw #禁止防火墙开机启动
vim /etc/hosts #修改主机名字(每台服务器都要修改)我的node2节点的文件如下:
root@node2:/var/lib/ceph/osd# cat /etc/hosts
127.0.0.1 localhost
10.33.0.37 node2
10.33.0.13 node1
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
vim /etc/hostname #修改主机名字
二、安装NTP服务并配置NTP服务,确保两个mon节点时间一致。
.......略
三、部署mon
1)在node1节点上,执行如下
1、uuidgen #生成唯一的uuid
2、vim /etc/ceph/ceph.conf #创建ceph.conf文件,我的配置文件如下:
root@bogon:~# cat /etc/ceph/ceph.conf
[global]
fsid = c37ee56f-e925-4c9b-80ba-c4b0625fde93
mon initial members = node1
mon host = 10.33.0.13
public network = 10.33.0.0/16
cluster network = 192.168.3.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd pool default size = 2 #两个副本
3、ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' #为监控节点创建管理密钥
4、ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow' #为ceph amin用户创建管理集群的密钥并赋予访问权限
5、ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring #添加client.admin key到 ceph.mon.keyring
6、 mkdir -p /var/lib/ceph/mon/ceph-node1 #为node1节点上的mon创建数据目录
7、在node1节点上初始化mon节点,执行下面的命令
ceph-mon --mkfs -i node1 --keyring /tmp/ceph.mon.keyring
8、为了防止重新被安装创建一个空的done文件
touch /var/lib/ceph/mon/ceph-node1/done
9、创建一个空的初始化文件
touch /var/lib/ceph/mon/ceph-node1/upstart
10、启动ceph进程
(1)ceph-mon -i node1 #用命令方式启动,也可以用脚本方式启动,目前我还没实现脚本方式启动,后续会更新。
(2)脚本方式启动
systemctl enable ceph-mon.target #使能mon的target
cd /etc/systemd/system/multi-user.target.wants
ln -s /lib/systemd/system/ceph-mon@.service ./ceph-mon@node1.service #建立启动配置文件
systemctl start ceph-mon@node1.service #启动node1节点上的mon进程
vim /etc/ceph/ceph.conf #修改ceph的配置文件添加osd_crush_update_on_start = false选项
vim /lib/systemd/system/ceph-mon@.service #修改启动配置文件把setusr 修改成想用的用户名
11、 mkdir -p /var/lib/ceph/bootstrap-osd/
ceph auth get-or-create client.bootstrap-osd mon 'allow profile bootstrap-osd'
ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring # 在node1创建一个boot引导启动osd的key
2)在node2节点上部署第二个mon
1、复制node1节点的/etc/ceph目录到node2
scp /etc/ceph/* node2:/etc/ceph/
2、在node2节点上新建一个/var/lib/ceph/bootstrap-osd/目录
mkdir /var/lib/ceph/bootstrap-osd/
3、复制node1节点上的/var/lib/ceph/bootstrap-osd/ceph.keyring文件到node2
scp /var/lib/ceph/bootstrap-osd/ceph.keyring node2:/var/lib/ceph/bootstrap-osd/
4、复制node1节点上的/tmp/ceph.mon.keyring
scp /tmp/ceph.mon.keyring node2:/tmp/
5、在node2节点上建立一个/var/lib/ceph/mon/ceph-node2目录
mkdir -p /var/lib/ceph/mon/ceph-node2
6、在node2节点上初始化mon节点,执行下面的命令
ceph-mon --mkfs -i node2 --keyring /tmp/ceph.mon.keyring
7、为了防止重新被安装创建一个空的done文件
touch /var/lib/ceph/mon/ceph-node2/done
8、创建一个空的初始化文件
touch /var/lib/ceph/mon/ceph-node2/upstart
9、启动ceph进程
ceph-mon -i node2
10、查看集群状态
ceph -s #现在由于没有osd集群状态是不可用的
四、添加osd节点
在node1节点添加3个osd,在node2节点添加3个osd
1)node1节点
1、创建一个OSD,生成一个osd number
ceph osd create
输出0
2、为osd节点创建一个osd目录
mkdir -p /var/lib/ceph/osd/ceph-0
3、格式化已准备好的osd硬盘(格式化为xfs格式)
mkfs.xfs -f /dev/sdb
4、挂在目录
mount -o user_xattr /dev/sdb /var/lib/ceph/osd/ceph-0
把挂载信息写入分区表
5、初始化osd数据目录
ceph-osd -i 0 --mkfs --mkkey
6、注册osd的认证密钥
ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring
7、为此osd节点创建一个crush map
ceph osd crush add-bucket node1 host
8、把node1 bucket 移到 root bucket下
ceph osd crush move node1 root=default
9、给node1 bucket 增加一个设备
ceph osd crush add osd.0 1.0 host=node1
10、在node1节点中创建启动文件
touch /var/lib/ceph/osd/ceph-0/upstart
11、启动osd进程
(1)命令行方式启动
ceph-osd -i 0 #命令方式启动
(2)脚本方式启动
systemctl enable ceph-osd.target #使能ceph-osd.target
cd /etc/systemd/system/multi-user.target.wants
ln -s /lib/systemd/system/ceph-osd@.service ./ceph-osd@0.service #创建启动配置文件
systemctl start ceph-osd@0.service #启动osd.0进程
vim /etc/ceph/ceph.conf #修改ceph的配置文件添加osd_crush_update_on_start = false选项
vim /lib/systemd/system/ceph-mon@.service #修改启动配置文件把setusr 修改成想用的用户名
11、在node1节点上依次执行上面的启动另外两个osd进程
note:由于在node1节点上创建第一个osd进程的时候,已经在crushmap中创建了node1 bucket 并移到了root bucket下所以在创建另外两个osd进程的时候不需要执行7、8步骤。
2)node2节点
1、在node2节点已经有ceph.conf和ceph.client.admin.keyring 文件所以不需要从node1节点拷贝。
2、创建一个OSD,生成一个osd number
ceph osd create
输出 1
3、为osd节点创建一个osd目录
mkdir -p /var/lib/ceph/osd/ceph-1
4、格式化已准备好的osd硬盘(格式化为xfs格式 )
mkfs.xfs -f /dev/sdb
5、 挂在目录
mount -o user_xattr /dev/sdb /var/lib/ceph/osd/ceph-1
把上面的挂载信息写入分区表
6、 初始化osd数据目录
ceph-osd -i 1 --mkfs --mkkey
7、 注册osd的认证密钥
ceph auth add osd.1 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-1/keyring
8、为此osd节点创建一个crush map
ceph osd crush add-bucket node2 host
9、把node2 bucket 移到root bucket下
ceph osd crush move node2 root=default
10、在node2 bucket下添加osd设备
ceph osd crush add osd.1 1.0 host=node2
11、 创建一个初始化目录
touch /var/lib/ceph/osd/ceph-1/upstart
12、 启动osd进程
ceph-osd -i 1
13、在node2节点按照以上方法启动其余两个osd进程。
note:参照node1节点上的操作
五、添加mds服务
目前官网推荐jewel版的ceph集群中只部署一个active mds进程,以下只部署一个mds进程
1、为mds元数据服务器创建一个目录
mkdir -p /var/lib/ceph/mds/ceph-node1
2、 为bootstrap-mds客户端创建一个密钥
mkdir -p /var/lib/ceph/mds/bootstrap-mds
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-mds/ceph.keyring --gen-key -n client.bootstrap-mds
3、 在ceph auth库中创建bootstrap-mds客户端,赋予权限添加之前创建的密钥
ceph auth add client.bootstrap-mds mon 'allow profile bootstrap-mds' -i /var/lib/ceph/bootstrap-mds/ceph.keyring
4、在root家目录里创建ceph.bootstrap-mds.keyring文件
touch /root/ceph.bootstrap-mds.keyring
5、把keyring /var/lib/ceph/bootstrap-mds/ceph.keyring里的密钥导入家目录下的ceph.bootstrap-mds.keyring文件里
ceph-authtool --import-keyring /var/lib/ceph/bootstrap-mds/ceph.keyring /root/ceph.bootstrap-mds.keyring
6、在ceph auth库中创建mds.node1用户,并赋予权限和创建密钥,密钥保存在/var/lib/ceph/mds/ceph-node1/keyring文件里
ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.node1 osd 'allow rwx' mds 'allow' mon 'allow profile mds' -o /var/lib/ceph/mds/ceph-node1/keyring
7、为mds创建一个初始化文件用于启动使用(此文件为空文件)
touch /var/lib/ceph/mds/ceph-node1/upstart
8、为了防止重新被安装创建一个空的done文件
touch /var/lib/ceph/mds/ceph-node1/done
9、启动mds进程
ceph-mds -i node1 #命令方式启动mds进程
10.查找cephfs中文件所在的位置
stat -c %i {filepath} #查询文件的inode
rados -p {data-pool} ls | grep {hex-inode} #查询属于该文件的有那些对象
ceph osd map {data-pool} {object-num} #查询该对象所在的osd
至此ceph一个简单的ceph集群部署完成
参考:http://boris05.blog.51cto.com/1073705/1439874
来源:oschina
链接:https://my.oschina.net/u/2326998/blog/805779