모니터링 시스템 - Zabbix, cacti, nagios
- kvm1,kvm2 -> /remote, storage-> /cloud에 설치
- storage의 경우 외부 연결이 필요없다. 따라서 특별한 경우가 아니라면 인터넷 연결용 인터페이스는 비활성화 시켜두어야 한다.
KVM1
mv /remote/CentOS-7-x86_64-Minimal-2009.iso /remote/CentOS7-2009.iso
- 1. 사용할 디스크(qcow2) 를 미리 준비하기
[root@kvm1 remote]# qemu-img create -f qcow2 /remote/centos1.qcow2 10G
- 2. 준비된 디스크와 컴퓨팅 자원을 이용하여 설치하기
virt-install --name centos1 --vcpus 1 --ram 1024 --network network:default --disk /remote/centos1.qcow2 --graphics vnc,port=5901 --location=/remote/CentOS7-2009.iso --noautoconsole
KVM2
2. 설치하면서 디스크 준비까지 한번에virt-install --name centos2 --vcpus 1 --ram 1024 --network network:default --disk /remote/centos2.qcow2,size=10 --graphics vnc,port=5902 --location=/remote/CentOS7-2009.iso --noautoconsole
1. 하이퍼바이저에서 가상머신들의 리스트 확인
virsh list --all
2. 네트워크 리스트 확인
virsh net-list --all
3. kvm 데몬이 재 실행되더라도 동시에 vm 도 재실행이 되도록 하고 싶다면?
virsh autostart [도메인이름] 예)private1
4. 가상머신들의 이름만 확인하고 싶다면?
virsh list --all --name
5. 가상머신들에게 콘솔로 접속하고 싶다면?
virsh console centos1
- 인스턴스 생성시 console line 을 생성하지 않는다면 연결되지 않을 수 있다. 단, 클라우드용 이미지는 이미 콘솔라인이 생성되어 있으므로 바로 연결된다.
6. 가상머신들의 설정 값 확인
6.1 : virsh dumpxml centos1 -> 설정된 가상머신의 xml 파일을 cat 으로 열어보는것과 동일한 효과 6.2 : virsh edit centos1 -> vi centos1.xml 과 같이 편집 모드로 들어갈 수 있다.
7. 네트워크의 설정값 확인 및 수정
7.1 virsh net-dumpxml default -> xml 파일을 cat 으로 보는 것과 같은 효과, 수정 불가 7.2 virsh net-edit default -> vi 로 연결되어 스위치의 구성 내용을 변경할 수 있다
수정이후에는
systemctl restart libvirtd # kvm 데몬 재실행 virsh net-destroy default # default 네트워크 중지 virsh net-start default # default 네트워크 실행 virsh destroy centos1 # 가상머신 종료 virsh start centos1 # 가상머신 시작
8. 가상 머신의 IP 주소 확인
virsh domifaddr centos1
virsh domiflist centos1
9. 새로운 네트워크 만들기
기존 default 네트워크를 이용하여 생성하기
touch private1.xml <network> <name>private1</name> <bridge name='virbr1' stp='on' delay='0'/> <ip address='172.16.100.1' netmask='255.255.255.0'> <dhcp> <range start='172.16.100.201' end='172.16.100.239'/> </dhcp> </ip> </network>
- 종료하고 싶다면
virsh net-define private1.xml
- 삭제하고 싶다면
virsh net-undefine private1.xml
[root@kvm1 ~]# virsh net-list --all Name State Autostart Persistent ---------------------------------------------------------- default active yes yes private1 inactive no yes
- 현재 private1 은 중지중/autostart 는 아니다
[root@kvm1 ~]# virsh net-start private1 Network private1 started [root@kvm1 ~]# virsh net-autostart private1 Network private1 marked as autostarted [root@kvm1 ~]# virsh net-list --all Name State Autostart Persistent ---------------------------------------------------------- default active yes yes private1 active yes yes <--- 변경됨!!!
10. 생성된 별도의 네트워크에 가상머신 연결하기
네트워크 이름 : private1 (스위치의 이름 : virbr1 - 172.16.100.1)
private1 에 연결되는 가상머신들은 172.16.100.201 ~ 172.16.100.239 사이에서 IP 주소를 DHCP 를 통해 할당 받을 수 있다.[root@kvm1 ~]# virsh attach-interface --domain centos1 --type network --source private1 --model virtio --live --config
centos1 에게 network 타입의 private1 네트워크로 연결할 예정이고 랜카드 모델은 virtio 이다. --live 를 통해 가상머신이 동작중인 상태에서 연결할 것이고 --config 재부팅되더라도 설정은 계속 유지하겠다
[실습]
kvm1의 centos1을 kmv2의 centos2에 migrate 해보자 [root@kvm1 ~]# cp private1.xml /remote/ [root@kvm2 remote]# virsh net-define private1.xml Network private1 defined from private1.xml [root@kvm2 remote]# virsh net-start private1 Network private1 started [root@kvm2 remote]# virsh net-autostart private1 Network private1 marked as autostarted [root@kvm2 remote]# virsh net-list --a --all --autostart [root@kvm2 remote]# virsh net-list --all Name State Autostart Persistent ---------------------------------------------------------- default active yes yes private1 active yes yes
- 만약 vnc 포트 오류가 난다면 virsh net-destroy centos1 으로 centos1 의 네트워크를 중지시키고, virsh edit centos1 을 통해 vnc port 번호를 변경한다. 이는 migrartion 했을때 centos1 과 centos2의 vnc port 번호가 동일해서 일어나는 문제이다.
centos1(5900)------------- host:5901 centos2(5900)------------- host:5901
[결과]
11. 연결된 인터페이스 동작중인 상태에서 제거하기 (private1로부터 제거)
[root@kvm2 remote]# virsh domifaddr centos1 [root@kvm2 remote]# virsh detach-interface --domain centos1 --type network --mac [주소] --config [root@kvm2 remote]# virsh destroy centos1 Domain centos1 destroyed [root@kvm2 remote]# virsh start centos1 Domain centos1 started [root@kvm2 remote]# virsh domifaddr centos1
12. 동작중인 가상머신에 추가 디스크가 필요하다면?
[root@kvm2 ~]# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes remote active yes
- 저장 공간 리스트를 확인하자
[root@kvm2 ~]# virsh vol-create-as remote testvol1 1G Vol testvol1 created
- remote 저장소에 1 GB 짜리 testvol1 이름의 볼륨을 생성
[root@kvm2 ~]# virsh vol-list remote | grep testvol1 testvol1 /remote/testvol1
- remote 저장 공간 안에 있는 testvol1 확인
[root@kvm2 ~]# virsh attach-disk centos2 /remote/testvol1 --target sdb --persistent --live Disk attached successfully
- remote 디렉토리아래에 있는 1GB voltest1 을 centos2 의 sdb에 영구적으로 연결하되, 동작중인 현재 상태에서 바로 붙이겠다
ls /dev/sd*
-> sdb 가 추가된 것을 확인할 수 있다.
fdisk /dev/sdb
- 파티셔닝 시작
n <--- 새로운 파티션 만들겠다.
나머지는 모두그냥 엔터!!!mkfs.ext4 /dev/sdb1
- 포맷
mkdir /test mount /dev/sdb1 /test touch /test/from_centos2.txt
- 동작중인 상태에서 연결된 디스크를 제거해 본다.
virsh detach-disk centos2 sdb
[실습]
- 이제 제거된 testvol1 을 centos1 에 연결하고 아무 디렉토리나 만든다음 둘을 마운트 해본다.
정상적인 상태라면 centos2 에서 만든 파일이 보여야 한다[root@kvm2 ~]# virsh attach-disk centos1 /remote/testvol1 --target sdb --persistent --live
mkdir /mytest mount /dev/sdb1 /mytest
- 참고
도커 컨테이너와 같은 경우에는 휘발성이므로 자료가 영구보관되지 않는다. 이 경우 외부에 있는 스토리지를 활용하여 persistent volume(block storage) 을 구성하면 자료를 영구적으로 보관할 수 있게 된다.
13. 인스턴스 삭제하기
- 네트워크 종료
virsh net-destroy default
- 네트워크 삭제
virsh net-undefine private1)
- 종료(destroy)->삭제(undefine)
virsh destroy centos1 ; virsh undefine centos1 --remove-all-storage
- 기존 KVM에서 활동중인 eth0은 routed prot(L3 prot = IP 입력가능)이다.
- IP가 입력되는 포트는 별도의 네트워크가 구성된다. = 네트워크를 구분하게 된다.
- 현재 실습에서 가상머신은 외부와 직접 통신하지 않으므로 공인 주소를 할당 받을수 없다.
- 기존 eth0를 routed port에서 ethrnet port(L2)로 변경하면 eth0는 스위치를 하나의 포트로 동작하게 된다.
[실습]
[root@kvm1 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm1 network-scripts]# ls ifcfg-eth* ifcfg-eth0 ifcfg-eth1 ifcfg-eth2 <--- eth0 이 인터넷 연결용 인터페이스
[root@kvm1 network-scripts]# cp ifcfg-eth0 ifcfg-br0
[root@kvm1 network-scripts]# vi ifcfg-br0
[root@kvm1 network-scripts]# vi ifcfg-eth0 BRIDGE=br0 #어떤 스위치에 포함될 것인가를 지정
[root@kvm1 network-scripts]# systemctl restart network
[root@kvm1 network-scripts]# brctl show
- 리눅스에서 제공하는 오픈소스 스위치인 linux bridge 의 정보를 확인할 수 있다.
[브리지 네트워크에 신규 VM 연결하기]
[root@kvm1 network-scripts]# virt-install --name centos11 --vcpus 1 --ram 1024 --disk /remote/centos11.qcow2 --import --network bridge:br0 --graphics vnc --noautoconsole
- 공인 Ip 로 들어온 것 을 확인
웹 서버를 실행하고 윈도우10에서 접속 가능여부확인해보기
systemctl start httpd systemctl stop firewalld systemctl restart httpd
http://211.183.3.131/ 접속
[kvm2][root@kvm2 network-scripts]# virsh list --all Id Name State ---------------------------------------------------- 7 centos11 running - centos1 shut off
[root@kvm2 network-scripts]# cd [root@kvm2 ~]# virsh migrate --live centos11 qemu+ssh://kvm1/system --verbose --persistent --unsafe root@kvm1's password: Migration: [100 %]
우리는 현재 별도의 컨트롤 노드는 없다.
이를 대신하여 172.16.1.101을 컨트롤 노드로 활용할 계획이다.
컨트롤 노드에서 관리할 컴퓨터 노드의 주소는 172.16.1.101, 172.16.1.102 두 대이다.ssh root@kvm1 virsh list --all ssh root@kvm2 virsh list --all
단, 패스워드는 묻지 말아야 한다.
kvm1에서 /etc/ssh/ssh_config 파일에는 root로 모든 호스트에 접속할 때에는 갱ㄴ키를 이용하도록 해야한다.
각 서버에서 /etc/ssh/sshd_config에서는 public key를 이용하여 인증하도록 설정해야 한다.
[답안]
ssh 서비스를 client(/etc/ssh/ssh_config) server(/etc/ssh/sshd_config)
보안상 password login 은 추천하지 않는다.!!43 PubkeyAuthentication yes 65 PasswordAuthentication no
kvm1
ssh-keygen -q -f ~/.ssh/id_rsa -N ""
- ~/.ssh/ 에 id_rsa(개인키) 파일과 id_rsa.pub(공개키) 파일이 만들어진다
- 공개키는 접속하고자 하는 서버의 ~/.ssh/authorized_keys 에 넣어둔다.
- /etc/ssh/ssh_config 파일에 아래와 같은 내용을 추가하여 해당 호스트로 접속할 때에는 기본적으로 .ssh/id_rsa 를 이용하여 접속하도록 설정해둔다.
Host kvm1 User root IdentityFile /root/.ssh/id_rsa Host kvm2 User root IdentityFile /root/.ssh/id_rsa
- 변경된 사항은 서버에 활성화 되어야 하므로 각 서버에서 systemctl restart sshd 를 하여 갱신한다.
[결과확인]
- 만약 다음과 같은 오류가 발생한다면 아래 명령어를 통해 해결한다.
ssh-keygen -R [ IP or DomainName]
- 저장 공간을 사용하기 위해서는 로컬과 리모트 두가지 방식이 있다.
1.로컬 디스크
- /dev/sda
2.Remote Disk
1. NFS
/remote <----mount---- /cloud
- File Storage 방식
2. ISCSI
/dev/sda <------ISCSI----- volume
- Block Storage 방식
NFS 보다 사용률이 더 높음