Minio是一款开源的对象存储软件,使用Golang编写,安装简单,使用广泛。在对象存储中,文件都是放在一个个的桶中,桶是对象存储里面的一个概念,可以想象成文件系统的一个目录,客户端上传的文件会被存放到预先选择的桶中。
桶复制是一种数据高可用的手段,主要有两个实现方式:单向和双向桶复制,如下
在单向复制中,源Minio中的对象写入与删除会同步到目的Minio,但是目的Minio上的对象写入及删除操作不会同步到源Minio中,双向复制的话,就可以。这里有一点需要注意,Minio的桶复制可以对目的Minio执行正常的写入和删除操作,这和MySQL的主从复制不一样,在MySQL的主从复制中,是不能对备库做写入操作的。
这篇文章仅介绍Minio的单向复制。
在开始之前,需要安装Minio的命令行客户端工具mc,从官网下载后,移动到当前用户的系统环境变量“$PATH”中的任意目录即可,最后授予可执行权限便可使用。
实验拓扑图,
- Minio A
配置连接信息(假定管理员账号为minioadmin,密码为minioadmin)
mc alias set minioa http://minioa.example.com:9000 minioadmin minioadmin
然后执行下面
#根据json文件内容在源Minio上创建策略“ReplicationAdminPolicy ”
mc admin policy create minioa ReplicationAdminPolicy ./ReplicationAdminPolicy.json
#创建一个专门的复制账号“ReplicationAdmin”
mc admin user add minioa ReplicationAdmin LongRandomSecretKey
#将策略的权限赋给上步创建的用户“ReplicationAdmin”
mc admin policy attach minioa ReplicationAdminPolicy --user ReplicationAdmin
#使用用户“ReplicationAdmin”创建一个新的Alias
mc alias set minio-source http://minioa.example.com:9000 ReplicationAdmin LongRandomSecretKey
文件
ReplicationAdminPolicy.json的内容如下,
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"admin:SetBucketTarget",
"admin:GetBucketTarget"
],
"Effect": "Allow",
"Sid": "EnableRemoteBucketConfiguration"
},
{
"Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetObjectRetention",
"s3:GetObjectLegalHold",
"s3:PutReplicationConfiguration"
],
"Resource": [
"arn:aws:s3:::*"
],
"Sid": "EnableReplicationRuleConfiguration"
}
]
}
- Minio B上操作
配置步骤和上面一样,唯一不同就是使用的策略文件不一样,新的文件名为“
ReplicationRemoteUserPolicy.json”,内容如下,
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetBucketObjectLockConfiguration",
"s3:GetEncryptionConfiguration"
],
"Resource": [
"arn:aws:s3:::*"
],
"Sid": "EnableReplicationOnBucket"
},
{
"Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ReplicateTags",
"s3:AbortMultipartUpload",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging",
"s3:PutObject",
"s3:PutObjectRetention",
"s3:PutBucketObjectLockConfiguration",
"s3:PutObjectLegalHold",
"s3:DeleteObject",
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Resource": [
"arn:aws:s3:::*"
],
"Sid": "EnableReplicatingDataIntoBucket"
}
]
}
- 配置桶复制
在源和目的Minio创建桶(名字相同与否无关紧要),分别为sourcebucket和targetbucket,并启动对象版本和对象锁,
Minio A上桶“sourcebucket”的配置:
Minio B上桶“targetbucket”的配置:
连接Minio A执行复制操作,其中
ReplicationRemoteUser:LongRandomSecretKey是在Minio B上创建的用户及密码
mc replicate add minio-source/sourcebucket --remote-bucket 'http://ReplicationRemoteUser:LongRandomSecretKey@miniob.example.com:9000/targetbucket' --replicate "delete,delete-marker,existing-objects"
- 测试
在Minio A上上传一个文件,
mc cp myminio-bucket-metadata.zip minio-source/sourcebucket/
登录Minio B上看到已经同步过来了
当从源Minio删除对象时,目标Minio也会删除对象的, 反之则不行,这就是所谓的单向复制。
总结
自建对象存储Minio使用比较广泛,但在生产环境中部署需要谨慎,需严格按照官网要求部署,以防配置不合理,导致性能问题或更严重的数据丢失问题。
Minio单向桶复制配置指南
1169

被折叠的 条评论
为什么被折叠?



