Я проводил некоторые эксперименты, чтобы понять Riak. Вот что интересного нашел:
У меня есть кластер из 2 узлов и тип корзины, в котором n_val
из 2
[root@co-riak002 ~]# riak-admin ring-status
================================== Claimant ===================================
Claimant: '[email protected]'
Status: up
Ring Ready: true
============================== Ownership Handoff ==============================
No pending changes.
============================== Unreachable Nodes ==============================
All nodes are up and reachable
[root@co-riak002 ~]# riak-admin bucket-type create testBucket '{"props":{"n_val":2}}'
testBucket created
[root@co-riak002 ~]# riak-admin bucket-type activate testBucket
testBucket has been activated
И тогда я написал что-то в нем:
[root@co-riak002 ~]# curl -XPUT -d '{"bar":"foo"}' -H "Content-Type: application/json" http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?w=2&returnbody=true
[1] 10890
[root@co-riak002 ~]#
[1]+ Done curl -XPUT -d '{"bar":"foo"}' -H "Content-Type: application/json" http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?w=2
Теперь я могу нормально читать как с r=2
, так и с pr=2
:
[root@co-riak002 ~]# curl http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?r=2
{"bar":"foo"}
[root@co-riak002 ~]# curl http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?pr=2
{"bar":"foo"}
После того, как я убил один из узлов, r=2
по-прежнему читается нормально, но не pr=2
[root@co-riak002 ~]# riak-admin ring-status
================================== Claimant ===================================
Claimant: '[email protected]'
Status: up
Ring Ready: true
============================== Ownership Handoff ==============================
No pending changes.
============================== Unreachable Nodes ==============================
The following nodes are unreachable: ['[email protected]']
С r=2
:
[root@co-riak002 ~]# curl http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?r=2
{"bar":"foo"}
С pr=2
:
[root@co-riak002 ~]# curl http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?pr=2
PR-value unsatisfied: 1/2
Я в замешательстве: не должно ли число кворума r
, используемое в операции чтения, означать количество реплик/физических узлов, которые необходимо согласовать перед возвратом данных? Почему в данном случае не работает? И почему в данном случае работает pr
, если оно должно означать количество vnodes?
Я довольно новичок в этом пространстве. Очень признателен за любые указатели.