becool

20210712 (월) 서비스 개념 설명 본문

openstack

20210712 (월) 서비스 개념 설명

gusalstm 2021. 7. 12. 17:37
반응형


review 9:41

 

on-premise / traditional / legacy  (↔ cloud) 

  물리적인 서버를 통한 서비스 제공

  고비용의 초기구성비용, 구성에 긴 시간소모

  네트워크/시스템/개발/ 각 분야에 대한 전문지식 필요

  H/W 기술의 발전으로 인한 잉여 리소스 발생 → 리소스 낭비 발생

  → 가상화 기술 도입

 

가상화

  물리적인 리소스를 논리적으로 분할, 통합 하는 방식 (LVLAN, 티밍, 본딩)

  스토리지 / 네트워크 / 시스템 등에 가상화 기술 사용

  초기 구성 소요시간 증가, 비용은 약간 감소

 

클라우드 서비스

  공급업체에서 이미 갖춰진 시스템으로 리소스 제공

  공급업체 : 비용 낭비를 줄일 수 있음

  사용자 : 초기 구성비용과 시간소요가 없음. (클라우드 서비스 사용료는 별도로 발생)

  특징 : 사용자가 원하는 대로 서비스를 제공하는 방식 (온디맨드)

  인터넷(네트워크)만 사용가능하면 서비스 이용

  사용기간이 길어지거나 리소스를 많이 사용하면 비용(클라우드서비스 사용료) 증가

  퍼블릭 클라우드의 한계점으로 프라이빗, 하이브리드 클라우드에 대한 관심 증가

 

오픈스택

  프라이빗 클라우드 구성 ( IaaS ) : 사용자가 리소스를 직접 사용할 수 있게 할당

오픈스택 서비스

  Keystone : 사용자에 대한 인증, 권한 확인

               도메인/프로젝트/사용자/그룹/역할/리소스 등을 관리 (명령어 종류)

               도메인 : 하나의 독립적인 환경

               프로젝트 : 각 도메인마다 독립적으로 구성되고, 사용자의 접근제어 및 리소스 할당량 조절 가능

               사용자 - 인증 및 접근제어 개체

               그룹 - 사용자들의 집합 ( v3에서 사용 )

---------------------------------------------------------------------------------

 

Glance : 인스턴스를 만들때 사용되는 이미지 관리

          이미지 : 인스턴스(가상머신)를 실행하기 위한 디스크 파일

          이미지의 메타데이터를 읽어와서 검색/관리/사용 기능 제공

          로컬 스토리지(컨트롤러)에 저장 Swift 스토리지에 저장

          Glance ↔ Swift 이미지 파일을 저장/불러오기 서로 연동

          Nova ↔ Glance : 인스턴스 생성 및 저장 서로 연동

 

사용자 → 인스턴스 생성 작업 실행 과정

             1) 인스턴스 생성 작업 실행 시, (Horizon 서비스를 통해 / 명령어로 작업 지시)

             2) Keystone 서비스를 통해서 사용자 인증 및 토큰 발행

             3) 이미지를 요청 (Glance-API)

             4) 백엔드 스토리지에서 이미지 파일 가져오기 

                - 원격 스토리지 : 네트워크 속도, 이미지의 크기 등이 성능에 영향 → 사이즈최소화 

 

[root@controller ~(keystone_admin)]# man qemu-img

[root@controller ~(keystone_admin)]# vim /etc/glance/glance-api.conf

 → 저장경로 설정파일 : /var/lib/glance/images/

 794  bind_port=9292

1630 log_file=/var/log/glance/api.log

1891 transport_url=rabbit://guest:guest@10.0.2.10:5672/ 로그 url

1953 connection=mysql+pymysql://glance:20227dfd473941ca@10.0.2.10/glance 데이터베이스 주소 정의

2050 [glance_store]

2078 stores=file,http,swift

2443 filesystem_store_datadir=/var/lib/glance/images/

3469 os_region_name=RegionOne

3487 [keystone_authtoken]

[root@controller ~(keystone_admin)]# ls -l /var/lib/glance/images/

1324 auth_uri=http://10.0.2.10:5000/v3

