Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save vanduc95/97c4110338e0319a11d4b8ab36c2134a to your computer and use it in GitHub Desktop.
Save vanduc95/97c4110338e0319a11d4b8ab36c2134a to your computer and use it in GitHub Desktop.

Hướng dẫn tích hợp OpenStack Ocata và Ceph Jewel


I. Cài đặt


1. Chuẩn bị môi trường

1.1 Mô hình mạng

  • Mô hình đầy đủ

Ceph Jewel Topo

1.2 Các tham số phần cứng đối với các node

Ceph hardware

Chú ý khi lựa chọn OS và lựa chọn dải mạng

- 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)

1.3 Requirements

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.

2. Cài đặt và cấu hình Cinder trên node Controller

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.

2.1 Tạo database cho cinder

  • Đă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;

2.2 Tạo user cinder, gán quyền và tạo endpoint API cho dịch vụ cinder

  • 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ụ cinderv2cinderv3

    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

2.3 Cài đặt và cấu hình cho dịch vụ cinder

  • 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
    
  • 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
    
  • Đồ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
    

3. Trên 2 node Controller và Compute1

3.1. Cài đặt package cho Ceph Jewel (thực hiện trên cả 2 node)

  • 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

4. Trên Ceph 1

Thực hiện các bước trong user cephuser

su - cephuser

4.1. Tạo ra các pool cho các dịch vụ của OpenStack

  • 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

4.2 Copy file cấu hình và admin key sang node Controller và Compute1

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

4.3 Tạo các Ceph user cho dịch vụ Openstack

  • 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'

4.4 Chuyển các key sang node Controller

  • 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

4.5. Chuyển key client.cinder sang node Compute

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

5. Trên node Controller

5.1. Tạo secret key (Key này sẽ được sử dụng để máy ảo có thể attach volume trên ceph)

uuidgen

Kết quả:

457eb676-33da-42ec-9a8c-9293d545c337

5.2. Cấu hình file /etc/glance/glance-api.conf để lưu image xuống Ceph

  • 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
    

5.3. Cấu hình file /etc/cinder/cinder.conf để lưu volume và volume backup xuống Ceph

  • 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
    

5.4. Khởi động lại các dịch vụ

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	

6. Trên node Compute

6.1. Cấu hình file /etc/nova/nova.conf để lưu VM xuống Ceph

[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

6.2. Add secret key vào libvirt

  • 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)

6.3. Khởi động lại các dịch vụ

systemctl restart libvirtd.service openstack-nova-compute.service

7. Kiểm tra

7.1. Kiểm tra việc tích hợp Glance và Ceph

  • 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

7.2. Kiểm tra việc tích hợp Cinder và Ceph

  • 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

7.3. Kiểm tra việc tích hợp Nova và Ceph

  • 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

Done

II Tài liệu tham khảo

[1] http://docs.ceph.com/docs/master/rbd/rbd-openstack/#

[2] https://github.com/infn-bari-school/cloud-storage-tutorials/wiki/Mitaka-Openstack:-ceph-backend-configuration

[3]http://blog.csdn.net/Tomstrong_369/article/details/53330734

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment