ວິທີການ ກຳ ຫນົດຄ່າແລະຮັກສາຄວາມພ້ອມ/ການຈັດກຸ່ມໃຫ້ສູງໃນ Linux


ມີຄວາມພ້ອມສູງ (HA) ພຽງແຕ່ ໝາຍ ເຖິງຄຸນນະພາບຂອງລະບົບທີ່ຈະ ດຳ ເນີນງານຢ່າງຕໍ່ເນື່ອງໂດຍບໍ່ມີຄວາມລົ້ມເຫຼວເປັນເວລາດົນ. ວິທີແກ້ໄຂ HA ສາມາດຖືກປະຕິບັດໂດຍໃຊ້ຮາດແວແລະ/ຫຼືຊອບແວແລະ ໜຶ່ງ ໃນວິທີແກ້ໄຂທົ່ວໄປໃນການຈັດຕັ້ງປະຕິບັດ HA ແມ່ນການແບ່ງກຸ່ມ.

ໃນການຄິດໄລ່ຄອມພິວເຕີ້, ກຸ່ມ ໜຶ່ງ ແມ່ນປະກອບດ້ວຍຄອມພິວເຕີ້ສອງ ໜ່ວຍ ຫຼືຫຼາຍກວ່ານັ້ນ (ເຊິ່ງເອີ້ນກັນທົ່ວໄປວ່າຂໍ້ຫຼືສະມາຊິກ) ເຊິ່ງເຮັດວຽກຮ່ວມກັນເພື່ອປະຕິບັດວຽກງານໃດ ໜຶ່ງ. ໃນການຈັດການດັ່ງກ່າວ, ມີພຽງຂໍ້ຂໍ້ ໜຶ່ງ ເທົ່ານັ້ນທີ່ໃຫ້ການບໍລິການດ້ວຍ node ຂັ້ນສອງທີ່ຮັບ ໜ້າ ທີ່ຖ້າລົ້ມເຫລວ.

ກຸ່ມຕົກເປັນ 4 ປະເພດໃຫຍ່:

  • ບ່ອນເກັບຂໍ້ມູນ: ໃຫ້ຮູບພາບຂອງລະບົບແຟ້ມທີ່ສອດຄ່ອງກັນທົ່ວເຊີຟເວີໃນກຸ່ມ, ຊ່ວຍໃຫ້ເຄື່ອງແມ່ຂ່າຍອ່ານແລະຂຽນໃສ່ລະບົບແຟ້ມເອກະສານດຽວ.
  • ມີຄວາມພ້ອມສູງ: ລົບລ້າງຈຸດລົ້ມເຫຼວຂອງຈຸດດຽວແລະໂດຍການບໍລິການທີ່ລົ້ມເຫຼວຈາກຂໍ້ມູນກຸ່ມ ໜຶ່ງ ໄປຫາອີກຈຸດ ໜຶ່ງ ໃນກໍລະນີທີ່ຂໍ້ຕໍ່ຈະບໍ່ມີປະໂຫຍດ.
  • ການດຸ່ນດ່ຽງການໂຫຼດ: ສົ່ງການຮ້ອງຂໍການບໍລິການເຄືອຂ່າຍໄປຫາຫລາຍກຸ່ມຂໍ້ມູນເພື່ອໃຫ້ມີຄວາມສົມດຸນກັບການໂຫຼດການຮ້ອງຂໍໃນບັນດາຂໍ້ມູນກຸ່ມ.
  • ປະສິດທິພາບສູງ: ດຳ ເນີນການປະມວນຜົນແບບຂະ ໜານ ຫຼືພ້ອມກັນ, ສະນັ້ນຊ່ວຍໃນການປັບປຸງການປະຕິບັດວຽກງານຕ່າງໆ.

