Mô hình cụm Ceph kết nối OpenStack đầy đủ sẽ bao gồm cụm Ceph và Cụm OpenStack HA và Monitor node
Đối với OpenStack có 3 thành phần có thể kết nối được với Ceph.
- Images: OpenStack Glance quản lý các image cho các VM, lưu trữ các images dưới dạng nhị phân.
- Volumes: Các Block Devices được sử dụng để boot các VM hoặc là các ổ đĩa đính kèm thêm cho VM
- Guest Disk: Mặc định khi tạo VM từ images thì disk của nó được lưu trữ dưới dạng filesystems (thường là /var/lib/nova/instances/uuid/).
Từ bản sau Hanava thì có thể khởi động mọi VM lưu trữ trực tiếp trong Ceph mà không cần sử dụng Cinder. Điều này thuận tiện cho việc di chuyển các VM từ node compute này sang node compute khác gần như tức thì. Chúng ta có thể sử dụng Glance để lưu trữ các images trên Ceph Block Device, và chúng ta có thể khởi động 1 VM bằng cách sử dụng 1 bản sao của 1 images.
Cài đặt theo 1 trong các cách sau
- Cụm node hoàn chỉnh (Gần giống với môi trường Product)
- CephAIO (Chỉ để LAB ko khuyến cáo môi trường Product)
Cài đặt theo 1 trong các cách sau
- Cụm cài đặt Pacstack
- Cụm cài đặt Manual 2node
- Cụm cài đặt HA
Yêu cầu: Có cụm Ceph và OpenStack được cài đặt theo 2 tutorial trước đó (Trong tutorial này sử dụng Ceph 3 node + OpenStack manual 3 node)
- Cụm OpenStack
Controller:
- Manager_api_horizon_network: 10.10.10.71
- Provider: 10.10.11.71
- Data_VM: 10.0.12.71
- Ceph-Com: 10.0.13.71
Compute1:
- Manager_api_horizon_network: 10.10.10.72
- Provider: 10.10.11.72
- Data_VM: 10.0.12.72
- Ceph-Com: 10.0.13.72
Compute2:
- Manager_api_horizon_network: 10.10.10.73
- Provider: 10.10.11.73
- Data_VM: 10.0.12.73
- Ceph-Com: 10.0.13.73
- Cụm Ceph
Ceph1:
- Manager_network: 10.10.10.61
- Public_network(Ceph-Com): 10.10.13.61
- Cluster_network(Ceph-Rep): 10.10.14.61
Ceph2:
- Manager_network: 10.10.10.62
- Public_network(Ceph-Com): 10.10.13.62
- Cluster_network(Ceph-Rep): 10.10.14.62
Ceph3:
- Manager_network: 10.10.10.63
- Public_network(Ceph-Com): 10.10.13.63
- Cluster_network(Ceph-Rep): 10.10.14.63
Update repo
cat <<EOF> /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-luminous/el7/x86_64/
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-luminous/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
EOF
Cài đặt ceph-common
yum update -y
yum install -y python-rbd ceph-common
Lưu ý: Có thể tính toán trước số PG khi tạo các pool bằng cách sử dụng công cụ tính toán có sẵn trên trang chủ http://ceph.com/pgcalc
ceph osd pool create volumes 128 128
ceph osd pool create vms 128 128
ceph osd pool create images 128 128
ceph osd pool create backups 128 128
- Khởi tạo ban đầu trước khi sử dụng pool
rbd pool init volumes
rbd pool init vms
rbd pool init images
rbd pool init backups
- Thực hiện copy cấu hình qua các node Controller, Compute
ssh 10.10.10.71 sudo tee /etc/ceph/ceph.conf < /etc/ceph/ceph.conf
ssh 10.10.10.72 sudo tee /etc/ceph/ceph.conf < /etc/ceph/ceph.conf
ssh 10.10.10.73 sudo tee /etc/ceph/ceph.conf < /etc/ceph/ceph.conf
Việc copy
ceph.conf
có thể sử dụngceph-deploy
- Tạo key
glance
cd /ceph-deploy
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' > ceph.client.glance.keyring
- Chuyển key glance sang node glance (Ở đây Glance cài trên Controller)
ceph auth get-or-create client.glance | ssh 10.10.10.71 sudo tee /etc/ceph/ceph.client.glance.keyring
- Set quyền cho các key
sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring
sudo chmod 0640 /etc/ceph/ceph.client.glance.keyring
- Thêm cấu hinh
/etc/glance/glance-api.conf
trên node Controller
[DEFAULT]
show_image_direct_url = True
...
[glance_store]
#stores = file,http
#default_store = file
#filesystem_store_datadir = /var/lib/glance/images/
default_store = rbd
stores = file,http,rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8
- Restart lại dịch vụ glance trên cả node Controller
systemctl restart openstack-glance-*
- Source credential
source admin-openrc
- Tạo thử images
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
openstack image create "cirros-ceph" \
--file cirros-0.3.4-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--public
- Kiểm tra trên node ceph
rbd -p images ls
- Di chuyển vào ceph-deploy folder
cd ceph-deploy
- Tạo key
cinder
ceph auth get-or-create client.cinder mon 'allow r, allow command "osd blacklist", allow command "blacklistop"' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=images' > ceph.client.cinder.keyring
- Tạo key
cinder-backup
ceph auth get-or-create client.cinder-backup mon 'profile rbd' osd 'profile rbd pool=backups' > ceph.client.cinder-backup.keyring
- Chuyển key
cinder
và keycinder-backup
sang các node cài đặt Cinder(Ở đây là các node Controller)
ceph auth get-or-create client.cinder | ssh 10.10.10.71 sudo tee /etc/ceph/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder-backup | ssh 10.10.10.71 sudo tee /etc/ceph/ceph.client.cinder-backup.keyring
- Chuyển key cinder sang các node Compute
ceph auth get-or-create client.cinder | ssh 10.10.10.72 sudo tee /etc/ceph/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder | ssh 10.10.10.73 sudo tee /etc/ceph/ceph.client.cinder.keyring
ceph auth get-key client.cinder | ssh 10.10.10.72 tee /root/client.cinder
ceph auth get-key client.cinder | ssh 10.10.10.73 tee /root/client.cinder
- Set quyền cho các key
sudo chown cinder:cinder /etc/ceph/ceph.client.cinder*
sudo chmod 0640 /etc/ceph/ceph.client.cinder*
- Khởi tạo 1
uuid
mới cho Cinder
uuidgen
Output
414ba151-4068-40c6-9d7b-84998ce6a5a6
Lưu ý UUID này sẽ sử dụng chung cho các Compute nên chỉ cần tạo lần đầu tiên
- Tạo file xml cho phép Ceph RBD (Rados Block Device) xác thực với libvirt thông qua
uuid
vừa tạo
cat > ceph-secret.xml <<EOF
<secret ephemeral='no' private='no'>
<uuid>414ba151-4068-40c6-9d7b-84998ce6a5a6</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>
EOF
sudo virsh secret-define --file ceph-secret.xml
Output
Secret 414ba151-4068-40c6-9d7b-84998ce6a5a6 created
- Gán giá trị của
client.cinder
chouuid
virsh secret-set-value --secret 414ba151-4068-40c6-9d7b-84998ce6a5a6 --base64 $(cat /root/client.cinder)
Output
Secret value set
- Bổ sung thêm cấu hinh
/etc/cinder/cinder.conf
tren cac node controller
Mục [DEFAULT] bổ sung thêm, Mục [ceph] thêm mới
[DEFAULT]
notification_driver = messagingv2
enabled_backends = ceph
glance_api_version = 2
backup_driver = cinder.backup.drivers.ceph
backup_ceph_conf = /etc/ceph/ceph.conf
backup_ceph_user = cinder-backup
backup_ceph_chunk_size = 134217728
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true
host=ceph
[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
rbd_user = cinder
rbd_secret_uuid = 414ba151-4068-40c6-9d7b-84998ce6a5a6
report_discard_supported = true
- Enable cinder-backup và restart dịch vụ cinder
systemctl enable openstack-cinder-backup.service
systemctl start openstack-cinder-backup.service
- Restart lại dịch vụ trên Node Controller
systemctl restart openstack-cinder-api.service openstack-cinder-volume.service openstack-cinder-scheduler.service openstack-cinder-backup.service
- Source credential
source admin-openrc
- Tạo volume type node controller
cinder type-create ceph
cinder type-key ceph set volume_backend_name=ceph
systemctl restart openstack-nova-compute
Mặc định các VM được tạo từ Images sẽ lưu file disk ngay chính trên Compute, Việc tích hợp này cho phép file disk này được tạo 1 symlink lưu trữ dưới Ceph thay vì lưu local.
- Tạo keyring cho nova
ceph auth get-or-create client.nova mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rx pool=images' -o /etc/ceph/ceph.client.nova.keyring
- Copy key
nova
sang các node Compute
ceph auth get-or-create client.nova | ssh 10.10.10.72 sudo tee /etc/ceph/ceph.client.nova.keyring
ceph auth get-or-create client.nova | ssh 10.10.10.73 sudo tee /etc/ceph/ceph.client.nova.keyring
ceph auth get-key client.nova | ssh 10.10.10.72 tee /root/client.nova
ceph auth get-key client.nova | ssh 10.10.10.73 tee /root/client.nova
- Set quyền trên node COM
chgrp nova /etc/ceph/ceph.client.nova.keyring
chmod 0640 /etc/ceph/ceph.client.nova.keyring
- Genkey UUID
uuidgen
Output
805b9716-7fe8-45dd-8e1e-5dfdeff8b9be
Lưu ý UUID này sẽ sử dụng chung cho các Compute nên chỉ cần tạo lần đầu tiên
- Tạo file xml cho phép Ceph RBD (Rados Block Device) xác thực với libvirt thông qua
uuid
vừa tạo
cat << EOF > nova-ceph.xml
<secret ephemeral="no" private="no">
<uuid>805b9716-7fe8-45dd-8e1e-5dfdeff8b9be</uuid>
<usage type="ceph">
<name>client.nova secret</name>
</usage>
</secret>
EOF
sudo virsh secret-define --file nova-ceph.xml
Output
Secret 805b9716-7fe8-45dd-8e1e-5dfdeff8b9be created
- Gán giá trị của
client.nova
chouuid
virsh secret-set-value --secret 805b9716-7fe8-45dd-8e1e-5dfdeff8b9be --base64 $(cat /root/client.nova)
Output
Secret value set
- Chỉnh sửa nova.conf trên COM
/etc/nova/nova.conf
Bổ sung nội dung phần config [libvirt]
[libvirt]
images_rbd_pool=vms
images_type=rbd
rbd_secret_uuid=805b9716-7fe8-45dd-8e1e-5dfdeff8b9be
rbd_user=nova
images_rbd_ceph_conf = /etc/ceph/ceph.conf
- Restart service
systemctl restart openstack-nova-compute
- Tạo máy ảo (Tạo boot từ images) và kiểm tra
rbd -p vms ls
rbd -p compute info c0f90bd2-9f8a_disk
1. Nguyên tắc sao lưu dữ liệu của Cinder int32bit's Blog
2. OpenStack backup Sebatian-han