手动安装ceph

环镜

操作系统centos6.5
网络规划
Cluster_net:192.168.20.0/24
Public_net:192.168.2.0/24

角色 Public_net Cluster_net
Ceph-mon 192.168.2.4 192.168.20.2
Ceph-mon2 192.168.2.5 192.168.20.5
Ceph-mon3 192.168.2.6 192.168.20.6
Ceph-osd1 192.168.2.7 192.168.20.7
Ceph-osd2 192.168.2.8 192.168.20.8
Ceph-osd3 192.168.2.9 192.168.20.9

绑定hosts

1
2
3
4
5
6
192.168.2.4 ceph-mon.novalocal mon
192.168.2.5 ceph-mon2.novalocal mon2
192.168.2.6 ceph-mon3.novalocal mon3
192.168.2.7 ceph-osd1.novalocal osd1
192.168.2.8 ceph-osd2.novalocal osd2
192.168.2.9 ceph-osd3.novalocal osd3

osd数规划
每台osd节点挂载3块SSD硬盘

配置yum源

根据操作系统版本任意调整(所有节点)
vim /etc/yum.repos.d/ceph.repo

1
2
3
4
5
6
7
8
9
10
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-hammer/el6/x86_64/
gpgcheck=0
enablde=1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-hammer/el6/x86_64/
gpgcheck=0
enablde=1

yum clean
yum makecache

在第一台mon节点安装pssh批量执行操作
yum install pssh
创建hosts(会被批量执行的主机)
vim /root/hosts.txt

1
2
3
4
5
192.168.2.5
192.168.2.6
192.168.2.7
192.168.2.8
192.168.2.9

先进行测试

安装软件(所有节点)
pssh -P -h hosts.txt yum install ceph –y
同步hosts
pscp.pssh -h /root/hosts.txt /etc/hosts /etc/

都success进行下一步

配置ceph-mon

创建集群fsid
uuidgen
fdc3d06b-7e05-44a8-b982-e8e04e4156db
创建/etc/ceph/ceph.conf将fsid写入配置文件
[global]
fsid = fdc3d06b-7e05-44a8-b982-e8e04e4156db

将ceph-mon写入配置文件(有多个mon,用逗号隔开)
mon_initial_members = mon,mon2,mon3
将mon节点ip写入ceph配置文件
mon_host = 192.168.2.4,192.168.2.5,192.168.2.6
为集群创建mon密钥
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

生成管理员密钥
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow'

将client.admin密钥加入到ceph.mon.keyring
ceph-authtool/tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring

生成mon map
monmaptool --create --add mon 192.168.2.4 --fsid fdc3d06b-7e05-44a8-b982-e8e04e4156db /tmp/monmap
在每个mon节点数据目录
分别在mon、mon2、mon3上执行
格式为(默认cluster-name为ceph)
mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}
如mon为
mkdir /var/lib/ceph/mon/ceph-mon
mon初始化(-i后接hostname)
ceph-mon --mkfs -i mon --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

ceph.conf增加如下配置

1
2
3
4
public network = 192.168.2.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx

创建两个空文件
touch /var/lib/ceph/mon/ceph-mon/done
touch /var/lib/ceph/mon/ceph-mon/sysvinit
启动第一个ceph-mon
/etc/init.d/ceph status mon.mon
部署第二个mon
将keyring复制到mon2
scp /tmp/ceph.mon.keyring mon2:/tmp/
在mon2节点上建立一个/var/lib/ceph/mon/ceph-mon2目录
mkdir –p /var/lib/ceph/mon/ceph-mon2/
在mon2节点上初始化mon节点
ceph-mon --mkfs -i mon2 --keyring /tmp/ceph.mon.keyring
为了防止重新被安装,初始化一个空的done文件
touch /var/lib/ceph/mon/ceph-mon2/done
touch /var/lib/ceph/mon/ceph-mon2/sysvinit
/etc/init.d/ceph start mon.mon2
检查进程

第三个mon同上
完后检查


发现有时种偏移问题,默认ceph是0.05s,为了方便同步直接把时钟偏移设置成0.5s
修改ceph配置文件增加两条配置

1
2
3
4
[global]
mon osd down out interval = 900 #设置osd节点down后900s,把此osd节点逐出ceph集群,把之前映射到此节点的数据映射到其他节点。
[mon]
mon clock drift allowed = .50

同步配置

pscp.pssh -h hosts.txt /etc/ceph/ceph.conf /etc/ceph/
重启进程
pssh -h /root/hosts.txt /etc/init.d/ceph restart

配置osd节点

将keyring同步到osd节点
pscp.pssh -h /root/hosts.txt /etc/ceph/ceph.client.admin.keyring /etc/ceph/

为osd分配uuid(我每台osd节点有3个osd所以创建3个uuid)
uuidgen
19ebc47d-9b29-4cf3-9720-b62896ce6f33
uuidgen
1721ce0b-7f65-43ef-9dfc-c49e6210d375
uuidgen
f5e0f54b-2ee3-41df-bf25-ad37371ab6ce

创建3个osd

1
2
3
ceph osd create 19ebc47d-9b29-4cf3-9720-b62896ce6f33
ceph osd create 1721ce0b-7f65-43ef-9dfc-c49e6210d375
ceph osd create f5e0f54b-2ee3-41df-bf25-ad37371ab6ce

创建数据存储目录

1
2
3
4
5
6
7
mkdir /var/lib/ceph/osd/{cluster-name}-{osd-number}
mkdir /var/lib/ceph/osd/ceph-0
mkdir /var/lib/ceph/osd/ceph-1
mkdir /var/lib/ceph/osd/ceph-2
mkfs.xfs /dev/vdb
mkfs.xfs /dev/vdc
mkfs.xfs /dev/vdd

挂载

1
2
3
mount -o defaults,_netdev /dev/vdb /var/lib/ceph/osd/ceph-0
mount -o defaults,_netdev /dev/vdc /var/lib/ceph/osd/ceph-1
mount -o defaults,_netdev /dev/vdd /var/lib/ceph/osd/ceph-2

修改fstable

初始化osd目录

1
2
3
ceph-osd -i 0 --mkfs --mkkey --osd-uuid 19ebc47d-9b29-4cf3-9720-b62896ce6f33
ceph-osd -i 1 --mkfs --mkkey --osd-uuid 1721ce0b-7f65-43ef-9dfc-c49e6210d375
ceph-osd -i 2 --mkfs --mkkey --osd-uuid f5e0f54b-2ee3-41df-bf25-ad37371ab6ce

注册此osd密钥

1
2
3
ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring
ceph auth add osd.1 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-1/keyring
ceph auth add osd.2 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-2/keyring

加入crush map

ceph osd crush add-bucket ceph-osd1 host
ceph osd crush move ceph-osd1 root=default

设置权重

1
2
3
ceph osd crush add osd.0 1.0 host=ceph-osd1
ceph osd crush add osd.1 1.0 host=ceph-osd1
ceph osd crush add osd.2 1.0 host=ceph-osd1

要已守护进程开机启动,须创建一个空文件

1
2
3
touch /var/lib/ceph/osd/ceph-0/sysvinit
touch /var/lib/ceph/osd/ceph-1/sysvinit
touch /var/lib/ceph/osd/ceph-2/sysvinit

启动osd进程

1
2
3
/etc/init.d/ceph start osd.0
/etc/init.d/ceph start osd.1
/etc/init.d/ceph start osd.2


查看osd 树

按上述方法配置osd2、osd3
3台节点添加完毕

这里有个warn,是pool的pg问题,我们重新计算,修改。
查看我们现在拥有的pool
ceph osd lspools
0 rbd,

查看默认的rbd pool的pg

1
2
3
4
5
6
7
ceph osd pool get rbd pg_num
pg_num: 64
ceph osd pool get rbd pg_num
pg_num: 64
修改为128
ceph osd pool set rbd pg_num 128
ceph osd pool set rbd pgp_num 128

再查看

修改ceph.conf默认数据存两份,默认pg为128
同步配置
重启ceph

配置ceph-radosgw

直接将第一个mon节点当radosgw,ceph在0.80及以上版本可以直接使用civeweb来构建对象网关,可以不需要使用apache或nginx+fastcgi了,所以我这里用civetweb。

安装软件
yum install ceph-radosgw
没有www-data用户创建
useradd –r –s /sbin/nologin www-data
创建gateway keyring并授权

ceph auth get-or-create client.radosgw.gateway osd 'allow rwx' mon 'allow rwx' -o /etc/ceph/keyring.radosgw.gateway

编辑ceph.conf文件
增加下面内容

1
2
3
4
5
6
7
8
9
10
11
[client.radosgw.gateway]
keyring = /etc/ceph/keyring.radosgw.gateway
rgw_socket_path = /tmp/radosgw.sock
rgw_frontends= "civetweb port=7480"
host = ceph-mon
rgw_dns_name = *.domain.tld
rgw_print_continue = True
rgw_data = /var/lib/ceph/radosgw
user = www-data
rgw s3 auth use keystone = true
log file =/var/log/radosgw/client.radosgw.gateway.log

重启进程
/etc/init.d/ceph-radosgw restart
查看是否启动成功

新建用户
radosgw-admin user create –uid=”testuser” –display-name=”First User”
得到如下结果