Я делал несколько экспериментов, чтобы понять Riak. Вот кое-что межжала я нашел:Понимание кворума/Vnode (R vs PR)
У меня есть кластер из 2 узлов и тип ковша, который имеет n_val
из
[[email protected] ~]# 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
[[email protected] ~]# riak-admin bucket-type create testBucket '{"props":{"n_val":2}}'
testBucket created
[[email protected] ~]# riak-admin bucket-type activate testBucket
testBucket has been activated
И тогда я написал что-то в нем:
[[email protected] ~]# 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
[[email protected] ~]#
[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
:
[[email protected] ~]# curl http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?r=2
{"bar":"foo"}
[[email protected] ~]# curl http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?pr=2
{"bar":"foo"}
После того как я убил один из узлов, r=2
еще читает хорошо, но не pr=2
[[email protected] ~]# 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
:
[[email protected] ~]# curl http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?r=2
{"bar":"foo"}
С pr=2
:
[[email protected] ~]# curl http://localhost:8098/types/testBucket/buckets/stuff/keys/hello?pr=2
PR-value unsatisfied: 1/2
Я смущен - не должен 't Номер кворума r
, используемый в операции чтения означает количество реплик/физических узлов, которые должны быть согласованы перед возвратом данных? Почему он не работает в этом случае? И почему pr
работает в этом случае, когда это должно означать число vnodes?
Am довольно новый для этого пространства. Очень ценится для любых указателей.