ອີກວິທີ ໜຶ່ງ ທີ່ໃຊ້ກັນຢ່າງກວ້າງຂວາງໃນການສະ ໜອງ HA ແມ່ນການເຮັດແບບ ຈຳ ລອງ (ໂດຍສະເພາະການ ຈຳ ລອງຂໍ້ມູນ). ການ ຈຳ ລອງແບບ ໃໝ່ ແມ່ນຂະບວນການທີ່ຖານຂໍ້ມູນ ໜຶ່ງ ຫຼືຫຼາຍຈຸດ (ຂັ້ນສອງ) ສາມາດເກັບຮັກສາໄວ້ເປັນເອກະພາບກັບຖານຂໍ້ມູນຫລັກ (ຫລືຕົ້ນສະບັບ).

ເພື່ອຕັ້ງກຸ່ມ, ພວກເຮົາຕ້ອງການຢ່າງ ໜ້ອຍ ສອງເຊີບເວີ. ສຳ ລັບຈຸດປະສົງຂອງ ຄຳ ແນະ ນຳ ນີ້, ພວກເຮົາຈະ ນຳ ໃຊ້ Linux server ສອງຢ່າງ:

  • Node1: 192.168.10.10
  • Node2: 192.168.10.11

ໃນບົດຂຽນນີ້, ພວກເຮົາຈະສະແດງໃຫ້ເຫັນພື້ນຖານຂອງວິທີການ ນຳ ໃຊ້, ການ ກຳ ຫນົດຄ່າແລະການຮັກສາຄວາມພ້ອມສູງ/ການແບ່ງກຸ່ມໃນ Ubuntu 16.04/18.04 ແລະ CentOS 7. ພວກເຮົາຈະສະແດງວິທີການເພີ່ມການບໍລິການ Nginx HTTP ເຂົ້າໃນກຸ່ມ.

ການຕັ້ງຄ່າ DNS Local ໃນແຕ່ລະ Server

ເພື່ອໃຫ້ທັງສອງເຊີບເວີສາມາດສື່ສານກັນແລະກັນ, ພວກເຮົາຕ້ອງ ກຳ ນົດການຕັ້ງຄ່າ DNS ທີ່ ເໝາະ ສົມໃນທ້ອງຖິ່ນໃນເອກະສານ/etc/hosts ໃນທັງສອງ server.

ເປີດແລະແກ້ໄຂເອກະສານໂດຍໃຊ້ບັນນາທິການບັນທັດສັ່ງທີ່ທ່ານມັກ.

$ sudo vim /etc/hosts  

ເພີ່ມລາຍການຕໍ່ໄປນີ້ກັບທີ່ຢູ່ IP ຂອງເຄື່ອງແມ່ຂ່າຍຂອງທ່ານ.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

ບັນທຶກການປ່ຽນແປງແລະປິດເອກະສານ.

ການຕິດຕັ້ງ Nginx Web Server

ຕອນນີ້ຕິດຕັ້ງ Nginx web server ໂດຍໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້.

$ sudo apt install nginx  [On Ubuntu]
$ sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

ເມື່ອການຕິດຕັ້ງ ສຳ ເລັດແລ້ວ, ເລີ່ມຕົ້ນໃຫ້ບໍລິການ Nginx ສຳ ລັບດຽວນີ້ແລະໃຫ້ມັນເລີ່ມຕົ້ນໂດຍອັດຕະໂນມັດໃນເວລາບູດ, ຫຼັງຈາກນັ້ນກວດເບິ່ງວ່າມັນ ກຳ ລັງລຸກຂຶ້ນແລະເຮັດວຽກໂດຍໃຊ້ ຄຳ ສັ່ງ systemctl ຫຼືບໍ່.
ໃນ Ubuntu, ການບໍລິການຄວນຈະເລີ່ມຕົ້ນໂດຍອັດຕະໂນມັດທັນທີຫຼັງຈາກການຕັ້ງຄ່າເບື້ອງຕົ້ນຂອງການຕັ້ງຄ່າ ສຳ ເລັດແລ້ວ, ທ່ານພຽງແຕ່ສາມາດເປີດໃຊ້ງານໄດ້.

$ sudo systemctl enable nginx
$ sudo systemctl start nginx
$ sudo systemctl status nginx

ຫຼັງຈາກເລີ່ມຕົ້ນການບໍລິການ Nginx, ພວກເຮົາ ຈຳ ເປັນຕ້ອງສ້າງ ໜ້າ ເວບທີ່ ກຳ ນົດເອງ ສຳ ລັບການ ກຳ ນົດແລະທົດສອບການ ດຳ ເນີນງານໃນທັງສອງເຊີບເວີ. ພວກເຮົາຈະດັດແປງເນື້ອໃນຂອງ ໜ້າ ດັດສະນີ Nginx ໃນຕອນຕົ້ນດັ່ງທີ່ສະແດງ.

$ echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
$ echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

ການຕິດຕັ້ງແລະການຕັ້ງຄ່າ Corosync ແລະ Pacemaker

ຕໍ່ໄປ, ພວກເຮົາຕ້ອງຕິດຕັ້ງ Pacemaker, Corosync, ແລະ Pcs ໃສ່ແຕ່ລະ node ດັ່ງຕໍ່ໄປນີ້.

$ sudo apt install corosync pacemaker pcs	#Ubuntu 
$ sudo yum install corosync pacemaker pcs	#CentOS 

ເມື່ອການຕິດຕັ້ງ ສຳ ເລັດແລ້ວ, ໃຫ້ແນ່ໃຈວ່າ da dej pcs ກຳ ລັງເຮັດວຽກຢູ່ທັງສອງ server.

$ sudo systemctl enable pcsd
$ sudo systemctl start pcsd
$ sudo systemctl status pcsd

ໃນລະຫວ່າງການຕິດຕັ້ງ, ຜູ້ໃຊ້ລະບົບທີ່ມີຊື່ວ່າ“ hacluster” ແມ່ນຖືກສ້າງຂື້ນ. ດັ່ງນັ້ນພວກເຮົາ ຈຳ ເປັນຕ້ອງຕັ້ງຄ່າການກວດສອບທີ່ ຈຳ ເປັນ ສຳ ລັບ pcs. ເລີ່ມຕົ້ນໂດຍການສ້າງລະຫັດລັບ ໃໝ່ ສຳ ລັບຜູ້ໃຊ້“ hacluster”, ພວກເຮົາຕ້ອງການໃຊ້ລະຫັດລັບດຽວກັນໃນທຸກເຊີບເວີ:

$ sudo passwd hacluster

ຕໍ່ໄປ, ໃນ ໜຶ່ງ ຂອງເຊີບເວີ (Node1), ດຳ ເນີນການ ຄຳ ສັ່ງຕໍ່ໄປນີ້ເພື່ອຕັ້ງຄ່າການກວດສອບທີ່ ຈຳ ເປັນ ສຳ ລັບ pcs.

$ sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

ຕອນນີ້ສ້າງ cluster ແລະປະກອບມັນດ້ວຍບາງຂໍ້ (ຊື່ກຸ່ມບໍ່ສາມາດເກີນ 15 ຕົວອັກສອນ, ໃນຕົວຢ່າງນີ້, ພວກເຮົາໄດ້ໃຊ້ຕົວຢ່າງຕົວຢ່າງ) ໃນ server Node1.

$ sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

ຕອນນີ້ເປີດ ນຳ ໃຊ້ cluster ເມື່ອເລີ່ມຕົ້ນແລະເລີ່ມການບໍລິການ.

$ sudo pcs cluster enable --all
$ sudo pcs cluster start --all

ຕອນນີ້ກວດເບິ່ງວ່າການບໍລິການຂອງກຸ່ມແມ່ນຂຶ້ນແລະເຮັດວຽກໂດຍໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້.

$ sudo pcs status
OR
$ sudo crm_mon -1

ຈາກຜົນໄດ້ຮັບຂອງ ຄຳ ສັ່ງຂ້າງເທິງ, ທ່ານສາມາດເຫັນໄດ້ວ່າມີ ຄຳ ເຕືອນກ່ຽວກັບບໍ່ມີອຸປະກອນ STONITH ເທື່ອ, ແຕ່ວ່າ STONITH ຍັງຖືກເປີດໃຊ້ຢູ່ໃນກຸ່ມ. ນອກຈາກນັ້ນ, ບໍ່ມີການ ກຳ ນົດຊັບພະຍາກອນແລະການບໍລິການກຸ່ມບ້ານ.

