Sunday, January 19, 2025

[KVM] Thiết lập High Availability cho KVM

-

Nếu bạn đã theo dõi loạt bài viết về KVM, bạn có thể đã đọc bài viết nói về “[KVM] Hướng dẫn LiveMigration trên KVM“. KVM hỗ trợ migrage tương tự như VMware vMotion nhưng để cung cấp tính khả dụng cao, bạn cần thiết lập cluster giống VMware HA. Trong bài viết này, chúng ta sẽ cấu hình KVM làm tài nguyên cụm với hỗ trợ live migrage. Cluster sẽ tự thực hiện migrage và nếu xảy ra lỗi trên máy chủ KVM sang một máy chủ mới với thời gian downtime tối thiểu nhất.

1. Cài đặt Pacemaker, Corosync và Pcsd  (áp dụng cho cả 3 server kvm-node01, kvm-node02 và kvm-node03)

PacemakerCorosync và Pcsd có sẵn trong kho lưu trữ hệ thống mặc định. Vì vậy, tất cả chúng có thể được cài đặt từ kho lưu trữ Ubuntu bằng lệnh apt như sau.

sudo apt install corosync pacemaker pcs -y

Sau khi quá trình cài đặt hoàn tất, hãy cho phép tất cả các dịch vụ tự động khởi chạy khi khởi động hệ thống bằng các lệnh systemctl bên dưới.

sudo systemctl enable pcsd
sudo systemctl enable corosync
sudo systemctl enable pacemaker

Hãy khởi động dịch vụ pcsd Pacemaker trên tất cả các server.

sudo systemctl start pcsd

Tiếp theo, tạo một mật khẩu mới cho người dùng ‘hacluster’ và sử dụng cùng một mật khẩu cho tất cả các server. Người dùng này đã được tạo tự động trong quá trình cài đặt phần mềm.

echo 'hacluster:Hoanghd164' | chpasswd

2. Tạo và cấu hình 1 cluster mới (chỉ chạy trên kvm-node1).

Để tạo cluster, chúng ta cần cấp quyền cho tất cả các server bằng lệnh pcs và người dùng hacluster. Cấp quyền cho tất cả các server bằng lệnh pcs, hãy sử dụng username và password của hacluster để xác nhận.

$ sudo pcs cluster auth
Warning: Unable to read the known-hosts file: No such file or directory: '/var/lib/pcsd/known-hosts'
node1: Not authorized
Nodes to authorize: node1
Username: hacluster
Password:
node1: Authorized

Cấp quyền cho tất cả các server bằng lệnh pcs, username và password của hacluster để xác nhận.

$ pcs host auth kvm-node01.hoanghd.com kvm-node02.hoanghd.com kvm-node03.hoanghd.com
Username: hacluster
Password:
kvm-node01.hoanghd.com: Authorized
kvm-node02.hoanghd.com: Authorized
kvm-node03.hoanghd.com: Authorized

Bây giờ là lúc thiết lập cluster. Xác định tên cluster và tất cả các server sẽ là một phần của cluster.

