ceph 分布式存储系统
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
- 高性能
a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。
- 高可用性
a. 副本数可以灵活控制。
b. 支持故障域分隔,数据强一致性。
c. 多种故障场景自动进行修复自愈。
d. 没有单点故障,自动管理。
- 高可扩展性
a. 去中心化。
b. 扩展灵活。
c. 随着节点增加而线性增长。
- 特征丰富
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) }