2-1 分布式文件存储系统Ceph,java实战第二版pdf拉乌尔

yum install ntp ntpdate ntp-doc -y

设为开机启动:

systemctl enable ntpd

设置每隔1小时自动校准同步。编辑 vi /etc/rc.d/rc.local 追加:

/usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w

配置定时任务, 执行crontab -e 加入:

0 */1 * * * ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w

5)免密配置(131、132、133都执行)

官方建议不用系统内置用户, 创建名为cuser用户, 密码也设为cuser:

useradd -d /home/cuser -m cuser

passwd cuser

设置sudo权限:(免密+只读权限)

echo “cuser ALL = (root) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/cuser

sudo chmod 0440 /etc/sudoers.d/cuser

6)生成秘钥:(131执行)

切换用户: su cuser

执行ssh-keygen,一直按默认提示点击生成RSA密钥信息。

在这里插入图片描述

分发密钥至各机器节点

ssh-copy-id cuser@CENTOS1

ssh-copy-id cuser@CENTOS2

ssh-copy-id cuser@CENTOS3

在这里插入图片描述

修改管理节点上的 ~/.ssh/config (当前用户目录下的.ssh/config)文件, 简化SSH远程连接时的输入信息:

管理节点是会有root和cuser多个用户, ssh远程连接默认会以当前用户身份进行登陆, 如果我们是root身份进行远程连接, 还是需要输入密码,我们可以修改配置 使用root远程连接时也不用输入密码。

切换root身份,

su root

编辑config

vi ~/.ssh/config

添加如下内容:

Host CENTOS1

Hostname CENTOS1

User cuser

Host CENTOS2

Hostname CENTOS2

User cuser

Host CENTOS3

Hostname CENTOS3

User cuser

修改文件权限:

chmod 600 ~/.ssh/config

禁用SELINUX:

vi /etc/selinux/config

SELINUX=disabled

1.2.2 集群搭建

安装集群,用root安装,可以避免很多权限问题。

1)创建集群管理目录,作为ceph配置信息存储目录。

mkdir -p /usr/local/bobo/cephcluster

cd /usr/local/bobo/cephcluster

2)创建集群

ceph-deploy new CENTOS1 CENTOS2 CENTOS3

创建成功后, 会生配置文件和秘钥信息。

在这里插入图片描述

3)修改配置文件

编辑ceph.conf文件vi /usr/local/bobo/cephcluster/ceph.conf,添加如下配置:

#对外开放网段

public network = 192.168.100.0/24

设置pool池默认分配数量

osd pool default size = 2

容忍更多的时钟误差

mon clock drift allowed = 2

mon clock drift warn backoff = 30

允许删除pool

mon_allow_pool_delete = true

[mgr]

开启WEB仪表盘

mgr modules = dashboard

注意:Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略。

完整内容如下:

在这里插入图片描述

文件修改后执行安装(131执行),此时3台机器都会执行安装执行如下安装命令:

ceph-deploy install CENTOS1 CENTOS2 CENTOS3

如果出现ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version错误,可以直接在每个节点单独执行yum -y install ceph进行单独安装。如果没有仓库文件ceph.repo, 按上面的步骤手工创建。

4)初始化Monitor信息

ceph-deploy mon create-initial

此时会生成很多秘钥文件信息

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210112194

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

711199.png)

5)同步管理信息

ceph-deploy admin CENTOS1 CENTOS2 CENTOS3

6)安装mgr(管理守护进程)

ceph-deploy mgr create CENTOS1 CENTOS2 CENTOS3

7)安装rgw

ceph-deploy rgw create CENTOS1 CENTOS2 CENTOS3

mds服务:

ceph-deploy mds create CENTOS1 CENTOS2 CENTOS3

注意:任意一个环节安装失败了,需要卸载重装:

ceph-deploy purge CENTOS1 CENTOS2 CENTOS3

ceph-deploy purgedata CENTOS1 CENTOS2 CENTOS3

ceph-deploy forgetkeys

将三台节点的mon信息也删除:

rm -rf /var/run/ceph/

如果出现错误:

ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version

可以在各节点上单独进行安装:

yum -y install ceph

8)OSD安装

OSD服务是对象存储守护进程, 负责把对象存储到本地文件系统, 必须要有一块独立的磁盘作为存储。如果没有独立磁盘,怎么办? 可以在Linux下面创建一个虚拟磁盘进行挂载

添加磁盘:

执行fdisk -l查看磁盘信息如下,我们需要添加一个磁盘,直接用VMware添加即可。

在这里插入图片描述

使用VMware选择设置->硬盘->添加,如下图:

在这里插入图片描述

一直点击下一步,设置磁盘空间大小为10G即可。操作完后重启虚拟机,并输入fdisk -l查看磁盘信息如下,明显多了/dev/sdb 10G大小。

在这里插入图片描述

执行创建OSD命令:(注意,每条命令都是在131中执行,不要在每台机器中单独执行)

ceph-deploy osd create --data /dev/sdb CENTOS1

ceph-deploy osd create --data /dev/sdb CENTOS2

ceph-deploy osd create --data /dev/sdb CENTOS3

在这里插入图片描述

Monitor查看

/usr/bin下执行./ceph -s可以查看集群状态。

在这里插入图片描述

可以执行ntpdate ntp1.aliyun.com同步各个节点的时间。

如果出现如下情况,执行systemctl restart ceph.target重启每个节点即可(131,132,133都执行)。

在这里插入图片描述

1.2.3 dashboard安装

​ Ceph 提供了原生的Dashboard功能,通过Dashboard可以获取Ceph集群的各种基本状态信息。我们接下来安装一下Dashboard,并使用它的功能。

1)开启dashboard模块

ceph mgr module enable dashboard

2)生成签名

ceph dashboard create-self-signed-cert

3)创建目录

mkdir -p /usr/local/bobo/cephcluster/mgr-dashboard

4)生成密钥对

openssl req -new -nodes -x509 -subj “/O=IT/CN=ceph-mgr-dashboard” -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca

在这里插入图片描述

5)启动dashboard

ceph mgr module disable dashboard

ceph mgr module enable dashboard

6)设置IP与PORT

ceph config set mgr mgr/dashboard/server_addr 192.168.100.131

ceph config set mgr mgr/dashboard/server_port 9001

7)关闭HTTPS

ceph config set mgr mgr/dashboard/ssl false

8)查看服务信息

ceph mgr services

在这里插入图片描述

9)设置管理员账号密码

ceph dashboard set-login-credentials admin admin

10)访问<https://192.168.100.131:8443/#/dashboard>

在这里插入图片描述

11)RGW访问

访问 http://192.168.100.131:7480/ 效果如下:

在这里插入图片描述

1.3 Cephfs管理

集群创建完后, 默认没有文件系统, 我们创建一个Cephfs可以支持对外访问的文件系统。

1)创建两个存储池, 执行两条命令:

ceph osd pool create cephfs_data 128

ceph osd pool create cephfs_metadata 64

少于5个OSD可把pg_num设置为128

OSD数量在5到10,可以设置pg_num为512

OSD数量在10到50,可以设置pg_num为4096

OSD数量大于50,需要计算pg_num的值

通过下面命令可以列出当前创建的存储池:

ceph osd lspools

2)创建fs, 名称为fs_test:

ceph fs new fs_test cephfs_metadata cephfs_data

3)状态查看, 以下信息代表正常

ceph fs ls

name: fs_test, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

ceph mds stat:

fs_test-0/0/1 up

4)fuse挂载

先确定ceph-fuse命令能执行, 如果没有, 则安装:

yum -y install ceph-fuse

创建挂载目录

mkdir -p /usr/local/gupao/cephfs_directory

挂载cephfs

ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 192.168.100.131:6789 /usr/local/gupao/cephfs_directory

出现下面信息表示挂载成功了:

ceph-fuse[28003]: starting fuse

5)挂载信息查看

[root@CENTOS1 cephcluster]# df -h

Filesystem Size Used Avail Use% Mounted on

devtmpfs 4.1G 0 4.1G 0% /dev

tmpfs 4.1G 0 4.1G 0% /dev/shm

tmpfs 4.1G 20M 4.1G 1% /run

tmpfs 4.1G 0 4.1G 0% /sys/fs/cgroup

/dev/mapper/centos-root 17G 2.0G 16G 12% /

/dev/sda1 1014M 189M 826M 19% /boot

tmpfs 4.1G 28K 4.1G 1% /var/lib/ceph/osd/ceph-0

tmpfs 838M 0 838M 0% /run/user/0

ceph-fuse 13G 0 13G 0% /usr/local/gupao/cephfs_directory

1.4 Ceph Swift API接口开发

Swift是由Rackspace开发的用来为云计算提供可扩展存储的项目。专注于对象存储, 并提供一套REST风格的Api来访问, 与Ceph强一致性不同, 它是最终一致性。两者都是优秀的开源项目, 并无明显优劣之分,在使用场景上有所不同, 如果是专注于对象存储, 那么可以选择swift即可满足需要, 如果还有块存储要求, 那么选择Ceph更为合适。这里选择Ceph, 因为通过网关可以适配兼容swift api, 同时在数据访问上具有较强的扩展性。

1.4.1 准备工作

创建Swift用户, 用于接口请求认证

sudo radosgw-admin user create --subuser=“cephtester:subtester” --uid=“cephtester” --display-name=“cephtester” --key-type=swift --secret=“gupao” --access=full

uid 为主用户, subuser为子用户信息, secret指定密钥, 不指定则随机生成, access拥有权限设定,代码中需使用返回信息中的user和secret_key。

在这里插入图片描述

swift_keys:

“swift_keys”: [

{

“user”: “cephtester:subtester”,

“secret_key”: “gupao”

}

],

创建管理员账号:

radosgw-admin user create --uid=mgruser --display-name=mgruser --system

返回信息如下:

{

“user_id”: “mgruser”,

“display_name”: “mgruser”,

“email”: “”,

“suspended”: 0,

“max_buckets”: 1000,

“auid”: 0,

“subusers”: [],

“keys”: [

{

“user”: “mgruser”,

“access_key”: “AZ6L40PH9WB37EKVVMCZ”,

“secret_key”: “rk8PEjtYaMTo7nMDM62hqqN1tOnZPBEe4GA0LQMW”

}

],

“swift_keys”: [],

“caps”: [],

“op_mask”: “read, write, delete”,

“system”: “true”,

“default_placement”: “”,

“placement_tags”: [],

“bucket_quota”: {

“enabled”: false,

“check_on_raw”: false,

“max_size”: -1,

“max_size_kb”: 0,

“max_objects”: -1

},

“user_quota”: {

“enabled”: false,

“check_on_raw”: false,

“max_size”: -1,

“max_size_kb”: 0,

“max_objects”: -1

},

“temp_url_keys”: [],

“type”: “rgw”,

“mfa_ids”: []

}

根据生成的access_key与secret_key, 执行:

ceph dashboard set-rgw-api-access-key AZ6L40PH9WB37EKVVMCZ

ceph dashboard set-rgw-api-secret-key rk8PEjtYaMTo7nMDM62hqqN1tOnZPBEe4GA0LQMW

打开管理界面,http://192.168.100.131:9001/#/rgw/user 可以查看到我们刚才创建的两个用户:

在这里插入图片描述

1.4.2 文件服务搭建

我们搭建一个单独的工程,专门用于实现文件上传和文件下载,工程坐标如下:

com.bobo.vip.mall

1.0-SNAPSHOT

mall-file-service

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

mall-service

com.gupaoedu.vip.mall

0.0.1-SNAPSHOT

4.0.0

mall-file-service

文件上传微服务

com.ceph

rados

0.6.0

com.ceph

libcephfs

0.80.5

org.javaswift

joss

0.10.2

bootstrap.yml:

server:

port: 8082

spring:

application:

name: mall-file

cloud:

nacos:

config:

file-extension: yaml

server-addr: 192.168.100.130:8848

discovery:

#Nacos的注册地址

server-addr: 192.168.100.130:8848

ceph:

username: cephtester:subtester #Ceph配置 主用户名:子用户名

password: gupao #秘钥

authUrl: http://192.168.100.131:7480/auth/1.0 #接口访问路径

defaultContainerName: user_datainfo #默认容器名字

#图片路径

cephurl: http://localhost:8082/file/download/

#日志配置

logging:

pattern:

console: “%msg%n”

创建com.bobo.vip.mall.file.ceph.ContainerConfig配置类,在类中创建AccountContainer对象,代码如下:

@Configuration

@ConfigurationProperties(prefix = “ceph”)

@Data

public class ContainerConfig {

private String username;

private String password;

private String authUrl;

private String defaultContainerName;

/***

  • Ceph的账户信息配置

  • @return

*/

@Bean

public Account account(){

// Ceph的账户信息配置

AccountConfig config = new AccountConfig();

config.setUsername(username);

config.setPassword(password);

config.setAuthUrl(authUrl);

config.setAuthenticationMethod(AuthenticationMethod.BASIC);


版权声明:本文为m0_63102527原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。