No menu items!
No menu items!
More

    [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.

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email