使用ceph-deploy 2.0.0 部署ceph 12.2.5集群

Ceph分布式文件系统集群搭建详解 1、Ceph分布式文件系统简介 Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。 Ceph 独一无二地在一个统一的系统中同时提供了对象、块、和文件存储功能。 基开发目标是: 可轻松扩展到数 PB 容量 支持多种工作负载的高性能(每秒输入/输出操作[IOPS]和带宽) 高可靠性 Ceph 不仅仅是一个文件系统,还是一个有企业级功能的对象存储生态环境。 中文学习网址:CEPH中文学习网 2.Ceph分布式文件系统搭建 2.1 环境准备 准备三台centos机器(使用虚拟机) 阅读详情

1. 环境

1.1 硬件

4台 Linux虚拟机: server0, server1, server2, server3
每台有两块磁盘 : /dev/vdb, /dev/vdc
每台有两块网卡 :eth0, ens9

1.2 软件

linux版本: CentOS 7.2.1511
内核版本 : 3.10.0-327.el7.x86_64
ceph版本: 12.2.5
ceph-deploy版本: 2.0.0

2. 准备工作(所有server)

2.1 配置静态IP

每台server有两个interface, 分别配置在如下两个网段:

  • 192.168.122.0/24
  • 192.168.100.0/24

具体如下表:

ServerInterfaceIPADDR
server0eth0192.168.122.160
server0ens9192.168.100.160
server1eth0192.168.122.161
server1ens9192.168.100.161
server2eth0192.168.122.162
server2ens9192.168.100.162
server3eth0192.168.122.163
server3ens9192.168.100.163

2.2 生成ssh key

# ssh-keygen

2.3 配置主机名解析

把如下内容追加到/etc/hosts:

192.168.100.160 server0
192.168.100.161 server1
192.168.100.162 server2
192.168.100.163 server3

2.4 配置ntp

# yum install  -y  ntp ntpdate ntp-doc
# vim /etc/ntp.conf  (一般不需要修改)
# systemctl start ntpd.service
# systemctl enable ntpd.service

2.5 关闭防火墙

# systemctl stop firewalld
# systemctl disable firewalld

2.6 安装yum源epel

为了方便yum安装一些常用的软件包:

# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

3. 安装ceph软件包

3.1 添加yum源(所有server)

在所有server上添加ceph.repo,内容如下:

# cat /etc/yum.repos.d/ceph.repo 
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/$basearch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[Ceph]: ceph软件包的yum源,所有server都需要添加。
[Ceph-noarch]:ceph-deploy的yum源。admin server (见3.2节) 需要安装ceph-deploy,所以它需要这个yum源。admin server控制其他server的时候,也需要被控server添加这个yum源。最终,所有server都需要添加。
[ceph-source]: admin server控制其他server的时候,也需要被控server添加这个yum源。所以,所有server都需要添加。

3.2 选择admin server

选择server0作为admin server。官网上建议admin server使用一个单独的user来进行ceph-deploy操作,这里避免麻烦,还用root账户。
admin server需要免密登录所有server(包括自己),所以在admin server上配置免密登录(其他server不必配置):

# ssh-copy-id root@server0
# ssh-copy-id root@server1
# ssh-copy-id root@server2
# ssh-copy-id root@server3

测试一下:

# for i in {0..3} ; do ssh server$i hostname ; done 
server0
server1
server2
server3

3.3 安装ceph-deploy(在admin server上)

在3.1节已经添加了ceph-deploy的yum源,这里直接通过yum安装:

# yum -y install ceph-deploy

然后测试一下,发现报错:

# ceph-deploy --version
Traceback (most recent call last):
  File "/usr/bin/ceph-deploy", line 18, in <module>
    from ceph_deploy.cli import main
  File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
    import pkg_resources
ImportError: No module named pkg_resources

原因是缺python-setuptools,安装它即可:

# yum install python-setuptools

# ceph-deploy --version
2.0.0

3.4 安装ceph包(在admin server上执行)

这一步的目标是:admin server通过远程控制在所有server上安装ceph包。它需要在所有server上添加yum源:[Ceph], [Ceph-noarch]和[ceph-source],见3.1节。

另外注意:在所有server上安装deltarpm (yum install -y deltarpm), 否则会报如下错误:

[server0][DEBUG ] Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
[server0][WARNIN] No data was received after 300 seconds, disconnecting...
[server0][INFO  ] Running command: ceph --version
[server0][ERROR ] Traceback (most recent call last):
[server0][ERROR ]   File "/usr/lib/python2.7/site-packages/ceph_deploy......

下面就是安装了:

# ceph-deploy install --release=luminous server0 server1 server2 server3

成功之后,每台server都安装了ceph包,在任意sever上检查:

# ceph -v
ceph version 12.2.5 (cad919881333ac92274171586c827e01f554a70a) luminous (stable)

# ceph -v
ceph version 12.2.5 (cad919881333ac92274171586c827e01f554a70a) luminous (stable)
[root@server1 ~]# rpm -qa | grep ceph
ceph-common-12.2.5-0.el7.x86_64
ceph-mds-12.2.5-0.el7.x86_64
ceph-12.2.5-0.el7.x86_64
ceph-release-1-1.el7.noarch
libcephfs2-12.2.5-0.el7.x86_64
python-cephfs-12.2.5-0.el7.x86_64
ceph-base-12.2.5-0.el7.x86_64
ceph-mon-12.2.5-0.el7.x86_64
ceph-osd-12.2.5-0.el7.x86_64
ceph-mgr-12.2.5-0.el7.x86_64
ceph-radosgw-12.2.5-0.el7.x86_64
ceph-selinux-12.2.5-0.el7.x86_64

4. 部署ceph集群(在admin server上执行)

为了演示,我们

  1. 创建一个集群:1 mon + 1 mgr。这个是initial monitor。
  2. 添加 osd
  3. 添加 2 mon + 2 mgr
  4. 创建一个mds

实际上,我们完全可以在第1步中直接创建 3 mon + 3 mgr的集群 (3个都是initial monitor),然后添加osd就行了。这里分作1和3两步,是为了演示添加mon和mgr。

另外,ceph-deploy在部署集群的过程中,会产生一些文件(log,keyring,ceph.conf等),所以,我们在一个新目录下执行:

# mkdir test-ceph-deploy
# cd test-ceph-deploy/

若部署出现错误,需要重头开始:

ceph-deploy purge server0 server1 server2 server3
ceph-deploy purgedata server0 server1 server2 server3
ceph-deploy forgetkeys
rm ceph.*

4.1 创建集群:1 mon + 1 mgr

A. 以server2为initial monitor创建集群