ຕົວເລືອກ ທຳ ອິດແມ່ນປິດໃຊ້ STONITH (ຫຼື Shoot The Other Node In The Head), ການປະຕິບັດການເຮັດຮົ້ວເທິງ Pacemaker.

ສ່ວນປະກອບນີ້ຊ່ວຍໃນການປົກປ້ອງຂໍ້ມູນຂອງທ່ານຈາກການສໍ້ລາດບັງຫຼວງໂດຍການເຂົ້າເຖິງພ້ອມໆກັນ. ສຳ ລັບຈຸດປະສົງຂອງ ຄຳ ແນະ ນຳ ນີ້, ພວກເຮົາຈະປິດໃຊ້ມັນຕັ້ງແຕ່ພວກເຮົາບໍ່ໄດ້ຕັ້ງຄ່າອຸປະກອນໃດໆ.

ເພື່ອປິດ STONITH, ດຳ ເນີນການ ຄຳ ສັ່ງຕໍ່ໄປນີ້:

$ sudo pcs property set stonith-enabled=false

ຕໍ່ໄປ, ຍັງບໍ່ສົນໃຈນະໂຍບາຍ Quorum ໂດຍການ ດຳ ເນີນການ ຄຳ ສັ່ງຕໍ່ໄປນີ້:

$ sudo pcs property set no-quorum-policy=ignore

ຫຼັງຈາກຕັ້ງຄ່າຕົວເລືອກຂ້າງເທິງ, ດຳ ເນີນການ ຄຳ ສັ່ງຕໍ່ໄປນີ້ເພື່ອເບິ່ງລາຍຊື່ຊັບສິນແລະຮັບປະກັນວ່າທາງເລືອກຂ້າງເທິງ, stonith ແລະນະໂຍບາຍຂອງກຸ່ມໂຄດຖືກປິດໃຊ້ງານ.

$ sudo pcs property list

ໃນພາກນີ້, ພວກເຮົາຈະເບິ່ງວິທີການເພີ່ມຊັບພະຍາກອນກຸ່ມ. ພວກເຮົາຈະ ກຳ ຫນົດຄ່າ IP ທີ່ລອຍຕົວເຊິ່ງແມ່ນທີ່ຢູ່ IP ທີ່ສາມາດຍ້າຍຈາກເຄື່ອງແມ່ຂ່າຍໄປຫາເຄື່ອງອື່ນໃນເຄືອຂ່າຍດຽວກັນຫຼືສູນຂໍ້ມູນດຽວກັນ. ເວົ້າສັ້ນໆ, IP ລອຍຕົວແມ່ນ ຄຳ ສັບທີ່ໃຊ້ທົ່ວໄປທາງວິຊາການ, ໃຊ້ ສຳ ລັບ IP ທີ່ບໍ່ຖືກຜູກມັດຢ່າງ ແໜ້ນ ແຟ້ນກັບ ໜຶ່ງ ເສັ້ນທາງດຽວ

ໃນກໍລະນີນີ້, ມັນຈະຖືກ ນຳ ໃຊ້ເພື່ອສະ ໜັບ ສະ ໜູນ ການລົ້ມເຫຼວໃນກຸ່ມທີ່ມີຄວາມສາມາດສູງ. ຈົ່ງຈື່ໄວ້ວ່າ IP ທີ່ເລື່ອນໄດ້ບໍ່ແມ່ນພຽງແຕ່ ສຳ ລັບສະຖານະການທີ່ລົ້ມເຫຼວເທົ່ານັ້ນ, ພວກມັນມີກໍລະນີການ ນຳ ໃຊ້ອີກສອງສາມຢ່າງ. ພວກເຮົາ ຈຳ ເປັນຕ້ອງ ກຳ ຫນົດກຸ່ມເປັນວິທີທີ່ພຽງແຕ່ສະມາຊິກກຸ່ມທີ່ເປັນເຈົ້າຂອງກຸ່ມ "ເປັນເຈົ້າຂອງ" ຫຼືຕອບສະ ໜອງ ກັບ IP ທີ່ລອຍຕົວໃນເວລາໃດ ໜຶ່ງ.

