- Mô hình đầy đủ
- OS: Centos Linux 7 64 bit, kernel Linux 3.10.0-514.26.2.el7.x86_64
- Phiên bản OpenStack sử dụng là Ocata
- Phiên bản Ceph Jewel: 10.2.9
- Các dải mạng:
- ens160: sử dụng cho giao tiếp API giữa controller và compute cũng như ssh lẫn nhau.
- ens192: sử dụng để cung cấp internet cho máy ảo.
- ens224: dùng để replicated các node trong Ceph
- Ổ cứng:
- Label của các ổ cứng trong hướng dẫn này là sda, sdb,sdc,sdd,sde. Tùy từng môi trường thực hiện label này có thể thay đổi (vda, vdb)
- sda: sử dụng để cài OS
- sdb: sử dụng làm journal (Journal là một lớp cache khi client ghi dữ liệu, thực tế thường dùng ổ SSD để làm cache)
- sdc, sdd, sde: sử dụng làm các OSD (nơi chứa dữ liệu)
Tài liệu yêu cầu đã cài sẵn Openstack và Ceph cluster như mô hình ở trên.
Link cài Openstack theo mô hình trên tại đây
Lưu ý: khi cài Ceph cluster, ta cần trỏ dịch vụ NTP trên các node Ceph về node Controller. Trên các node Ceph, sửa file /etc/chrony.conf
. Có thể trỏ đến node khác, miễn là thời gian được đồng bộ trên tất cả các node.
server 10.10.0.163 iburst # IP node controller
Sau khi hoàn thành cài đặt Openstack và Ceph cluster, ta tiếp tục thực hiện các bước dưới đây.
Do link cài Openstack ở trên chưa có Cinder, nên ta cần tạo database, service credentials và API endpoint cho Cinder trên node controller trước.
- Đăng nhập vào mysql
mysql -u root -pEc0net2017
- Tạo database cinder
CREATE DATABASE cinder;
- Cấp quyền truy cập vào cơ sở dữ liệu
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
IDENTIFIED BY 'Ec0net2017';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
IDENTIFIED BY 'Ec0net2017';
FLUSH PRIVILEGES;
exit;
-
Chạy script biến môi trường:
source admin-openrc
-
Tạo user cinder:
~# openstack user create --domain default --password Ec0net2017 cinder +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 119d2cad45584585b5bf9ef799cbfbfa | | name | cinder | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+
-
Thêm role admin cho user cinder trên project service
openstack role add --project service --user cinder admin
-
Tạo dịch vụ
cinderv2
vàcinderv3
openstack service create --name cinderv2 \ --description "OpenStack Block Storage" volumev2 openstack service create --name cinderv3 \ --description "OpenStack Block Storage" volumev3
-
Tạo các endpoint cho dịch vụ glance
openstack endpoint create --region RegionOne \
volumev2 public http://controller:8776/v2/%\(project_id\)s
openstack endpoint create --region RegionOne \
volumev2 internal http://controller:8776/v2/%\(project_id\)s
openstack endpoint create --region RegionOne \
volumev2 admin http://controller:8776/v2/%\(project_id\)s
openstack endpoint create --region RegionOne \
volumev3 public http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne \
volumev3 internal http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne \
volumev3 admin http://controller:8776/v3/%\(project_id\)s
-
Cài đặt gói cinder
yum -y install openstack-cinder
- Sao lưu các file
/etc/cinder/cinder.conf
trước khi cấu hình
cp /etc/cinder/cinder.conf /etc/cinder/cinder.orig
- Sao lưu các file
-
Cấu hình cinder
- Sửa file
/etc/cinder/cinder.conf
như sau: - Trong section [database] thêm dòng dưới
connection = mysql+pymysql://cinder:Ec0net2017@controller/cinder
- Trong section
[DEFAULT]
thêm dòng dưới
[DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@controller auth_strategy = keystone my_ip = 10.10.0.163
- Trong section
[keystone_authtoken]
[keystone_authtoken] # ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = Ec0net2017
- Trong section
[oslo_concurrency]
[oslo_concurrency] # ... lock_path = /var/lib/cinder/tmp
- Sửa file
-
Đồng bộ database cho cinder
su -s /bin/sh -c "cinder-manage db sync" cinder
-
Cấu hình trên node Compute để sử BlockStorage. Sửa file
/etc/nova/nova.conf
[cinder] os_region_name = RegionOne
-
Enable và start dịch vụ cinder.
systemctl restart openstack-nova-api.service systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
- Cài các gói bổ trợ để cấu hình tích hợp Ceph
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/
sudo yum install --nogpgcheck -y epel-release
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
- Khai báo repo
cat << EOF > /etc/yum.repos.d/ceph.repo
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
EOF
- Cập nhật và cài đặt các package cần thiết
yum -y update
yum -y install python-rbd ceph-common
Thực hiện các bước trong user cephuser
su - cephuser
- Tạo pool cho Cinder volumes
ceph osd pool create volumes 128 128
- Tạo pool cho Glance images
ceph osd pool create images 128 128
- Tạo pool cho Cinder backups
ceph osd pool create backups 128 128
- Tạo pool cho Nova vms
ceph osd pool create vms 128 128
ceph-deploy admin root@10.10.0.163
ceph-deploy admin root@10.10.0.164
Các file cấu hình sẽ được lưu trong thư mục /etc/ceph
- Tạo user cho glance
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
- Tạo user cho cinder-backup
ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups'
- Tạo user cho cinder-volume và nova-compute (dùng chung 1 user)
ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rwx pool=images'
- Chuyển key client.glance sang node Controller và phân quyền cho user glance
ceph auth get-or-create client.glance | ssh root@10.10.0.163 sudo tee /etc/ceph/ceph.client.glance.keyring
ssh root@10.10.0.163 sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring
- Chuyển key client.cinder sang node Controller và phân quyền cho user cinder
ceph auth get-or-create client.cinder | ssh root@10.10.0.163 sudo tee /etc/ceph/ceph.client.cinder.keyring
ssh root@10.10.0.163 sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
- Chuyển key client.cinder-backup sang node Controller và phân quyền cho user cinder
ceph auth get-or-create client.cinder-backup | ssh root@10.10.0.163 sudo tee /etc/ceph/ceph.client.cinder-backup.keyring
ssh root@10.10.0.163 sudo chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring
ceph auth get-or-create client.cinder | ssh root@10.10.0.164 sudo tee /etc/ceph/ceph.client.cinder.keyring
ceph auth get-key client.cinder | ssh root@10.10.0.164 tee /root/client.cinder.key
uuidgen
Kết quả:
457eb676-33da-42ec-9a8c-9293d545c337
- Dòng nào chưa có thì thêm vào, dòng đã có thì sửa lại như sau:
[DEFAULT] ... show_image_direct_url = True [glance_store] default_store = rbd stores = rbd rbd_store_pool = images rbd_store_user = glance rbd_store_ceph_conf = /etc/ceph/ceph.conf rbd_store_chunk_size = 8
- Dòng nào chưa có thì thêm vào, dòng đã có thì sửa lại như sau:
[DEFAULT] ... enabled_backends=ceph glance_api_version = 2 [ceph] volume_backend_name=ceph volume_driver=cinder.volume.drivers.rbd.RBDDriver 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=457eb676-33da-42ec-9a8c-9293d545c337
systemctl restart openstack-glance-api.service
systemctl restart openstack-glance-registry.service
systemctl restart openstack-nova-api.service
systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service openstack-cinder-volume.service
[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337
disk_cachemodes="network=writeback"
hw_disk_discard = unmap
live_migration_flag= "VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"
#inject_password = false
#inject_key = false
#inject_partition = -2
- Tạo file
secret.xml
đặt tại/root
chứa secret key
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>
EOF
- Định nghĩa secret key
virsh secret-define --file secret.xml
- Kết quả:
Secret 457eb676-33da-42ec-9a8c-9293d545c337 created
- Add secret key vào libvirt
sudo virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat client.cinder.key)
systemctl restart libvirtd.service openstack-nova-compute.service
- Trên OpenStack controller, download image cirros và đặt tại root
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
- Upload image lên Glance
openstack image create "cirros-ceph" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public
- Trên ceph1, kiểm tra RBD-image của Image vừa tạo
rbd -p images ls
- Kết quả:
c1a1a7f3-7dc3-46e7-870c-c2f792945566
- Trên OpenStack, tạo 1 volume thuộc backend ceph
openstack volume create --size 10 volume-test
- Trên ceph1, kiểm tra RBD-image của Image vừa tạo
rbd -p volumes ls
- Kết quả:
volume-3a4dab6c-e5d1-4ec8-b39c-ef70f6045cb5
-
Trên OpenStack, tạo một máy ảo boot từ image cirros-0.3.4-x86_64-disk.img
-
Trên ceph1, kiểm tra RBD-image của Image vừa tạo
rbd -p vms ls
- Kết quả:
72f300b7-d9e2-4734-828e-d6e99aaad6f0_disk
[1] http://docs.ceph.com/docs/master/rbd/rbd-openstack/#
[3]http://blog.csdn.net/Tomstrong_369/article/details/53330734