Re: Consistency problem with multiple rgws

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,
I test it again today that each zone has one RGW with config
'rgw_num_rados_handles=2'. I use cosbench to  upload 50,000 object ,
each object is 4M,
the number of workers is 10.
After the data sync is finished(I use the command 'radosgw-admin
bucket sync status --bucket=<name>' and 'radosgw-admin sync status' to
check that)
Below is the bucket stats result:

Master zone:
[root@ceph36 ~]# radosgw-admin bucket stats --bucket=shard23
{
    "bucket": "shard23",
    "pool": "master.rgw.buckets.data",
    "index_pool": "master.rgw.buckets.index",
    "id": "cc3594b6-6282-421a-a3d5-3f7f3fa7efd0.702243.1",
    "marker": "cc3594b6-6282-421a-a3d5-3f7f3fa7efd0.702243.1",
    "owner": "zsw-test",
    "ver": "0#50039,1#49964",
    "master_ver": "0#0,1#0",
    "mtime": "2016-12-16 10:58:56.174049",
    "max_marker": "0#00000050038.56144.3,1#00000049963.56109.3",
    "usage": {
        "rgw.main": {
            "size_kb": 195300782,
            "size_kb_actual": 195388276,
            "num_objects": 50000
        }
    },
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    }
}

Slave zone:
[root@ceph05 ~]# radosgw-admin bucket stats --bucket=shard23
{
    "bucket": "shard23",
    "pool": "slave.rgw.buckets.data",
    "index_pool": "slave.rgw.buckets.index",
    "id": "cc3594b6-6282-421a-a3d5-3f7f3fa7efd0.702243.1",
    "marker": "cc3594b6-6282-421a-a3d5-3f7f3fa7efd0.702243.1",
    "owner": "zsw-test",
    "ver": "0#51172,1#51070",
    "master_ver": "0#0,1#0",
    "mtime": "2016-12-16 10:58:56.174049",
    "max_marker": "0#00000051171.112193.3,1#00000051069.79607.3",
    "usage": {
        "rgw.main": {
            "size_kb": 194769532,
            "size_kb_actual": 194856788,
            "num_objects": 49861
        }
    },
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    }
}

We can see that in slave zone, object number in bucket stats is less
than master. But if I use s3cmd to list the bucket in slave zone, the
result is right:
[root@ceph05 ~]# s3cmd ls s3://shard23 | wc -l
50000

And after I list the bucket with s3cmd, I use the bucket stats in
slave zone again:
[root@ceph05 ~]# radosgw-admin bucket stats --bucket=shard23
{
    "bucket": "shard23",
    "pool": "slave.rgw.buckets.data",
    "index_pool": "slave.rgw.buckets.index",
    "id": "cc3594b6-6282-421a-a3d5-3f7f3fa7efd0.702243.1",
    "marker": "cc3594b6-6282-421a-a3d5-3f7f3fa7efd0.702243.1",
    "owner": "zsw-test",
    "ver": "0#51182,1#51079",
    "master_ver": "0#0,1#0",
    "mtime": "2016-12-16 10:58:56.174049",
    "max_marker": "0#00000051181.112203.9,1#00000051078.79616.9",
    "usage": {
        "rgw.main": {
            "size_kb": 194769532,
            "size_kb_actual": 194856788,
            "num_objects": 50000
        }
    },
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    }
}

We can see that the num_objects is right now. (According to the code ,
list bucket will send the 'dir_suggest_changes' request to the osd. I
think this is why the number is right now.)
If each zone have two rgw with config 'rgw_num_rados_handles=1', the
difference between the bucket stats is smaller, from 10 to 40.
If each zone have one rgw with config 'rgw_num_rados_handles=1', the
bucket stats are same.
My colleague and I have tested that multi times in two different
clusters(Ceph version is jewel), and this problem nearly occurs every
time.


2016-12-16 0:05 GMT+08:00 Casey Bodley <cbodley@xxxxxxxxxx>:
> Hi,
>
> On 12/15/2016 02:55 AM, 18896724396 wrote:
>
> Hi,
> We have two RGWs in master zone and two RGWs in slave zone. We use cosbench
> to upload 50,000 objs to a single bucket. After the data sync is finished,
> the bucket stats is not the same between master and slave zone.
>
> The data sync may take a while with that many objects. How are you verifying
> that data sync finished? Have you tried 'radosgw-admin bucket sync status
> --bucket=<name>'?
>
> Then we test the same case with one RGW in master zone and slave zone, the
> stats is also not same. At last we test with one RGW and modify the config
> rgw_num_rados_handles to 1(we set it 2 before), and this time the stats is
> same and correct. Though multiple RGWs still have the problem.
> According to the code, I find that when we update bucket index, rgw will
> call cls_rgw_bucket_complete_op to update the bucket stats and at last osd
> will call rgw_bucket_complete_op. In this function, osd first read the
> bucket header, and then update the stats, last it write the head back. So I
> think two concurrent request to update the stats may lead to the consistency
> problem. And maybe some other operation also have the same problem. How
> could we solve the consistency problem?
>
> The osd guarantees that two operations in the same placement group won't run
> concurrently, so this kind of logic in cls should be safe. How far off are
> the bucket stats? Can you share some example output?
>
>
> Best regards.
> Zhang Shaowen
>
>
> Thanks,
> Casey
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux