没有可用软件包 docker-compose。_CURVE-网易高性能、高可用、高可靠分布式存储系统...

CURVE是网易自主设计研发的高性能、高可用、高可靠分布式存储系统,具有非常良好的扩展性。基于该存储底座可以打造适用于不同应用场景的存储系统,如块存储、对象存储、云原生数据库等。当前我们基于CURVE已经实现了高性能块存储系统,支持快照克隆和恢复 ,支持QEMU虚拟机和物理机NBD设备两种挂载方式, 在网易内部作为高性能云盘使用。

CURVE 简介

CURVE是什么

CURVE是网易自主设计研发的高性能、高可用、高可靠分布式存储系统,具有非常良好的扩展性。基于该存储底座可以打造适用于不同应用场景的存储系统,如块存储、对象存储、云原生数据库等。CURVE 的设计开发始终围绕三个理念:一是顺应当前存储硬件设施发展趋势,做到软硬件结合打造顶级的存储产品;二是秉持 “Simple Can be harder than complex”,了解问题本质情况下选择最简单的方案解决问题;三是拥抱开源,在充分调研的前提下使用优秀的开源项目组件,避免造轮子。

当前我们基于CURVE已经实现了高性能块存储系统,支持快照克隆和恢复 ,支持QEMU虚拟机和物理机NBD设备两种挂载方式, 在网易内部作为高性能云盘使用。

CURVE架构

基本架构

要深入了解 CURVE 首先要了解 CURVE 整体架构。CURVE集群主要包括三个核心组件:MDS、Chunkserver、Client。

d2442b95051467b2eefe7815b6e6f130.png

MDS

MDS是中心节点。它有两方面职责:一是存储管理元数据信息,包括系统的拓扑信息、文件系统的Namespace ( 树形目录结构,文件和目录,目录元信息等 ) 、Copyset ( Raft 复制组) 位置信息。二是感知集群状态并进行合理调度,包括感知Chunkserver上下线、收集Chunkserver负载信息、集群负载均衡与故障修复。MDS通过Etcd进行选主实现高可用,Leader-MDS 和 Follower-MDS并不进行数据同步,Leader-MDS挂掉之后,Follower-MDS从Etcd加载数据后再启动服务。

Chunkserver

Chunkserver是数据节点,负责数据存储。数据存储的最小单元是 chunk,支持覆盖写,管理数据存储的基本单位是Copyset。Chunkserver使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Copyset 为单位进行管理,不同节点上的多个 Copyset 构成一个 Raft Group,互为副本。数据在多个 Chunkserver 之间的负载均衡由 MDS 调度,是以 CopySet 为单位进行调度。

Client

Client是客户端,向应用提供类Posix文件系统接口,与MDS交互实现对元数据的增删改查,与Chunkserver交互实现对数据的增删改查,对io进行切分,对IOPS和带宽进行指定的QoS控制。Client还支持热升级,可以在用户无感知的情况下进行底层版本变更。

快照克隆

CURVE块存储系统中快照克隆子系统是独立于CURVE核心服务的,快照克隆操作由单独的SnapShotCloneServer进行处理,用户创建的快照会上传到S3集群以节约存储空间,并且支持增量和全量两种快照方式。

核心特性

高性能

高性能是 CURVE 的一大特点,也是我们创建CURVE项目的初衷。RPC 层面 CURVE 采用了高性能和低延迟并且已开源的 brpc;在一致性层面 选择了基于 quorum 机制并且开源的 braft,从协议层面来说 quorum 机制在延迟方面天生优于多副本强一致的方式。实现上CURVE 对 braft 快照的实现进行了优化,在状态机的实现上采用 chunkfilepool 的方式 ( 初始化集群的时候格式化出指定比例的空间用作 chunk ) 使得底层的写入放大为 0;此外CURVE还在chunk上进行更细力度的地址空间hash以达到读写分离、减小 IO碰撞等的效果,从而进一步提升IO性能。

高可用