ພວກເຮົາຈະເພີ່ມສອງແຫລ່ງຂໍ້ມູນກຸ່ມ: ຊັບພະຍາກອນທີ່ຢູ່ IP ທີ່ເອີ້ນວ່າ "floating_ip" ແລະຊັບພະຍາກອນ ສຳ ລັບເຄື່ອງແມ່ຂ່າຍເວັບໄຊຕ໌ Nginx ທີ່ເອີ້ນວ່າ "http_server".

ທຳ ອິດເລີ່ມຕົ້ນໂດຍການຕື່ມ floating_ip ດັ່ງຕໍ່ໄປນີ້. ໃນຕົວຢ່າງນີ້, ທີ່ຢູ່ IP ທີ່ເລື່ອນຂອງພວກເຮົາແມ່ນ 192.168.10.20.

$ sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

ບ່ອນທີ່:

  • floating_ip: ແມ່ນຊື່ຂອງບໍລິການ.
  • "ocf: heartbeat: IPaddr2": ບອກ Pacemaker ວ່າຈະໃຊ້ຕົວອັກສອນໃດ, IPaddr2 ໃນກໍລະນີນີ້, ເຊິ່ງຊື່ວ່າມັນຢູ່ໃນ (ເຄື່ອງເລັ່ງ) ແລະມາດຕະຖານໃດທີ່ມັນສອດຄ່ອງກັບ ocf.
  • "op monitor interval = 60s": ແນະ ນຳ ໃຫ້ Pacemaker ກວດເບິ່ງສຸຂະພາບຂອງບໍລິການນີ້ທຸກໆນາທີໂດຍການໂທຫາການກະ ທຳ ຂອງຜູ້ຕິດຕາມຕົວແທນ.

ຫຼັງຈາກນັ້ນຕື່ມຊັບພະຍາກອນທີສອງ, ຊື່ວ່າ http_server. ທີ່ນີ້, ຕົວແທນຊັບພະຍາກອນຂອງການບໍລິການແມ່ນ ocf: ຫົວໃຈເຕັ້ນ: nginx.

$ sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

ເມື່ອທ່ານໄດ້ເພີ່ມການບໍລິການກຸ່ມ, ໃຫ້ອອກ ຄຳ ສັ່ງຕໍ່ໄປນີ້ເພື່ອກວດກາເບິ່ງສະຖານະພາບຂອງຊັບພະຍາກອນ.

$ sudo pcs status resources

ຊອກຫາຢູ່ໃນຜົນຜະລິດຂອງ ຄຳ ສັ່ງ, ສອງຊັບພະຍາກອນເພີ່ມເຕີມ: "floating_ip" ແລະ "http_server" ໄດ້ຖືກລະບຸ. ບໍລິການ floating_ip ຖືກປິດແລ້ວເນື່ອງຈາກ node ຕົ້ນຕໍ ກຳ ລັງ ດຳ ເນີນງານ.

ຖ້າທ່ານໄດ້ເປີດໃຊ້ Firewall ໃນລະບົບຂອງທ່ານ, ທ່ານຕ້ອງການໃຫ້ການຈະລາຈອນທັງ ໝົດ ຂອງ Nginx ແລະການບໍລິການທີ່ມີຢູ່ສູງຜ່ານ firewall ສຳ ລັບການສື່ສານທີ່ ເໝາະ ສົມລະຫວ່າງຂໍ້:

-------------- CentOS 7 -------------- 
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=high-availability		
$ sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
$ sudo ufw allow http	
$ sudo ufw allow high-availability						
$ sudo ufw reload 

