ceph分布式存储集群的搭建

作者:李毓

ceph是一个分布式的存储系统。
特点一是高性能,他屏蔽了传统的集中式存储元数据寻址,采用了crush算法,数据负载均衡,并行访问。考虑了容灾,实现了副本规则,很好的适应了跨机房跨机架。能够支持成千上万个存储节点的规模,支持到PB级的规模。
特点二是高可用性,副本数可以灵活控制,故障分离数据强一致性。故障场景的自动修复。
特点三是可扩展性,CEPH是去中心化的存储,扩展灵活,随着节点增加而线性增长。
特点四是种类丰富,支持三种风格的存储接口,块存储,文件存储,对象存储,支持api和resutfulapi风格的接口。

下面演示一下搭建过程

约定:

[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

hostname ip 角色
admin-node 192.168.0.130 管理节点
node1 192.168.0.131 监控节点
node2 192.168.0.132 OSD节点
node3 192.168.0.133 OSD节点

所有节点编辑hosts

[root@node1 ~]# cat /etc/hosts

192.168.0.130 admin-node
192.168.0.131 node1
192.168.0.132 node2
192.168.0.133 node3

所有节点安装ntp

yum install ntp ntpdate ntp-doc -y

所有节点安装open-ssh

yum install openssh-server -y

所有节点创建ceph用户

useradd -d /home/liyu -m liyu
passwd liyu

确保新建用户有sudo权限

echo "liyu ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/liyu
chmod 0440 /etc/sudoers.d/liyu

允许管理节点无密码登录,因为 ceph-deploy 不支持输入密码,你必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。 ceph-deploy 会尝试给初始 monitors 生成 SSH 密钥对。

su - liyu

ssh-keygen

公钥分发到各个节点

ssh-copy-id liyu@node1
ssh-copy-id liyu@node2
ssh-copy-id liyu@node3

新增config文件,这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点了。

[liyu@admin-node ~]$ cat ~/.ssh/config 
Host admin-node
   Hostname admin-node
   User liyu
Host node1
   Hostname node1
   User liyu
Host node2
   Hostname node2
   User liyu
Host node3
   Hostname node3
   User liyu

赋权

sudo chmod 644 ~/.ssh/config

放行端口,因为我这里是测试,所有节点禁用防火墙,Ceph Monitors 之间默认使用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信。Ceph OSD 能利用多个网络连接进行与客户端、monitors、其他 OSD 间的复制和心跳的通信。

sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent

或者

systemctl stop firewalld
systemctl disable firewalld

所有节点关闭selinux

sudo setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

管理节点配置EPEL源

sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*

管理节点添加yum源

[liyu@admin-node ~]$ cat /etc/yum.repos.d/ceph.repo 
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

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

管理节点更新软件库并安装ceph-deploy


sudo yum update && sudo yum install ceph-deploy
sudo yum install yum-plugin-priorities

准备工作做完后就可以搭建集群了,在管理节点上创建一个目录,用于保存 ceph-deploy 生成的配置文件和密钥对。

cd ~
mkdir my-cluster
cd my-cluster

注:若安装ceph后遇到麻烦可以使用以下命令进行清除包和配置:

// 删除安装包
$ ceph-deploy purge admin-node node1 node2 node3

// 清除配置
$ ceph-deploy purgedata admin-node node1 node2 node3
$ ceph-deploy forgetkeys

创建集群并初始化监控节点,这里node1是monitor节点,所以执行:

ceph-deploy new node1
[liyu@admin-node my-cluster]$ ceph-deploy new node1
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/liyu/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.39): /bin/ceph-deploy new node1
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  func                          : <function new at 0x7f06a9468668>
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f06a8be46c8>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  ssh_copykey                   : True
[ceph_deploy.cli][INFO  ]  mon                           : ['node1']
[ceph_deploy.cli][INFO  ]  public_network                : None
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  cluster_network               : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  fsid                          : None
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO  ] making sure passwordless SSH succeeds
[node1][DEBUG ] connected to host: admin-node 
[node1][INFO  ] Running command: ssh -CT -o BatchMode=yes node1
[node1][DEBUG ] connection detected need for sudo
[node1][DEBUG ] connected to host: node1 
[node1][DEBUG ] detect platform information from remote host
[node1][DEBUG ] detect machine type
[node1][DEBUG ] find the location of an executable
[node1][INFO  ] Running command: sudo /usr/sbin/ip link show
[node1][INFO  ] Running command: sudo /usr/sbin/ip addr show
[node1][DEBUG ] IP addresses found: [u'192.168.0.131']
[ceph_deploy.new][DEBUG ] Resolving host node1
[ceph_deploy.new][DEBUG ] Monitor node1 at 192.168.0.131
[ceph_deploy.new][DEBUG ] Monitor initial members are ['node1']
[ceph_deploy.new][DEBUG ] Monitor addrs are ['192.168.0.131']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...
[liyu@admin-node my-cluster]$ ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

修改配置文件,把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active + clean 状态。把 osd pool default size = 2 加入 [global] 段:

[liyu@admin-node my-cluster]$ cat ceph.conf 
[global]
fsid = 3c6f0d86-a5d1-4c63-ab07-fd8211ce32bb
mon_initial_members = node1
mon_host = 192.168.0.131
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

[liyu@admin-node my-cluster]$ sed -i '$a\osd pool default size = 2' ceph.conf
[liyu@admin-node my-cluster]$ cat ceph.conf 
[global]
fsid = 3c6f0d86-a5d1-4c63-ab07-fd8211ce32bb
mon_initial_members = node1
mon_host = 192.168.0.131
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

osd pool default size = 2

然后在所有节点上安装ceph

ceph-deploy install admin-node node1 node2 node3
安装的时候遇到一堆报错的问题,这里插播一下。

1、问题:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install epel-release
解决方法:
sudo yum -y remove epel-release

出现的错误[2]。No data was received after 300 seconds, disconnecting...。原因是网络比较慢,达到5分钟超时。

    解决办法是:

    分别在每个节点上安装ceph,yum -y install ceph。

2、出现的错误[3]。[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version。这个错误和上面【2】的错误的解决办法一样。

3、在执行命令ceph osd tree时,发现节点名字不是node1-4时,判断是不是已经修改主机名成功,修改主机名称命令是:   hostnamectl set-hostname name 

4、在执行安装或者准备node节点时,出现了Error:[Errno 2] No such file or directory,说明以前卸载过ceph,但是没有清除干净配置文件,所以要删除以前的配置文件。解决办法是:

  rm -rf /etc/ceph/*

  rm -rf /var/lib/ceph/*/*

  rm -rf /var/log/ceph/*

  rm -rf /var/run/ceph/*

5、出现Error:/var/run/yum.pid 已被锁定,PID 为 xxxx 的另一个程序正在运行。这个问题解决方案是:

 rm -f /var/run/yum.pid

配置初始 monitor(s)、并收集所有密钥(my-cluster目录下执行)

ceph-deploy mon create-initial

执行完毕后目录下会出现这些密钥

[liyu@admin-node my-cluster]$ ls
ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.client.admin.keyring 
ceph.bootstrap-mgr.keyring  ceph.bootstrap-rgw.keyring                   ceph.mon.keyring

添加2个OSD

1.登录到 Ceph 节点、并给 OSD 守护进程创建一个目录,并添加权限。

[liyu@admin-node my-cluster]$ ssh node2
Last login: Wed Mar  3 20:56:41 2021 from admin-node
[liyu@node2 ~]$ sudo mkdir /var/local/osd0
[liyu@node2 ~]$ sudo chmod 777 /var/local/osd0/
[liyu@node2 ~]$ exit
logout
Connection to node2 closed.
[liyu@admin-node my-cluster]$ ssh node3
Last login: Wed Mar  3 20:56:44 2021 from admin-node
[liyu@node3 ~]$ sudo mkdir /var/local/osd1
[liyu@node3 ~]$ sudo chmod 777 /var/local/osd1/
[liyu@node3 ~]$ exit
logout
Connection to node3 closed.

2.然后,从管理节点执行 ceph-deploy 来准备 OSD 。

ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1

3.最后,激活OSD。

ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1

把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点

ceph-deploy admin admin-node node1 node2 node3

确保对 ceph.client.admin.keyring 有正确的操作权限

sudo chmod +r /etc/ceph/ceph.client.admin.keyring

检查集群的健康状况和OSD节点状况

ceph分布式存储集群的搭建

给集群扩容

添加OSD

[liyu@admin-node my-cluster]$ ssh node1
Last login: Wed Mar  3 20:56:37 2021 from admin-node
[liyu@node1 ~]$ sudo mkdir /var/local/osd2
[liyu@node1 ~]$ sudo chmod 777 /var/local/osd2/
[liyu@node1 ~]$ exit
logout
Connection to node1 closed.

准备OSD

ceph-deploy osd prepare node1:/var/local/osd2

激活OSD

ceph-deploy osd activate node1:/var/local/osd2

检查集群状况和OSD节点:

ceph分布式存储集群的搭建

可以看到,多了一个。

添加monitor
在 ndoe2 和 node3 添加监控节点。
修改 mon_initial_members、mon_host 和 public network 配置:

[liyu@admin-node my-cluster]$ cat ceph.conf 
[global]
fsid = 3c6f0d86-a5d1-4c63-ab07-fd8211ce32bb
mon_initial_members = node1,node2,node3
mon_host = 192.168.0.131,192.168.0.132,192.168.0.133
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

osd pool default size = 2
public network = 192.168.0.130/24

推送至其他节点:

ceph-deploy --overwrite-conf config push node1 node2 node3

添加监控节点

ceph-deploy mon add node2
ceph-deploy mon add node3

ceph分布式存储集群的搭建

Cephfs使用挂载方式有两种 1.使用linux kernel挂载 mount 2.使用ceph-fuse挂载。
我们这里演示第一种

Ceph文件系统至少需要两个RADOS池,一个用于数据,一个用于元数据

启用mds服务

ceph-deploy mds create node1

创建数据pool

ceph osd pool create cephfs_data 128

创建Metadata池

ceph osd pool create cephfs_metadata 128

启用pool

ceph fs new cephfs cephfs_metadata cephfs_data

查看cephfs

ceph分布式存储集群的搭建

在ceph-client客户端节点上创建挂载点目录

mkdir -pv /mnt/mycephfs/

查看管理员秘钥,因为要挂载启用了 cephx 认证的 Ceph 文件系统,所以必须指定用户名、密钥。

[liyu@admin-node my-cluster]$ cat ceph.client.admin.keyring 
[client.admin]
    key = AQBzoT9gbAcpExAAqDOEJNqLXbQfmSNhNnDQuA==
    caps mds = "allow *"
    caps mon = "allow *"
    caps osd = "allow *"

用命令挂载

[root@client ~]# mount -t ceph 192.168.0.131:6789:/ /mnt/mycephfs -o name=admin,secret=AQBzoT9gbAcpExAAqDOEJNqLXbQfmSNhNnDQuA==

ceph分布式存储集群的搭建

加入开机启动

192.168.0.131:6789:/     /mnt/mycephfs   ceph    name=admin,secret=AQBzoT9gbAcpExAAqDOEJNqLXbQfmSNhNnDQuA==,noatime,_netdev    0       2

卸载

[root@client mnt]# umount /mnt/mycephfs

猜你喜欢

转载自blog.51cto.com/14783669/2647503