如何配置Minio桶复制

Minio单向桶复制配置指南

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上看到已经同步过来了

Miniob中的桶targetbucket已同步对象

当从源Minio删除对象时,目标Minio也会删除对象的, 反之则不行,这就是所谓的单向复制。

总结

自建对象存储Minio使用比较广泛,但在生产环境中部署需要谨慎,需严格按照官网要求部署,以防配置不合理,导致性能问题或更严重的数据丢失问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值