# ceph-deploy new server2 

这里指定server2作为initial monitor。这一步完成之后,在当前目录下会产生如下文件:

ceph.conf               
ceph.mon.keyring        
ceph-deploy-ceph.log

ceph.conf是ceph的配置文件。它将会被分发到所有server的/etc/ceph/目录下。在后续的ceph运维中,若需要做某些配置,可以在所有server上修改/etc/ceph/ceph.conf。

# cat ceph.conf 
[global]
fsid = 744f59b7-c403-48e6-a1c6-2c74901a4d0b
mon_initial_members = server2
mon_host = 192.168.100.162
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

ceph.mon.keyring是monitor的keyring,它定义了monitor的key,以及monitor有什么权限:

# cat ceph.mon.keyring 
[mon.]
key = AQDf7O9aAAAAABAAX4qmBiNsPhvK43wnpNCtLA==
caps mon = allow *

B. 配置ceph网络

ceph集群使用两个网络:public network和cluster network。前者用于服务client;后者用于集群内部通信,例如osd之间迁移数据。另外,两个网络上都有heartbeat。

注意:若只有一个网络,也可以部署ceph。这个网络同时担任public network和cluster network。这种情况下,跳过本小节。

我们有两个网络(见第2.1节),所以在ceph.conf中,增加如下两行:

# vim ceph.conf
......
public network  = 192.168.100.0/24
cluster network = 192.168.122.0/24

注意以下两点:

  • 在2.3节,我们配置主机名解析的时候,把主机名解析为public network的地址。这是因为,ceph-deploy是作为client (见下文D小节:client.admin, client.bootstrap-mds,client.bootstrap-mgr,client.bootstrap-osd,client.bootstrap-rgw)来操作集群的,ceph集群通过public network服务于client。

  • monitor是运行于public network上的。这也很容易理解,ceph的client都需要访问monitor,若monitor运行于cluster network上,client无法访问。

C. 部署initial monitor

# ceph-deploy mon create server2 

这时候,server2上,monitor已经运行起来了。可以到server2上检查。

[root@server2 ~]# ps -ef | grep ceph
ceph       18240       1  1 14:24 ?        00:00:00 /usr/bin/ceph-mon -f --cluster ceph --id server2 --setuser ceph --setgroup ceph

如前文B小节所述,monitor运行于public network之上:

[root@server2 ~]# netstat -anpl | grep 6789 | grep LISTEN
tcp        0      0 192.168.100.162:6789    0.0.0.0:*               LISTEN      18240/ceph-mon      

D. 创建ceph keyring

经过前一步,server2上的monitor已经运行起来了。但这时候ceph -s失败,因为ceph -s是admin的命令,我们还没有admin的权限信息呢。

# ceph -c ceph.conf -s 
2018-05-07 14:25:46.127163 7f76e1834700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory
2018-05-07 14:25:46.127199 7f76e1834700 -1 monclient: ERROR: missing keyring, cannot use cephx for authentication
2018-05-07 14:25:46.127201 7f76e1834700  0 librados: client.admin initialization error (2) No such file or directory

下面使用gatherkeys来创建各个角色(包括admin)的权限信息。gatherkeys 依次对角色 admin, bootstrap-mds, bootstrap-mgr, bootstrap-osd, bootstrap-rgw作如下操作(问题:为什么没有bootstrap-rbd?):

  1. 使用 ceph auth get 来获取角色的key和权限;
  2. 若不存在,则使用auth get-or-create {角色} {权限}来创建角色的key和权限;
  3. 把角色的key保存到 {角色}.keyring文件;
# ceph-deploy gatherkeys server2
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.0): /usr/bin/ceph-deploy gatherkeys server2
......
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get client.admin
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get-or-create client.admin osd allow * mds allow * mon allow * mgr allow *
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get client.bootstrap-mds
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get-or-create client.bootstrap-mds mon allow profile bootstrap-mds
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get client.bootstrap-mgr
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get-or-create client.bootstrap-mgr mon allow profile bootstrap-mgr
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get client.bootstrap-osd
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get-or-create client.bootstrap-osd mon allow profile bootstrap-osd
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get client.bootstrap-rgw
[server2][INFO  ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get-or-create client.bootstrap-rgw mon allow profile bootstrap-rgw
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.client.admin.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-mds.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-mgr.keyring
[ceph_deploy.gatherkeys][INFO  ] keyring 'ceph.mon.keyring' already exists
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-osd.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-rgw.keyring
[ceph_deploy.gatherkeys][INFO  ] Destroy temp directory /tmp/tmpCHsfbU

创建之后,各个角色的key和权限就存在于集群中了。某个角色(例如admin)要对集群的某个组件(例如osd)进行读写操作时,要提供自己的key;集群根据它的key找到它的权限,然后鉴定它是否能够对这个组件进行读写操作。

上面gatherkeys在生成各个角色的key+权限的同时,把角色的key保存成keyring文件,供各个角色读写集群组件时使用:

# ll
total 120
-rw-------. 1 root root    71 May  7 14:28 ceph.bootstrap-mds.keyring
-rw-------. 1 root root    71 May  7 14:28 ceph.bootstrap-mgr.keyring
-rw-------. 1 root root    71 May  7 14:28 ceph.bootstrap-osd.keyring
-rw-------. 1 root root    71 May  7 14:28 ceph.bootstrap-rgw.keyring
-rw-------. 1 root root    63 May  7 14:28 ceph.client.admin.keyring

# cat ceph.client.admin.keyring 
[client.admin]
    key = AQD88e9aAwlyBRAAVwhjmH8GGVmG+JFYs/3MAA==

# cat ceph.bootstrap-osd.keyring 
[client.bootstrap-osd]
    key = AQD+8e9aFC9+LxAApTnB/DImy5ZjoRbQhYoiVA==

现在就可以执行ceph的admin命令了(admin的key保存在ceph.client.admin.keyring文件里,通过–keyring提供):

# ceph --keyring ceph.client.admin.keyring -c ceph.conf -s
  cluster:
    id:     744f59b7-c403-48e6-a1c6-2c74901a4d0b
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum server2
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 bytes
    usage:   0 kB used, 0 kB / 0 kB avail
    pgs:     


# ceph --keyring ceph.client.admin.keyring -c ceph.conf auth get client.admin
exported keyring for client.admin
[client.admin]
    key = AQD88e9aAwlyBRAAVwhjmH8GGVmG+JFYs/3MAA==
    caps mds = "allow *"
    caps mgr = "allow *"
    caps mon = "allow *"
    caps osd = "allow *"

E. 分发keyring

如前所示,我们执行admin的命令,要提供admin的key(–keyring ceph.client.admin.keyring)以及配置文件(-c ceph.conf)。在后续的运维中,我们经常需要在某个server上执行admin命令。每次都提供这些参数比较麻烦。实际上,ceph会默认地从/etc/ceph/中找keyring和ceph.conf。因此,我们可以把ceph.client.admin.keyring和ceph.conf放到每个server的/etc/ceph/。ceph-deploy可以帮我做这些:

# ceph-deploy admin server0 server1 server2 server3 

检查每个server,发现/etc/ceph/下都多了ceph.client.admin.keyring和ceph.conf这两个文件。现在就不用提供那些参数了:

# ceph -s
# ceph auth get client.admin 

F. 创建mgr

从ceph 12(luminous)开始,需要为每个monitor创建一个mgr(其功能待研究,之前的版本都没有这个组件)。

# ceph-deploy mgr create server2

# ceph -s
  cluster:
    id:     744f59b7-c403-48e6-a1c6-2c74901a4d0b
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum server2
    mgr: server2(active)    ----------------------新加的mgr
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 bytes
    usage:   0 kB used, 0 kB / 0 kB avail
    pgs:     

4.2 添加OSD

ceph-deploy osd create通过调用ceph-volume来创建OSD。使用bluestore时(默认),需要指定3个device:

device如何指定说明
block–data主要存储,必选。可以是磁盘,分区或者lv
block.db–block-db可选。若不指定,则对应内容存储于block。可以是分区或者lv
block.wal–block-wal可选。若不指定,则对应内容存储于block。可以是分区或者lv

注意:
1. 不可以使用磁盘作为block.db或者block.wal,否则会报错:blkid could not detect a PARTUUID for device;
2. 若使用磁盘或者分区作block,则ceph-volume会在其上创建lv来使用。若使用分区作block.db或block.wal,则直接使用分区而不创建lv。

在使用磁盘之前,我们先把磁盘清空。若已经创建了volume group,需要先删掉(vgremove),然后通过ceph-deploy的disk zap进行清空。ceph-deploy disk zap会发生如下错误:

# ceph-deploy disk zap server0 /dev/vdb
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.0): /usr/bin/ceph-deploy disk zap 
[ceph_deploy.osd][DEBUG ] zapping /dev/vdb on server0
......
[server0][DEBUG ] find the location of an executable
[ceph_deploy][ERROR ] Traceback (most recent call last):
[ceph_deploy][ERROR ]   File "/usr/lib/python2.7/site-packages/ceph_deploy/util/decorators.py", line 69, in newfunc
[ceph_deploy][ERROR ]     return f(*a, **kw)
[ceph_deploy][ERROR ]   File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 164, in _main
[ceph_deploy][ERROR ]     return args.func(args)
[ceph_deploy][ERROR ]   File "/usr/lib/python2.7/site-packages/ceph_deploy/osd.py", line 438, in disk
[ceph_deploy][ERROR ]     disk_zap(args)
......