ຂັ້ນຕອນສຸດທ້າຍແລະ ສຳ ຄັນແມ່ນການທົດສອບວ່າການຕັ້ງຄ່າຄວາມພ້ອມສູງຂອງພວກເຮົາເຮັດວຽກໄດ້. ເປີດໂປຣແກຣມທ່ອງເວັບແລະ ນຳ ທາງໄປຫາທີ່ຢູ່ 192.168.10.20 ທ່ານຄວນເຫັນ ໜ້າ Nginx ເລີ່ມຕົ້ນຈາກ node2.example.com ດັ່ງທີ່ສະແດງຢູ່ໃນພາບ ໜ້າ ຈໍ.

ເພື່ອ ຈຳ ລອງຄວາມລົ້ມເຫລວ, ດຳ ເນີນການ ຄຳ ສັ່ງຕໍ່ໄປນີ້ເພື່ອຢຸດ cluster ໃນ node2.example.com.

$ sudo pcs cluster stop http_server

ຫຼັງຈາກນັ້ນໂຫຼດ ໜ້າ ນີ້ ໃໝ່ ທີ່ 192.168.10.20, ຕອນນີ້ທ່ານຄວນເຂົ້າເບິ່ງ ໜ້າ ເວັບ Nginx ເລີ່ມຕົ້ນຈາກ node1.example.com.

ອີກທາງເລືອກ ໜຶ່ງ, ທ່ານສາມາດ ຈຳ ລອງຂໍ້ຜິດພາດໂດຍການບອກໃຫ້ບໍລິການຢຸດໂດຍກົງ, ໂດຍບໍ່ຕ້ອງຢຸດກຸ່ມຢູ່ໃນຂໍ້ໃດ, ໂດຍໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້ໃນຂໍ້ ໜຶ່ງ:

 
$ sudo crm_resource --resource http_server --force-stop 

ຫຼັງຈາກນັ້ນທ່ານ ຈຳ ເປັນຕ້ອງ ດຳ ເນີນການ crm_mon ໃນຮູບແບບແບບໂຕ້ຕອບ (ຄ່າເລີ່ມຕົ້ນ), ພາຍໃນໄລຍະເວລາຕິດຕາມຂອງ 2 ນາທີ, ທ່ານຄວນຈະສາມາດເຫັນການແຈ້ງເຕືອນກຸ່ມວ່າ http_server ລົ້ມເຫລວແລະຍ້າຍມັນໄປທີ່ node ອື່ນ.

ເພື່ອໃຫ້ການບໍລິການກຸ່ມບ້ານຂອງທ່ານ ດຳ ເນີນການຢ່າງມີປະສິດທິພາບ, ທ່ານອາດຈະຕ້ອງ ກຳ ນົດຂໍ້ ຈຳ ກັດບາງຢ່າງ. ທ່ານສາມາດເບິ່ງ ໜ້າ pcs man (man pcs) ສຳ ລັບລາຍຊື່ ຄຳ ສັ່ງການ ນຳ ໃຊ້ທັງ ໝົດ.

ສຳ ລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບ Corosync ແລະ Pacemaker, ເຂົ້າເບິ່ງທີ່: https://clusterlabs.org/

ໃນຄູ່ມືນີ້, ພວກເຮົາໄດ້ສະແດງໃຫ້ເຫັນພື້ນຖານກ່ຽວກັບວິທີການ ນຳ ໃຊ້, ການ ກຳ ນົດແລະຮັກສາຄວາມພ້ອມສູງ/ການແບ່ງກຸ່ມ/ການ ຈຳ ລອງແບບ ໃໝ່ ໃນ Ubuntu 16.04/18.04 ແລະ CentOS 7. ພວກເຮົາໄດ້ສະແດງວິທີການເພີ່ມການບໍລິການ Nginx HTTP ເຂົ້າໃນກຸ່ມ. ຖ້າທ່ານມີຄວາມຄິດທີ່ຈະແບ່ງປັນຫຼືມີ ຄຳ ຖາມ, ໃຫ້ໃຊ້ແບບຟອມ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້.