cluster.rst 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. .. _cluster:
  2. ====================
  3. Cluster
  4. ====================
  5. -----------------------------------
  6. Erlang/OPT Distributed
  7. -----------------------------------
  8. .. code::
  9. --------- ---------
  10. | Node1 | --------| Node2 |
  11. --------- ---------
  12. | \ / |
  13. | \ / |
  14. | / \ |
  15. | / \ |
  16. --------- ---------
  17. | Node3 | --------| Node4 |
  18. --------- ---------
  19. Node
  20. ----------
  21. .. code:: shell
  22. erl -name node1@127.0.0.1
  23. erl -name node2@127.0.0.1
  24. erl -name node3@127.0.0.1
  25. erl -name node4@127.0.0.1
  26. (node1@127.0.0.1)1> net_kernel:connect_node('node2@127.0.0.1').
  27. true
  28. (node1@127.0.0.1)2> net_kernel:connect_node('node3@127.0.0.1').
  29. true
  30. (node1@127.0.0.1)3> net_kernel:connect_node('node4@127.0.0.1').
  31. true
  32. (node1@127.0.0.1)4> nodes().
  33. ['node2@127.0.0.1','node3@127.0.0.1','node4@127.0.0.1']
  34. epmd
  35. ----------
  36. (node1@127.0.0.1)6> net_adm:names().
  37. {ok,[{"node1",62740},
  38. {"node2",62746},
  39. {"node3",62877},
  40. {"node4",62895}]}
  41. Cookie
  42. --------
  43. 1. $HOME/.erlang.cookie
  44. 2. erl -setcookie <Cookie>
  45. From: http://erlang.org/doc/reference_manual/distributed.html
  46. ----------------------
  47. Cluster Design
  48. ----------------------
  49. topic1 -> node1, node2
  50. topic2 -> node3
  51. topic3 -> node2, node4
  52. Topic Trie and Route Table
  53. ---------------------------
  54. ::
  55. --------------------------
  56. | t |
  57. | / \ |
  58. | + # |
  59. | / \ |
  60. | x y |
  61. --------------------------
  62. | t/+/x -> node1, node3 |
  63. | t/+/y -> node1 |
  64. | t/# -> node2 |
  65. | t/a -> node3 |
  66. --------------------------
  67. Subscription and Message Dispatch
  68. ---------------------------------
  69. ::
  70. title: Message Route and Deliver
  71. client1->node1: Publish[t/a]
  72. node1-->node2: Route[t/#]
  73. node1-->node3: Route[t/a]
  74. node2-->client2: Deliver[t/#]
  75. node3-->client3: Deliver[t/a]
  76. .. image:: _static/images/route.png
  77. -----------------------
  78. Cluster Setup
  79. -----------------------
  80. -----------------------
  81. Sessions across Nodes
  82. -----------------------
  83. node1
  84. -----------
  85. |-->| session |
  86. | -----------
  87. node2 |
  88. -------------- |
  89. client-->| connection |<--|
  90. --------------
  91. ------------------
  92. Notice: NetSplit
  93. ------------------
  94. ------------------------
  95. Consistent Hash and DHT
  96. ------------------------