修改ceph-deploy的 osd.py的disk_zap函数,即可成功:

# vim /usr/lib/python2.7/site-packages/ceph_deploy/osd.py
ceph_volume_executable = system.executable_path(distro.conn, 'ceph-volume')
#if args.debug:
if False:

A. 添加osd.0(磁盘作block,无block.db,无block.wal)

# ceph-deploy osd create server0 --data /dev/vdb

# ceph -s
  cluster:
    id:     744f59b7-c403-48e6-a1c6-2c74901a4d0b
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum server2
    mgr: server2(active)
    osd: 1 osds: 1 up, 1 in

# mount | grep ceph
tmpfs on /var/lib/ceph/osd/ceph-0 type tmpfs (rw,relatime,seclabel)

# ll /var/lib/ceph/osd/ceph-0  
total 48
-rw-r--r--. 1 ceph ceph 189 May  7 15:19 activate.monmap
lrwxrwxrwx. 1 ceph ceph  93 May  7 15:19 block -> /dev/ceph-012c2043-33ef-4219-af69-34c7ed389d41/osd-block-5beb22d5-891c-4d6e-affe-87eb4bc083b2
-rw-r--r--. 1 ceph ceph   2 May  7 15:19 bluefs
-rw-r--r--. 1 ceph ceph  37 May  7 15:19 ceph_fsid
-rw-r--r--. 1 ceph ceph  37 May  7 15:19 fsid
-rw-------. 1 ceph ceph  55 May  7 15:19 keyring
-rw-r--r--. 1 ceph ceph   8 May  7 15:19 kv_backend
-rw-r--r--. 1 ceph ceph  21 May  7 15:19 magic
-rw-r--r--. 1 ceph ceph   4 May  7 15:19 mkfs_done
-rw-r--r--. 1 ceph ceph  41 May  7 15:19 osd_key
-rw-r--r--. 1 ceph ceph   6 May  7 15:19 ready
-rw-r--r--. 1 ceph ceph  10 May  7 15:19 type
-rw-r--r--. 1 ceph ceph   2 May  7 15:19 whoami

可见:
1. 使用磁盘vdb创建lv供block使用;
2. osd是mount到tmpfs的(bluefs, ceph_fsid, fsid, keyring等等都存于集群中);

B. 添加osd.1(分区作block,分区作block.db,无block.wal)

把server0的vdc分成两个分区(分区过程省略,注意,要是有gpt分区格式):vdc1作block.db,vdc2作block。

# ceph-deploy osd create server0 --data /dev/vdc2 --block-db /dev/vdc1

# ll  /var/lib/ceph/osd/ceph-1 
total 52
-rw-r--r--. 1 ceph ceph 189 May  7 15:25 activate.monmap
lrwxrwxrwx. 1 ceph ceph  93 May  7 15:25 block -> /dev/ceph-ae408599-db16-4028-914d-4006594c5cd8/osd-block-1edeced4-e5e9-45ac-a5d3-ddd238d720d4
lrwxrwxrwx. 1 root root   9 May  7 15:25 block.db -> /dev/vdc1
-rw-r--r--. 1 ceph ceph   2 May  7 15:25 bluefs
-rw-r--r--. 1 ceph ceph  37 May  7 15:25 ceph_fsid
-rw-r--r--. 1 ceph ceph  37 May  7 15:25 fsid
-rw-------. 1 ceph ceph  55 May  7 15:25 keyring
-rw-r--r--. 1 ceph ceph   8 May  7 15:25 kv_backend
-rw-r--r--. 1 ceph ceph  21 May  7 15:25 magic
-rw-r--r--. 1 ceph ceph   4 May  7 15:25 mkfs_done
-rw-r--r--. 1 ceph ceph  41 May  7 15:25 osd_key
-rw-r--r--. 1 ceph ceph  10 May  7 15:25 path_block.db
-rw-r--r--. 1 ceph ceph   6 May  7 15:25 ready
-rw-r--r--. 1 ceph ceph  10 May  7 15:25 type
-rw-r--r--. 1 ceph ceph   2 May  7 15:25 whoami