1482 auth_type=password
1486 auth_url=http://10.0.2.10:35357
1487 username=glance
1488 password=c415300a5edb427a
1489 user_domain_name=Default
1490 project_name=services
1491 project_domain_name=Default

 

[root@controller ~(keystone_admin)]# qemu-img info cirros-0.5.2-x86_64-disk.img
image: cirros-0.5.2-x86_64-disk.img
file format: qcow2
virtual size: 112M (117440512 bytes) → 가상 최대 사이즈
disk size: 16M → 현재 크기
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

[root@controller ~(keystone_admin)]# qemu-img info CentOS-7-x86_64-GenericCloud-2009.qcow2c
image: CentOS-7-x86_64-GenericCloud-2009.qcow2c
file format: qcow2
virtual size: 8.0G (8589934592 bytes) → flavor 설정 시, virtual size 이상으로 설정하여주는 것이 좋음 

   (--min-disk 8 옵션)
disk size: 378M 
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

[root@controller ~(keystone_admin)]# openstack image create --disk-format qcow2 --min-disk 8 

--file CentOS-7-x86_64-GenericCloud-2009.qcow2c centos7

[root@controller ~(keystone_admin)]# openstack image create --disk-format qcow2 --file cirros-0.5.2-x86_64-disk.img --protected cirros_protected

[root@controller ~(keystone_admin)]# openstack image set --unprotected cirros_protected
[root@controller ~(keystone_admin)]# openstack image delete cirros_protected

 

---------------------------------------------------------------------------------

 

Nova : 인스턴스 관리 (스케쥴링 / 생성 / 삭제 / 동작제어)

         Controller 노드 / Compute 노드 양쪽모두 설치 

 

생성을 위한 서비스 서비스내용
nova-api 사용자의 요청을 받는 프론트엔드 서비스
nova-conductor DB와 compute 서비스의 중재자 역할
  ++Placement 인스턴스가 생성 가능한 노드를 확인 (일부 스케쥴러의 작업을 수행하는 서비스)
 동작순서 placement → scheduler
nova-compute QEMU/KVM, libvirt와 연동 작업
인스턴스 생성/삭제 작업 시 요청을 받아서 libvirtd 에 전달
컴퓨터 노드에서 설치 및 동작
nova-scheduler 인스턴스를 어떤 노드에서 실행할지를 결정

 

사용을 위한 서비스 서비스 내용
nova-novncproxy VNC 프로토콜 지원 → 웹에서 콘솔 사용 
nova-console 콘솔화면 접속 제공
nova-consoleauth 콘솔 접근 시 인증

동작순서 : api → conductor → placement → scheduler → conductor → compute → lib

가상머신 가속화 기능 (P228)

버추얼박스 > (머신)설정 > 시스템 > 프로세서 > 네스티드 VT-x/AMD-V 사용차기 체크

 

[root@compute1 ~]# systemctl status libvirtd → compute 노드에서 동작중
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2021-07-11 20:09:27 EDT; 3h 18min ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 1558 (libvirtd)
    Tasks: 17 (limit: 32768)
   CGroup: /system.slice/libvirtd.service
           └─1558 /usr/sbin/libvirtd

Jul 11 20:09:26 compute1.cccr3.co.kr systemd[1]: Starting Virtualization daemon...
Jul 11 20:09:27 compute1.cccr3.co.kr systemd[1]: Started Virtualization daemon.

[root@controller ~ ]# openstack hypervisor list

[root@controller ~ ]# ls /etc/nova
api-paste.ini  migration  nova.conf  policy.json  release  rootwrap.conf

 

