Trỏ file host trên tất cả các node
Hostname là tên của máy tính, được sử dụng để xác định máy tính trong mạng. Khi các node trong một môi trường OpenStack được cấu hình với hostname đúng, chúng có thể nhận diện và truy cập vào nhau một cách dễ dàng. Điều này rất quan trọng đối với các dịch vụ OpenStack như Keystone, Nova, Neutron, … để chúng có thể hoạt động chính xác.
File hosts được sử dụng để định danh các máy chủ và IP tương ứng của chúng. File này định nghĩa các cặp giá trị IP/hostname cho các nút trong hệ thống OpenStack. Việc định nghĩa chính xác các máy chủ và địa chỉ IP tương ứng là rất quan trọng trong việc triển khai OpenStack.
echo '''# controller
192.168.13.201 controller
# compute1
192.168.13.202 compute1
vi
# block1
192.168.13.203 block1
# object1
192.168.13.204 object1
# object2
192.168.13.205 object2''' >> /etc/hosts
Cảnh báo: Một số bản phân phối (distribution) thêm một mục không cần thiết trong file /etc/hosts để phân giải tên máy chủ thực tế thành địa chỉ IP loopback khác như 127.0.1.1. Bạn phải comment hoặc xóa mục này để tránh sự cố phân giải tên. Không comment 127.0.0.1.
Bạn có thể sử dụng lệnh sed để comment nhanh dòng này nếu nó có tồn tại.
sed -i '/^127.0.1.1/s/^/#/' /etc/hosts
Ví dụ:
shell> sudo sed -i '/^127.0.1.1/s/^/#/' /etc/hosts
shell> cat /etc/hosts
# Your system has configured 'manage_etc_hosts' as True.
# As a result, if you wish for changes to this file to persist
# then you will need to either
# a.) make changes to the master file in /etc/cloud/templates/hosts.debian.tmpl
# b.) change or remove the value of 'manage_etc_hosts' in
# /etc/cloud/cloud.cfg or cloud-config from user-data
#
# 127.0.1.1 opt-controller1-13.201 opt-controller1-13 <- Hãy comment dòng này.
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Để giảm độ phức tạp của hướng dẫn này, mình thêm các mục nhập máy chủ cho các dịch vụ tùy chọn bất kể bạn có chọn triển khai chúng hay không. Điều này giúp việc triển khai các dịch vụ tùy chọn trở nên dễ dàng hơn bằng cách chỉnh sửa các file cấu hình thay vì phải tìm kiếm và thêm các máy chủ mới vào file hosts một cách thủ công.
Vì đang ở môi trường lab nên mình tạm thời tắt firewall trên tất cả các node nếu có.
ufw disable
systemctl stop ufw
systemctl disable ufw
systemctl status ufw | grep 'active'
Đồng bộ thời gian trên tất cả các node
Chrony là một ứng dụng quản lý đồng bộ thời gian trên các hệ thống Linux, được sử dụng để đồng bộ hóa thời gian trên các máy chủ OpenStack. Đồng bộ thời gian rất quan trọng trong môi trường OpenStack, bởi vì nó ảnh hưởng đến khả năng hoạt động của các dịch vụ và hiệu suất của hệ thống. Trong OpenStack, Chrony được sử dụng để đồng bộ thời gian giữa các máy chủ controller, compute và các node khác. Điều này giúp các dịch vụ chạy trên OpenStack hoạt động một cách chính xác và đáng tin cậy hơn.
Thực hiện cài đặt Chrony trên tất cả các Node.
apt install chrony -y
Trước tiên hãy backup config cũ cho chắc ăn.
cp /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak
Cấu hình Chrony với vai trò là NTP Server trên một Node nào đó (mình sử dụng node controller).
Hãy thêm 2 dòng allow 192.168.12.0/23
và server 192.168.13.201 iburst
và bỏ tất cả các dòng pool ....
hoặc bạn có thể chạy nhanh bằng đoạn script sau:
echo '''keyfile /etc/chrony/chrony.keys
driftfile /var/lib/chrony/chrony.drift
logdir /var/log/chrony
maxupdateskew 100.0
rtcsync
makestep 1 3
# Sử dụng máy chủ NTP môi trường internet
server 0.ubuntu.pool.ntp.org iburst
server 1.ubuntu.pool.ntp.org iburst
server 2.ubuntu.pool.ntp.org iburst
# Cho phép các máy trong mạng LAN sử dụng máy chủ NTP này
allow 192.168.12.0/23''' > /etc/chrony/chrony.conf
Khởi động lại và bật tính năng tự khởi động theo OS cho Chrony.
systemctl restart chrony
systemctl enable chrony
systemctl status chrony | grep active
Verify lại thông tin source thời gian.
shell> chronyc sources
210 Number of sources = 3
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- 203.113.174.44 3 6 57 46 -1949us[-1949us] +/- 153ms
^* ntp1.tino.org 3 6 37 48 +38us[+1399us] +/- 88ms
^? ntp5.mum-in.hosts.301-mo> 0 6 0 - +0ns[ +0ns] +/- 0ns
Kiểm tra trạng thái đồng bộ hóa thời gian. Nếu Leap status đang Normal thì NTP Server của bạn đã hoạt động.
shell> chronyc tracking
Reference ID : 6782D929 (ntp1.tino.org)
Stratum : 4
Ref time (UTC) : Sat Feb 24 02:32:15 2024
System time : 0.000834642 seconds slow of NTP time
Last offset : -0.001778516 seconds
RMS offset : 0.002510249 seconds
Frequency : 7.544 ppm slow
Residual freq : -0.000 ppm
Skew : 67.001 ppm
Root delay : 0.110248849 seconds
Root dispersion : 0.036084767 seconds
Update interval : 64.2 seconds
Leap status : Normal
Cấu hình Chrony với vai trò là NTP Client trên tất cả các Node còn lại.
Trên các node còn lại, bạn cần chỉnh sửa file cấu hình Chrony để sử dụng máy chủ NTP Server
, chính là node Controller (192.168.13.201)
làm source thời gian. Thêm dòng server IP_NTP_Server iburst vào file cấu hình Chrony của các node còn lại.
echo 'server controller iburst' >> /etc/chrony/chrony.conf
Khởi động lại và bật tính năng tự khởi động theo OS cho Chrony.
systemctl restart chrony
systemctl enable chrony
systemctl status chrony | grep active
Tương tự bạn cũng nên xác minh lại cấu hình NTP trên các node này nhé.
shell> chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller 4 6 377 34 +112us[ +144us] +/- 91ms
shell> chronyc tracking
Reference ID : C0A80DC9 (controller)
Stratum : 5
Ref time (UTC) : Sat Feb 24 02:40:40 2024
System time : 0.000034903 seconds fast of NTP time
Last offset : +0.000032235 seconds
RMS offset : 0.000035755 seconds
Frequency : 12.893 ppm slow
Residual freq : +0.015 ppm
Skew : 1.522 ppm
Root delay : 0.112184748 seconds
Root dispersion : 0.034696218 seconds
Update interval : 64.7 seconds
Leap status : Normal
Kết quả trên thì thời gian sẽ đồng bộ từ node Controller.
Cài đặt các gói tin liên quan đến OpenStack trên tất cả các node.
Các gói này liên quan đến OpenStack, một nền tảng cloud mã nguồn mở, cung cấp các dịch vụ compute, storage và network cho các ứng dụng và dịch vụ cloud.
add-apt-repository cloud-archive:yoga
dùng để thêm kho lưu trữ của OpenStack Yoga vào hệ thống Ubuntu. Với kho lưu trữ này, người dùng có thể cài đặt các gói phần mềm OpenStack mới nhất trên hệ thống của mình.nova-compute
là một phần của OpenStack Compute, được sử dụng để quản lý các máy ảo và tài nguyên tính toán (compute). Nó là thành phần trung tâm của hạ tầng máy chủ ảo trong OpenStack.python3-openstackclient
là một công cụ dòng lệnh để quản lý các dịch vụ và tài nguyên của OpenStack. Nó cho phép quản trị viên quản lý máy chủ, máy ảo, mạng, tài khoản người dùng, dịch vụ lưu trữ, tài nguyên mạng và các dịch vụ khác của OpenStack từ terminal.
add-apt-repository cloud-archive:yoga
apt install nova-compute -y
apt install python3-openstackclient -y
Cài đặt và config Database trên Controller node
MariaDB được sử dụng để lưu trữ các thông tin quan trọng của hệ thống OpenStack, bao gồm cấu hình, tài khoản người dùng, phiên bản và nhiều hơn nữa.
apt install mariadb-server python3-pymysql
Đặt mật khẩu cho username root
.
mysql -u root -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Hoanghd164');"
Tạo mới file /etc/mysql/mariadb.conf.d/99-openstack.cnf
và thêm các nội dung sau:
bind-address = 192.168.13.201
: Dòng này chỉ định địa chỉ IP mà máy chủ MySQL sẽ lắng nghe các kết nối đến.default-storage-engine = innodb
: Chỉ định động cơ lưu trữ mặc định được sử dụng bởi MySQL.innodb_file_per_table = on
: Chỉ định rằng MySQL sẽ tạo một tập tin dữ liệu riêng cho mỗi bảng được tạo ra. Điều này giúp cho việc quản lý và sao lưu dữ liệu dễ dàng hơn.max_connections = 4096
: Chỉ định số lượng kết nối tối đa mà MySQL có thể chấp nhận cùng một lúc.collation-server = utf8_general_ci
: Kiểu so sánh mặc định được sử dụng bởi MySQL.character-set-server = utf8
: Chỉ định bộ ký tự mặc định được sử dụng bởi MySQL.
echo '''[mysqld]
bind-address = 192.168.13.201
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8''' > /etc/mysql/mariadb.conf.d/99-openstack.cnf
Khởi động lại và bật tính năng tự khởi động theo OS cho MariaDB.
systemctl restart mariadb
systemctl enable mariadb
Verify lại trạng thái MariaDB.
shell> sudo systemctl status mariadb | grep Active
Active: active (running) since Sat 2024-02-24 03:33:25 UTC; 23s ago
Cài đặt Message queue cho Controller node
RabbitMQ là một message broker mã nguồn mở, được sử dụng để truyền tải các message giữa các ứng dụng hoặc các thành phần trong một hệ thống. RabbitMQ được sử dụng trong nhiều hệ thống phân tán để giải quyết các vấn đề liên quan đến sự tương tác giữa các thành phần của hệ thống, đặc biệt là khi các thành phần đó được triển khai trên các máy chủ khác nhau.
Trong OpenStack, RabbitMQ được sử dụng như một message broker để truyền tải các message giữa các thành phần khác nhau của hệ thống, như Keystone, Nova, Glance, Cinder và Neutron. RabbitMQ cho phép các thành phần trong hệ thống OpenStack giao tiếp với nhau một cách đồng bộ và có hiệu quả, đảm bảo tính toàn vẹn và độ tin cậy của hệ thống.
Vì vậy, RabbitMQ trong OpenStack đóng vai trò rất quan trọng trong việc cung cấp tính năng truyền tải message, hỗ trợ tính toàn vẹn và độ tin cậy cho các thành phần của hệ thống.
apt install rabbitmq-server -y
Tạo một người dùng có tên là “openstack” và mật khẩu là “RABBIT_PASS”. Người dùng này sẽ được sử dụng để kết nối và truy cập tới RabbitMQ server.
rabbitmqctl add_user openstack RABBIT_PASS
Cấp quyền cho người dùng “openstack”, người dùng này sẽ được phép truy cập vào tất cả các queue và exchange của RabbitMQ server thông qua các hành động “read”, “write” và “configure”.
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Khởi động lại và bật tính năng tự khởi động theo OS cho RabbitMQ.
systemctl restart rabbitmq-server.service
systemctl enable rabbitmq-server.service
Verify lại trạng thái RabbitMQ.
shell> systemctl status rabbitmq-server.service | grep 'active'
Active: active (running) since Sat 2024-02-24 03:37:34 UTC; 1s ago
Cài đặt và cấu hình Memcached cho Controller node
Memcached là một dịch vụ bộ nhớ đệm phân tán được sử dụng để lưu trữ tạm thời các dữ liệu, giúp cải thiện hiệu suất và tăng tốc độ truy cập dữ liệu. Trong OpenStack, Memcached được sử dụng để lưu trữ các phiên đăng nhập, thông tin về nhóm người dùng, cấu hình mạng và nhiều hơn nữa.
apt install memcached python3-memcache -y
Thay thế 127.0.0.1
thành IP của Controller 192.168.13.201
sed -i "s/-l 127.0.0.1/-l 192.168.13.201/" /etc/memcached.conf
Khởi động lại và bật tính năng tự khởi động theo OS cho Memcached.
systemctl restart memcached
systemctl enable memcached
Verify lại trạng thái Memcached.
shell> systemctl status memcached | grep 'active'
Active: active (running) since Sat 2024-02-24 03:39:29 UTC; 3s ago
Cài đặt và cấu hình Etcd cho Controller node
Etcd là một dịch vụ quản lý cụm (cluster management service) được sử dụng trong OpenStack để lưu trữ thông tin về các tài nguyên của hệ thống, bao gồm các dịch vụ, máy chủ, mạng, máy ảo và nhiều hơn nữa. Etcd cũng đảm bảo rằng dữ liệu được đồng bộ hóa trên tất cả các nút trong cụm để đảm bảo tính nhất quán.
sudo apt install etcd -y
Đây là một số cài đặt cho ETCD, một cơ sở dữ liệu phân tán được sử dụng để lưu trữ các cấu hình và siêu dữ liệu của hệ thống.
ETCD_NAME="controller"
: Tên của node hiện tại trong cluster của ETCD.ETCD_DATA_DIR="/var/lib/etcd"
: Đường dẫn tới thư mục lưu trữ dữ liệu của ETCD trên node hiện tại.ETCD_INITIAL_CLUSTER_STATE="new"
: Trạng thái ban đầu của cluster ETCD. Trong trường hợp này, cluster sẽ bắt đầu với trạng thái mới.ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
: Token được sử dụng để gom nhóm các node trong cluster của ETCD.ETCD_INITIAL_CLUSTER="controller=http://192.168.13.201:2380"
: Danh sách các node trong cluster của ETCD và địa chỉ URL của chúng.ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.13.201:2380"
: Địa chỉ URL được sử dụng để quảng bá node hiện tại đến các peer khác trong cluster của ETCD.- ETCD_ADVERTISE_CLIENT_URLS: URL mà etcd sẽ sử dụng để quảng bá (advertise) đến các máy khác trong mạng về cách kết nối với nó. Trong trường hợp này, etcd sẽ quảng bá URL “http://192.168.13.201:2379“, tức là các máy khác có thể kết nối đến etcd thông qua URL này.
- ETCD_LISTEN_PEER_URLS: URL mà etcd sử dụng để lắng nghe (listen) các yêu cầu từ các node khác trong mạng. Trong trường hợp này, etcd sẽ lắng nghe tại URL “http://0.0.0.0:2380“, tức là nó sẽ lắng nghe các yêu cầu từ bất kỳ địa chỉ IP nào trên máy chủ.
- ETCD_LISTEN_CLIENT_URLS: URL mà etcd sẽ sử dụng để lắng nghe các yêu cầu từ các ứng dụng khác trong mạng. Trong trường hợp này, etcd sẽ lắng nghe tại URL “http://192.168.13.201:2379“, tức là các ứng dụng khác có thể kết nối đến etcd thông qua URL này.
echo '''ETCD_NAME="controller"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller=http://192.168.13.201:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.13.201:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.13.201:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.13.201:2379"''' > /etc/default/etcd
Khởi động lại và bật tính năng tự khởi động theo OS cho Etcd.
systemctl enable etcd
systemctl restart etcd
Verify lại trạng thái Etcd.
shell> systemctl status etcd | grep 'active'
Active: active (running) since Sat 2024-02-24 03:43:12 UTC; 3s ago
Phần tiếp theo, chúng ta sẽ cài đặt và cấu hình Keystone service.