可见,使用分区vdc2创建lv供block使用; block.db直接使用vdc1;

C. 添加osd.2(分区作block,分区作block.db,分区作block.wal)

把serve1的vdb分成3个分区:vdb3作block,vdb2作block.db,vdb1作block-wal:

# ceph-deploy osd create server1 --data /dev/vdb3 --block-db /dev/vdb2 --block-wal /dev/vdb1

到server1上:

# ll /var/lib/ceph/osd/ceph-2 
total 56
-rw-r--r--. 1 ceph ceph 189 May  7 15:34 activate.monmap
lrwxrwxrwx. 1 ceph ceph  93 May  7 15:34 block -> /dev/ceph-c2f66dc2-076b-46cd-a1cd-e3ef9511a38a/osd-block-7bf0f953-2feb-4064-8d19-873495cae7f5
lrwxrwxrwx. 1 root root   9 May  7 15:34 block.db -> /dev/vdb2
lrwxrwxrwx. 1 root root   9 May  7 15:34 block.wal -> /dev/vdb1
-rw-r--r--. 1 ceph ceph   2 May  7 15:34 bluefs
-rw-r--r--. 1 ceph ceph  37 May  7 15:34 ceph_fsid
-rw-r--r--. 1 ceph ceph  37 May  7 15:34 fsid
-rw-------. 1 ceph ceph  55 May  7 15:34 keyring
-rw-r--r--. 1 ceph ceph   8 May  7 15:34 kv_backend
-rw-r--r--. 1 ceph ceph  21 May  7 15:34 magic
-rw-r--r--. 1 ceph ceph   4 May  7 15:34 mkfs_done
-rw-r--r--. 1 ceph ceph  41 May  7 15:34 osd_key
-rw-r--r--. 1 ceph ceph  10 May  7 15:34 path_block.db
-rw-r--r--. 1 ceph ceph  10 May  7 15:34 path_block.wal
-rw-r--r--. 1 ceph ceph   6 May  7 15:34 ready
-rw-r--r--. 1 ceph ceph  10 May  7 15:34 type
-rw-r--r--. 1 ceph ceph   2 May  7 15:34 whoami

D. 添加osd.3(lv作block,lv作block.db,lv作block.wal)

首先,在server1上,使用vdc创建出3个lv

# pvcreate /dev/vdc
  Physical volume "/dev/vdc" successfully created

# vgcreate myvg /dev/vdc   
  Volume group "myvg" successfully created

# lvcreate -n block-lv -L 30G myvg  
  Logical volume "block-lv" created.

# lvcreate -n db-lv -L 10G myvg
  Logical volume "db-lv" created.

# lvcreate -n wal-lv -L 10G myvg
  Logical volume "wal-lv" created.


# ls /dev/myvg/
block-lv  db-lv  wal-lv

然后,在admin server上创建osd.3:

# ceph-deploy osd create server1 --data myvg/block-lv --block-db myvg/db-lv  --block-wal myvg/wal-lv

到server1上:

# ll /var/lib/ceph/osd/ceph-3  
total 56
-rw-r--r--. 1 ceph ceph 189 May  7 15:47 activate.monmap
lrwxrwxrwx. 1 ceph ceph  18 May  7 15:47 block -> /dev/myvg/block-lv
lrwxrwxrwx. 1 root root  15 May  7 15:47 block.db -> /dev/myvg/db-lv
lrwxrwxrwx. 1 root root  16 May  7 15:47 block.wal -> /dev/myvg/wal-lv
-rw-r--r--. 1 ceph ceph   2 May  7 15:47 bluefs
-rw-r--r--. 1 ceph ceph  37 May  7 15:47 ceph_fsid
-rw-r--r--. 1 ceph ceph  37 May  7 15:47 fsid
-rw-------. 1 ceph ceph  55 May  7 15:47 keyring
-rw-r--r--. 1 ceph ceph   8 May  7 15:47 kv_backend
-rw-r--r--. 1 ceph ceph  21 May  7 15:47 magic
-rw-r--r--. 1 ceph ceph   4 May  7 15:47 mkfs_done
-rw-r--r--. 1 ceph ceph  41 May  7 15:47 osd_key
-rw-r--r--. 1 ceph ceph  16 May  7 15:47 path_block.db
-rw-r--r--. 1 ceph ceph  17 May  7 15:47 path_block.wal
-rw-r--r--. 1 ceph ceph   6 May  7 15:47 ready
-rw-r--r--. 1 ceph ceph  10 May  7 15:47 type
-rw-r--r--. 1 ceph ceph   2 May  7 15:47 whoami

注意: lv应写作 myvg/xx-lv,而不是/dev/myvg/xx-lv。否则会报错。

E. 添加其他osd

为了方便,block, block.db和block.wal都使用分区。

# ceph-deploy osd create server3 --data /dev/vdb3  --block-db /dev/vdb2  --block-wal /dev/vdb1
# ceph-deploy osd create server3 --data /dev/vdc3  --block-db /dev/vdc2  --block-wal /dev/vdc1
# ceph-deploy osd create server2 --data /dev/vdb3  --block-db /dev/vdb2  --block-wal /dev/vdb1
# ceph-deploy osd create server2 --data /dev/vdc3  --block-db /dev/vdc2  --block-wal /dev/vdc1



# ceph -s
  cluster:
    id:     744f59b7-c403-48e6-a1c6-2c74901a4d0b
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum server2
    mgr: server2(active)
    osd: 8 osds: 8 up, 8 in    <-------- 8 个 osd

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 bytes
    usage:   8226 MB used, 339 GB / 347 GB avail
    pgs:     

4.3 添加 2 mon + 2 mgr

# ceph-deploy mon add server0
# ceph-deploy mgr create server0
# ceph-deploy mon add server1
# ceph-deploy mgr create server1

注意:貌似新版的ceph-deploy一次只能增加一个mon.

现在集群就有3个mon和3个mgr了:

# ceph -s
  cluster:
    id:     744f59b7-c403-48e6-a1c6-2c74901a4d0b
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum server0,server1,server2
    mgr: server2(active), standbys: server0, server1
    osd: 8 osds: 8 up, 8 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 bytes
    usage:   8230 MB used, 339 GB / 347 GB avail
    pgs:     

4.4 创建一个mds

为了支持cephfs,我们在server2上创建一个mds:

# ceph-deploy mds create server2

成功之后,到server2上可以看见mds进程:

[root@server2 ~]# ps -ef | grep ceph-mds
ceph       19995       1  0 16:35 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id server2 --setuser ceph --setgroup ceph

但这个时候,mds并没有active,如下,我们通过ceph -s看不到mds服务。直到创建ceph filesystem的时候,mds才进入active状态(见6.1节)。

# ceph -s
  cluster:
    id:     744f59b7-c403-48e6-a1c6-2c74901a4d0b
    health: HEALTH_WARN
            too few PGs per OSD (12 < min 30)

  services:    -----------------> 看不到mds
    mon: 3 daemons, quorum server0,server1,server2
    mgr: server2(active), standbys: server0, server1
    osd: 8 osds: 8 up, 8 in
    rgw: 2 daemons active

  data:
    pools:   4 pools, 32 pgs
    objects: 187 objects, 1113 bytes
    usage:   8239 MB used, 339 GB / 347 GB avail
    pgs:     32 active+clean

至此,ceph集群就完全部署起来了。下面,我们为ceph集群增加一些client。

5. 增加rgw (在admin server上操作)

我们可以使用ceph集群之外的server来部署rgw。部署之前,需要保证默认端口(7480)没有被防火墙禁止。并且需要安装ceph-radosgw包机器依赖:

ceph-deploy install --rgw <client-node> [<client-node> ...]

为了方便起见,我们复用集群内的server1和server3来部署rgw。由于ceph-radosgw已经安装(见3.4节),并且防火墙已经被停掉(见2.5节),所以,直接部署即可:

# ceph-deploy rgw create server1 server3 

成功之后,在server1和server3上rgw进程就运行起来了:

[root@server1 ~]# ps -ef | grep ceph
......
ceph       15884       1  2 16:23 ?        00:00:00 /usr/bin/radosgw -f --cluster ceph --name client.rgw.server1 --setuser ceph --setgroup ceph


[root@server3 ~]# ps -ef | grep ceph
......
ceph       14107       1  2 16:23 ?        00:00:00 /usr/bin/radosgw -f --cluster ceph --name client.rgw.server3 --setuser ceph --setgroup ceph

并且我们可以通过http来访问:

# curl server1:7480
<?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>

6. 增加cephfs

ceph filesystem需要mds(我们在4.4节已经部署)。并且,有两种方式来挂载:ceph fuse和ceph kernel driver。在这一节,我们:

  1. 创建一个ceph filesystem
  2. 通过ceph fuse挂载
  3. 通过ceph kernel driver挂载

6.1 创建ceph filesystem(在集群内任意server上)

A. 创建所需的pool

# ceph osd pool create cephfs_data 80
pool 'cephfs_data' created
# ceph osd pool create cephfs_metadata 40
pool 'cephfs_metadata' created

B. 创建filesystem

# ceph fs new mycephfs cephfs_metadata cephfs_data
new fs with metadata pool 6 and data pool 5

如第4.4节所示,在没有创建filesystem之前,mds没有active。现在mds就进入active状态了:

# ceph -s
  cluster:
    id:     744f59b7-c403-48e6-a1c6-2c74901a4d0b
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum server0,server1,server2
    mgr: server2(active), standbys: server0, server1
    mds: mycephfs-1/1/1 up  {0=server2=up:active}  --------->mds已经active
    osd: 8 osds: 8 up, 8 in
    rgw: 2 daemons active

  data:
    pools:   6 pools, 152 pgs
    objects: 208 objects, 3359 bytes
    usage:   8248 MB used, 339 GB / 347 GB avail
    pgs:     152 active+clean

6.2 通过ceph fuse挂载(在server2上)

和rgw一样,原则上我们在ceph集群之外的某台server上挂载ceph filesystem。但为了方便起见,我们还是在server2上挂载。

首先,要在server2上安装ceph-fuse(若使用ceph集群外的server,也只需这一个包):

# yum install -y ceph-fuse.x86_64  

然后,创建一个挂载点,就可以挂载了。注意,ceph-fuse挂载使用的是admin的权限,所以,通过-k选项传入admin的key。

# mkdir /mnt/cephfs

# ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m server0:6789 /mnt/cephfs
2018-05-07 17:27:07.205147 7f501e11f040 -1 init, newargv = 0x7f502968cb80 newargc=9
ceph-fuse[20080]: starting ceph client
ceph-fuse[20080]: starting fuse

这时候,一个全新的ceph filesystem就可以使用了。注意:这时cephfs_data是空的,但cephfs_metadata不空:

# ceph df
GLOBAL:
    SIZE     AVAIL     RAW USED     %RAW USED 
    347G      339G        8248M          2.32 
POOLS:
    NAME                    ID     USED     %USED     MAX AVAIL     OBJECTS 
    ......
    cephfs_data             5         0         0          106G           0 
    cephfs_metadata         6      2624         0          106G          21 

往里拷贝一些东西,就会发现cephfs_data也不空了:

# cp /boot/vmlinuz-3.10.0-327.el7.x86_64  /mnt/cephfs/

# ls /mnt/cephfs/
vmlinuz-3.10.0-327.el7.x86_64

# ceph df
GLOBAL:
    SIZE     AVAIL     RAW USED     %RAW USED 
    347G      339G        8263M          2.32 
POOLS:
    NAME                    ID     USED      %USED     MAX AVAIL     OBJECTS 
    ......
    cephfs_data             5      5035k         0          106G           2 
    cephfs_metadata         6       7541         0          106G          21 

6.3 通过ceph kernel driver挂载

首先,我们尝试在server3上测试ceph kernel driver挂载。

和ceph-fuse一样,通过ceph kernel driver挂载也需要admin的权限。不同的是,不需要admin的keyring文件,而是直接需要admin的key:

[root@server3 ~]# mkdir /mnt/kcephfs
[root@server3 ~]# mount -t ceph server0:6789:/ /mnt/kcephfs/  -o name=admin,secret=AQD88e9aAwlyBRAAVwhjmH8GGVmG+JFYs/3MAA==

这个命令卡了一段时间后,报出如下错误:

mount error 5 = Input/output error

在/var/log/messages中,有如下错误信息:

[root@server3 ~]# tail /var/log/messages
May  7 17:41:29 server3 kernel: libceph: mon0 192.168.100.160:6789 feature set mismatch, my 103b84a842aca < server's 40103b84a842aca, missing 400000000000000
May  7 17:41:29 server3 kernel: libceph: mon0 192.168.100.160:6789 missing required protocol features

就是说:ceph集群需要的feature set,我们的ceph kernel driver没能够全部提供,缺失的是400000000000000。

从CephNotes里,我们可以看到,缺失有些feature,可以通过两种办法解决:

  1. 升级内核 (从客户端入手解决)
  2. 对集群做某些设置 (从server端入手解决)

例如:

  • missing 2040000 (CEPH_FEATURE_CRUSH_TUNABLES 和CEPH_FEATURE_CRUSH_TUNABLES2 ):
    把客户server(cephfs挂载机)的内核升到3.9(或以上) ;
    把tunables设置为legacy : ceph osd crush tunables legacy;
  • missing 40000000 (CEPH_FEATURE_OSDHASHPSPOOL):
    把客户server(rbd客户机?)的内核升到3.9(或以上) ;
    ceph osd pool set rbd hashpspool false
  • missing 800000000 (CEPH_FEATURE_OSD_CACHEPOOL):
    把客户server的内核升到3.14(或以上) ;
    删除cache pool并reload monitors;

悲剧的是,我们缺失的400000000000000 (CEPH_FEATURE_NEW_OSDOPREPLY_ENCODING),无法通过设置集群来解决,也就是说必须升级内核(到4.5以上)。

参考:http://cephnotes.ksperis.com/blog/2014/01/21/feature-set-mismatch-error-on-ceph-kernel-client

刚好,我有个开发server(devbuild:192.168.100.150),已经编译安装过内核 4.14.39。去试试。如4.1.B节所述,monitor运行于public network上(192.168.100.0/24),devbuild能够访问这个网络。这就足够了。注意:这个server不需安装任何ceph包。

# ping 192.168.100.160
PING 192.168.100.160 (192.168.100.160) 56(84) bytes of data.
64 bytes from 192.168.100.160: icmp_seq=1 ttl=64 time=4.12 ms
64 bytes from 192.168.100.160: icmp_seq=2 ttl=64 time=0.557 ms
......

[root@devbuild ~]# uname -a
Linux devbuild 4.14.39.hyg.20180503  ......

[root@devbuild ~]# mkdir /mnt/kcephfs

[root@devbuild ~]# mount -t ceph 192.168.100.162:6789:/ /mnt/kcephfs/  -o name=admin,secret=AQD88e9aAwlyBRAAVwhjmH8GGVmG+JFYs/3MAA==

[root@devbuild ~]# ls /mnt/kcephfs/
vmlinuz-3.10.0-327.el7.x86_64

已经mount成功,并且能看到第6.2节拷贝过去的文件。再测试拷贝一个文件,可见读写正常:

[root@devbuild ~]# cp linux-4.14.39.tar.xz /mnt/kcephfs/

[root@devbuild ~]# ll /mnt/kcephfs/
total 103560
-rw-r--r-- 1 root root 100888428 May  7 18:27 linux-4.14.39.tar.xz
-rwxr-xr-x 1 root root   5156528 May  7 17:30 vmlinuz-3.10.0-327.el7.x86_64

另外,根据官方文档,命令:

# mount -t ceph 192.168.100.162:6789:/ /mnt/kcephfs/  -o name=admin,secret=AQD88e9aAwlyBRAAVwhjmH8GGVmG+JFYs/3MAA==

也可以换做:

# cat admin.secret 
AQD88e9aAwlyBRAAVwhjmH8GGVmG+JFYs/3MAA==

# mount -t ceph 192.168.100.162:6789:/ /mnt/kcephfs/  -o name=admin,secretfile=admin.secret

但是,我这样尝试,一直报错:

[root@devbuild ~]# cat admin.secret
AQD88e9aAwlyBRAAVwhjmH8GGVmG+JFYs/3MAA==
[root@devbuild ~]# mount -t ceph 192.168.100.162:6789:/ /mnt/kcephfs/  -o name=admin,secretfile=admin.secret
mount: wrong fs type, bad option, bad superblock on 192.168.100.162:6789:/,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.


[root@devbuild ~]# dmesg | tail   
[   66.850589] random: 7 urandom warning(s) missed due to ratelimiting
[  140.953833] Key type dns_resolver registered
[  141.096210] Key type ceph registered
[  141.097950] libceph: loaded (mon/osd proto 15/24)
[  141.160712] ceph: loaded (mds proto 32)
[  141.163762] libceph: bad option at 'secretfile=admin.secret'

原因是,我的这个server没有安装任何ceph包,所以没有/usr/sbin/mount.ceph这个文件。解决办法:
1. 从别的server拷贝这个文件;
2. 安装ceph-common;

# yum install -y ceph-common-12.2.5-0.el7.x86_64

前文说过,devbuild server不需安装任何ceph包,但若使用secretfile的方式,还是安装这个ceph-common为好。

7. 增加rbd

7.1 准备rbd pool

在集群内的任意server上创建一个pool,并init:

# ceph osd pool create rbd_pool 100 100
pool 'rbd_pool' created

# rbd pool init rbd_pool

7.2 创建块设备

首先我们尝试在集群内的一个server(server0)上创建块设备。

# rbd create foo --size 4096 --image-feature layering -m 192.168.100.160  -K admin.secret -p rbd_pool
# rbd map foo --name client.admin -m 192.168.100.160 -K admin.secret -p rbd_pool

rbd: sysfs write failed
rbd: error opening default pool 'rbd'
Ensure that the default pool has been created or specify an alternate pool name.
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (5) Input/output error


# dmesg | tail 
......
[527394.031762] libceph: mon0 192.168.100.160:6789 feature set mismatch, my 102b84a842a42 < server's 40102b84a842a42, missing 400000000000000
[527394.034677] libceph: mon0 192.168.100.160:6789 missing required protocol features

和6.3节遇到的问题一样,内核版本低,缺feature 400000000000000。还是到devbuild这个server上创建吧,要求:

  • devbuild server能够访问monitor (public network);
  • 安装ceph-common;
  • admin.secret;

如6.3节所述,都已满足。可以创建块设备了:

# rbd create foo --size 4096 --image-feature layering -m 192.168.100.160  -K admin.secret -p rbd_pool

# rbd map foo --name client.admin -m 192.168.100.160  -K admin.secret -p rbd_pool

选项-K admin.secret也可以换成-k ceph.client.admin.keyring。成功之后:

# ll /dev/rbd0
brw-rw----. 1 root disk 251, 0 May 10 16:31 /dev/rbd0

# ls /dev/rbd/
rbd_pool

# ls /dev/rbd/rbd_pool
foo

这时候,我们可以使用/dev/rbd0了:

# mkfs.ext4  /dev/rbd0 
# mount  /dev/rbd0 /mnt/rbd/

8. 小结

本文实践了使用ceph-deploy安装部署ceph集群的过程,给集群添加了三种类型的客户端,并且解决了一些部署中常见的问题。