高可用是CURVE的另一大特点。MDS、ChunkServer 以及 SnapShotCloneServer都支持多实例部署,部分实例异常不影响整个集群的可用性。

  • MDSMDS是无状态的,推荐至少部署两个实例。通过Etcd进行选主。多个MDS实例通过Etcd进行选主,当单个实例失效时,可以秒级切换到另外一个实例。失效实例上正在处理的请求,Client和SnapShotCloneServer都会对其进行重试,以达到不影响集群可用性的效果。
  • SnapShotCloneServerSnapShotCloneServer与MDS类似, 也是通过Etcd进行选主,不同的是,它通过负载均衡对外提供服务。失效期间的请求失败重试都是幂等的,不影响任务的正确性以及集群的可用性。
  • ChunkServerChunkServer是一个集群,通过Raft协议保持数据一致性,并通过MDS做负载均衡。单个节点失效时,会影响到这个节点上存储的所有Copyset。对于Copyset上的Leader节点,会中断服务,等待重新选举;对于Copyset上的follower节点,服务不会受影响。当某个Chunkserver节点失效且在一段时间内无法恢复,MDS会将其上的数据迁移到其他节点上。

ansible是一款自动化运维工具,curve-ansible 是基于 ansible playbook 功能编写的集群部署工具。本文档介绍如何快速上手体验 CURVE 分布式系统:1. 使用 curve-ansible 在单机上模拟生产环境部署步骤 2. 使用 curve-ansible 在多机上部署最小生产环境。关于curve-ansible的更多用法和说明请参见curve-ansible README。本文针对最新版本的软件包,请优先使用最新版本软件包。安装过程中遇到文档中未说明的问题,请通过issue反馈。

特别说明

  • 一些外部依赖是通过源码的方式安装的,安装的过程中从github下载包可能会超时,这时可以选择重试或手动安装,jemalloc手动安装的话要保证configure的prefix与server.ini和client.ini的lib_install_prefix一致
  • 如果机器上开启了SElinux可能会报Aborting, target uses selinux but python bindings (libselinux-python) aren't installed,可以尝试安装libselinux-python,或者强行关闭selinux
  • deploy_curve.yml用于部署一个全新的集群,集群成功搭建后不能重复跑,因为会扰乱集群。可以选择启动集群或者清理集群后重新部署,详细用法见curve-ansible README。
  • 部署的过程中,在chunkserver成功启动之前都可以任意重试,chunkserver启动成功后重试要额外注意,要带上--skip-tags format,因为这一步会把启动成功的chunkserver的数据给清理掉,从而扰乱集群。
  • 需要用到curve-nbd功能的话,对内核有两方面的要求:一是要支持nbd模块,可以modprobe nbd查看nbd模块是否存在。二是nbd设备的block size要能够被设置为4KB。经验证,通过DVD1.iso完整安装的CentOs8,内核版本是4.18.0-193.el8.x86_64,满足这个条件,可供参考。

单机部署

  • 适用场景:希望用单台 Linux 服务器,体验 CURVE 最小的拓扑的集群,并模拟生产部署步骤。 我们提供了all-in-one的docker镜像,在这个docker镜像中,有全部的编译依赖和运行依赖。因此可以快速的部署自己编译好的代码,当然也可以选择从github下载最新的release包实施部署。

docker准备

执行下面的命令启动docker

docker run --cap-add=ALL -v /dev:/dev -v /lib/modules:/lib/modules --privileged -it opencurve/curveintegration:centos8 /bin/bash

选择docker部署的话,下面的准备环境步骤可以直接跳过,开始实施部署即可。

准备环境

准备一台部署主机,确保其软件满足需求:

  • 推荐安装 Debian9 或者 Centos7/8(其他环境未经测试)Linux 操作系统开放外网访问,用于下载 CURVE 的安装包部署需要创建一个有root权限的公共用户目前仅支持在 x86_64 (AMD64) 架构上部署 CURVE 集群安装 ansible 2.5.9,用于部署集群(目前仅支持ansible 2.5.9版本,其他版本会有语法问题)安装 docker 18.09 及以上, 用于部署快照克隆服务器

最小规模的 CURVE 集群拓扑:

实例个数IP配置MDS1127.0.0.1默认端口
全局目录配置Chunkserver3127.0.0.1默认端口
全局目录配置

CentOs7/8环境准备具体步骤

  1. root用户登录机器,创建curve用户:$ adduser curve
  2. 在root下设置curve用户免密sudo$ su # 进入root用户 $ 在/etc/sudoers.d下面创建一个新文件curve,里面添加一行:curve ALL=(ALL) NOPASSWD:ALL $ su curve # 切换到curve用户 $ sudo ls # 测试sudo是否正确配置
  3. 安装ansible 2.5.9$ sudo yum install python2 # 安装python2 $ ln -s /usr/bin/python2 /usr/bin/python # 设置默认使用python2 $ pip2 install ansible==2.5.9 # 安装ansible $ ansible-playbook # 如果没有报错的话说明安装成功,报错的话执行下面两步 $ pip install --upgrade pip $ pip install --upgrade setuptools

Debian9环境准备具体步骤

  1. root用户登录机器,创建curve用户$ adduser curve
  2. 设置curve用户免密sudo$ su # 进入root用户 $ apt install sudo # 安装sudo,如果没有安装过的话 $ 在/etc/sudoers.d下面创建一个新文件curve,里面添加一行:curve ALL=(ALL) NOPASSWD:ALL $ sudo -iu curve # 切换到curve用户 $ sudo ls # 测试sudo是否正确配置
  3. 安装ansible 2.5.9$ apt install python $ apt install python-pip $ pip install ansible==2.5.9 $ ansible-playbook # 如果没有报错的话说明安装成功,报错的话执行下面两步 $ pip install --upgrade pip $ pip install --upgrade setuptools

实施部署

  1. 切换到curve用户下执行以下操作
  2. 获取tar包并解压有两种方式可以获得tar包:从github release页面下载稳定版本tar包自行通过编译环境打tar包,该方式可以让您体验测试最新代码:编译开发环境搭建# 如下几个tar包可替换为其他版本(如您采用方式2自行打包,则不需要下载,拷贝相关tar包即可),下载命令仅供参考 wget https://github.com/opencurve/curve/releases/download/v0.1.1/curve_0.1.1+4b930380.tar.gz wget https://github.com/opencurve/curve/releases/download/v0.1.1/nbd_0.1.1+4b930380.tar.gz wget https://github.com/opencurve/curve/releases/download/v0.1.1/nebd_0.1.1+4b930380.tar.gz tar zxvf curve_0.1.1+4b930380.tar.gz tar zxvf nbd_0.1.1+4b930380.tar.gz tar zxvf nebd_0.1.1+4b930380.tar.gz cd curve/curve-ansible
  3. 部署集群并启动服务,如果需要使用快照克隆功能,请先设置server.ini中的disable_snapshot_clone=false再执行脚本。ansible-playbook -i server.ini deploy_curve.yml
  4. 如果需要使用快照克隆功能,需要有S3账号,可以使用网易云的对象存储1. 在 server.ini 中,填写s3_nos_address,s3_snapshot_bucket_name,s3_ak和s3_sk。 2. 安装快照克隆服务 ansible-playbook -i server.ini deploy_curve.yml --tags snapshotclone ansible-playbook -i server.ini deploy_curve.yml --tags snapshotclone_nginx
  5. 执行命令查看当前集群状态,主要看以下几个状态:Cluster status中的total copysets为100,unhealthy copysets为0Mds status中current MDS不为空,offline mds list为空Etcd status中的current etcd不为空,offline etcd list为空Chunkserver status中的offline为0curve_ops_tool status
  6. 安装 Nebd 服务和 NBD 包ansible-playbook -i client.ini deploy_nebd.yml ansible-playbook -i client.ini deploy_nbd.yml ansible-playbook -i client.ini deploy_curve_sdk.yml
  7. 创建 CURVE 卷,并通过 NBD 挂载到本地。创建CURVE卷的时候可能会报Fail to listen,这个属于日志打印问题,不影响结果,可以忽略1. 创建 CURVE 卷: 命令为 curve create [-h] --filename FILENAME --length LENGTH --user USER, LENGTH >= 10。其中length单位为GB。 curve create --filename /test --length 10 --user curve 2. 挂载卷 sudo curve-nbd map cbd:pool//test_curve_ 3. 查看设备挂载情况(在docker环境中,list-mapped会看不到,可以选择lsblk看一下是否有/dev/nbd0类型的卷) curve-nbd list-mapped

