Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

Adding a New Server — Thêm server mới

Mục lục


Dưới đây là hướng dẫn thêm một server mới nhằm mở rộng kích thước/dung lượng của cluster.

  1. Trước tiên, đảm bảo bạn có đầy đủ toàn bộ thiết lập gốc của Ansible (bao gồm cả các file được sinh ra). Master jwt cũng phải giống nhau giữa tất cả các node. Lưu ý rằng bạn nên "cd" vào thư mục nơi bạn đã giải nén light-app.

  2. Chỉnh sửa các file inventory của Ansible (hosts, /host_var/server##.yaml). Tạo một file server##.yaml mới cho target mới. Thêm server mới vào ba section trong file hosts: ở section trên cùng, trong [duros_nodes], và trong [etcd]. File hosts phải chứa tất cả các node khác của cluster đã tồn tại dưới [etcd], để nhận diện được server mới sẽ được thêm vào cluster nào.

  3. Chạy ansible-playbook với cùng các tham số như trước, và thêm tham số sau: --limit:<new_server name>.

Lưu ý:
- Khi thêm server, chỉ được thêm một server tại một thời điểm.
- Trong file hosts chỉ được liệt kê các node hiện đã có trong cluster và một node mới duy nhất.

Example if Deployed via Ansible — Ví dụ khi triển khai bằng Ansible

ansible-playbook -i ansible/inventory/cluster_example/hosts \
 playbooks/deploy-lightos.yml -vvv \
 -e new_etcd_member=true \
 -e extend_etcd_cluster=true \
 --limit server03

Hãy chạy lệnh trên từ thư mục nơi light-app đã được giải nén, sao cho các đường dẫn tương đối tới file hosts và deploy-lightos.yml có thể truy cập được.

Lệnh này phụ thuộc vào các file jwt và thư mục lightos-certificate đã được tạo trong quá trình triển khai, và chúng phải nằm ở ~ ($HOME).

Lưu ý: Việc thêm một server mới đòi hỏi phiên bản Ansible khớp với phiên bản của release hiện tại, và một Ansible script khớp với release hiện tại. Quá trình cài đặt phải trỏ tới thư mục credentials đã có.

Example if Deployed via Docker and Ansible — Ví dụ khi triển khai bằng Docker và Ansible

Lưu ý rằng lệnh sau phải được chạy bên trong Docker.

cd light-app
docker run -it --rm --net=host \
 -e UID=`id -u` \
 -e GID=`id -g` \
 -e UNAME=$USER \
 -v `pwd`:/ansible \
 -w /ansible \
 -e ANSIBLE_LOG_PATH=/ansible/ansible.log \
 docker.lightbitslabs.com/lightos-3-(Minor Ver)-(Rev)-rhl-(8/9)/lb-ansible:v9.13.0-1 \
 sh -c 'ansible-playbook \
 -i ansible/inventories/cluster_example/hosts \
 playbooks/deploy-lightos.yml -vvv \
 -e system_jwt_path=/ansible/lightos_jwt \
 -e certificates_directory=/ansible/lightos-certificates \
 -e new_etcd_member=true \
 -e extend_etcd_cluster=true \
 --limit <new_server>'

Lưu ý:
- Kiểm tra lại xem Docker URL có đúng không. Tham khảo Customer Installation Addendum của bạn để biết thêm thông tin.
- Việc này tương tự như triển khai một cluster mới, nhưng giới hạn phạm vi chỉ trên một server bằng ba tham số cuối.
- Đặt ANSIBLE_LOG_PATH tới nơi bạn muốn Ansible ghi log.
- playbooks/deploy-lightos.yml phải trỏ tới một playbook.
- Thư mục certificates phải trỏ tới thư mục chứa certificate của cluster bên trong Docker container (do quá trình cài đặt chính tạo ra).
- Inventory phải trỏ tới một file hosts đã tồn tại, trong đó có thông tin của server mới (lưu ý rằng các server gốc của cluster đó cũng có thể có mặt trong file, tùy chọn).
- Lưu ý rằng new_server phải là friendly name ở cột đầu tiên trong file hosts (tức là theo định dạng serverXX, không phải hostname hay IP).
- Lệnh 'pwd' ở trên sẽ lấy ra đường dẫn đầy đủ của thư mục Ansible.

  1. Sau khi cài đặt hoàn tất, server mới sẽ được reboot. etcd mới sẽ đồng bộ với cluster hiện có, và cluster sẽ được mở rộng tự động.

Cleaning Up a Failed Server Add — Dọn dẹp khi thêm server thất bại

Nếu việc thêm server thất bại hoặc bạn có một server bị hỏng, và bạn muốn gỡ nó ra rồi thêm lại vào cluster, hãy làm theo các bước sau:

  1. Trước tiên, chạy cleanup playbook trên server này và thêm tham số sau: --limit <new_server>, để xóa toàn bộ metadata và phần mềm Lightbits khỏi server này.

Example

# If using Ansible Method, run this:
ansible-playbook -i ansible/inventories/cluster_example/hosts playbooks/cleanup-lightos-playbook.yml -t cleanup --limit <new_server>

# If using Docker Method, run this:
cd light-app
docker run -it --rm --net=host \
 -e UID=`id -u` \
 -e GID=`id -g` \
 -e UNAME=$USER \
 -v `pwd`:/ansible \
 -w /ansible \
 -e ANSIBLE_LOG_PATH=/ansible/ansible.log \
 docker.lightbitslabs.com/lightos-3-(Minor Ver)-(Rev)-rhl-(8/9)/lb-ansible:v9.13.0-1 \
 sh -c 'ansible-playbook -i ansible/inventories/cluster_example/hosts \
 playbooks/cleanup-lightos-playbook.yml -t cleanup --limit <new_server>'

Lưu ý: Đừng dùng cách này để gỡ một server đang hoạt động bình thường. Nó chỉ nên được dùng để dọn dẹp một server đã thêm thất bại.

  1. Chạy etcdctl member list để lấy ID của server thêm thất bại, sau đó chạy etcdctl member remove <new_server_id> để gỡ nó khỏi etcd database.

  2. Sau khi xử lý xong các vấn đề còn lại, lặp lại các bước ở trên để thêm một server mới.

Lưu ý: Bạn không thể thêm một server mới dùng SSD Journaling vào một cluster không dùng SSD Journaling.

Adding a Server When IPACL is Enabled — Thêm server khi IPACL được bật

Khi IPACL được bật, bạn cần tạo một admin-endpoint trên cluster trước khi thêm server mới. Admin-endpoint này phải bao gồm tất cả các port nội bộ dùng cho giao tiếp trong cluster và địa chỉ IP của server mới. Điều này đảm bảo server mới có thể giao tiếp đúng cách với các thành phần hiện có của cluster sau khi được thêm vào.

Khi IPACL được bật, tất cả các port control-plane nội bộ đều bị Ansible chặn và chỉ mở cho các node của cluster. iptables trên mỗi server chỉ cho phép IP của các node hiện có. Khi một node mới tham gia, nó mở port hướng về phía các node hiện có, nhưng các node đó không tự động tin tưởng node mới.

Để giải quyết, bạn phải thêm IP của node mới thông qua admin-endpoint, để các node hiện có mở port cho nó, chi tiết như sau:

  • Các port cần mở qua admin-endpoint: 4001, 4007, 2379, 2380

  • Các port bị đóng khi cài đặt, bằng Ansible: 2379, 2380, 4420, 8009, 4001, 4007, 22226

  • Các port được mở động: 22226, 4420, 8009 - bằng management code.

Example:

lbcli create admin-endpoint --ips 10.0.0.4 --port 8009

Để biết thêm thông tin, xem Required Ports for Installation and Operation.

Adding a Server with SSD Journaling — Thêm server dùng SSD Journaling

Kể từ Lightbits release v.3.18.1, bạn có thể thêm một server mới dùng SSD Journaling vào một cluster hiện có đang chạy với DCPMM. Đây chỉ nên là một thiết lập tạm thời trong quá trình chuyển đổi (re-platform) cluster từ DCPMM sang SSD Journaling theo từng bước.

Cluster DCPMM hiện có trước tiên phải được nâng cấp lên ít nhất v3.18.1, sau đó mới có thể thêm server mới với cùng phiên bản đó dùng SSD Journaling.

Với việc re-platform, khuyến nghị liên hệ Lightbits Support; nhưng nhìn chung đây là một quá trình lặp, trong đó bạn thêm một server mới dùng SSD Journaling, gỡ một trong các server DCPMM hiện có khỏi cluster, và lặp lại quá trình này lần lượt từng server:

  1. Thêm một server mới.

  2. Gỡ server cũ (replace node/disable server/evict) - xem Removing a Server from a Cluster để biết thêm thông tin.

  3. Khi tất cả volume đã được migrate khỏi server DCPMM cũ và các node đã ở trạng thái unattached, hãy xóa server cũ.

  4. Lặp lại bước 1-3 cho đến khi tất cả server DCPMM đã bị xóa và không còn là một phần của cluster.

Lưu ý: Hiện chỉ hỗ trợ migrate từ DCPMM sang SSD Journaling. Bạn không thể migrate từ một cluster không có persistent memory sang SSD Journaling

Nguồn: https://documentation.lightbitslabs.com/lightbits-private-cloud/adding-a-new-server


Nguồn tham khảo

  1. Adding a New Server — https://documentation.lightbitslabs.com/lightbits-private-cloud/adding-a-new-server

Ghi chú về nguồn

  • URL fetch thành công. Trang này hiển thị nhãn phiên bản 3.19.x, mục Lightbits Administration Guide.
  • Cấu trúc heading giữ nguyên 1:1 theo bản gốc: H1, các mục ## (Example if Deployed via Ansible, Example if Deployed via Docker and Ansible, Cleaning Up a Failed Server Add, Adding a Server When IPACL is Enabled, Adding a Server with SSD Journaling) và heading #### Example.
  • Bản gốc đánh số bước không liên tục: các bước 1–3 nằm ở đầu trang, sau đó xen kẽ hai mục ## ví dụ, rồi mới tới bước 4. Bản dịch giữ nguyên trật tự và cách đánh số này, không sắp xếp lại.
  • Bản gốc dùng cả nhãn "Notes" (số nhiều) và "Note" (số ít); tất cả đều được dịch thành > **Lưu ý:**, giữ nguyên vị trí và số lượng ý.
  • Câu cuối trong bản gốc thiếu dấu chấm ("...to SSD Journaling"); giữ nguyên mức độ của bản gốc.
  • Trong bản gốc có chỗ ghi "add a new sever" (thiếu chữ v) ở phần văn xuôi; bản dịch truyền đạt đúng ý mà không tái tạo lỗi gõ.