ceph-deploy离线部署ceph集群及报错解决FAQ Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 ceph-deploy部署ceph集群 环境介绍 主机名 ip地址 操作系统 角色 备注 ceph-node1 10.153.204.13 Centos7.6 mon、osd、mds、mgr、rgw、ceph-deploy chronyd时钟同步(主) ce 阅读详情

相关推荐

CentOS7下Ceph集群部署实战

通过 CRUSH 算法将其映射到不同的 OSD 节点上,实现数据的存储。我们可以将其理解为 Ceph 存储上划分的逻辑分区,Pool 由多个 PG 组成;2、集群网络(cluster-network,用于集群内部通讯)与公共网络(public-network,用于外部访问Ceph集群)分离。Ceph 客户端向 monitor 请求集群的状态,并向 Pool 中写入数据,数据根据 PGs 的数量,3、mon、mds 与 osd 分离部署在不同主机上(测试环境中可以让一台主机节点运行多个组件)

2503_91960880的博客 1355

SSH使用私钥无密码登录远程服务器

SSH无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,下面我以debian为例。有机器A(192.168.1.155),B(192.168.1.181)。现想A通过ssh免密码登录到B。1.在A机下生成公钥/私钥对。 [chenlb@A ~]$ ssh-keygen -t rsa 后面可加-P表示密码,-P '' (-P后面两个单引号)就表示空密码

a753255157的博客 1万+

ceph集群部署及块osd使用

部署cephj集群, 使用块osd

qq_41345380的博客 2426

各厂商防火墙初始登录IP及密码信息

1. 天融信 登录地址:https://192.168.1.254 用户名:superman 密码:talent或talent!23 技术支持热线 8008105119 2. 联想网域 需要证书(最好用IE浏览器登录) 登录地址:https://10.1.5.254:8889 用户名:admin 密码:leadsec@7766、 用户名:administrator 密码:bane@7766 技术支持热线:4008107766、010-56632666 3. 深信服 登录地址:h

Jian Sun_的博客 8万+

Java Web从入门到实战

Java Web从入门到实战,十万+字符,一文带你从零到实战,内含Linux、Tomcat、Servlet、JSP、Mysql、JDBC、Mybatis、js、jQuery等超多内容

HelloCode 3万+

ceph管理实战

查看类命令 osd查看命令 查看osd的id [root@ceph01 ceph-cluster]# ceph osd ls 0 1 2 查看osd树形图 [root@ceph01 ceph-cluster]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.26880 root default -2 0.08960

weixin_40548182的博客 6394

Ceph集群部署(基于ceph-deploy)

一个集群自动化部署工具,使用较久,成熟稳定,被很多自动化工具所集成,可用于生产部署。3.admin管理节点配置ssh免密登录node节点。部署Ceph实验(基于ceph-deploy)2.安装ceph-deploy部署工具。10.解决HEALTH_WARN问题。7.使其它节点可以管理Ceph群集。1.创建一个Ceph工作目录。6.配置Ceph yum源。3.手动安装Ceph软件包。部署Ceph集群的方法。部署Ceph集群的方法。8.部署osd存储节点。Ceph生产环境推荐。三、部署Ceph集群。

2401_83784772的博客 4579

谷歌倾斜摄影数据获取以及转换3DTiles介绍

解析谷歌倾斜模型数据,再一键设置无人值守的情况下,快速将谷歌倾斜摄影模型数据转成3DTiles数据,并在Cesium上进行流畅漫游缩放显示,效果优于官方3DTiiles格式数据

cyber_room的博客 5335

使用ceph-deploy部署Ceph集群

初次入门,使用ceph-deploy工具快速安装(相比于手工安装)一套三节点的Ceph集群,并最终创建对象存储服务进行系统验证。 预先了解两个基本概念: mon:osd监视器,osd的守护进程,通常一个osd对应一个mon osd:实际存储数据,通常直接对应一块硬盘 三台机器(Ubuntu 16.04):172.31.0.5,172.31.0.13,172.31.0.22,分别命名为ceph0...

半斤米粉闯天下的博客 8778

51雾化器实现

1. 雾化器简介 雾化器是将试液雾化的一种器械。雾化器是原子化系统的重要部件,其性能对测定的精密度和化学干扰等产生显著影响。因此要求雾化器喷雾稳定、雾滴细小、均匀和雾化效率高。雾化器的类型有超声雾化器,空气压缩式雾化器,网式雾化器。超声雾化器因其价格合适,适合家用,被广泛应用于加湿器,香薰机等各种小家电,也在医疗领域有很多的应用。家用雾化器的主要器件是一枚雾化片。 家用雾化器分为两种不同类别雾化片,实孔雾化片和微孔雾化片,这两种的喷雾方法和工作原理是有所不同的。不同的雾化片需要特定的频率才能工作。 实孔雾

qq_42415953的博客 2万+

Redhawk解析PAD / IOPAD的实现方法

Redhawk解析IOPAD的实现方法1. IOPAD DEF的概念说明2. 生成 IOPAD GDS文件3. 生成 IOPAD DEF文件4. Redhawk解析过程中读取IOPAD DEF 本文主要简述【Redhawk解析IOPAD】的实现原理方法,具体脚本没有放在这里。 1. IOPAD DEF的概念说明 2. 生成 IOPAD GDS文件 注: getinfo2IODEF.tcl 是基于innovus获取IOPAD的摆放信息以及库信息。 run_cerate_iopadgds.csh 是基于c

kobayashiyou的博客 3154

ceph-deploy部署ceph集群

ceph-deploy安装集群 官方文档: https://ceph.readthedocs.io/en/latest/install/ceph-deploy/quick-start-preflight/ ceph版本列表: https://ceph.readthedocs.io/en/latest/releases/ 节点规划: 主机名 public-ip cluster-ip 磁盘 角色 ceph-deploy 192.168.93.60 系统盘: sda ceph-deploy

IT 4601

kmeans聚类分析结果怎么看_【Stata与机器学习】物以类聚-KMeans算法应用案例介绍...

古语有云:物以类聚,人以群分。KMeans是无监督机器学习中的聚类算法中最简单的一种——基于特征对样本进行归为不同的类,很好地阐述了‘物以类聚’这句话的精髓。机器学习又叫统计学习。既然都统计了,所以当然包括了计量经济学。所以一般来说,机器学习的算法类型远多于计量经济学。比如线性回归,这个算是机器学习算法中比较基础的部分。当然,计量经济学在回归分析、因果推断方面的造诣,也是普通机器学算法所不能比的。...

weixin_39857480的博客 1万+

