본문 바로가기
Development(Web, Server, Cloud)/22) LINUX - Cloud

클라우드 37일차

by tonyhan18 2022. 2. 23.
728x90

가상화

- 서버 가상화

???

물리 서버 업그레이드를 위해 서버를 잠시 멈추는 경우 downtime이라는 컴퓨터를 잠시 끄는 시간이 필요해진다. 이때 가용성이 떨어진다.(가용성 100%에서 떨어진다)

가상화를 진행한다면 물리자원 위에 하이퍼바이저를 바로 얹거나(Bare Metal = Type1) 혹은 OS 위에 하이퍼바이저를 올린다.(Hostd Based = Type2)

1) Bare Metal 진행시 : 하이퍼바이저가 물리자원에 요청해서 가상자원을 추상화하고 가상화해서 App에 올린다 = VM(설치기반),인스턴스(배포기반)

=> 하이퍼바이저가 물리자원을 추상화하고 추상화 되어 있는 자원들을 조합한 가상화를 통해 외부에 서버를 제공하는 기술, 반드시 Hypervisor를 통해 구현할 수 있다.

=> Hypervisor

  type1(베어메탈) -> KVM, ESXi, XenServer, Hyper-V

  type2(호스트기반) -> VMware, VirtualBox

 

- 네트워크 가상화

물리적인 네트워크를 가상화 기술을 통해 논리적으로 분할하여 사용하는 기술

1. VLAN

물리 스위치 하나를 논리적으로 분할하여 사용하는 기술

2. VRF(Virtual Routing Forwarding)

????

IP를 놓고 해석하면 네트워크를 잘못해석해서 이상한 곳으로 패킷을 보낼 수 있다. 그래서 ISP에서는 각 회사를 위한 별도의 가상 라우터와 라우팅 테이블을 제공한다. 그래서 각 회사를 위한 독립 라인이 만들어진다.

이와 유사하게 가상의 라우터를 통해 별도의 라우팅 테이블을 제공하는 기술(VLAN)

 

스위치는 가상의 방이 존재하여 모든 포트가 이 방에 들어가 있는데 이걸 같은 네트워크끼리 방으로 논리적으로 나누어준다. 라우터는 인터페이스에 직접 ip 주소를 넣지만 스위치는 vlan에 집어넣는다. 그래서 스위치는 vlan = 1network이다. 라우터는 1 interface = 1 network

 

- 데스크탑 가상화(VDI)

서버가상화 기술과 유사. PC를 가상화해서 템플릿 PC를 구현하고 여기에 필요한 소프트웨어들을 설치해주는 방식이다.

 

- 스토리지 가상화1

물리적으로 나뉘어 있는 스토리지를 논리적으로 묶고 재 분할 하는 등의 기술을 제공하는 것, 클러스터링,

???

thick provisioning : VM이 요청한 사이즈만큼을 물리자원에서 별도로 할당하여 제공하는 기술

thin provisioning : VM이 요청한 사이즈를 제공하지만 실제 물리자원에서는 실제 사용한 공간만큼만 제공하는 기술(핵심) - 이때 데이터의 백업은 클라우드에 하자

1. 파일 스토리지 : 공간 일부를 부여

2. 블록 스토리지 : 공간 일부를 사용

3. 오브젝트 스토리지 : 원격

 

'

현재 우리가 작업중인 공간은 위와같이 생기었다.

 

공인 IP를 주는 방법

 

????

 

 

첫번쨰 KVM 설정에서 하나의 이더넷 포트는 위와같이 되어 있다.

 

br0를 만들어주자.

 

???

이때 vm의 interface에는 source br0로 하는 부분이 들어가 있다. 이때 live migration을 위해 xml을 다른 kvm에 넘기어 주고 똑같은 서비스를 받으려면 반드시 같은 네트워크 상태여야 하다.

 

br0와 eth0의 설정을 위와같이 바꾼다.

 

???

 

```

virt-install --name CentOS7_02 --vcpus 1 --ram 1024 --network network:br0,model=virtio --disk /cloud/CentOS7_02.qcow2 --import --noautoconsole

```

스토리지

-> file storage(NAS, NFS)

-> block storage(iSCSI, FC, GlusterFS, Ceph)

-> object storage (사용자별로 일정 저장공간 제공 : s3, swift, google drive

 

????

 

클라우드환경에서의 네트워크

aws vpc subnet database multi az

 

각각의 작업 공간 = 테넌트

테넌트들의 묶음 = 멀티 테넌시

 

VPC = virtual private cloud

 

????

 

cloud 환경에서의 네트워크

- Region 내에 VPC를 생성하게 된다.

- Region은 물리적인 환경이 아니라 여러 AZ(Zone)의 논리적인 조합이며 하나의 Region에 속한 Zone은 서로간에 네트워크, 전원 등이 이중화 되어 있다.

 

???

 

이 상황에서 우리 회사에 서버가 2대 있다고 가정하자. a zone 에서 a, b 서버가 존재하고 그 위에 Hypervisor가 올라간다. 그리고 가상서버를 올린다. 이때 인터넷을 통해서 외부와 연결이 되도록 만든다. 이때의 가상서버에는 사설 ip가 들어간다.

그리고 이 vm 아래에 sw가 있어서 상호간 통신이 가능하다.

또한 vm위에는 vSW가 존재하고 이 스위치에 연결된 사설 ip가 존재할때 상호 통신은 안된다. 하지만 이때 가상머신을 하나의 테넌트에서 만든것이다.

그래서 172.16은 EIP인 공인 IP로 연결해 인터넷이 되도록 만들고 웹서버와 DB서버는 반드시 사설로 연결되도록 해야한다. 그래서 vSW를 연결하면 어지저찌 연결이 된다. 이러면  migration이 될 것이다. 이렇게 하려면 192.168.1.때는 터널을 만들어 주어야 하니 다음과 같이 만들어보자

 

터널이 있다. 시작은 172.16.1.10이고 끝은 172.16.1.11로 하자

 

????

 

사설주소가 터널을 이용해 통신하는 방식을

 

???

 

클러스터를 하면 자원을 풀에 넣어서 관리한다.

 

????

 

Overlay network

- 터널링을 이용하여 모든 서버들의 사설 주소를 공유하여 사용한다.

- 물리적으로 떨어져 있는 사설 주소라고 하더라도 하나의 네트워크로 동작하게 되어 라이브 마이그레이션에 유연하게 대응할 수 있다.

- 터널링은 GRE tunnel, VxLAN을 이용하여 구성할 수 있다. 둘다 무겁다.

- 모든 가상 스위치에서 터널링이 지원되는 것은 아니다.

br0로 만든 linux bridge는 지원되지 않는다.

- vmware 오픈 표준스위치, cisco nexus1000v 와 같은 상용스위치와 오픈소스 기반의 openvswitch(ovs)에서 지원된다,

 

linux bridge vs ovs

- linux bridge : 단순 L2 기능만을 제공(Data Plane 만 지원, Control Plane 지원 X). 터널링, 라우팅, NAT, QoS, VLAN 기능을 제공되지 않는다.

- ovs : L2~L4(Data의 CAM기능 + Control 의 TCAM을 지원), 일부 L7까지 커버함, 터널링(VxLAN, GRE), 라우팅, NAT, QoS, SDN을 지원 -> 프로그램짤 수 있음

 

```

yum install -y epel-release https://www.rdoproject.org/repos/rdo-release.rpm

yum install -y openvswitch bridge-utils
yum update -y
systemctl start openvswitch && systemctl enable openvswitch
ovs-vsctl show

위의 순서로 먼저 설치해보자

 

네트워크 카드를 변경해주자

```

cd /etc/sysconfig/network-scripts/

cp ifcfg-br0 ifcfg-vswitch01

vi ifcfg-vswitch01

```

 

```

vi ifcfg-eth0

```

```

systemctl restart network

ovs-vsctl show

```

에러가 뜬다 ㅠ 그냥 vm을 껏다키니 정상적으로 출력된다.

과제

PCS를 이용한 HA구성 (yoanp.github.io)

 

PCS를 이용한 HA구성

pcs: pacemaker/corosync 설정,관리 시스템 pacemaker: 고가용성 클러스터 리소스 관리자 (고장을 인지한 경우 대기장비로 서비스를 넘깁니다.- failover) corosync: 그룹커뮤니케이션 시스템을 구현하기 위한 H

yoanp.github.io

 

ovs-vsctl -> ovs 컨트롤러이다.

 

ovs-vsctl show 결과를 해석해보자

 

 

Bridge : vswitch01이 있다.

Port 포트가 vswitch01 과 eth0가 존재한다.

typeinternal은 내부관리용, 연결용이다. 즉 vswitch01은 내부 연결용이다.

 

???

 

이제 할것은 서버를 하나준비하고 그 서버를 vswitch01에 연결하는 것을 해보자.

그리고 eth간에는 overlay network(GRE tunnel)를 만들자 그러면 하나의 가상머신이 다른곳으로 가더라도 계속 연결이 가능해진다.

 

????

 

CentOS7-1.qcow2, CentOS7-2.qcow2를 만들었다. 이걸 가지고 연결해주자

 

```

virt-install --name CentOS01 --vcpus 1 --ram 1024 --network network:default --disk /cloud/CentOS7-1.qcow2 --import --noautoconsole

virsh destroy CentOS01​​

ssh kvm2 virsh destroy CentOS01​​2

```

 

인터페이스를 ovs타입으로 변경하는 방법

```

virsh edit CentOS01

```

 

????

 

위와같이 내용을 수정해버리자 그러면 잘되기는 하는데 너무 느리다.

 

터미널로 수정해보자

virt-xml CentOS01 --edit --network virtualport_type='openvswitch',\
source='vswitch01',target='CentOS01_port1'

반드시 띄어쓰는 부분이 있으면 안된다.

 

아직 안바뀐 부분은 interface type이나 source부분이 다르다

 

그래서 그냥 삽입했다.

```

<interface type='bridge'>
      <source bridge='vswitch01'/>
      <virtualport type='openvswitch'/>
      <target dev='CentOS01_port1'/>
      <model type='virtio'/>
    </interface>

```

 

vswitch02 도 예고해놓자

 

???

그럼 우리는 vswitch01로 외부로 나가고

vswitch02로 overlay network를 활성화시키자

 

 

```

<interface type='bridge'>
      <source bridge='vswitch01'/>
      <virtualport type='openvswitch'/>
      <target dev='CentOS01_port1'/>
      <model type='virtio'/>
    </interface>

    <interface type='bridge'>
      <source bridge='vswitch02'/>
      <virtualport type='openvswitch'/>
      <target dev='CentOS01_port2'/>
      <model type='virtio'/>
    </interface>

```

 

 

????

 

만약 포트의 이름을 지정하지 않으면 임의의 포트를 지정해 준다.

만약 KVM1, KVM2에서 각각 가상머신을 생성했을 때 둘다 동일한 포트로 만들어졌을 경우를 가정해 보자. VM이 다른 호스트로 마이그레이션 되면 해당 포트를 기존의 VM이 사용하고 있으므로 마이그레이션 할 수 없게됨

이를 대비하여 위의 경우에서처럼 CentOS2_01과 같은 이름을 지정해 주는 것이 좋음.

 

KVM1에서의 터널

```

ovs-vsctl add-port vswitch02 gre12 -- set interface gre12 type=gre options:remote_ip=211.183.3.102

```

 

KVM2에서의 터널

```

ovs-vsctl add-port vswitch02 gre12 -- set interface gre12 type=gre options:remote_ip=211.183.3.101

```

 

하고 실행시키니 에러가 겁나게 뜨면서 실행은 안된다. 어쩔 수 없이 물리자원을 좀 더 늘려보았다.

 

그래도 안된다.

 

걍  cirros를 쓰기로 했다

 

cirros download로 검색하면 나오는 페이지의 5.0 버전 16MB 를 사용한다

 

Index of /0.5.0 (cirros-cloud.net)

 

Index of /0.5.0

 

download.cirros-cloud.net

다운받아서 파일 두개 만들자

 

```

virt-install --name cirros-1 --vcpus 1 --ram 512 --disk /cloud/cirros-1.qcow2 --import --noautoconsole

```

으로 kvm1, kvm2 모두 만들고 종료해놓자

 

```

<interface type='bridge'>
      <source bridge='vswitch01'/>
      <virtualport type='openvswitch'/>
      <target dev='cirros01_port1'/>
      <model type='virtio'/>
    </interface>

    <interface type='bridge'>
      <source bridge='vswitch02'/>
      <virtualport type='openvswitch'/>
      <target dev='cirros01_port2'/>
      <model type='virtio'/>
    </interface>

```

 

에러 존나 난다.

```

virsh edit CentOS01

```

해서 첫번째 인터페이스는 없애자

728x90