多机部署

  • 适用场景:用多台 Linux 服务器,搭建 CURVE 最小的拓扑的集群,可以用于初步性能测试。

准备环境

准备三台部署主机,确保其软件满足需求:

  • 推荐安装 Debian9 或者 Centos7/8
  • Linux 操作系统开放外网访问,用于下载 CURVE 的安装包
  • 部署需要在每个机器上创建一个有root权限的公共用户
  • 部署主机需要开放 CURVE 集群节点间所需ssh端口
  • 目前仅支持在 x86_64 (AMD64) 架构上部署 CURVE 集群
  • 选择三台机器中的一个作为中控机,安装 ansible 2.5.9,用于部署集群(目前只支持ansible 2.5.9下的部署)
  • 安装 docker 18.09 及以上, 用于部署快照克隆服务器

同时,确保每个机器都至少一个数据盘可以用于格式化供chunkserver使用。

CURVE 集群拓扑:

实例个数IP端口MDS310.192.100.1
10.192.100.2
10.192.100.36666Chunkserver
(三个Server上分别挂10个盘,每个Server上启动10个Chunkserver用例)10 * 310.192.100.1
10.192.100.2
10.192.100.38200

CentOs7/8环境准备具体步骤

下面这些步骤要三台机器都操作:

  1. root用户登录机器,创建curve用户:$ adduser curve
  2. 在root下设置curve用户免密sudo$ su # 进入root用户 $ 在/etc/sudoers.d下面创建一个新文件curve,里面添加一行:curve ALL=(ALL) NOPASSWD:ALL $ su curve # 切换到curve用户 $ sudo ls # 测试sudo是否正确配置
  3. 检查其他依赖,未安装的需要手动安装:net-tools, openssl-1.1.1, perf, perl-podlators, make, gcc6.1, libstdc++.so.6.22

下面的步骤只需要在中控机上执行:

  1. curve用户下配置ssh登陆到所有机器(包括自己),假设三台机器的ip分别为10.192.100.1,10.192.100.2,10.192.100.3$ su curve # 切换到curve用户 $ ssh-keygen # 生成ssh秘钥 $ ssh-copy-id curve@10.192.100.1 # 拷贝key到第一个机器 $ ssh-copy-id curve@10.192.100.2 # 拷贝key到第二个机器 $ ssh-copy-id curve@10.192.100.3 # 拷贝key到第三个机器 $ ssh 10.192.100.1 # 挨个验证一下配置是否正确
  2. 安装ansible 2.5.9$ sudo yum install python2 # 安装python2 $ ln -s /usr/bin/python2 /usr/bin/python # 设置默认使用python2 $ pip2 install ansible==2.5.9 # 安装ansible $ ansible-playbook # 如果没有报错的话说明安装成功,报错的话执行下面两步 $ pip install --upgrade pip $ pip install --upgrade setuptools

Debian9环境准备步骤

下面这些步骤要三台机器都操作:

  1. root用户登录机器,创建curve用户$ adduser curve
  2. 设置curve用户免密sudo$ su # 进入root用户 $ apt install sudo # 安装sudo,如果没有安装过的话 $ 在/etc/sudoers.d下面创建一个新文件curve,里面添加一行:curve ALL=(ALL) NOPASSWD:ALL $ sudo -iu curve # 切换到curve用户 $ sudo ls # 测试sudo是否正确配置

下面的步骤只需要在中控机上执行:

  1. curve用户下配置ssh登陆到所有机器(包括自己),假设三台机器的ip分别为10.192.100.1,10.192.100.2,10.192.100.3$ su curve # 切换到curve用户 $ ssh-keygen # 生成ssh秘钥 $ ssh-copy-id curve@10.192.100.1 # 拷贝key到第一个机器 $ ssh-copy-id curve@10.192.100.2 # 拷贝key到第二个机器 $ ssh-copy-id curve@10.192.100.3 # 拷贝key到第三个机器 $ ssh 10.192.100.1 # 挨个验证一下配置是否正确
  2. 安装ansible 2.5.9$ apt install python $ apt install python-pip $ pip install ansible==2.5.9 $ ansible-playbook # 如果没有报错的话说明安装成功,报错的话执行下面两步 $ pip install --upgrade pip $ pip install --upgrade setuptools

实施部署

  1. 切换到curve用户下执行以下操作
  2. 获取tar包并解压有两种方式可以获得tar包:从github release页面下载稳定版本tar包自行通过编译环境打tar包,该方式可以让您体验测试最新代码:编译开发环境搭建# 如下几个tar包可替换为其他版本(如您采用方式2自行打包,则不需要下载,拷贝相关tar包即可),下载命令仅供参考 wget https://github.com/opencurve/curve/releases/download/v0.1.1/curve_0.1.1+4b930380.tar.gz wget https://github.com/opencurve/curve/releases/download/v0.1.1/nbd_0.1.1+4b930380.tar.gz wget https://github.com/opencurve/curve/releases/download/v0.1.1/nebd_0.1.1+4b930380.tar.gz tar zxvf curve_0.1.1+4b930380.tar.gz tar zxvf nbd_0.1.1+4b930380.tar.gz tar zxvf nebd_0.1.1+4b930380.tar.gz cd curve/curve-ansible
  3. 在中控机上修改配置文件server.ini[mds] mds1 ansible_ssh_host=10.192.100.1 // 改动 mds2 ansible_ssh_host=10.192.100.2 // 改动 mds3 ansible_ssh_host=10.192.100.3 // 改动 [etcd] etcd1 ansible_ssh_host=10.192.100.1 etcd_name=etcd1 // 改动 etcd2 ansible_ssh_host=10.192.100.2 etcd_name=etcd2 // 改动 etcd3 ansible_ssh_host=10.192.100.3 etcd_name=etcd3 // 改动 [snapshotclone] snap1 ansible_ssh_host=10.192.100.1 // 改动 snap2 ansible_ssh_host=10.192.100.2 // 改动 snap3 ansible_ssh_host=10.192.100.3 // 改动 [snapshotclone_nginx] nginx1 ansible_ssh_host=10.192.100.1 // 改动 nginx2 ansible_ssh_host=10.192.100.2 // 改动 [chunkservers] server1 ansible_ssh_host=10.192.100.1 // 改动 server2 ansible_ssh_host=10.192.100.2 // 改动 server3 ansible_ssh_host=10.192.100.3 // 改动 [mds:vars] mds_dummy_port=6667 mds_port=6666 mds_subnet=10.192.100.0/22 // 改成想要起mds服务的ip对应的子网 defined_healthy_status="cluster is healthy" mds_package_version="0.0.6.1+160be351" tool_package_version="0.0.6.1+160be351" # 启动命令是否用sudo mds_need_sudo=true mds_config_path=/etc/curve/mds.conf tool_config_path=/etc/curve/tools.conf mds_log_dir=/data/log/curve/mds topo_file_path=/etc/curve/topo.json [etcd:vars] etcd_listen_client_port=2379 etcd_listen_peer_port=2380 etcd_name="etcd" etcd_need_sudo=true defined_healthy_status="cluster is healthy" etcd_config_path=/etc/curve/etcd.conf.yml etcd_log_dir=/data/log/curve/etcd etcd_data_dir=/etcd/data etcd_wal_dir=/etcd/wal [snapshotclone:vars] snapshot_port=5556 snapshot_dummy_port=8081 snapshot_subnet=10.192.100.0/22 // 改成想要启动mds服务的ip对应的子网 defined_healthy_status="cluster is healthy" snapshot_package_version="0.0.6.1.1+7af4d6a4" snapshot_need_sudo=true snapshot_config_path=/etc/curve/snapshot_clone_server.conf snap_s3_config_path=/etc/curve/s3.conf snap_client_config_path=/etc/curve/snap_client.conf snap_tool_config_path=/etc/curve/snapshot_tools.conf client_register_to_mds=false client_chunkserver_op_max_retry=50 client_chunkserver_max_rpc_timeout_ms=16000 client_chunkserver_max_stable_timeout_times=64 client_turn_off_health_check=false snapshot_clone_server_log_dir=/data/log/curve/snapshotclone [chunkservers:vars] wait_service_timeout=60 env_name=pubt1 check_copysets_status_times=1000 check_copysets_status_interval=1 cs_package_version="0.0.6.1+160be351" aws_package_version="1.0" defined_copysets_status="Copysets are healthy" chunkserver_base_port=8200 chunkserver_format_disk=true // 改动,为了更好的性能,实际生产环境需要将chunkserver上的磁盘全部预格式化,这个过程比较耗时1T的盘格式80%化大概需要1个小时 chunk_alloc_percent=80 // 预创的chunkFilePool占据磁盘空间的比例,比例越大,格式化越慢 # 每台机器上的chunkserver的数量 chunkserver_num=3 // 改动,修改成机器上需要部署chunkserver的磁盘的数量 chunkserver_need_sudo=true # 启动chunkserver要用到ansible的异步操作,否则ansible退出后chunkserver也会退出 # 异步等待结果的总时间 chunkserver_async=5 # 异步查询结果的间隔 chunkserver_poll=1 chunkserver_conf_path=/etc/curve/chunkserver.conf chunkserver_data_dir=/data // 改动,chunkserver想要挂载的目录,如果有两个盘,则会被分别挂载到/data/chunkserver0,/data/chunkserver1这些目录 chunkserver_subnet=10.192.100.1/22 // 改动 chunkserver_s3_config_path=/etc/curve/cs_s3.conf # chunkserver使用的client相关的配置 chunkserver_client_config_path=/etc/curve/cs_client.conf client_register_to_mds=false client_chunkserver_op_max_retry=3 client_chunkserver_max_stable_timeout_times=64 client_turn_off_health_check=false disable_snapshot_clone=true // 改动,这一项取决于是否需要使用快照克隆功能,需要的话设置为false,并提供s3_ak和s3_sk [snapshotclone_nginx:vars] snapshotcloneserver_nginx_dir=/etc/curve/nginx snapshot_nginx_conf_path=/etc/curve/nginx/conf/nginx.conf snapshot_nginx_lua_conf_path=/etc/curve/nginx/app/etc/config.lua nginx_docker_internal_port=80 nginx_docker_external_port=5555 [all:vars] need_confirm=true curve_ops_tool_config=/etc/curve/tools.conf need_update_config=true wait_service_timeout=10 sudo_user=curve deploy_dir=/home/curve s3_ak="" // 如果需要快照克隆服务,则修改成自己s3账号对应的值 s3_sk="" // 如果需要快照克隆服务,则修改成自己s3账号对应的值 s3_nos_address="" // 如果需要快照克隆服务,则修改成s3服务的地址 s3_snapshot_bucket_name="" // 如果需要快照克隆服务,则修改成自己在s3上的桶名 ansible_ssh_port=22 curve_root_username=root // 改动,修改成自己需要的username,因为目前的一个bug,用到快照克隆的话用户名必须为root curve_root_password=root_password // 改动,修改成自己需要的密码 lib_install_prefix=/usr/local bin_install_prefix=/usr ansible_connection=ssh // 改动 client.ini[client] client1 ansible_ssh_host=10.192.100.1 // 修改成想要部署client的机器的ip,可以是server.ini中的机器,也可以是其他的机器,保证网络互通即可 # 仅用于生成配置中的mds地址 [mds] mds1 ansible_ssh_host=10.192.100.1 // 改成和server.ini中的mds列表一致即可 mds2 ansible_ssh_host=10.192.100.2 // 改动 mds3 ansible_ssh_host=10.192.100.3 // 改动 [client:vars] ansible_ssh_port=1046 nebd_package_version="1.0.2+e3fa47f" nbd_package_version="" sdk_package_version="0.0.6.1+160be351" deploy_dir=/usr/bin nebd_start_port=9000 nebd_port_max_range=5 nebd_need_sudo=true client_config_path=/etc/curve/client.conf nebd_client_config_path=/etc/nebd/nebd-client.conf nebd_server_config_path=/etc/nebd/nebd-server.conf nebd_data_dir=/data/nebd nebd_log_dir=/data/log/nebd curve_sdk_log_dir=/data/log/curve [mds:vars] mds_port=6666 [all:vars] need_confirm=true need_update_config=true ansible_ssh_port=22 lib_install_prefix=/usr/local bin_install_prefix=/usr ansible_connection=ssh // 改动 group_vars/mds.yml--- # 集群拓扑信息 cluster_map: servers: - name: server1 internalip: 10.192.100.1 // 部署chunkserver的机器对应的内部ip,用于curve集群内部(mds和chunkserver,chunkserver之间)通信 internalport: 0 // 改动,多机部署情况下internalport必须是0,不然只有机器上对应端口的chunkserver才能够注册上 externalip: 10.192.100.1 // 部署chunkserver的机器对应的外部ip,用于接受client的请求,可以设置成和internal ip一致 externalport: 0 // 改动,多机部署情况下externalport必须是0,不然只有机器上对应端口的chunkserver才能够注册上 zone: zone1 physicalpool: pool1 - name: server2 internalip: 10.192.100.2 // 改动,原因参考上一个server internalport: 0 // 改动,原因参考上一个server externalip: 10.192.100.2 // 改动,原因参考上一个server externalport: 0 // 改动,原因参考上一个server zone: zone2 physicalpool: pool1 - name: server3 internalip: 10.192.100.3 // 改动,原因参考上一个server internalport: 0 // 改动,原因参考上一个server externalip: 10.192.100.3 // 改动,原因参考上一个server externalport: 0 // 改动,原因参考上一个server zone: zone3 physicalpool: pool1 logicalpools: - name: logicalPool1 physicalpool: pool1 type: 0 replicasnum: 3 copysetnum: 300 // copyset数量与集群规模有关,建议平均一个chunkserver上100个copyset,比如三台机器,每台3个盘的话是3*3*100=900个copyset,除以三副本就是300个 zonenum: 3 scatterwidth: 0 group_vars/chunkservers.yml 修改成机器上具体的磁盘的名字列表,数量不固定。disk_list: - sda - sdb - sdc 如果个别chunkserver的磁盘名字和其他的不同,需要单独拎出来放在host_vars下面。比如本例中,假设server1和server2上都是三个盘分别是sda,sdb,sdc和group_vars中的一致,而server3的是sdd,sde,sdf,sdg,那么需要在host_vars下面新增一个server3.yml,其中的内容为:disk_list: - sdd - sde - sdf - sdg
  4. 部署集群并启动服务。ansible默认的并发度为5,如果机器超过5个的话,每一步操作会先在前5台机器上操作,完成之后再操作下面5台。如果想要提升速度,可以在ansible-playbook后面加上-f [并发数]选项。ansible-playbook -i server.ini deploy_curve.yml
  5. 如果需要使用快照克隆功能,需要有S3账号,可以使用网易云的对象存储 同上1. 在 server.ini 中,填写s3_nos_address,s3_snapshot_bucket_name,s3_ak和s3_sk disable_snapshot_clone=false 2. 安装快照克隆服务 ansible-playbook -i server.ini deploy_curve.yml --tags snapshotclone ansible-playbook -i server.ini deploy_curve.yml --tags snapshotclone_nginx
  6. 执行命令查看当前集群状态,主要看以下几个状态:Cluster status中的total copysets为100,unhealthy copysets为0Mds status中current MDS不为空,offline mds list为空Etcd status中的current etcd不为空,offline etcd list为空Chunkserver status中的offline为0curve_ops_tool status
  7. 安装 Nebd 服务和 NBD 包ansible-playbook -i client.ini deploy_nebd.yml ansible-playbook -i client.ini deploy_nbd.yml ansible-playbook -i client.ini deploy_curve_sdk.yml
  8. 在client的机器上创建 CURVE 卷,并通过 NBD 挂载到本地。创建CURVE卷的时候可能会报Fail to listen,这个属于日志打印问题,不影响结果,可以忽略。1. 创建 CURVE 卷: 命令为 curve create [-h] --filename FILENAME --length LENGTH --user USER, LENGTH >= 10。其中length单位为GB。 curve create --filename /test --length 10 --user curve 2. 挂载卷 sudo curve-nbd map cbd:pool//test_curve_ 3. 查看设备挂载情况 curve-nbd list-mapped
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值