使用ceph-deploy工具部署Ceph集群
2017-02-02
环境准备 #
- 机器(操作系统 CentOS)
- 192.168.61.30 c0 - admin-node, deploy-node
- 192.168.61.31 c1 - mon
- 192.168.61.32 c2 - osd.1
- 192.168.61.33 c3 - osd.2
配置各个节点的host文件:
1192.168.61.31 c0
2192.168.61.31 c1
3192.168.61.32 c2
4192.168.61.33 c3
管理节点c0上配置Ceph yum源 /etc/yum.repos.d/ceph.repo
1[ceph-noarch]
2name=Ceph noarch packages
3baseurl=https://download.ceph.com/rpm-jewel/el7/noarch
4enabled=1
5priority=2
6gpgcheck=1
7gpgkey=https://download.ceph.com/keys/release.asc
更新软件库并安装 ceph-deploy
1yum update && sudo yum install ceph-deploy
在各节点创建部署ceph的用户(不建议为ceph),这里创建的用户名为sdsceph,设置一个密码,并确保该用户具有sudo权限。
1useradd -d /home/sdsceph -m sdsceph
2passwd sdsceph
3
4echo "sdsceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sdsceph
5chmod 0440 /etc/sudoers.d/sdsceph
禁用 requiretty,修改各节点sdsceph用户不需要控制终端,visudo
找到Defaults requiretty
修改成Defaults:sdsceph !requiretty
。
配置c0到各节点无密码登录,直接回车保持密码为空
1ssh-keygen
将key拷贝到c1~c3各节点:
1ssh-copy-id sdsceph@c1
2ssh-copy-id sdsceph@c2
3ssh-copy-id sdsceph@c3
修改c0上~/.ssh/config文件,设置当不指定用户时登录到c1~c3的用户为sdsceph
1Host c1
2 Hostname c1
3 User sdsceph
4Host c2
5 Hostname c2
6 User sdsceph
7Host c3
8 Hostname c3
9 User sdsceph
配置成功后从c0测试ssh到c1~c3确认可以无密码以sdsceph用户登录:
1ssh c1
2
3ssh c2
4
5ssh c3
在各节点上安装ntp服务:
1sudo yum install -y ntp
2
3sudo systemctl enable ntpd
4sudo systemctl start ntpd
安装 #
创建集群 #
使用ceph-deploy
创建集群,在此过程中会生成一些配置文件,因此可以先在c0上创建一个目录ceph-cluster,并进入到这个目录中。
1mkdir ceph-cluster
2cd ceph-cluster/
接下来执行命令ceph-deploy new {initial-monitor-node(s)}
将创建一个名称ceph的ceph cluster。
再看一遍要安装的环境安排:
1192.168.61.30 c0 - admin-node, deploy-node
2192.168.61.31 c1 - mon
3192.168.61.32 c2 - osd.1
4192.168.61.33 c3 - osd.2
ceph monitor node是c1服务器,因此执行下面的命令:
1ceph-deploy new c1
ceph-cluster目录下会生成下面3个文件:
1ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
因为只有两个OSD节点,在c2和c3服务器上,需要把Ceph 配置文件里的ceph.conf里的默认副本数从 3 改成 2, 这样只有两个 OSD 也可以达到 active + clean 状态。把下面这行加入 [global] 段:
1osd pool default size = 2
安装ceph #
从管理节点c0执行在各节点安装ceph:
1ceph-deploy install c0 c1 c2 c3
配置初始化ceph monitor nodes,这里只有c1,收集所有密钥:
1ceph-deploy mon create-initial
执行成功后当前目录下会出现以下key:
1ceph.bootstrap-mds.keyring
2ceph.bootstrap-osd.keyring
3ceph.bootstrap-rgw.keyring
4ceph.client.admin.keyring
在c1上 ps -ef | grep ceph-mon
可以看到ceph monitor进程已经启动。
接下来添加两个OSD到c2和c3。OSD是存储数据的节点,实际上需要为OSD提供独立的存储空间,如一个独立的磁盘。这里条件所限直接在系统本地磁盘上创建目录提供给OSD使用。
1ssh c2
2sudo mkdir /var/local/osd0
3sudo chown -R ceph:ceph /var/local/osd0
4exit
5
6ssh c3
7sudo mkdir /var/local/osd1
8sudo chown -R ceph:ceph /var/local/osd1
9exit
准备OSD:
1ceph-deploy osd prepare c2:/var/local/osd0 c3:/var/local/osd1
激活OSD:
1ceph-deploy osd activate c2:/var/local/osd0 c3:/var/local/osd1
分发admin密钥,将admin密钥拷贝到各节点,这样每次执行ceph命令行时就无需指定monitor地址和 ceph.client.admin.keyring了。
1ceph-deploy admin c0 c1 c2 c3
查看ceph集群中OSD节点的状态:
1ceph osd tree
2ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
3-1 0.19080 root default
4-2 0.09540 host c2
5 0 0.09540 osd.0 up 1.00000 1.00000
6-3 0.09540 host c3
7 1 0.09540 osd.1 up 1.00000 1.00000
查看集群健康状态:
1ceph health
2HEALTH_OK
如果安装过程中遇到问题可以使用下面的命令清理,重装:
1ceph-deploy purge c0 c1 c2 c3
2ceph-deploy purgedata c0 c1 c2 c3
3ceph-deploy forgetkeys
对象存入/读取测试 #
查看集群中的存储池:
1ceph osd lspools
20 rbd,
新建的集群上只有rbd一个存储池,下面创建一个名称为data的存储池:
1ceph osd pool create data 100
使用rados pus {object-name} {file-path} --pool=data
存入数据:
1rados put test-object1 ceph.conf --pool=data
确认Ceph存储了此对象:
1rados -p data ls
2test-object1
定位对象:
1ceph osd map data test-object1
2osdmap e12 pool 'data' (1) object 'test-object1' -> pg 1.bfe3960b (1.b) -> up ([0,1], p0) acting ([0,1], p0)
删除测试对象:
1rados rm test-object1 --pool=data