Ceph集群存储部署

Ceph是一种可靠的、可扩展的、统一的、分布式的存储系统。Ceph高度可靠、易于管理且免费。Ceph提供了非凡的可扩展性——数以千计的客户端访问PB到EB的数据。Ceph存储集群相互通信以动态复制和重新分配数据。目前众多云厂商都在使用Ceph,应用广泛。如:华为、阿里、腾讯等等。目前火热的云技术OpenStack、Kubernetes都支持后端整合Ceph,从而提高数据的可用性、扩展性、容错等能力。 本文主要介绍使用3台云主机搭建Ceph分布式集群存储系统和使用Ceph分布式集群存储系统。

m_2076的博客 1799

告别NEDC!手把手教你将CLTC/WLTP等最新工况文件导入AVL Cruise(附资源包)

本文详细指导如何将CLTC、WLTP等最新工况文件导入AVL Cruise软件,替代传统的NEDC工况。从资源获取、文件预处理到分步导入指南,再到常见问题排查,帮助工程师高效完成汽车仿真性能评估。附赠全球主流工况文件资源包,助力精准仿真分析。

weixin_30374009的博客 461

在Centos上从零开始部署并运行TinyWebServer服务器,过程记录(非常详细)

TinyWebServer是个什么项目?它是Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器。使用线程池+非阻塞socket+epoll(ET和LT均实现) +事件处理(Reactor和模拟Proactor均实现) 的并发模型使用状态机解析HTTP请求报文,支持解析GET和POST请求访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件实现同步/异步日志系统,记录服务器运行状态。......

AnChenliang_1002的博客 3021

基于ceph-deploy部署Ceph集群

本例主要是使用Linux客户端挂载RBD镜像为本地磁盘使用。开始之前需要在所需要客户端节点上面安装ceph-common软件包,因为客户端需要调用rbd命令将RBD镜像映射到本地当作一块普通硬盘使用。并还需要把ceph.conf配置文件和授权keyring文件复制到对应的节点。#使用 resize 调整镜像大小,一般建议只增不减,如果是减少的话需要加选项 --allow-shrink。在节点上开启dashboard模块,禁用ssl连接,并配置dashboard监听的地址和端口。

weixin_73725203的博客 2361

STM32F407驱动OV2640摄像头全栈解析:DCMI+DMA+SCCB协同设计

图像采集是嵌入式视觉系统的基石,其核心在于传感器与MCU间的数据通路构建。原理上需理解并行接口(如DCMI)的硬件同步捕获机制、串行控制总线(如SCCB/I²C)的寄存器级配置逻辑,以及DMA在高吞吐数据搬运中的关键作用。技术价值体现在解放CPU、保障实时性、降低功耗,并支撑JPEG压缩与RGB565直显等差异化应用。典型场景包括智能终端实时预览、低带宽图像上传、工业现场视频监控及教学实验平台搭建。本文以STM32F407与OV2640集成实践为载体,深入剖析DCMI时序约束、SCCB软件模拟实现及DMA循

weixin_36151775的博客 179

第38讲:Ceph分布式存储集群部署

初始化Monitor组件需要先安装Monitor组件包,然后利用ceph-deploy工具根据生成的集群配置文件,初始化各个节点中的Monitor组件,形成集群模式,初始化完Monitor组件会在/etc/ceph目录中成一些配置文件和一些key文件,并启动Monitor组件。ceph-deploy:一个快速部署集群的工具,ceph-deploy不再维护,Ceph采用的是Nautilus版本,如果操作系统是CentOS8那么将不支持ceph-deploy方式的搭建。

江晓龙的博客 2760

【DaVinci Developer专题】-8-创建一个枚举Enum ADT(Application Data Type)

目录 1 创建一个枚举Value ADT(Application Data Type) 1.1 命名application data type 1.2 创建一个computation method计算方法属性 1.3 创建一个Contraint约束条件属性 2 创建了一个新的Type Mapping Sets 3 创建了一个S/R Port Interface 4 SWC引用Type Mapping set 5 导入CFG生成代码的总结 6 结尾 <--返回「实战篇」博文-总目录-

「汽车电子助手」的博客 2291

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

使用ceph-deploy 2.0.1部署ceph 12.2.13集群

1.前言 由于工作原因涉及了nfs存储瓶颈问题,逐渐接触ceph,甚感兴趣,考虑进行测试部署,网上看了很多部署指导文档基本没有顺利部署成功的,无论纯手工,还是使用工具(deploy,ansible)或多或少都会出现问题,第一步安装源基本上都会把大家卡住,因为大多都是基于替换安装源配置文件,更改为阿里源,即便是安装成功,但是考虑真正的生产环境是没有外网环境的,所以这样的安装步骤就没法参考,到实际生产中没法实施,加上ceph的官方网站无论是英文环境还是中文环境,虽然介绍的很详细,但是要是参...

tigger2009的博客 2687

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ceph-deploy部署ceph集群,安装Web-UI

####使用ceph-deploy快速安装ceph 1.把ceph仓库添加到ceph-deploy管理节点 新增 /etc/yum.repos.d/ceph.repo(管理节点上) . [ceph-noarch] baseurl=http://download.ceph.com/rpm-nautilus/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc`

qq_30693057的博客 1476

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

使用ceph-deploy搭建三节点ceph集群

本文参照臧学雪园老师的Ceph基础篇视频教程加以归纳整理,再次感谢臧雪园老师。基础环境的准备实验拓扑图: 首先准备基础环境,因为我的笔记本电脑内存只有4G,所以三台虚拟机全部使用最小安装。 ceph1:192.168.6.145 每台主机准备四块磁盘,sda作为系统盘,其它三块作为ceph的OSD服务磁盘使用 ceph2:192.168.6.146 ceph3:192.168.6.147 s...

weixin_33738982的博客 1037

Ceph 14.2.22:如何调试使用ceph-deploy部署的集群

本文介绍如何调试使用ceph-deploy部署的ceph集群。

分布式存储随笔 2011

使用ceph-deploy部署ceph环境

uname -r 3.10.0-123.el7.x86_64 ceph -v ceph version 0.94.7 (d56bdf93ced6b80b07397d57e3fa68fe68304432) (1) 准备5台机器并修改/et/hosts文件。  192.168.0.2       ceph-client  192.168.0.3       ceph-admin

zgb40302的专栏 3011

Ceph14.2.22:如何使用ceph-deploy部署多节点集群

本文介绍如何使用ceph-deploy工具在ubuntu 18.04系统上部署ceph 14.2.22集群。

分布式存储随笔 1272
上一篇: 红黑树
for_tech
博客等级 码龄11年 50粉丝 37原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值