$ pcs cluster setup ha_cluster kvm-node01.hoanghd.com kvm-node02.hoanghd.com kvm-node03.hoanghd.com --force
No addresses specified for host 'kvm-node01.hoanghd.com', using 'kvm-node01.hoanghd.com'
No addresses specified for host 'kvm-node02.hoanghd.com', using 'kvm-node02.hoanghd.com'
No addresses specified for host 'kvm-node03.hoanghd.com', using 'kvm-node03.hoanghd.com'
Warning: kvm-node03.hoanghd.com: Running cluster services: 'corosync', 'pacemaker', the host seems to be in a cluster already
Warning: kvm-node03.hoanghd.com: Cluster configuration files found, the host seems to be in a cluster already
Warning: kvm-node02.hoanghd.com: Running cluster services: 'corosync', 'pacemaker', the host seems to be in a cluster already
Warning: kvm-node02.hoanghd.com: Cluster configuration files found, the host seems to be in a cluster already
Warning: kvm-node01.hoanghd.com: Running cluster services: 'corosync', 'pacemaker', the host seems to be in a cluster already
Warning: kvm-node01.hoanghd.com: Cluster configuration files found, the host seems to be in a cluster already
Destroying cluster on hosts: 'kvm-node01.hoanghd.com', 'kvm-node02.hoanghd.com', 'kvm-node03.hoanghd.com'...
kvm-node03.hoanghd.com: Successfully destroyed cluster
kvm-node02.hoanghd.com: Successfully destroyed cluster
kvm-node01.hoanghd.com: Successfully destroyed cluster
Requesting remove 'pcsd settings' from 'kvm-node01.hoanghd.com', 'kvm-node02.hoanghd.com', 'kvm-node03.hoanghd.com'
kvm-node02.hoanghd.com: successful removal of the file 'pcsd settings'
kvm-node03.hoanghd.com: successful removal of the file 'pcsd settings'
kvm-node01.hoanghd.com: successful removal of the file 'pcsd settings'
Sending 'corosync authkey', 'pacemaker authkey' to 'kvm-node01.hoanghd.com', 'kvm-node02.hoanghd.com', 'kvm-node03.hoanghd.com'
kvm-node03.hoanghd.com: successful distribution of the file 'corosync authkey'
kvm-node03.hoanghd.com: successful distribution of the file 'pacemaker authkey'
kvm-node02.hoanghd.com: successful distribution of the file 'corosync authkey'
kvm-node02.hoanghd.com: successful distribution of the file 'pacemaker authkey'
kvm-node01.hoanghd.com: successful distribution of the file 'corosync authkey'
kvm-node01.hoanghd.com: successful distribution of the file 'pacemaker authkey'
Sending 'corosync.conf' to 'kvm-node01.hoanghd.com', 'kvm-node02.hoanghd.com', 'kvm-node03.hoanghd.com'
kvm-node03.hoanghd.com: successful distribution of the file 'corosync.conf'
kvm-node02.hoanghd.com: successful distribution of the file 'corosync.conf'
kvm-node01.hoanghd.com: successful distribution of the file 'corosync.conf'
Cluster has been successfully set up.

Tiếp theo hãy khởi động tất cả các dịch vụ cluster.

$ pcs cluster start --all
kvm-node01.hoanghd.com: Starting Cluster...
kvm-node02.hoanghd.com: Starting Cluster...
kvm-node03.hoanghd.com: Starting Cluster...

Và kích hoạt chúng.

$ pcs cluster enable --all
kvm-node01.hoanghd.com: Cluster Enabled
kvm-node02.hoanghd.com: Cluster Enabled
kvm-node03.hoanghd.com: Cluster Enabled

Kiểm tra trạng thái cluster bằng lệnh pcs status cluster.

$ pcs status cluster
Cluster Status:
 Cluster Summary:
   * Stack: corosync
   * Current DC: kvm-node03.hoanghd.com (version 2.0.3-4b1f869f0f) - partition with quorum
   * Last updated: Tue Dec  6 14:40:23 2022
   * Last change:  Mon Dec  5 09:49:48 2022 by root via cibadmin on kvm-node01.hoanghd.com
   * 3 nodes configured
   * 0 resource instances configured
 Node List:
   * Online: [ kvm-node01.hoanghd.com kvm-node02.hoanghd.com kvm-node03.hoanghd.com ]

PCSD Status:
  kvm-node01.hoanghd.com: Online
  kvm-node02.hoanghd.com: Online
  kvm-node03.hoanghd.com: Online

Hoặc sử dụng lệnh pcs status corosync

$ pcs status corosync

Membership information
----------------------
    Nodeid      Votes Name
         1          1 kvm-node01.hoanghd.com (local)
         2          1 kvm-node02.hoanghd.com
         3          1 kvm-node03.hoanghd.com

3. Vô hiệu hóa STONITH và bỏ qua Quorum Policy (chỉ chạy trên kvm-node01).

Vì mình không sử dụng fencing device nên mình sẽ vô hiệu hóa STONITH. Nếu bạn sử dụng server để cung cấp dịch vụ thì tốt hơn hết là bạn hãy bật STONITH, để vô hiệu hóa STONITH, sử dụng lệnh sau.

sudo pcs property set stonith-enabled=false

Tiếp theo, hãy bỏ qua quorum-policy bằng lệnh dưới.

sudo pcs property set no-quorum-policy=ignore

Kiểm tra lại đảm bảo rằng stonith và quorum-policy đã bị vô hiệu hóa.

