ceph 分布式存储系统

Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
  1. 高性能

 

a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。
  1. 高可用性
a. 副本数可以灵活控制。
b. 支持故障域分隔,数据强一致性。
c. 多种故障场景自动进行修复自愈。
d. 没有单点故障,自动管理。
  1. 高可扩展性
a. 去中心化。
b. 扩展灵活。
c. 随着节点增加而线性增长。
  1. 特征丰富
a. 支持三种存储接口:块存储、文件存储、对象存储。
b. 支持自定义接口,支持多种语言驱动。

 

 

 

package ceph
import (
"gopkg.in/amz.v1/aws" "gopkg.in/amz.v1/s3" ) var cephConn *s3.S3 //提供类似s3的接口 // GetCephConnection : 获取ceph连接 func GetCephConnection() *s3.S3 { if cephConn != nil { return cephConn } // 1. 初始化ceph的一些信息 auth := aws.Auth{ AccessKey: "8WOOFAOAZ3SKQK3Y5I2L", SecretKey: "syYWcEmF0Dx7BXrpyDvuAZ3yRe4EmNC9oDrucx3M", } curRegion := aws.Region{ Name: "default", EC2Endpoint: "http://127.0.0.1:9080", S3Endpoint: "http://127.0.0.1:9080", S3BucketEndpoint: "", S3LocationConstraint: false, S3LowercaseBucket: false, Sign: aws.SignV2, } // 2. 创建S3类型的连接 return s3.New(auth, curRegion) } // GetCephBucket : 获取指定的bucket对象 func GetCephBucket(bucket string) *s3.Bucket { conn := GetCephConnection() return conn.Bucket(bucket) } // PutObject : 上传文件到ceph集群 func PutObject(bucket string, path string, data []byte) error { return GetCephBucket(bucket).Put(path, data, "octet-stream", s3.PublicRead) }

 

func main() {
    bucket := ceph.GetCephBucket("userfile")

    d, _ := bucket.Get("/ceph/866cc7c87c9b612dd8904d2c5dd07d6f6c22b834")
    tmpFile, _ := os.Create("/tmp/test_file")
    tmpFile.Write(d)
    return

    // // 创建一个新的bucket
    // err := bucket.PutBucket(s3.PublicRead)
    // fmt.Printf("create bucket err: %v\n", err)

    // 查询这个bucket下面指定条件的object keys
    res, _ := bucket.List("", "", "", 100)
    fmt.Printf("object keys: %+v\n", res)

    // // 新上传一个对象
    // err = bucket.Put("/testupload/a.txt", []byte("just for test"), "octet-stream", s3.PublicRead)
    // fmt.Printf("upload err: %+v\n", err)

    // // 查询这个bucket下面指定条件的object keys
    // res, err = bucket.List("", "", "", 100)
    // fmt.Printf("object keys: %+v\n", res)
}

 

posted @ 2020-02-22 17:16  慕沁  阅读(268)  评论(0)    收藏  举报