[root@controller ~]# ls /etc/nova/nova.conf  → 구성 확인 (p224)

  137 #compute_driver=libvirt.LibvirtDriver  → (libverd)

  147 allow_resize_to_same_host=True

  517 cpu_allocation_ratio=16.0  → cpu 할당 갯수 오버커밋

  547 ram_allocation_ratio=1.5  → ram 할당 갯수 오버커밋

  1622 metadata_host=10.0.2.10 → 메타데이터 저장은 controller노드로 지정되어있음

  2718 state_path=/var/lib/nova → 인스턴스 상태정보가 저장

  2733 report_interval=10 → 10초 마다확인
  2747 service_down_time=60 → 60초 다운

  5366 [glance]
  5389 api_servers=http://10.0.2.10:9292 → glance 이미지 요청 api 주소


  7641 [neutron]
  7665 url=http://10.0.2.10:9696


  10360 [vnc]
  10509 novncproxy_host=0.0.0.0
  10529 novncproxy_port=6080 → 콘솔 포트


  11445 [placement_database] → placement 서비스 동작중
  11446 connection=mysql+pymysql://nova_placement:123f58bbf5dc4dc9@10.0.2.10/nova_placement

[root@controller ~(keystone_admin)]# openstack hypervisor list 

 하이버 바이저 status 가 down이면 인스턴스 생성이 안됨. (컴퓨트노드 systemctl stop openstack-nova-compute)

[root@controller ~(keystone_admin)]# openstack baremetal node list

 

[root@controller ~(keystone_admin)]# openstack flavor create --ram 1024 --vcpus 1 --ephemeral 1 --disk 1 test_flavor

[root@controller ~(keystone_admin)]# openstack server create --image cirros --flavor test_flavor --network net01 vm03 --wait

[root@controller ~(keystone_admin)]# openstack server show vm03
+-------------------------------------+----------------------------------------------------------+
| Field                               | Value                                                    |
+-------------------------------------+----------------------------------------------------------+
| id                                  | 08048796-1b59-4d1c-b465-6cbf10833e3a                     |
+-------------------------------------+----------------------------------------------------------+

[root@compute1 ~]# ls -l /var/lib/nova/instances/
total 4
drwxr-xr-x. 2 nova nova  71 Jul 12 01:55 08048796-1b59-4d1c-b465-6cbf10833e3a
drwxr-xr-x. 2 nova nova  81 Jul 12 01:37 _base
drwxr-xr-x. 2 nova nova  54 Jul 12 01:47 c1629c75-62b7-427d-ad16-8343dd4a98c2
-rw-r--r--. 1 nova nova  43 Jul 12 01:36 compute_nodes
drwxr-xr-x. 2 nova nova  54 Jul 12 01:37 fed66c0b-d10f-476a-8f05-b108b2fc4662
drwxr-xr-x. 2 nova nova 125 Jul 12 01:37 locks


[root@compute1 ~]# ls -l /var/lib/nova/instances/08048796-1b59-4d1c-b465-6cbf10833e3a/
console.log  disk         disk.eph0    disk.info

→ flavor 생성시 입력했던 옵션이 컴퓨트노드의 인스턴스 디렉터리에 생성되는것을 볼 수 있다.

 

---------------------------------------------------------------------------------

 

Horizon : 대시보드 (웹UI) 제공

 

[root@controller ~(keystone_admin)]# ls /etc/openstack-dashboard/
cinder_policy.d     glance_policy.json    local_settings       nova_policy.d
cinder_policy.json  keystone_policy.json  neutron_policy.json  nova_policy.json
[root@controller ~(keystone_admin)]# vim /etc/openstack-dashboard/local_settings

[root@controller ~(keystone_admin)]# vim /etc/httpd/conf.d/15-horizon_vhost.conf : 가상호스트 설정

   WSGIApplicationGroup %{GLOBAL}  : 반드시 설정

 

---------------------------------------------------------------------------------

 

Neutron : 네트워크 관리

            내부 네트워크 : 인스턴스와 서로 간의 연결 구성

            외부 네트워크 : 물리적인 네트워크와의 연결 구성

            라우터 : 내, 외부 네트워크를 연결

            보안그룹 : 인스턴스에 대한 네트워크 접근 제어    

 

브리지 : 가상머신의 인터페이스와 물리적인 인터페이스를 연결하는 소프트웨어의 개념

라우터 : 내부/외부 연결과 서로 구분을 해주고 라우팅을 해주는 역할까지

 

SDN (Software Defined Network) 기술 사용

  네트워크 가상화 기술

  네트워크 환경을 소프트웨어(프로그램)으로 관리

  중앙집중 관리방식을 사용

  컨트롤 플레인과 데이터 플레인의 분리  → openflow 사용

  좀 더 유연하고 즉각적으로 네트워크 환경 구성가능

  네트워크 장비에 대한 비용이 감소

  장비 의존도 감소(벤더사 브랜드 의존도 감소)

 

NFV (Network Function Virtualization)

  방화벽 설정 / IPS / VPN / LoadBalancer … / 

  장비들의 기능을 소프트웨어로 구현하는 방식

  

리눅스 환경의 네트워크

  NetworkManager 서비스 비활성화 → Neutron 서비스와 충돌 방지

  Kolla 프로젝트를 이용한 배포 시 (최신버전)

    → 컨테이너를 이용한 서비스 동작 → NetworkManager가 꼭 동작중이어야함.

        인터페이스 설정파일에서 활성화/비활성화 설정이 가능하게 되었음. ( NM_CONTROLLED=no )

  소프트웨어 브릿지 (리눅스브릿지/OVS브릿지) bridge-utils

  배포 시에 네트워크 배포 방식을 OVS/ OVN 선택

     → OVS 방식 : Linux-Bridge도 같이 사용 (Open Virtual Switch)

     → OVN 방식 : OVS-Bridge만 사용 (Open Virtual Network)

 

리눅스 브릿지

  물리적인 인터페이스와 가상 인터페이스를 연결

  커널 공간에서 생성 및 작업 수행

 

OVS 브릿지 Open Virtual Switch

  여러가지 추가 프로토콜 사용 sdn환경에서 원활한 작동하기위함

 

인스턴스의 네트워크 패킷 흐름 (VM - VM : Guest 간)

1. VM → Linux Bridge (보안 그룹 정책 확인)

2. L-B → br-int(OVS) 통합 브릿지

3. br-int → br-tun (터널)

4. br-tun → eth0 (물리적인 인터페이스) → (보내는 인스턴스) compute node

5. eth0 → eth0 (터널링)    → compute node → network node

6. eth0 → br-tun

7. br-tun → br-int (네트워크 네임스페이스)

8. 네임 스페이스에서 전달 대상 확인

9. br-in → br-tun → eth0 → eth0 → br-tun → br-int (전달된 순서의 역순으로 전달)

                                    (받는 인스턴스가 동작 중인 compute node)

10. br-int → L-B (보안그룹 정책 확인)

11. LB → VM 전달

 → 많은 인스턴스가 있을 수록 network node의 부담이 커진다.

 

분산 라우터 (DVR) : 각 compute 노드마다 외부네트워크로 직접 연결

네트워크 구성이 OVS를 사용하는 경우 DVR 기능을 별도로 설정해야함.

네트워크 구성을 OVN으로 변경하면 DVR 기능이 기본 설정.

  (packstack - answers 파일) (직접설치  - /etc/neutron 디렉터리 ) 

 

네트워크 연결 유형 (type)

1. local : 단일 네트워크 (테스트용)

2. flat : 여러 대의 노드를 사용할 수 있는 네트워크

          인스턴스와 외부네트워크를 직접 연결 가능

          물리적인 네트워크/인터페이스가 여러 개 필요

3. vlan : 네트워크 분할을 통해 인스턴스와 물리 시스템의 네트워크 공유가 가능

           스위치에서 vlan 설정 시, 논리적으로 네트워크 분할

           4095개의 네트워크 사용 가능

4. VXLAN : vlan의 확장버전 (논리적 네트워크 개수 증가 및 터널링 기술)

5. GRE : VXLAN과 유사한 프로토콜

6. Geneve : 각 프로토콜 간에 호환성을 지원하기 위해 사용

 

[root@controller ~]# yum install -y bridge-utils → 설치 (필요)

[root@controller ~]# brctl show → 명령어 사용 가능
bridge name     bridge id               STP enabled     interfaces

[root@controller ~]# ovs → 명령어 사용 가능
ovs-appctl       ovs_comp_helper  ovsdb-server     ovs-dpctl        ovs-ofctl        ovs-vsctl
ovs-bugtool      ovsdb-client     ovsdb-tool       ovs-dpctl-top    ovs-pki          ovs-vswitchd

[root@controller ~]# ovs-vsctl → 명령어 사용 가능
add                   clear                 emer-reset            list                  remove
add-aa-mapping        --columns=            --fake                list-br               --retry
add-bond              --commands            --fake-iface          list-ifaces           set
add-bond-iface        comment               find                  list-ports            set-controller
add-br                create                --format=             --log-file=           set-fail-mode
add-port              --data=               get                   --max-column-width=   set-manager
--all                 --db=                 get-aa-mapping        --may-exist           set-ssl
--bare                del-aa-mapping        get-controller        --no-headings         show
--bootstrap           del-bond-iface        get-fail-mode         --no-syslog           --ssl-ciphers=
--bootstrap-ca-cert=  del-br                get-manager           --no-wait             --ssl-protocols=
br-exists             del-controller        get-ssl               --oneline             --syslog-method=
br-get-external-id    del-fail-mode         --help                --options             --syslog-target=
br-set-external-id    del-manager           --id=                 --peer-ca-cert=       --timeout=
br-to-parent          del-port              iface-to-br           port-to-br            --verbose=
br-to-vlan            del-ssl               --if-exists           --pretty              --version
--ca-cert=            destroy               --inactivity-probe=   --private-key=        wait-until
--certificate=        --dry-run             init                  --real                --with-iface

 

[root@controller ~(keystone_admin)]# vim /etc/neutron/dhcp_agent.ini
[root@controller ~(keystone_admin)]# vim /etc/neutron/neutron.conf

  13 bind_host=0.0.0.0

  90 allow_overlapping_ips=True    → overlay 기능 등에 대한 활성화

[root@controller ~(keystone_admin)]# grep -v -e '^#' -e '^$' /etc/neutron/plugins/ml2/ml2_conf.ini

 → 2계층 플러그인들에 대한 설정 확인
[DEFAULT]
[l2pop]
[ml2]
type_drivers=vxlan,flat  → gre, vlan 등이 추가될 수 있음.
tenant_network_types=vxlan → 내부 네트워크 = 테넌트 네트워크  타입
mechanism_drivers=openvswitch
extension_drivers=port_security,qos → 확장드라이버
path_mtu=0
[ml2_type_flat]
flat_networks=*
[ml2_type_geneve]
[ml2_type_gre]
[ml2_type_vlan]
[ml2_type_vxlan]
vni_ranges=10:100
vxlan_group=224.0.0.1
[securitygroup]
firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group=True

컨트롤러 노드 또는 네트워크 노드로 분리되어져 설치

compute 노드에는 L2 agent (인스턴스 연결에 대한 설정) 가 동작

 

[root@controller ~]# ip netns list  → 네임스페이스
qdhcp-6b519782-4caa-4eed-abcf-4e89d78e9a87 (id: 0)

[root@controller ~]# man ip netns

[root@controller ~]# ip netns exec qdhcp-6b519782-4caa-4eed-abcf-4e89d78e9a87 ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
9: tapa3b4aad7-ac: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default qlen 1000

[root@controller ~]# ip netns exec qdhcp-6b519782-4caa-4eed-abcf-4e89d78e9a87 ping 8.8.8.8

 

→ ip netns 를 통해 중간 네트워크의 주소나 문제점(장애)을 찾을 때 도움이 될 수 있다.

 

 

---------------------------------------------------------------------------------

 

Cinder : 블록 스토리지 관리

 

오픈스택 스토리지의 2가지 분류

  임시 스토리지 : 인스턴스의 생명주기와 동일

                      인스턴스 생성 시 만들어지고 삭제 시 같이 제거되는 저장 장치

                      Flavor 를 통해서 생성되는 인스턴스의 디스크 공간

                      Root / Ephemeral disk → 일반적으로 로컬 스토리지 사용 (compute node)

                      로컬 스토리지 사용 → 성능향상

                      데이터가 영구저장이 안된다.

 

  영구 스토리지 : 데이터를 인스턴스 존재여부와 무관하게 영구저장

                    ①블록스토리지 (Cinder) ②오브젝트스토리지 (Swift) ③공유파일 스토리지(Manila)

 

                    블록스토리지(볼륨스토리지) : 볼륨을 생성하여 인스턴스에 연결

                    오브젝트스토리지 : 인스턴스 유무와 무관하게 사용 가능

                    공유파일스토리지 : 여러 인스턴스에 동시 연결가능

 

Cinder

 인스턴스에서 사용할 장치를 제공

 장치를 제공하는 방식이 볼륨

 볼륨은 영구적인 저장장치

 한 번에 하나의 인스턴스에 연결

 사용하던 볼륨은 다른 인스턴스에 다시 연결해서 사용 가능

 LVM 등의 방식을 이용해서 서비스 제공

 기본방식은 LVM 이지만, 권장하지 않음

  기본은 비어있는 볼륨을 생성

  기존의 볼륨/스냅샷/이미지 등을 이용해서 생성 가능

  이미지를 

 

볼륨을 추가 연결 : 추가로 연결한 장치에 저장한 데이터만 영구

                       필요한 데이터만 저장

                       저장공간을 적게 사용

 

볼륨으로 인스턴스 생성 : 전체 데이터가 모두 저장

                           편하지만 저장 공간이 많이 필요

                           인스턴스를 삭제해도 기존 데이터를 유지

 

 

인스턴스 생성 순서 (프로세스)

 1. 사용자 작업 실행 (명령어/대시보드) - Horizon

 2. 사용자 인증을 위해 Keystone 서비스에 요청

 3. 인스턴스 생성 요청 - Nova 

 4. 이미지를 요청 - Glance 

 5. 이미지와 플레이버를 통해 스케쥴링 작업 - Nova

 6. 해당 인스턴스에 연결해줄 네트워크구성 작업 수행 - Neutron

 7. 인스턴스에 제공할 저장공간을 확인하고 할당 - Cinder

 

 

[root@controller ~]# grep -v -e '^$' -e '^#' /etc/cinder/cinder.conf
[DEFAULT]
backup_swift_url=http://10.0.2.10:8080/v1/AUTH_    → swift 를 이용한 백업방식(오브젝트 스토리지에)
backup_swift_container=volumebackups
backup_driver=cinder.backup.drivers.swift
enable_v3_api=True
storage_availability_zone=nova
default_availability_zone=nova
default_volume_type=iscsi
auth_strategy=keystone
enabled_backends=lvm   → 백엔드 lvm
osapi_volume_listen=0.0.0.0
osapi_volume_workers=2
debug=False
log_dir=/var/log/cinder
transport_url=rabbit://guest:guest@10.0.2.10:5672/
control_exchange=openstack
api_paste_config=/etc/cinder/api-paste.ini
glance_host=10.0.2.10   → glance 이미지 저장소의 주소 (이미지 대용으로 cinder를 사용할 수 있음)
nova_catalog_info=compute:nova:publicURL
nova_catalog_admin_info=compute:nova:adminURL
[backend]
[backend_defaults]
[barbican]
[brcd_fabric_example]
[cisco_fabric_example]
[coordination]
[cors]
[database]
connection=mysql+pymysql://cinder:5c459f1194294c13@10.0.2.10/cinder
[fc-zone-manager]
[healthcheck]
[key_manager]
backend=cinder.keymgr.conf_key_mgr.ConfKeyManager
[keystone_authtoken]
auth_uri=http://10.0.2.10:5000/
auth_type=password
auth_url=http://10.0.2.10:35357
username=cinder
password=d89b77588ea84ba5
user_domain_name=Default
project_name=services
project_domain_name=Default
[matchmaker_redis]
[nova]
[oslo_concurrency]
lock_path=/var/lib/cinder/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
driver=messagingv2
[oslo_messaging_rabbit]
ssl=False
[oslo_messaging_zmq]
[oslo_middleware]
[oslo_policy]
policy_file=/etc/cinder/policy.json
[oslo_reports]
[oslo_versionedobjects]
[profiler]
[service_user]
[ssl]
[vault]
[lvm]   → 스토리지 백엔드가 lvm 이기 때문에 해당설정영역이 활성화 (그외 ceph등)
volume_backend_name=lvm
volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
iscsi_ip_address=10.0.2.10 → iscsi 타겟의 주소
iscsi_helper=lioadm
volume_group=cinder-volumes
volumes_dir=/var/lib/cinder/volumes

 

p524 LVM 스토리지

 

볼륨 스냅샷 : 현재 상태를 저장해서 복제하는 용도  ( ※ 버추얼박스 스냅샷 : 되돌리는 용도 )

 → 볼륨이 연결된 상태에선 데이터 손상 발생가능성이 있으므로 [마운트(콘솔)/연결(오픈스택) 해제] 후 스냅샷 추천

 스냅샷을 인스턴스에 연결하면 마운트는 별도로 해야하지만 포맷도 되어있는상태로 동일한 볼륨을 사용할 수 있다.

 

볼륨생성 시, 이미지(OS)를 통해서 볼륨을 만들면 OS가 설치

인스턴스 생성 시, 부팅소스가 있는 스냅샷이나 볼륨도 이용가능

 

---------------------------------------------------------------------------------

 

Swift : 오브젝트 스토리지 관리

 오브젝트 스토리지 ? 

 스토리지를 구성한 후에 서비스 API 통해 접근 ( http 프로토콜 등 )

 다양한 종류의 데이터(파일)를 저장 (구조화되지 않은 데이터 포함)

 저장하는 데이터 개체를 오브젝트라고 한다

 저장 시에는 메타 데이터 + 바이너리 

 분산 시스템 (데이터를 복제해서 분산 저장)

    → 수평적 확장이 쉽고 / 장애시에도 다른곳에 저장되어있는경우 복구가 용이

 내부적인 리밸런싱 기능 제공

 최소 3개의 데이터 복제 권장 (3개 이상의 스토리지 및 시스템 권장)

 

swift-proxy : API 요청에 대한 응답

swift-account : 사용자에 대한 접근 제어

swift-container :  요청한 오브젝트가 존재하는지 확인

swift-object : 메타데이터를 이용하여 실제 데이터가 저장된 곳을 확인하여 오브젝트를 서비스

→ 기본적으로 분산정책을 사용해서 안정성은 높지만 효율성은 떨어짐

 

answer파일 설정참고

If left empty, Packstack creates a loopback device for test setup. packstack설치시, 루프백인터페이스에만 저장
CONFIG_SWIFT_STORAGES=

CONFIG_SWIFT_STORAGE_ZONES=1 : 분산저장 영역(zone)의 갯수 - 루프백 인터페이스

 

P343 Swift 아키텍쳐 리전 존 노드

 

[root@controller ~(keystone_admin)]# openstack container create container1
[root@controller ~(keystone_admin)]# openstack object create con02 fileA
+--------+-----------+----------------------------------+
| object | container | etag                             |
+--------+-----------+----------------------------------+
| fileA  | con02     | bf072e9119077b4e76437a93986787ef |
+--------+-----------+----------------------------------+
[root@controller ~(keystone_admin)]# openstack object create --name fileB con02 fileA

 → --name 옵션으로 같은 파일이지만 컨테이너에 저장하는 이름을 다르게 할 수 있다.

+--------+-----------+----------------------------------+
| object | container | etag                             |
+--------+-----------+----------------------------------+
| fileB  | con02     | bf072e9119077b4e76437a93986787ef |
+--------+-----------+----------------------------------+

[root@controller ~(keystone_admin)]# openstack object list con02  → fileA, fileB로 각각저장된 것 확인
+-------+
| Name  |
+-------+
| fileA |
| fileB |
+-------+

[root@controller ~(keystone_admin)]# openstack object save con02 fileB → save명령어로 다운로드
[root@controller ~(keystone_admin)]# ls
fileA fileB

 

오브젝트 스토리지 사용 시 주의 사항

※ 명령어를 통해서는 절대경로의 파일을 업로드/다운로드할 수 있으나 대쉬보드에서는 해당 오브젝트를 읽을 수 없다.

 1. 작업 시 _member_ 역할 + swiftoperator 역할 이 부여되어 있어야 한다.

 2. 명령어 사용 시에는 파일이름을 쓰는 방식에 따라서 폴더가 생성될 수 있다.

 3. 명령어 사용 시 절대경로로 파일이름 지정 시 URL/대시보드에서 접근이 불가하다

 4. public 체크를 해야 url 주소로 접근이 가능하다. 

 

P358 설정

/etc/swift/proxy-server.conf  

[DEFAULT]
bind_port = 8080
workers = 2
user = swift
bind_ip=10.0.2.10  → 다른 서비스들과 다르게(0.0.0.0) 특정 ip에서 접근가능하게 설정 
log_name=proxy-server
log_facility=LOG_LOCAL2
log_level=INFO
log_headers=False
log_address=/dev/log

 

/etc/swift/account-server.conf  

[DEFAULT]
devices = /srv/node → 오브젝트 경로
bind_ip = 10.0.2.10
bind_port = 6002
mount_check = true
user = swift
workers = 2
log_name = account-server
log_facility = LOG_LOCAL2
log_level = INFO
log_address = /dev/log

 

 

[root@controller ~(keystone_admin)]# ls /srv/node/swiftloopback/accounts/22582/63d/160dac6dd6fedd81fdef0af112e9663d/
160dac6dd6fedd81fdef0af112e9663d.db  160dac6dd6fedd81fdef0af112e9663d.db.pending

[root@controller ~(keystone_admin)]# ls

 /srv/node/swiftloopback/accounts/22582/63d/160dac6dd6fedd81fdef0af112e9663d/
160dac6dd6fedd81fdef0af112e9663d.db  160dac6dd6fedd81fdef0af112e9663d.db.pending

 

/etc/swift/container-server.conf  

[DEFAULT]
devices = /srv/node  → account-server와 마찬가지로 동일한 경로를 가르키고 있다.
bind_ip = 10.0.2.10
bind_port = 6001
mount_check = true
user = swift
log_name = container-server
log_facility = LOG_LOCAL2
log_level = INFO
log_address = /dev/log

 

Ring

링 - 데이터를 분산처리하고 저장할때에 저장 위치를 결정

/etc/swift/ 디렉터리에서 진행

  account / container / object  + builder

 swift-ring-builder 명령어 → 생성 시, /etc/swift/에 저장

[root@controller ~(keystone_admin)]# ls -l /etc/swift/*ring*
-rw-r--r--. 1 root root 732 Jun 27  2020 /etc/swift/account.ring.gz
-rw-r--r--. 1 root root 733 Jun 27  2020 /etc/swift/container.ring.gz
-rw-r--r--. 1 root root 730 Jun 27  2020 /etc/swift/object.ring.gz

 create  : 링 파일 생성

          생성할 파일이름 /

          파티션(part_power) 개수 / 복제본(replica) 개수 / 잠금상태의 시간(min_parts_hours)

 add : 링 파일에 각 장치에 대한 정보를 추가

          Region  / Zone 이름

          IP주소 / 포트 번호

          디바이스 이름

 rebalance : 기존의 파티션 (장치)과 새로운 파티션 간에 균형을

          맞추기 위해 사용하는 재분배 명령어

[root@controller swift]# swift-ring-builder account.builder create
swift-ring-builder <builder_file> create <part_power> <replicas>
                                         <min_part_hours>
    Creates <builder_file> with 2^<part_power> partitions and <replicas>.
    <min_part_hours> is number of hours to restrict moving a partition more
    than once.

 

 

++ Heat : 리소스를 동적으로 관리 (탬플릿 기반)

++ Ceilometer : 리소스 사용량을 측정

※ Cinder, Swift, Manila 등의 스토리지 관리 서비스 사용

               

 

 

 

 

 

  

  

 

  

 

 

 

728x90

'openstack' 카테고리의 다른 글

20210713 (화) ovs 브릿지  (0) 2021.07.13
20210713 (화) 리눅스 브릿지  (0) 2021.07.13
20210709 (금) 설치 후 기초 #4  (0) 2021.07.09
20210708(목) 설치 후 기초#3  (0) 2021.07.08
20210707 (수) 설치 후 기초#2  (0) 2021.07.07
Comments