$ pcs property list
Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: ha_cluster
 dc-version: 2.0.3-4b1f869f0f
 have-watchdog: false
 no-quorum-policy: ignore
 stonith-enabled: false

4. Tạo resource cho virtual machine (chỉ chạy trên kvm-node1).

Ở bài trước mình đã có 1 máy ảo tên vps-test, bạn có thể xem lại bài “[KVM] Hướng dẫn LiveMigration trên KVM” để rõ hơn.

root@kvm-node01:~# virsh list --all
 Id   Name       State
--------------------------
 7    vps-test   running

Đầu tiên hãy tiến hành undefine máy ảo vps-test.

root@kvm-node01:~# virsh undefine vps-test
Domain vps-test has been undefined

Hãy chắc chắn rằng vps-test đã được undefine.

 root@kvm-node01:~# virsh list --all
 Id   Name   State
--------------------

Để thực hiện được phần này bạn sẽ phải sử dụng file cấu hình của máy ảo, cụ thể mình sẽ lấy máy ảo tên vps-test của bài trước để demo. File cấu hình của máy ảo được lưu tại thư mục mặc định là  /etc/libvirt/qemu/, bạn hãy xem cây thư mục của mình ở dưới để có thể có cái nhìn rõ hơn. File chúng ta cần hiện tại có tên vps-test.xml.

$ tree /etc/libvirt/qemu/
/etc/libvirt/qemu/
├── networks
│   ├── autostart
│   │   ├── bridged-network.xml -> /etc/libvirt/qemu/networks/bridged-network.xml
│   ├── bridged-network.xml
└── vps-test.xml

Copy file vps-test.xml chứa thông tin của máy ảo vps-test vào thư mục share /kvm-volumes-hdd/vps-test/, đây chính là thư mục mình share lưu thông tin cấu hình của máy ảo vps-test. Mục đích là để cho các KVM Node thấy được các file cấu hình này.

cp /etc/libvirt/qemu/vps-test.xml /kvm-volumes-hdd/vps-test/

Sau khi copy xong file, chúng ta hãy xem lại cây thư mục /kvm-volumes-hdd/vps-test/. File vps-test.xml đã được copy từ /etc/libvirt/qemu/vps-test.xml sang /kvm-volumes-hdd/vps-test/ thành công.

$ tree /kvm-volumes-hdd/vps-test/
/kvm-volumes-hdd/vps-test/
├── cloud_init.cfg
├── network_config_static.cfg
├── os-vps-test.qcow2
├── ssh-keygen
│   ├── id_rsa
│   └── id_rsa.pub
├── vps-test-seed.qcow2
└── vps-test.xml

1 directory, 7 files

Bước 2: Tiến hành tạo resource để cluster quản lý.

$ pcs resource create template-ubuntu18.04 VirtualDomain \
hypervisor="qemu:///system" \
config="/kvm-volumes-hdd/vps-test/vps-test.xml" \
migration_transport=ssh \
op start timeout="120s" \
op stop timeout="120s" \
op monitor  timeout="30" interval="10"  \
meta allow-migrate="true" priority="100" \
op migrate_from interval="0" timeout="120s" \
op migrate_to interval="0" timeout="120" \
--group Linux-Ubuntu18.04

Assumed agent name 'ocf:heartbeat:VirtualDomain' (deduced from 'VirtualDomain')

Bước 3. Kiểm tra kết quả.

Sử dụng câu lệnh pcs status để kiểm tra kết quả, bạn để ý phần Full List of Resources, bạn thấy có 1 Resource Group tên là Linux-Ubuntu18.04template-ubuntu18.04 (ocf::heartbeat:VirtualDomain): Started kvm-node01.hoanghd.com tức là template-ubuntu18.04 đang được running trên kvm-node01.hoanghd.com.

$ pcs status
Cluster name: ha_cluster
Cluster Summary:
  * Stack: corosync
  * Current DC: kvm-node03.hoanghd.com (version 2.0.3-4b1f869f0f) - partition with quorum
  * Last updated: Tue Dec  6 15:25:21 2022
  * Last change:  Tue Dec  6 15:25:00 2022 by root via crm_resource on kvm-node01.hoanghd.com
  * 3 nodes configured
  * 1 resource instance configured

Node List:
  * Online: [ kvm-node01.hoanghd.com kvm-node02.hoanghd.com kvm-node03.hoanghd.com ]

Full List of Resources:
  * Resource Group: Linux-Ubuntu18.04:
    * template-ubuntu18.04	(ocf::heartbeat:VirtualDomain):	 Started kvm-node01.hoanghd.com

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

Bạn cũng có thể sử dụng lệnh pcs resource status để kiểm tra.

$ pcs resource status
  * Resource Group: Linux-Ubuntu18.04:
    * template-ubuntu18.04	(ocf::heartbeat:VirtualDomain):	 Started kvm-node01.hoanghd.com

Máy ảo vps-test phải được tạo và khởi động tự động. Kiểm tra máy ảo đang chạy bằng lệnh virsh list –all trên kvm-node01 bạn cũng sẽ thấy vps-test đã được tạo và khởi động ở trạng thái running.

root@kvm-node01:~# virsh list --all
 Id   Name       State
--------------------------
 7    vps-test   running
root@kvm-node01:~# pcs resource move Linux-Ubuntu18.04 kvm-node03.hoanghd.com

Có thể khi mới move resource qua kvm node mới, khi bạn sử dụng lệnh pcs resource status có thể thông báo “FAILED” như dưới.

root@kvm-node03:~# pcs resource status
  * Resource Group: Linux-Ubuntu18.04:
    * template-ubuntu18.04	(ocf::heartbeat:VirtualDomain):	 FAILED kvm-node03.hoanghd.com

Hãy cứ chạy câu lệnh sau cho đến khi không còn thông báo, ý nghĩa câu lệnh này là làm mới lại trạng thái resource.

pcs resource cleanup

Và đây là kết quả khi move qua kvm node khác thành công.

root@kvm-node03:~# pcs resource status
  * Resource Group: Linux-Ubuntu18.04:
    * template-ubuntu18.04	(ocf::heartbeat:VirtualDomain):	 Started kvm-node03.hoanghd.com

Kết quả khi virsh list –all trên kvm-node03.

root@kvm-node03:~# virsh list --all
 Id   Name       State
--------------------------
 9    vps-test   running

4. Thực hiện shutdown 1 kvm node.

Hiện tại vps-test đang ở trên kvm-node03, bây giờ mình tiến hành shutdown kvm-node03 để kiểm tra xem máy ảo có tự migrage sang node khác hay không.

root@kvm-node03:~# shutdown
Connection to 192.168.13.229 closed by remote host.
Connection to 192.168.13.229 closed.

GIờ mình sang kvm-node01 kiểm tra pcs resource status cho thấy cluster đã phát hiện kvm-node03 đã mất kết nối và báo “FAILED kvm-node03.hoanghd.com“.

root@kvm-node01:~# pcs resource status
  * Resource Group: Linux-Ubuntu18.04:
    * template-ubuntu18.04	(ocf::heartbeat:VirtualDomain):	 FAILED kvm-node03.hoanghd.com

Chờ 1 lát cluster đã tự động chuyển máy ảo vps-test sang kvm-node01, sử dụng lệnh pcs resource status để kiểm tra và kết quả cho thấy resource đã chuyển qua cho kvm-node01 nắm và đang ở trạng thái “Starting“.

root@kvm-node01:~# pcs resource status
  * Resource Group: Linux-Ubuntu18.04:
    * template-ubuntu18.04	(ocf::heartbeat:VirtualDomain):	 Starting kvm-node01.hoanghd.com

Và đây là kết quả khi virsh list –all trên kvm-node01.

root@kvm-node01:~# virsh list --all
 Id   Name       State
--------------------------
 2    vps-test   running

Khi mình mở nguồn cho kvm-node03 thì cluster đã trả resource về cho kvm-node03.

root@kvm-node03:~# uptime
 16:13:59 up 5 min,  1 user,  load average: 0.16, 0.47, 0.29

root@kvm-node03:~# pcs resource status
  * Resource Group: Linux-Ubuntu18.04:
    * template-ubuntu18.04	(ocf::heartbeat:VirtualDomain):	 Started kvm-node03.hoanghd.com

root@kvm-node03:~# virsh list --all
 Id   Name       State
--------------------------
 1    vps-test   running

Trong quá trình migrage, bạn thậm chí sẽ không nhận thấy một gói tin nào bị rớt, điều đó thực sự tuyệt vời. Hy vọng bài viết này bổ ích với bạn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories