CURVE分布式存储系统集群安装

Posted 潍鲸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CURVE分布式存储系统集群安装相关的知识,希望对你有一定的参考价值。

安装说明


CURVE分布式存储系统单机和集群的安装部署主要通过ansible进行安装,ansible是一款自动化运维工具,curve-ansible 是基于 ansible playbook 功能编写的集群部署工具。使用 curve-ansible 在单机或多机上模拟生产环境部署。


安装注意事项


  • curve默认会将相关的库安装到/usr/lib下面,如果是CentOS系统,需要将client.ini和server.ini中的curve_lib_dir修改为/usr/lib64

  • 一些外部依赖是通过源码的方式安装的,安装的过程中从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用于部署一个全新的集群,集群成功搭建后不能重复跑,因为会扰乱集群。想要清理集群的话需要手动停止mds,etcd,chunkserver并删掉/etcd目录(后续会完善清理脚本)。如果只是想启动服务的话,使用命令:

    ansible-playbook -i server.ini deploy_curve.yml --tags start
  • 部署的过程中,在chunkserver成功启动之前都可以任意重试,chunkserver启动成功后重试要额外注意,要带上--skip-tags format,因为这一步会把启动成功的chunkserver的数据给清理掉,从而扰乱集群。


单机部署


主要用于开发环境,用单台 Linux 服务器,体验 CURVE 最小的拓扑的集群,并模拟生产部署步骤。


环境准备


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

  • 推荐安装 Debian 9 或者 Centos 8.0(其他环境未经测试)

  • Linux 操作系统开放外网访问,用于下载 CURVE 的安装包。

  • ansible --version确认ansible版本是2.5.9


最小规模的 CURVE 集群拓扑:


实例 个数 IP 配置
MDS 1 127.0.0.1 默认端口
全局目录配置
Chunkserver 3 127.0.0.1 默认端口
全局目录配置


部署主机软件和环境要求:


  • 部署需要创建一个有root权限的公共用户

  • 部署主机需要开放 CURVE 集群节点间所需端口

  • 目前仅支持在 x86_64 (AMD64) 架构上部署 CURVE 集群

  • 安装 ansible 2.5.9,用于部署集群(目前仅支持ansible 2.5.9版本,其他版本会有语法问题)

  • 安装 docker 18.09 及以上, 用于部署快照克隆服务器


安装部署


  • 以 root 用户登录中控机, 在中控机上创建 curve 用户, 确保能够通过 curve用户ssh登录本机。

切换到 curve 用户 ssh-keygen 生成 ssh keyssh-copy-id curve@localhost

  • 下载tar包并解压

wget https://github.com/opencurve/curve/releases/download/v0.1.1/curve_0.1.1+4b930380.tar.gzwget https://github.com/opencurve/curve/releases/download/v0.1.1/nbd_0.1.1+4b930380.tar.gzwget 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.gztar zxvf nbd_0.1.1+4b930380.tar.gztar zxvf nebd_0.1.1+4b930380.tar.gz
cd curve/curve-ansible


  • 准备inventory文件 如果是debian系统,则不需要改动,如果是CentOs系统,需要将client.ini和server.ini中的curve_lib_dir修改为/usr/lib64

curve_lib_dir=/usr/lib64

  • 部署集群并启动服务

ansible-playbook -i server.ini deploy_curve.yml


  • 如果需要使用快照克隆功能,需要有S3账号,可以使用网易云的对象存储

# 在 server.ini 中,填写s3_ak和s3_sk=替换成自己账号对应的
# 安装快照克隆服务ansible-playbook -i server.ini deploy_snapshotcloneserver.ymlansible-playbook -i server.ini deploy_snapshotcloneserver_nginx.yml

  1. 执行命令查看当前集群状态,主要看以下几个状态。

curve_ops_tool status


  1. 安装 Nebd 服务和 NBD 包。

ansible-playbook -i client.ini deploy_nebd.ymlansible-playbook -i client.ini deploy_nbd.ymlansible-playbook -i client.ini deploy_curve_sdk.yml


  1. 创建 CURVE 卷,并通过 NBD 挂载到本地。

# 创建 CURVE 卷:命令为 curve create [-h] --filename FILENAME --length LENGTH --user USER, LENGTH >= 10curve create --filename /test --length 10 --user curve
# 挂载卷sudo curve-nbd map cbd:pool//test_curve_
# 查看设备挂载情况curve-nbd list-mapped


多机部署


主要用于生产环境,用多台 Linux 服务器,搭建 CURVE 最小的拓扑的集群。


准备环境


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

  • 推荐安装 Debian 9 或者 Centos 8.0

  • Linux 操作系统开放外网访问,用于下载 CURVE 安装包


CURVE 集群拓扑:


实例 个数 IP 端口
MDS 3 10.192.100.1
10.192.100.2
10.192.100.3
6666
Chunkserver
(三个Server上分别挂10个盘,每个Server上启动10个Chunkserver用例)
10*3 10.192.100.1
10.192.100.2
10.192.100.3
8200


部署主机软件和环境要求:


  • 部署需要在每个机器上创建一个有root权限的公共用户

  • 部署主机需要开放 CURVE 集群节点间所需ssh端口

  • 目前仅支持在 x86_64 (AMD64) 架构上部署 CURVE 集群

  • 选择三台机器中的一个作为中控机,安装 ansible 2.5.9,用于部署集群(目前只支持ansible 2.5.9下的部署)

  • 安装 docker 18.09 及以上, 用于部署快照克隆服务器


实施部署


  • 在三台机器上分别用 root 用户登录,创建 curve 用户, 并生成ssh key,保证这三台机器可以通过ssh互相登录


  • 选择三台机器中的一个作为中控机,在中控机上下载tar包并解压。

wget https://github.com/opencurve/curve/releases/download/v0.1.0/curve_0.1.0+55cecca7.tar.gzwget https://github.com/opencurve/curve/releases/download/v0.1.0/nbd_0.1.0+55cecca7.tar.gzwget https://github.com/opencurve/curve/releases/download/v0.1.0/nebd_0.1.0+55cecca7.tar.gz
tar zxvf curve_0.1.0+55cecca7.tar.gztar zxvf nbd_0.1.0+55cecca7.tar.gztar zxvf nebd_0.1.0+55cecca7.tar.gz
cd curve/curve-ansible


  1. 在中控机上修改配置文件


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=6667mds_port=6666mds_subnet=10.192.100.0/22 // 改动defined_healthy_status="cluster is healthy"mds_package_version="0.0.6.1+160be351"tool_package_version="0.0.6.1+160be351"# 启动命令是否用sudomds_need_sudo=truemds_config_path=/etc/curve/mds.conftool_config_path=/etc/curve/tools.confmds_log_dir=/data/log/curve/mdstopo_file_path=/etc/curve/topo.json
[etcd:vars]etcd_listen_client_port=2379etcd_listen_peer_port=2380etcd_name="etcd"etcd_need_sudo=truedefined_healthy_status="cluster is healthy"etcd_config_path=/etc/curve/etcd.conf.ymletcd_log_dir=/data/log/curve/etcd
[snapshotclone:vars]snapshot_port=5556snapshot_dummy_port=8081snapshot_subnet=10.192.100.0/22 // 改动defined_healthy_status="cluster is healthy"snapshot_package_version="0.0.6.1.1+7af4d6a4"snapshot_need_sudo=truesnapshot_config_path=/etc/curve/snapshot_clone_server.confsnap_s3_config_path=/etc/curve/s3.confsnap_client_config_path=/etc/curve/snap_client.confsnap_tool_config_path=/etc/curve/snapshot_tools.confclient_register_to_mds=falseclient_chunkserver_op_max_retry=50client_chunkserver_max_rpc_timeout_ms=16000client_chunkserver_max_stable_timeout_times=64client_turn_off_health_check=falsesnapshot_clone_server_log_dir=/data/log/curve/snapshotcloneaws_package_version="1.0"
[chunkservers:vars]wait_service_timeout=60env_name=pubt1check_copysets_status_times=1000check_copysets_status_interval=1cs_package_version="0.0.6.1+160be351"aws_package_version="1.0"defined_copysets_status="Copysets are healthy"chunkserver_base_port=8200chunkserver_format_disk=true // 改动,为了更好的性能,实际生产环境需要将chunkserver上的磁盘全部预格式化,这个过程比较耗时1T的盘格式80%化大概需要1个小时chunk_alloc_percent=80 // 预创的chunkFilePool占据磁盘空间的比例,比例越大,格式化越慢# 每台机器上的chunkserver的数量chunkserver_num=10 // 改动,修改成机器上的数据盘对应的数量chunkserver_need_sudo=true# 启动chunkserver要用到ansible的异步操作,否则ansible退出后chunkserver也会退出# 异步等待结果的总时间chunkserver_async=5# 异步查询结果的间隔chunkserver_poll=1chunkserver_conf_path=/etc/curve/chunkserver.confchunkserver_data_dir=./datachunkserver_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.confclient_register_to_mds=falseclient_chunkserver_op_max_retry=3client_chunkserver_max_stable_timeout_times=64client_turn_off_health_check=falsedisable_snapshot_clone=true // 改动,这一项取决于是否需要使用快照克隆功能,需要的话设置为false,并提供s3_ak和s3_sk
[snapshotclone_nginx:vars]snapshotcloneserver_nginx_dir=/etc/curve/nginxsnapshot_nginx_conf_path=/etc/curve/nginx/conf/nginx.confsnapshot_nginx_lua_conf_path=/etc/curve/nginx/app/etc/config.luanginx_docker_internal_port=80nginx_docker_external_port=5555
[all:vars]need_confirm=truecurve_ops_tool_config=/etc/curve/tools.confneed_update_config=truewait_service_timeout=10sudo_user=curvedeploy_dir=/home/curves3_ak="" // 如果需要快照克隆服务,则修改成自己s3账号对应的值s3_sk="" // 如果需要快照克隆服务,则修改成自己s3账号对应的值ansible_ssh_port=22curve_root_username=root // 改动,修改成自己需要的username,因为目前的一个bug,用到快照克隆的话用户名必须为rootcurve_root_password=root_password // 改动,修改成自己需要的密码curve_bin_dir=/usr/bincurve_lib_dir=/usr/lib // 如果是CentOs系统,则修改成/usrlib64curve_include_dir=/usr/includelib_install_prefix=/usr/local

client.ini
[client]client1 ansible_ssh_host=10.192.100.1 // 改动
# 仅用于生成配置中的mds地址[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 // 改动
[client:vars]ansible_ssh_port=1046nebd_package_version="1.0.2+e3fa47f"nbd_package_version=""sdk_package_version="0.0.6.1+160be351"deploy_dir=/usr/binnebd_start_port=9000nebd_port_max_range=5nebd_need_sudo=trueclient_config_path=/etc/curve/client.confnebd_client_config_path=/etc/nebd/nebd-client.confnebd_server_config_path=/etc/nebd/nebd-server.confnebd_data_dir=/data/nebdnebd_log_dir=/data/log/nebdcurve_sdk_log_dir=/data/log/curve
[mds:vars]mds_port=6666
[all:vars]need_confirm=trueneed_update_config=truecurve_bin_dir=/usr/bincurve_lib_dir=/usr/lib // 如果是CentOs系统,需要修改成/usr/lib64curve_include_dir=/usr/includecurvefs_dir=/usr/curvefsansible_ssh_port=22lib_install_prefix=/usr/local


group_vars/mds.yml
---
# 集群拓扑信息cluster_map: servers: - name: server1 internalip: 10.192.100.1 // 改动 internalport: 0 // 改动 externalip: 10.192.100.1 // 改动 externalport: 0 // 改动 zone: zone1 physicalpool: pool1 - name: server2 internalip: 10.192.100.2 // 改动 internalport: 0 // 改动 externalip: 10.192.100.1 // 改动 externalport: 0 // 改动 zone: zone2 physicalpool: pool1 - name: server3 internalip: 10.192.100.3 // 改动 internalport: 0 // 改动 externalip: 10.192.100.1 // 改动 externalport: 0 // 改动 zone: zone3 physicalpool: pool1 logicalpools: - name: logicalPool1 physicalpool: pool1 type: 0 replicasnum: 3 copysetnum: 2000 zonenum: 3 scatterwidth: 0


  1. 部署集群并启动服务

ansible-playbook -i server.ini deploy_curve.yml


  1. 如果需要使用快照克隆功能,需要有S3账号,可以使用网易云的对象存储 同上

# 在 server.ini 中,填写s3_ak="" s3_sk="" disable_snapshot_clone=false
# 安装快照克隆服务ansible-playbook -i server.ini deploy_snapshotcloneserver.ymlansible-playbook -i server.ini deploy_snapshotcloneserver_nginx.yml


  1. 执行命令查看当前集群状态

curve_ops_tool status

  1. 安装 Nebd 服务和 NBD 包

ansible-playbook -i client.ini deploy_nebd.ymlansible-playbook -i client.ini deploy_nbd.ymlansible-playbook -i client.ini deploy_curve_sdk.yml


  1. 在client的机器上创建 CURVE 卷,并通过 NBD 挂载到本地

# 创建 CURVE 卷:命令为 curve create [-h] --filename FILENAME --length LENGTH --user USER, LENGTH >= 10curve create --filename /test --length 10 --user curve
# 挂载卷sudo curve-nbd map cbd:pool//test_curve_
# 查看设备挂载情况curve-nbd list-mapped

以上是关于CURVE分布式存储系统集群安装的主要内容,如果未能解决你的问题,请参考以下文章

Curve:网易开源的高性能高可用高可靠分布式存储系统

网易开源分布式存储系统Curve,性能可达Ceph的1.84倍

Raft算法在分布式存储系统Curve中的实践

性能是Ceph的1.84倍,网易开源分布式存储系统Curve

网易开源的分布式存储系统,性能彪悍!

linux环境 [ubuntu麒麟等系统] 安装Elasticsearch分布式存储集群及配置