ಪ್ರತಿಯೊಂದು ಯಶಸ್ವಿ ವ್ಯಾಪಾರ ಅಪ್ಲಿಕೇಶನ್ ಬೇಗ ಅಥವಾ ನಂತರ ಸಮತಲ ಸ್ಕೇಲಿಂಗ್ ಅಗತ್ಯವಿರುವ ಹಂತವನ್ನು ಪ್ರವೇಶಿಸುತ್ತದೆ. ಅನೇಕ ಸಂದರ್ಭಗಳಲ್ಲಿ, ನೀವು ಸರಳವಾಗಿ ಹೊಸ ನಿದರ್ಶನವನ್ನು ಪ್ರಾರಂಭಿಸಬಹುದು ಮತ್ತು ಲೋಡ್ ಸರಾಸರಿಯನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು. ಆದರೆ ವಿಭಿನ್ನ ನೋಡ್ಗಳು ಪರಸ್ಪರರ ಬಗ್ಗೆ ತಿಳಿದಿರುವುದನ್ನು ಮತ್ತು ಕೆಲಸದ ಹೊರೆಯನ್ನು ಎಚ್ಚರಿಕೆಯಿಂದ ವಿತರಿಸುವುದನ್ನು ನಾವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬೇಕಾದ ಕಡಿಮೆ ಕ್ಷುಲ್ಲಕ ಪ್ರಕರಣಗಳೂ ಇವೆ.
ಅದು ತುಂಬಾ ಅದೃಷ್ಟ ಎಂದು ಬದಲಾಯಿತು ಎರ್ಲಾಂಗ್, ನಾವು ಅದರ ಆಹ್ಲಾದಕರ ಸಿಂಟ್ಯಾಕ್ಸ್ ಮತ್ತು ಅದರ ಸುತ್ತಲಿನ ಪ್ರಚೋದನೆಗಾಗಿ ಆರಿಸಿಕೊಂಡಿದ್ದೇವೆ, ಇದು ಪ್ರಥಮ ದರ್ಜೆಯನ್ನು ಹೊಂದಿದೆ
ವಿವಿಧ ನೋಡ್ಗಳಲ್ಲಿನ ಪ್ರಕ್ರಿಯೆಗಳ ನಡುವೆ, ಹಾಗೆಯೇ ಲಿಂಕ್ಗಳು ಮತ್ತು ಮಾನಿಟರ್ಗಳ ನಡುವೆ ಸಂದೇಶ ರವಾನಿಸುವುದು ಪಾರದರ್ಶಕವಾಗಿರುತ್ತದೆ […]
ಪ್ರಾಯೋಗಿಕವಾಗಿ, ಎಲ್ಲವೂ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗಿದೆ. ವಿತರಣೆ ಎರ್ಲಾಂಗ್ "ಕಂಟೇನರ್" ಎಂದರೆ ಶಿಪ್ಪಿಂಗ್ಗಾಗಿ ದೊಡ್ಡ ಕಬ್ಬಿಣದ ಪೆಟ್ಟಿಗೆ ಎಂದಾಗ ಅಭಿವೃದ್ಧಿಪಡಿಸಲಾಯಿತು ಮತ್ತು "ಡಾಕರ್" ಎಂಬುದು ಲಾಂಗ್ಶೋರ್ಮ್ಯಾನ್ಗೆ ಸಮಾನಾರ್ಥಕವಾಗಿದೆ. IN IP4 ಅನೇಕ ಖಾಲಿ ವಿಳಾಸಗಳು ಇದ್ದವು, ಸಾಮಾನ್ಯವಾಗಿ ಇಲಿಗಳು ಕೇಬಲ್ ಮೂಲಕ ಅಗಿಯುವುದರಿಂದ ನೆಟ್ವರ್ಕ್ ಬ್ರೇಕ್ಗಳು ಉಂಟಾಗುತ್ತವೆ ಮತ್ತು ಉತ್ಪಾದನಾ ವ್ಯವಸ್ಥೆಯ ಸರಾಸರಿ ಸಮಯವನ್ನು ದಶಕಗಳಲ್ಲಿ ಅಳೆಯಲಾಗುತ್ತದೆ.
ಈಗ ನಾವೆಲ್ಲರೂ ವಿಸ್ಮಯಕಾರಿಯಾಗಿ ಸ್ವಾವಲಂಬಿಯಾಗಿದ್ದೇವೆ, ಪ್ಯಾಕ್ ಮಾಡಿದ್ದೇವೆ ಮತ್ತು ವಿತರಿಸಿದ್ದೇವೆ ಎರ್ಲಾಂಗ್ ದೊಡ್ಡ ಯಾದೃಚ್ಛಿಕತೆಯ ತತ್ವದ ಮೇಲೆ ಡೈನಾಮಿಕ್ IP ವಿಳಾಸಗಳನ್ನು ಹಸ್ತಾಂತರಿಸುವ ಪರಿಸರದಲ್ಲಿ, ಮತ್ತು ಶೆಡ್ಯೂಲರ್ನ ಎಡ ಹಿಮ್ಮಡಿಯ ಇಚ್ಛೆಯಂತೆ ನೋಡ್ಗಳು ಕಾಣಿಸಿಕೊಳ್ಳಬಹುದು ಮತ್ತು ಕಣ್ಮರೆಯಾಗಬಹುದು. ವಿತರಿಸಲಾದ ಪ್ರತಿಯೊಂದು ಯೋಜನೆಯಲ್ಲಿ ಬಾಯ್ಲರ್ಪ್ಲೇಟ್ ಕೋಡ್ನ ರಾಶಿಯನ್ನು ತಪ್ಪಿಸಲು ಎರ್ಲಾಂಗ್, ಪ್ರತಿಕೂಲ ವಾತಾವರಣವನ್ನು ಎದುರಿಸಲು, ಸಹಾಯದ ಅಗತ್ಯವಿದೆ.
ಹೇಳಿಕೆಯನ್ನು: ಇದೆ ಎಂದು ನನಗೆ ತಿಳಿದಿದೆ libcluster
ಅವಶ್ಯಕತೆಗಳನ್ನು
ನನಗೆ ವೈಯಕ್ತಿಕವಾಗಿ ಬೇಕಾಗಿರುವುದು ಕ್ಲಸ್ಟರ್ನ ನಿರ್ವಹಣೆಯನ್ನು ತೆಗೆದುಕೊಳ್ಳುವ ಮತ್ತು ಕೆಳಗಿನ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿರುವ ಗ್ರಂಥಾಲಯವಾಗಿದೆ:
- ನೋಡ್ಗಳ ಹಾರ್ಡ್-ಕೋಡೆಡ್ ಪಟ್ಟಿ ಮತ್ತು ಸೇವೆಗಳ ಮೂಲಕ ಡೈನಾಮಿಕ್ ಅನ್ವೇಷಣೆ ಎರಡರೊಂದಿಗೂ ಪಾರದರ್ಶಕ ಕೆಲಸ ಎರ್ಲಾಂಗ್;
- ಪ್ರತಿ ಟೋಪೋಲಜಿ ಬದಲಾವಣೆಗೆ ಸಂಪೂರ್ಣ ಕ್ರಿಯಾತ್ಮಕ ಕಾಲ್ಬ್ಯಾಕ್ (ನೋಡ್ ಅಲ್ಲಿ, ನೋಡ್ ಇಲ್ಲಿ, ನೆಟ್ವರ್ಕ್ ಅಸ್ಥಿರತೆ, ವಿಭಜನೆಗಳು);
- ಉದ್ದ ಮತ್ತು ಚಿಕ್ಕ ಹೆಸರುಗಳೊಂದಿಗೆ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಪಾರದರ್ಶಕ ಇಂಟರ್ಫೇಸ್
:nonode@nohost
; - ಮೂಲಸೌಕರ್ಯ ಕೋಡ್ ಅನ್ನು ಬರೆಯದೆಯೇ ಡಾಕರ್ ಬೆಂಬಲವು ಬಾಕ್ಸ್ನಿಂದ ಹೊರಗಿದೆ.
ಎರಡನೆಯದು ಎಂದರೆ ನಾನು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಪರೀಕ್ಷಿಸಿದ ನಂತರ :nonode@nohost
, ಅಥವಾ ಬಳಸಿ ಕೃತಕವಾಗಿ ವಿತರಿಸಿದ ಪರಿಸರದಲ್ಲಿ test_cluster_task
docker-compose up --scale my_app=3
ಮತ್ತು ಯಾವುದೇ ಕೋಡ್ ಬದಲಾವಣೆಗಳಿಲ್ಲದೆ ಅದು ಡಾಕರ್ನಲ್ಲಿ ಮೂರು ನಿದರ್ಶನಗಳನ್ನು ಹೇಗೆ ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನೋಡಿ. ನಾನು ಸಹ ಅವಲಂಬಿತ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಬಯಸುತ್ತೇನೆ mnesia
- ಟೋಪೋಲಜಿ ಬದಲಾದಾಗ, ಪರದೆಯ ಹಿಂದೆ ಅವರು ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ಕಿಕ್ ಇಲ್ಲದೆ ಕ್ಲಸ್ಟರ್ ಲೈವ್ ಅನ್ನು ಮರುನಿರ್ಮಾಣ ಮಾಡುತ್ತಾರೆ.
ಕ್ಲೋಸ್ಟರ್ ಒಂದು ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಬೆಂಬಲಿಸುವುದರಿಂದ ಹಿಡಿದು ಕಾಫಿ ಮಾಡುವವರೆಗೆ ಎಲ್ಲವನ್ನೂ ಸಮರ್ಥವಾಗಿರುವ ಗ್ರಂಥಾಲಯವಾಗಲು ಉದ್ದೇಶಿಸಿರಲಿಲ್ಲ. ಇದು ಎಲ್ಲಾ ಸಂಭವನೀಯ ಪ್ರಕರಣಗಳನ್ನು ಒಳಗೊಳ್ಳುವ ಗುರಿಯನ್ನು ಹೊಂದಿರುವ ಬೆಳ್ಳಿಯ ಬುಲೆಟ್ ಅಲ್ಲ, ಅಥವಾ ಸಿದ್ಧಾಂತಿಗಳು ಅರ್ಥದಲ್ಲಿ ಶೈಕ್ಷಣಿಕವಾಗಿ ಸಂಪೂರ್ಣ ಪರಿಹಾರವಾಗಿದೆ CS ಈ ಪದವನ್ನು ಹಾಕಲಾಗಿದೆ. ಈ ಗ್ರಂಥಾಲಯವು ಅತ್ಯಂತ ಸ್ಪಷ್ಟವಾದ ಉದ್ದೇಶವನ್ನು ಪೂರೈಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ, ಆದರೆ ಅದರ ತುಂಬಾ ದೊಡ್ಡದಲ್ಲದ ಕೆಲಸವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಮಾಡಿ. ಈ ಗುರಿಯು ಸ್ಥಳೀಯ ಅಭಿವೃದ್ಧಿ ಪರಿಸರ ಮತ್ತು ಪ್ರತಿಕೂಲವಾದ ಕಂಟೈನರ್ಗಳಿಂದ ತುಂಬಿರುವ ವಿತರಣಾ ಸ್ಥಿತಿಸ್ಥಾಪಕ ಪರಿಸರದ ನಡುವೆ ಸಂಪೂರ್ಣ ಪಾರದರ್ಶಕತೆಯನ್ನು ಒದಗಿಸುವುದು.
ಆಯ್ಕೆ ವಿಧಾನ
ಕ್ಲೋಸ್ಟರ್ ಸುಧಾರಿತ ಬಳಕೆದಾರರು ನೇರವಾಗಿ ರನ್ ಮಾಡುವ ಮೂಲಕ ಕ್ಲಸ್ಟರ್ನ ಜೋಡಣೆ ಮತ್ತು ನಿರ್ವಹಣೆಯೊಂದಿಗೆ ಕೈಯಾರೆ ಕೆಲಸ ಮಾಡಬಹುದಾದರೂ ಅಪ್ಲಿಕೇಶನ್ನಂತೆ ಚಲಾಯಿಸಲು ಉದ್ದೇಶಿಸಲಾಗಿದೆ Cloister.Manager
ಗುರಿ ಅಪ್ಲಿಕೇಶನ್ನ ಮೇಲ್ವಿಚಾರಕ ಮರದಲ್ಲಿ.
ಅಪ್ಲಿಕೇಶನ್ ಆಗಿ ರನ್ ಮಾಡಿದಾಗ, ಗ್ರಂಥಾಲಯವು ಅವಲಂಬಿಸಿದೆ config
, ಇದು ಕೆಳಗಿನ ಮೂಲಭೂತ ಮೌಲ್ಯಗಳನ್ನು ಓದುತ್ತದೆ:
config :cloister,
otp_app: :my_app,
sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
consensus: 3, # number of nodes to consider
# the cluster is up
listener: MyApp.Listener # listener to be called when
# the ring has changed
ಮೇಲಿನ ನಿಯತಾಂಕಗಳು ಅಕ್ಷರಶಃ ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಅರ್ಥೈಸುತ್ತವೆ: ಕ್ಲೋಸ್ಟರ್ OTP ಅಪ್ಲಿಕೇಶನ್ಗಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ :my_app
, ಬಳಸುತ್ತದೆ ಎರ್ಲಾಂಗ್ ಸೇವೆಯ ಅನ್ವೇಷಣೆ ನೋಡ್ಗಳನ್ನು ಸಂಪರ್ಕಿಸಲು, ಕನಿಷ್ಠ ಮೂರು, ಮತ್ತು MyApp.Listener
ಮಾಡ್ಯೂಲ್ (ಅನುಷ್ಠಾನಗೊಳಿಸುವುದು @behaviour Cloister.Listener
ಈ ಸಂರಚನೆಯೊಂದಿಗೆ, ಅಪ್ಲಿಕೇಶನ್ ಕ್ಲೋಸ್ಟರ್ ಇರುತ್ತದೆ MyApp.Listener.on_state_change/2
%Cloister.Monitor{status: :up}
, ಅಂದರೆ: "ಹಲೋ, ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಜೋಡಿಸಲಾಗಿದೆ."
ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಅನುಸ್ಥಾಪನೆ consensus: 3
ಸೂಕ್ತವಾಗಿರುತ್ತದೆ ಏಕೆಂದರೆ ಹೆಚ್ಚಿನ ನೋಡ್ಗಳನ್ನು ಸಂಪರ್ಕಿಸಲು ನಾವು ನಿರೀಕ್ಷಿಸಿದರೂ ಸಹ, ಕಾಲ್ಬ್ಯಾಕ್ ಮೂಲಕ ಹೋಗುತ್ತದೆ status: :rehashing
→ status: :up
ಹೊಸದಾಗಿ ಸೇರಿಸಲಾದ ಅಥವಾ ತೆಗೆದುಹಾಕಲಾದ ಯಾವುದೇ ನೋಡ್ನಲ್ಲಿ.
ಅಭಿವೃದ್ಧಿ ಕ್ರಮದಲ್ಲಿ ಪ್ರಾರಂಭಿಸುವಾಗ, ನೀವು ಹೊಂದಿಸಬೇಕಾಗಿದೆ consensus: 1
и ಕ್ಲೋಸ್ಟರ್ ಅವರು ನೋಡಿದಾಗ ಕ್ಲಸ್ಟರ್ ಜೋಡಣೆಗಾಗಿ ಕಾಯುವುದನ್ನು ಸಂತೋಷದಿಂದ ಬಿಟ್ಟುಬಿಡುತ್ತಾರೆ :nonode@nohost
ಅಥವಾ :node@host
ಅಥವಾ :[email protected]
- ನೋಡ್ ಅನ್ನು ಹೇಗೆ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ ಎಂಬುದರ ಆಧಾರದ ಮೇಲೆ (:none | :shortnames | :longnames
).
ವಿತರಿಸಿದ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ವಹಣೆ
ನಿರ್ವಾತದಲ್ಲಿಲ್ಲದ ವಿತರಿಸಲಾದ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ವಿತರಿಸಿದ ಅವಲಂಬನೆಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ, ಉದಾಹರಣೆಗೆ mnesia
. ಅದೇ ಕಾಲ್ಬ್ಯಾಕ್ನಿಂದ ಅವರ ಮರುಸಂರಚನೆಯನ್ನು ನಿರ್ವಹಿಸಲು ನಮಗೆ ಸುಲಭವಾಗಿದೆ on_state_change/2
. ಇಲ್ಲಿ, ಉದಾಹರಣೆಗೆ, ಮರುಸಂರಚಿಸುವುದು ಹೇಗೆ ಎಂಬುದರ ವಿವರವಾದ ವಿವರಣೆಯಾಗಿದೆ mnesia
ಒಳಗೆ ಹಾರಾಡುತ್ತ
ಬಳಸುವ ಮುಖ್ಯ ಪ್ರಯೋಜನ ಕ್ಲೋಸ್ಟರ್ ಟೋಪೋಲಜಿ ಬದಲಾವಣೆಯ ನಂತರ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಮರುನಿರ್ಮಾಣ ಮಾಡಲು ಅಗತ್ಯವಿರುವ ಎಲ್ಲಾ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಅದು ನಿರ್ವಹಿಸುತ್ತದೆ ಹುಡ್ ಅಡಿಯಲ್ಲಿ. ನಾವು IP ವಿಳಾಸಗಳು ಮತ್ತು ಆದ್ದರಿಂದ ನೋಡ್ ಹೆಸರುಗಳನ್ನು ಮುಂಚಿತವಾಗಿ ತಿಳಿದಿರಲಿ ಅಥವಾ ಅವುಗಳನ್ನು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ನಿಯೋಜಿಸಲಾಗಿದೆ/ಬದಲಾಯಿಸಲಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಲೆಕ್ಕಿಸದೆ, ಎಲ್ಲಾ ನೋಡ್ಗಳೊಂದಿಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವ ಈಗಾಗಲೇ ಸಿದ್ಧಪಡಿಸಲಾದ ವಿತರಣೆ ಪರಿಸರದಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಸರಳವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದಕ್ಕೆ ಯಾವುದೇ ವಿಶೇಷ ಡಾಕರ್ ಕಾನ್ಫಿಗರೇಶನ್ ಸೆಟ್ಟಿಂಗ್ಗಳ ಅಗತ್ಯವಿರುವುದಿಲ್ಲ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ಡೆವಲಪರ್ನ ದೃಷ್ಟಿಕೋನದಿಂದ, ವಿತರಿಸಿದ ಪರಿಸರದಲ್ಲಿ ಓಡುವುದು ಅಥವಾ ಸ್ಥಳೀಯವಾಗಿ ಓಡುವುದು ನಡುವೆ ಯಾವುದೇ ವ್ಯತ್ಯಾಸವಿಲ್ಲ. :nonode@nohost
. ನೀವು ಇದರ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಓದಬಹುದು
ಕಸ್ಟಮ್ ಅನುಷ್ಠಾನದ ಮೂಲಕ ಟೋಪೋಲಜಿ ಬದಲಾವಣೆಗಳ ಸಂಕೀರ್ಣ ನಿರ್ವಹಣೆ ಸಾಧ್ಯವಾದರೂ MyApp.Listener
, ಈ ಲೈಬ್ರರಿ ಮಿತಿಗಳು ಮತ್ತು ಕಾನ್ಫಿಗರೇಶನ್ ಪಕ್ಷಪಾತಗಳು ಅನುಷ್ಠಾನದ ಮೂಲಾಧಾರವೆಂದು ಸಾಬೀತುಪಡಿಸುವ ಅಂಚಿನ ಸಂದರ್ಭಗಳು ಯಾವಾಗಲೂ ಇರಬಹುದು. ಇದು ಸರಿ, ಮೇಲಿನದನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ libcluster
, ಇದು ಹೆಚ್ಚು ಸಾಮಾನ್ಯ ಉದ್ದೇಶವಾಗಿದೆ, ಅಥವಾ ಕಡಿಮೆ ಮಟ್ಟದ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ನೀವೇ ನಿರ್ವಹಿಸಿ. ಈ ಕೋಡ್ ಲೈಬ್ರರಿಯ ಗುರಿಯು ಪ್ರತಿಯೊಂದು ಸಂಭವನೀಯ ಸನ್ನಿವೇಶವನ್ನು ಒಳಗೊಳ್ಳುವುದಲ್ಲ, ಆದರೆ ಅನಗತ್ಯ ನೋವು ಮತ್ತು ತೊಡಕಿನ ಕಾಪಿ-ಪೇಸ್ಟ್ ಇಲ್ಲದೆ ಸಾಮಾನ್ಯ ಸನ್ನಿವೇಶವನ್ನು ಬಳಸುವುದು.
ಗಮನಿಸಿ: ಮೂಲದಲ್ಲಿ ಈ ಹಂತದಲ್ಲಿ "ಹ್ಯಾಪಿ ಕ್ಲಸ್ಟರಿಂಗ್!" ಎಂಬ ನುಡಿಗಟ್ಟು ಇತ್ತು, ಮತ್ತು ನಾನು ಅನುವಾದಿಸುವ ಯಾಂಡೆಕ್ಸ್ (ನಾನೇ ನಿಘಂಟುಗಳ ಮೂಲಕ ಹೋಗಬೇಕಾಗಿಲ್ಲ), ನನಗೆ "ಹ್ಯಾಪಿ ಕ್ಲಸ್ಟರಿಂಗ್!" ಆಯ್ಕೆಯನ್ನು ನೀಡಿತು. ವಿಶೇಷವಾಗಿ ಪ್ರಸ್ತುತ ಭೌಗೋಳಿಕ ರಾಜಕೀಯ ಪರಿಸ್ಥಿತಿಯ ಬೆಳಕಿನಲ್ಲಿ ಉತ್ತಮ ಅನುವಾದವನ್ನು ಕಲ್ಪಿಸುವುದು ಬಹುಶಃ ಅಸಾಧ್ಯ.
ಮೂಲ: www.habr.com