달력

42025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

1. ssh 자동 로그인

#!/usr/bin/expect 

spawn ssh  userid@host

expect -re "password: "

#sleep 1 

send " password\r"

interact

 

2. telnet 자동 로그인

#!/usr/bin/expect 

spawn ssh  userid@host

expect -re "login: " 

#sleep 1 

send " userid\r" 

expect -re "password: "

#sleep 1 

send " password\r"

interact

 

원본 위치 < http://dimdim.tistory.com/45>

 

Posted by 짜꾸미의골골몽
|

### for문 안에 변수(명령어) 사용 ###
for ENV in /root/backup_list.txt
do
    IP=(`echo $ENV | awk -F '_' '{print $1}'`)
    NAME=(`echo $ENV | awk -F '_' '{print $2}'`)

    tar cvfz $BAK_DIR/$IP"_"$NAME.tar.gz $LOG_DIR/$YDATE*.log > /dev/null 2>&1
    
done

Posted by 짜꾸미의골골몽
|

▶ 기본 설치 방법

yum install 패키지이름

 

▶ rpm 파일 설치 방법

yum localinstall rpm파일이름.rpm

 

yum을 이용한 local directory에 있는 rpm package 파일을 설치

(예로 DVD를 mount해두었거나 update 사이트를 nfs로 마운트 해둔경우)

 

rpm 파일이 있다면 'rpm -Uvh' 대신 'yum localinstall' 을 실행해 패키지를 설치할 수 있다. 좋은 점은 현재 디렉터리의 rpm 파일에 의존성 문제가 있을 때, 문제를 해결할 수 있는 파일을 인터넷에서 다운로드해서 설치해준다는 점이다. 'rpm -Uvh rpm파일이름.rpm' 대신에 사용하면 된다.

 

▶ 업데이트 가능한 목록 보기

yum check-update

 

시스템에 설치된 패키지 중에서 업데이트가 가능한 패키지의 목록을 출력해준다.

 

▶ yum을 이용한 패키지 검색 또는 문구 검색

# yum search <strings>

 

▶ 업데이트

yum update <rpm package name>

yum localupdate <rpm file name>

 

실제적으로는 'yum install 패키지이름'을 실행하면, 기존에 설치되지 않은 패키지는 새로 설치해주고, 이미 설치되어 있다면 업데이트를 해준다.' 그렇기 때문에 'yum update 패키지이름'은 사용할 일이 없다.

 

아무런 옵션을 정하지 않고 'yum update'만 실행하면 업데이트 가능한 모든 패키지를 업데이트하므로, 시간이 무척 오래 걸릴 것이다.

 

▶ 삭제(yum을 이용한 package remove)

yum remove 패키지이름

 

기존에 설치된 패키지를 제거한다.

 

▶ 정보 확인

yum info 패키지이름

 

패키지의 요약 정보를 보여 준다.

 

 

2. YUM의 고급 사용법

 

▶ 패키지 그룹 설치

yum groupinstall '패키지그룹이름'

 

패키지 그룹 설치는 패키지 그룹에 포함되는 패키지들을 통째로 설치할 때 사용할 수 있다. 패키지 그룹의 종류는 'yum grouplist'로 확인할 수 있다. 또, 패키지 그룹의 이름은 주로 띄어쓰기가 많으므로 ""안에 써야 한다.

 

▶ 패키지 리스트 확인(yum을 이용한 installed package list 보기)

yum list 패키지이름

 

'yum list all'을 실행하면 모든 패키지 목록을 보여주며, 'yum list httpd*'를 실행하면 httpd라는 이름이 들어간 패키지 목록을 보여준다. 'yum list available' 을 실행하면 현재 설치 가능한 목록을 모두 보여준다.

 

▶ 특정 파일이 속한 패키지 이름 확인

yum provides 파일이름

 

특정 파일이 어느 패키지에 들어 있는지를 확인할 수 있다.

 

▶ GPG 키 검사 생략

yum install --nogpgcheck rpm파일이름.rpm

 

인증되지 않은 rpm 파일을 'yum localinstall' 로 설치하면 설치되지 않는 경우도 있다. 그럴 경우 '--nogpgcheck' 옵션을 사용하면 GPG 키 인증을 생략하므로 설치할 수 있다.

 

▶ 기존 저장소 목록 지우기

yum clean all

 

기존에 다운로드한 패키지 목록을 지운 다음 yum install을 실행하면 새로 패키지 목록을 다운로드한다.

 

3. YUM의 작동 방식과 설정 파일

 

'yum' 명령어와 관련된 설정 파일은 /etc/yum.conf 와 /etc/yum.repos.d/ 디렉터리가 있다. yum.conf 파일은 특별히 설정을 변경할 것이 없으므로 신경 쓸 필요는 없다. 중요한 것은 /etc/yum.repos.d/ 디렉토리에 있는 여러 개의 파일이다. 각 파일은 'yum' 명령어를 실행했을 때 인터넷에서 해당 패키지 파일을 검색하는 네트워크 주소가 들어 있기 때문이다.

 

 

 

▶ #

주석이므로 없는 것과 마찬가지다.

 

▶ name

저장소의 이름이다. 보기 편한 이름으로 아무 이름이나 지정해도 되며, 별로 중요하지 않다.

 

▶ failovermethod

'yum' 명령은 baseurl에 적혀 있는 URL에 접속하는 데, 이때 필요한 접속 방식을 정한다. priority 와 roundrobin 중 하나를 설정할 수 있으며, 이 행의 설정 값을 생략하면 priority가 기본값이 된다. priority는 이어서 나오는 baseurl에 여러 개의 URL이 적혀 있으면 가장 먼저 적혀 있는 URL부터 차례대로 접속을 시도한다. roundrobin은 baseurl에 여러 개가 적혀 있는 URL 중 임의로 선택된 URL에 접속한다.

 

▶ baseurl

URL 이 적혀 있어야 한다. http, ftp, file 3가지 중 하나가 오면 된다. 독자가 저장소의 URL을 정확히 안다면 직접 적어도 된다. 또, 여러 개가 이어져서 나올 수 있다.

 

▶ mirrorlist

baseurl에 설정 값이 생략되어 있으면, 대신 mirrorlist에 적혀 있는 URL이 사용된다. mirrorlist의 URL에는 전 세계에 분포된 여러 개의 저장소가 연결되어 있다.

 

▶ enabled

이 저장소를 사용할지 여부를 1(사용), 0(사용 안 함)으로 지정할 수 있다. 이 행을 생략하면 기본값은 1이다.

 

▶ metadata_expire

다운로드한 메타 데이터(패키지의 목록)가 만료되는 기간을 지정한다. 'd'는 days, 'h'는 hours, 'm'은 minutes 단위로 설정할 수 있다. 이 행은 생략해도 된다.

 

▶ gpgcheck

패키지의 GPG 서명을 확인할지 여부를 1(사용), 0(사용 안함)으로 지정할 수 있다. 1로 지정할 경우, 이어서 gpgkey 항목을 반드시 설정해야 한다.

 

▶ gpgkey

아스키 GPG 키가 들어 있는 저장소의 URL이 적혀 있으면 된다.

 

▲ GPG 서명은 GnuPG(Gnu Privacy Guard)라고도 부르는데, rpm 패키지를 인증할 때 암호화된 서명을 사용하는 방법이다. 페도라 프로젝트에서 제공하는 rpm 패키지는 GPG 서명을 함으로써 잘못된 패키지가 설치되는 일을 방지한다.

 

이 중에서 꼭 필욘한 것은 [식별자]와 name, baseurl, gpgcheck 정도다.

 

[DVD로 repository 설정]

네트워크가 아닌 DVD에서 직접 패키지를 다운로드하는 방식으로 설치 속도가 네트워크에 비해 월등히 빠름

 

/etc/yum.repos.d/ 디렉토리로 이동한 후 기존 repo 파일은 별도의 디렉토리에 보관한 후 dvd.repo 파일 생성 후 아래와 같이 작성해준다.

 

[network]식별자의 경우에는  DVD에 없는 패키지는 [network]식별자에 의해 지정된 경로에서 패키지를 다운로드하게 하기위해 작성해 둔 것이다. 

 

[dvd]

name=Fedora DVD

baseurl=file:///media/cdrom/

gpgcheck=0

 

[network]

name=Network

baseurl=

http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/19/Everything/x86_64/os/

gpgcheck=0

 

 

 

 

 

  

Posted by 짜꾸미의골골몽
|

<사전작업>

Master connection not found or invalid 발생 시

-> service NetworkManager stop

 

[root@app]# cat ifcfg-br0

DEVICE="br0"

BOOTPROTO="static"

IPV6INIT="no"

MTU="1500"

ONBOOT="yes"

TYPE="Bridge"

IPADDR="192.168.40.6"

NETMASK="255.255.255.0"

GATEWAY="192.168.40.1"

 

[root@app]# cat ifcfg-eth0

# Generated by dracut initrd

NAME="eth0"

DEVICE="eth0"

ONBOOT=yes

NETBOOT=yes

UUID="b153fdb8-bc07-4c1d-9de7-f6af7d472d88"

BOOTPROTO=none

TYPE=Ethernet

#IPADDR=192.168.40.6

#NETMASK=255.255.255.0

#GATEWAY=192.168.40.1

BRIDGE="br0"

 

1. KVM 관련 패키지 설치

# mount -o loop /usr/local/rhel-server-6.5-x86_64-dvd.iso /media

# yum clealn all

# yum groupinstall "Virtualization"

# yum groupinstall "Virtualization Client"

# yum groupinstall "Virtualization Platform"

# yum groupinstall "Virtualization Tools"

 

2. libvirtd 서비스 기동

service libvirtd start

 

3. KVM Image 저장소 생성

virt-manager

Edit - Connection Details - Storage 선택

- 저장소 이름 기입 및 Type은 기본 사용

 

- "Browse" 클릭 후 실제 VM이미지가 저장될 경로 선택 후 "OPEN"

 

4. Guest OS VM 생성

- VM명 기입 후 설치 미디어 선택

 

- ISO 파일 이미지 선택 후 OS Type / Version 선택

 

- 사용할 메모리 / CPU Core 수 기입

- 각 할당자원 아래 실제 가용가능한 메모리 및 CPU Core 수 확인 가능

 

- VM이미지 용량 설정 및 저장 공간 선택을 위해 "Browse" 선택

- "New Volume" 선택 후 VM이미지파일명 / Format / 최대용량 선택

 

- 설정 내역 및 네트워크 설정 확인 후 완료

 

5. VM Clone

52:54:00:f1:bd:68

 

Posted by 짜꾸미의골골몽
|

<사전작업>

systemctl stop NetworkManager

systemctl disable NetworkManager

 

1. 필수 패키지 설치

yum install libguestfs libvirt libvirt-client libvirt-python python-virtinst qemu-kvm virt-manager virt-top virt-viewer virt-who virt-install bridge-utils libguestfs-tools

 

2. Network Bridge 설정
[root@app]# cat ifcfg-br0

DEVICE="br0"

BOOTPROTO="static"

IPV6INIT="no"

MTU="1500"

ONBOOT="yes"

TYPE="Bridge"

IPADDR="192.168.40.6"

NETMASK="255.255.255.0"

GATEWAY="192.168.40.1"

 

[root@app]# cat ifcfg-eth0

# Generated by dracut initrd

NAME="eth0"

DEVICE="eth0"

ONBOOT=yes

NETBOOT=yes

UUID="b153fdb8-bc07-4c1d-9de7-f6af7d472d88"

BOOTPROTO=none

TYPE=Ethernet

#IPADDR=192.168.40.6

#NETMASK=255.255.255.0

#GATEWAY=192.168.40.1

BRIDGE="br0"

 

3. KVM 서비스 기동

systemctl start libvirtd

systemctl enable libvirtd

 

4. KVM 기본 구성(CentOS 6.x / RHEL 6.x 구성과 동일)

virt-manager

Edit - Connection Details - Storage 선택

- 저장소 이름 기입 및 Type은 기본 사용

 

- "Browse" 클릭 후 실제 VM이미지가 저장될 경로 선택 후 "OPEN"

 

5. Guest OS VM 생성

- VM명 기입 후 설치 미디어 선택

 

- ISO 파일 이미지 선택 후 OS Type / Version 선택

 

- 사용할 메모리 / CPU Core 수 기입

- 각 할당자원 아래 실제 가용가능한 메모리 및 CPU Core 수 확인 가능

 

- VM이미지 용량 설정 및 저장 공간 선택을 위해 "Browse" 선택

- "New Volume" 선택 후 VM이미지파일명 / Format / 최대용량 선택

 

- 설정 내역 및 네트워크 설정 확인 후 완료

 

Posted by 짜꾸미의골골몽
|

 

 

 

# mpathconf --enable
-> /etc/multipath.conf 생성 확인 후 작업 진행

# multipath -v2
Sep 09 02:44:05 | mpatha: ignoring map
Sep 09 02:44:05 | mpathb: ignoring map
create: mpathc (1IET     00020001) undef IET,VIRTUAL-DISK
size=10G features='0' hwhandler='0' wp=undef
`-+- policy='round-robin 0' prio=1 status=undef
  `- 4:0:0:1 sdc 8:32 undef ready running
create: mpathd (1IET     00020002) undef IET,VIRTUAL-DISK
size=10G features='0' hwhandler='0' wp=undef
`-+- policy='round-robin 0' prio=1 status=undef
  `- 4:0:0:2 sdd 8:48 undef ready running
create: mpathe (1IET     00020003) undef IET,VIRTUAL-DISK
size=10G features='0' hwhandler='0' wp=undef
`-+- policy='round-robin 0' prio=1 status=undef
  `- 4:0:0:3 sde 8:64 undef ready running
-> OS영역 디스크 인식 여부 확인

# multipath -ll
mpathe (1IET     00020003) dm-3 IET,VIRTUAL-DISK
size=10G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  `- 4:0:0:3 sde 8:64 active ready running
mpathd (1IET     00020002) dm-2 IET,VIRTUAL-DISK
size=10G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  `- 4:0:0:2 sdd 8:48 active ready running
mpathc (1IET     00020001) dm-1 IET,VIRTUAL-DISK
size=10G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 4:0:0:1 sdc 8:32 active ready running
-> 스토리지 볼륨 인식 확인(용량 등)

# vi /etc/multipath/bindings
# Multipath bindings, Version : 1.0
# NOTE: this file is automatically maintained by the multipath program.
# You should not need to edit this file in normal circumstances.
#
# Format:
# alias wwid
#
mpatha 1IET     00020001  ->  data1 1IET      00020001
mpathb 1IET     00020002  ->  data22 1IET     00020002
mpathc 1IET     00020003  ->  data33 1IET     00020003
-> mpatha, mpathb 형식으로 인식된 디바이스 명을 설정에 맞게 변경 후 저장

# vi /etc/multipath.conf
blacklist {
           wwid    VB432af6ad-af8202c3
           wwid    VB71a3ccfe-cd6c20c7
}
-> USB Disk 또는 OS영역 Disk wwid 확인 후 blacklist 처리

# multipath -F
-> 전체 Flush
# multipath -F
Sep 09 03:35:10 | data1: map in use
-> 기존 볼륨이 사용 중일 경우 위와 같은 메시지 발생
# multipath -f mpatha
-> 사용 중일 경우 추가로 인식된 디바이스명만 따로 수행

# multipath -v2
-> 수정된 bindings 설정 내용으로 재 인식

# multipath -ll
data33 (1IET     00020003) dm-3 IET,VIRTUAL-DISK
size=10G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  `- 4:0:0:3 sde 8:64 active ready running
data22 (1IET     00020002) dm-2 IET,VIRTUAL-DISK
size=10G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  `- 4:0:0:2 sdd 8:48 active ready running
data1 (1IET     00020001) dm-1 IET,VIRTUAL-DISK
size=10G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 4:0:0:1 sdc 8:32 active ready running

# 이후 LVM 생성 작업 진행
PV 생성 작업
pvcreate /dev/mapper/data[1-9] /dev/mapper/data1[0-9]
 
VG 생성 작업
vgcreate DATA01 /dev/mapper/data[1-9] /dev/mapper/data1[0-9]
또는 vgcreate DATA01 /dev/mapper/data1 /dev/mapper/data2
   vgcreate DATA02 /dev/mapper/data3 /dev/mapper/data4
-> 스토리지 할당 볼륨그룹명은 VG10부터 시작
 
LV 생성 작업
lvcreate -l 100%FREE -n APPDATA DATA01 -i 2
lvcreate -l 100%FREE -n DBDATA DATA02 -i 2
lvcrete -L 5120M -n LOG DATA01 -i 10
 
vgcreate 작업 시 생성한 Device 수 만큼 “-i 2” 형식으로 옵션 추가
 
파일 시스템 포맷 및 튜닝
▶ 포맷 시 i-node 값 설정하여 포맷
mkfs.ext4 /dev/mapper/DATA01-APPDATA -i 2048
mkfs.ext4 /dev/mapper/DATA02-DBDATA -i 4096
 
▶ 파일 시스템 튜닝 작업
tune4fs -c -1 -i 0 /dev/mapper/DATA01-APPDATA
 
마운트 지점 생성 및 fstab 추가
▶ 마운트 지점 생성
mkdir /APPDATA  or mkdir /{APPDATA,DBDATA}
 
▶ /etc/fstab에 추가
/dev/mapper/DATA01-APPDATA /APPDATA                 ext4    defaults        0 0
 
▶ 파일 시스템 마운트
mount -a


### 설정파일 내용 ###
# /etc/multipath.conf
-> 멀티패스 설정파일.
-> 설정파일이 없을경우 /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf 에서 복사해서 사용
# vi /etc/multipath.conf
## Use user friendly names, instead of using WWIDs as names.
defaults {
         user_friendly_names yes
        -> wwid 대신 friendly name을 사용하여 alias를 지정할수 있도록 설정
}
#defaults {
#       udev_dir                /dev
        -> udev 가 생성되는 디렉토리 지정 
#       polling_interval        10
        -> 두개의 경로을 체크 간격 지정 (초단위) 
#       selector                "round-robin 0"
        -> I/O 실행에 사용할 경로 설정 
#       path_grouping_policy    multibus
        -> failover = 우선 순위 그룹 당 1 개의 경로
            multibus = 1 개의 우선 순위 그룹에 있는 유효한 모든 경로
            group_by_serial = 검색된 시리얼 번호 당 1 개의 우선 순위 그룹
            group_by_prio = 경로 우선 순위 값 당 1 개의 우선 순위 그룹
            group_by_node_name = 대상 노드 이름 당 1 개의 우선 순위 그룹 
#       getuid_callout          "/sbin/scsi_id -g -u -s /block/%n"
#       prio                    alua
#       path_checker            readsector0
#       rr_min_io               100
#       max_fds                 8192
#       rr_weight               priorities
#       failback                immediate
#       no_path_retry           fail
#       user_friendly_names     yes
#}

#blacklist {
-> 사용하지 않을 디바이스를 블랙리스트 시킨다. 
#       wwid 26353900f02796769
#       devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
#       devnode "^hd[a-z]"
#} 
multipaths {
       multipath {
               wwid                    3600c0ff0001160a2e61c114d01000000 
               -> wwwid 값 넣기 
               alias                   mpath1 
               -> wwwid값에 따른 디바이스명 설정 
       }
       multipath {
               wwid                      3600c0ff0001160a2c416114d01000000
               alias                   mpath2
       }
       multipath {
               wwid                    3600c0ff0001160a2ac16114d01000000
               alias                   mpath3
       }

 

 

 

Posted by 짜꾸미의골골몽
|

### 실행중인 VM 리스트 확인 ###
[root@kvmsvr ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 10    cluster1                       running
 13    cluster2                       running
 14    cluster3                       running
 15    cluster4                       running
 -     vm1                            shut off


[root@kvmsvr ~]# virsh console 14
exit -> Ctrl + ] or Ctrl + 5     

### 실행 중 VM 종료 및 리부팅 ###
- 실행 중인 VM shutdown
# virsh list
# virsh shutdown <vm_name>
# virsh shutdown desktop_xp1
# virsh shutdown 7

- 실행 중인 VM reboot
# virsh list
# virsh reboot <vm_name>
# virsh reboot desktop_xp4
# virsh reboot 10

- 실행 중인 VM 강제 종료하기
# virsh list
# virsh destroy <vm_name>

### KVM 이미지 백업 ###
qemu-img convert -c -O qcow2 Window_server_2003.qcow2 Window_server_2003.qcow2.20151228

### VM 상태 정보 확인 ###
[root@kvmsvr VM_IMG]# virsh list
 Id    이름                         상태
----------------------------------------------------
 3     DNS                            실행중
 5     CRM                           실행중
 6     server1                        실행중


[root@kvmsvr VM_IMG]# virsh domblklist 24
Target     Source
------------------------------------------------
vda        /home/VM_IMG/semusarang.img
vdb        /home/VM_IMG/semudata.img
hda        /home/iso/ko_windows_7_X86+x64_Ultimate_with_sp1_IE9_Hotfix_2012.iso
hdc        /usr/share/virtio-win/virtio-win-1.iso

[root@kvmsvr VM_IMG]# virsh list --all
 Id    이름                         상태
----------------------------------------------------
 3     DNS                            실행중
 5     CRM                   실행중
 6     server1                        실행중
 -     Window_server_2003             종료
 -     winXP                          종료

[root@kvmsvr VM_IMG]# virsh domblklist Window_server_2003
Target     Source
------------------------------------------------
hda        /home/VM_IMG/Window_server_2003.img
hdb        -

### VM Shutdown ###
[root@kvmsvr VM_IMG]# virsh list
 Id    이름                         상태
----------------------------------------------------
 3     DNS                            실행중
 5     CRM                           실행중
 6     server1                        실행중

[root@kvmsvr VM_IMG]# virsh shutdown 3
[root@kvmsvr VM_IMG]# virsh destroy 3    // 강제종료

### VM 리소스 정보 확인 ###
# virsh list  // 리스트 확인
# virsh list
Id    Name                           State
----------------------------------------------------
82    iscsi-server                   running
101   rhel7-cs2                      running
104   rhel7-cs1                      running

# virsh dominfo

# virsh dominfo 170
Id:             170
Name:           kweb3
UUID:           6afa6e09-b525-403c-9da9-4ca9ecf0c78d
OS Type:        hvm
State:          running
CPU(s):         2                  << CPU 수 확인
CPU time:       16546
Max memory:     2097152 KiB
Used memory:    2097152 KiB   << Memory 확인
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0


### KVM 환경 Disk 추가 방법 ###
- 파일
# virsh attach-disk nfvd-ff1 --source /VM/add-disk.img --target vdb --persistent

- Block device
# virsh attach-disk nfvd-ff1 --source /dev/NFVO/ff1 --target vdb --persistent

### Disk Type VirtIO / IDE 차이 및 변경 방법 ###
- virtIO는 다른 disk에 비해  I/O가 빠릅니다
- IDE는 I/O는 떨어지지만 다른 시스템과 호환성이 뛰어납니다

< KVM IDE에서 virtIO로 변경하는 방법 >
1) vm OS 종료
2) # systemctl stop libvirtd
3) # vi /etc/libvirt/qemu/rhel7.xml

### 수정 전 < 현재 상태 >
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/DATA/rhel7.cow2'/>
      <target dev='hda' bus='ide'/>  ← 수정
     <address type='drive' controller='0' bus='0' target='0' unit='0' />  ← 삭제
    </disk>

### 수정 후
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/DATA/rhel7.qcow2'/>
      <target dev='hda' bus='virtio'/>
    </disk>

4. # systemctl start libvirtd
5. # systemctl enable libvirtd
5. # virt-manager
6. vm OS 실행

### KVM 이미지 백업(img+xml) ###
1. img 파일 백업(KVM 구성 시 지정한 디렉토리)
2. 각 VM별 xml 파일 백업(/etc/libvirt/qemu)
3. 신규로 사용할 서버의 각각 위치에 img 파일 복구 / xml 파일 복구


### KVM 이미지 클론(복사) ###
virt-clone --original=[원래 있던 VM 이름] --name=[새로 만들 VM 이름] -f [생성할 img 파일 위치] --mac [랜카드 맥주소]
# virt-clone --original=testvm1 --name=newvm -f /var/lib/libvirt/images/skylit_newvm.img --mac 00:12:34:56:78:90

Posted by 짜꾸미의골골몽
|

[Tip] I/O Scheduler Configuration(cfq, deadline)

 

[I/O Scheduler]

하드디스크에 최적화된 블럭 디바이스 스케줄링 알고리즘을 의미한다.

SATA controller 또는 일반적인 HDD disk의 controller를 이용하는 SSD 제품의 경우, NOOP를 선택하면 탁월한 성능 향상이 있다.

 

[I/O Scheduler 종류]

Completely Fair Queuing (CFQ)

- 기본 I/O scheduler

- 기본적인 스케줄러이며, 말그대로 기본적으로 사용되어지기 때문에 균등하게 배분하게 예약을 하며, 많은 프로세스들이 세세한 I/O을 많이 발생시킬때 사용되어 진다.

- CFQ 스케줄러는 광범위한 응용 프로그램과 I/O 시스템 설계에 최상의 성능을 제공하기 때문에 기본 스케줄러로 선택이 되었다. 16개의 CPU를 가지고 있고, Ultra SCSI와 Fiber channel로 구성된 2~64개의 LUN을 가진 시스템에서 CFQ는 탁월한 성능을 발휘한 것으로 알려져 있다. 게다가 CFQ는 다른 I/O subsystem의 성능과 일치할 수 있도록 /proc/sys/scsi subsystem에 있는 nr_requests 파라미터를 조정하여 쉽게 최적화 할 수 있다.

- CFQ(Complete Fair Queuing)는 각 프로세스 마다 작업 큐를 가지고 있고 이것들이 round robin방식으로 돌며 정해진 time slice 내에서 작업을 수행하게 된다. Time slice안에 작업을 모두 끝내게 되어도 10ms 정도를 추가로 기다리며 혹시나 있을 I/O 작업을 대기하다가 안들어오면 다른 프로세스의 큐로 이동한다. 각 큐에서는 synchronous 요청이 asynchronous보다 우선순위를 가지고 진행되어 writes-starving-reads 문제를 해결한다.

 

Deadline

- I/O대기시간의 한계점(deadline)을 마련하고, 가까운 I/O부터 처리하는데, 처리량이 많은 데이타보다, 지연에 최적화된 스케줄러이다. 이때문에, 몇몇 많은 프로세스 I/O을 발생시키는 환경에 적합하며, 대체적으로 데이타베이스, KVM 등 환경에 많이 사용되어 진다.

- Deadline 스케줄러는 real-time 같은 single I/O 처럼 연속된 read를 빠르고 효율적으로 처리하기 위하여 대기 시간을 가지는 방식이다. Single I/O 환경에서는 빠르지만 multip HBA 또는 파일시스템간의 트랜젝션에는 항상 최상의 선택이 될 수는 없다.

- Linux Elevator의 작업 큐외에 별도의 read/write 큐를 둔다. 작업 큐에는 요청이 block 번호 순서로 정렬되어 있고, read/write큐는 FIFO로 (요청 들어온 순서대로) 들어간다. I/O Scheduler는 작업 큐에 정렬된 요청들을 가지고 작업을 하다가 expiration time에 넘은 요청이 발견되면 그 요청을 가지고 있는 read(혹은 write)큐에가서 작업을 진행한다. 일반적으로 read 큐는 expiration time이 500ms로 짧고 write 큐는 5초정도로 준다.

 

Anticipatory

- 추천 대상

제한된 I/O 설정을 가지고 있는 경우

1 또는 2개의 LUN만 가지고 잇는 작은 시스템

I/O 대기시간 보다 대화형 응답시간에 우선권을 주는 것이 유리할 경우 (대부분의 workstation들..)

- 일반적인 하드디스크와 처리방식이 비슷한데, 입출력을 모아서 한꺼번에 처리하는 성향으로 인해 지연시간의 경우 degraded될수 있다는 점 유의하자.

- 연속된 부분의 read 요청의 경우 디스크의 헤더는 이미 다른 위치로 이동해 있는 상태에서 다시 이전의 위치로 이동하여 작업을 수행하게 되는 낭비가 있다. 때문에 연속적인 read를 위해 한번의 read가 마쳐지면 최대 6ms 까지 아무일도 수행하지 않고 (헤드의 위치를 이동하지 않고) 대기해서 연속적인 read작업시 시간을 아끼는 방식의 스케쥴링을 anticipatory I/O scheduler라고 한다.

 

NOOP

- 주로 rawdevice환경을 사용하는  DBMS 그리고, SSD와 같이 반도체디스크형태일 경우 사용하게 되는데 즉 아무것도 하지 않는 스케줄러로써, 부하를 줄일수 있다는 거다.

- 블럭 번호 순으로 정렬은 하지 않고 merging만 하는 스케쥴러 이다. Hard Disk 방식의 controller (sata/sas)를 사용하는 SSD의 경우, 이 방식을 선택하도록 한다.

- 별도 controller를 가지고 있을 경우, driver단에서 이미 최적화 알고리즘을 가지고 있기 때문에 신경쓸 필요 없음. (예.. Fusion IO)

 

[설정]

- 파라미터 변경 -

# echo deadline > /sys/block/sda/queue/scheduler

noop [deadline] cfq

-> 설정 후 재 부팅 고려하여, /etc/rc.local 등에 설정

- tuned-adm 설정 -

 

# tuned-adm list

Available profiles:

- enterprise-storage

- laptop-ac-powersave

- default

- server-powersave

- desktop-powersave

- spindown-disk

- latency-performance

- laptop-battery-powersave

- throughput-performance

Current active profile: enterprise-storage

 

 

Example Use Cases    default profile    enterprise-storage    latency-performance    throughput-performance    virtual-guest    virtual-host

    Most Workloads    Databases    Network latency-sensitive    Databases    KVM Guests    KVM Hosts

        Oracle OLTP, IBM DB2    CPU-bound workloads           

        PostgreSQL, MySQL    Sybase ASE           

        SAS (in guests too) (THPoff where SAS runs) (elevate readahead more 4-16K)               

 

 

[테스트 방법]

* 설정

mkdir /tmp/test1;

mkdir /tmp/test2;

mkdir /tmp/test3;

mkdir /tmp/test4;

mkdir /tmp/test5;

time dd if=/dev/zero of=/tmp/test1/file.t bs=1024k count=2000;

time dd if=/dev/zero of=/tmp/test2/file.t bs=1024k count=2000;

time dd if=/dev/zero of=/tmp/test3/file.t bs=1024k count=2000;

time dd if=/dev/zero of=/tmp/test4/file.t bs=1024k count=2000;

sync;

 

* 테스트

cat /sys/block/sda/queue/iosched/fifo_batch;

cat /sys/block/sda/queue/iosched/writes_starved;

cat /sys/block/sda/queue/iosched/read_expire;

cat /sys/block/sda/queue/iosched/write_expire;

echo 3 > /proc/sys/vm/drop_caches;

sync;

sync;

sleep 5;

iostat 10 30 -t -k -x >& ./iostat-test.log &

top -b -d 10 -n 30    >& ./top-test.log &

vmstat 10 30          >& ./vmstat-test.log &

time dd if=/tmp/test1/file.t of=/dev/null bs=64k &

time dd if=/tmp/test2/file.t of=/dev/null bs=64k &

time dd if=/tmp/test2/file.t of=/dev/null bs=64k &

time dd if=/tmp/test4/file.t of=/dev/null bs=64k &

time dd if=/dev/zero         of=/tmp/test5/file.t bs=64k count=32002

time sync

 

[성능비교]

deadline Schduler I/O Logic Flow는, 아래 형태를 따르는데, 상세한 건 구글링을 통해 찾아보자.

1. Streaming Logic

2A. Read Q Select Logic

2B. Write Q Select Logic

3. Request Select Logic (Generic: either read/write)

 

 

[참고사이트]

https://wiki.kldp.org/wiki.php/KernelScheduler

http://rhlinux.tistory.com/26#recentTrackback

 

 

 

Posted by 짜꾸미의골골몽
|

 

[IP Alias를 통해 한대의 PC안에서 IP마스커레이딩 사용하기]

 

IP Alias는 하나의 인터페이스 카드에 여러개의 가상아이피(내부IP 또는 실제IP)를 설정하는 것입니다.

여러개의 가상의 이더넷카드를 만들어 아이피를 부여한다고 생각하면 쉽다.

여러개의 이더넷카드(NIC)에도 각각에 대해 가상아이피를 부여 할 수 있습니다.

 

IP Alias는 IP기반 호스팅업체의 경우나 비용으로인해 서버가 모자랄때 사용되며,

Name 기반의 버츄얼호스팅과 같은것은 DNS 정보 즉, 해당 도메인의 네임서버를 같게

하여 Apache에서 Virtual Hosting으로 서비스를 하는데 이용하곤 합니다.

한마디로 이름기반은 네임서버정보(DNS설정)를 이용하는 것 입니다.

 

다음은 Vmware로 한대의 PC에 여러개의 가상머신을 띄워놓고 각각의 가상머신에

대해 네트웍을 연결해 사용하는 방법입니다

 

(System Environment)

+Base System : Linux7.1(와우파란)

+Guest OS : LInux6.2(Final), FreeBSD, WinDog2000(XP)...

+ISP : 하나로통신

 

Vmware 설치는 Vmware 설치강좌를 보면 잘 설명되어 있다.

Vmware 버전이 업그레이드 되어 설치가 더욱 쉬워졌으며, Vmware로 Guest OS설치 단계중

네트워크 설정을 Networking bridged to real ethernet로 해주면 된다.

 

[IP Alias 설정]

IP Alias는 모듈로 설치되는 것이 아니라 커널에서 지원하도록 되어 있다.

먼저 ifconfig 명령으로 NIC의 정보를 확인해 보도록 한다.

 

sueni@bbung ...]# ifconfig

 

아래의 정보는 본인의 NIC 정보이다

eth0 Link encap:Ethernet HWaddr 00:A0:B0:0E:03:71

inet addr:211.208.177.23 Bcast:211.208.177.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:29976 errors:0 dropped:0 overruns:0 frame:0

TX packets:27558 errors:0 dropped:0 overruns:0 carrier:0

collisions:3257 txqueuelen:100 

Interrupt:10 Base address:0xa000 

 

eth0:0 Link encap:Ethernet HWaddr 00:A0:B0:0E:03:71 

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Interrupt:10 Base address:0xa000 

 

eth0:1 Link encap:Ethernet HWaddr 00:A0:B0:0E:03:71 

inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Interrupt:10 Base address:0xa000 

 

lo Link encap:Local Loopback 

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

Omit...

 

vmnet1 Link encap:Ethernet HWaddr 00:50:56:C0:00:01 

inet addr:192.168.149.1 Bcast:192.168.149.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Omit...

 

vmnet8 Link encap:Ethernet HWaddr 00:50:56:C0:00:08 

inet addr:192.168.226.1 Bcast:192.168.226.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Omit...

 

위에서 보면 eth0은 하나로 ADSL모뎀과 연결된 이더넷 카드이며 DHCP로 유동아이피를 할당받는다.

eth0:0은 게이트웨이 주소를 입력할 NIC이고, eth0:1은 게이트웨이 역활을 할 NIC이다.

eth0:1은 IP MASQUERADING에서 허브와 연결된 NIC로 생각하면된다.

(만일 ADSL이 ppp0로 연결되어 있다면, eth0:0 --> eth0과 같고,

eth0:1 --> eth0:0 또는 인터페이스카드가 2장일때는 eth0:1 --> eth1과 같다.)

vmnet1,8은 vmware의 네트워크 모듈정보이고, lo는 loopBak을 나타낸다.

IP MASQUERADING설정은 IP MASQUERADING 강좌를 참고하기바란다.

 

[IP Alias 설정하기]

 

sueni@bbung ...]# ifconfig eth0:0 192.168.1.1

 

sueni@bbung ...]# ifconfig eth0:1 192.168.1.2

또는

sueni@bbung ...]# ifconfig eth0:1 192.168.1.2 netmask 255.255.255.0 \

                  broadcast 192.168.1.255

 

위와 같이 설정을 해주면 되지만, 위의 정보는 메모리에 올려져 있는것으로 부팅후 그정보가

사라지게 되므로 /etc/sysconfig/network-script 의 ifcfg-eth0을 Copy해서 사용하도록한다.

 

sueni@bbung ...]# cp ifcfg-eth0 ifcfg-eth0:0 (ifcfg-eth0:1)

 

복사한 인터페이스에 대한 네트워크설정은 IP MASQUERADING 강좌와 동일하다.

 

+ eth0:0 설정

DEVICE=eth0:0

BOOTPROTO=static

IPADDR=192.168.1.1

ONBOOT=yes

USERCTL=no

+ eth0:1 설정

DEVICE=eth0:1

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.1.2

NETMASK=255.255.255.0

NETWORK=192.168.1.0

BORADCAST=192.168.1.255

USERCTL=no

 

네트워크 설정이 끝났다면 IP 마스커레이딩설정 후 Network 서비스를 재시동 하고

GuestOS에 대한 Ping 테스트를 해보도록한다.

 

sueni@bbung ...]# service network restart

 

GuestOS에서는 192.168.1...과 같이 내부아이피로 설정해 주면 된다.

 

아마 잘 될것이다. :)

 

OS간에 연결이 되었다면 여러 OS간에 다양한 통신네트워크를 구성해 테스트해볼수 있는

아주 좋은 환경이 만들어질 것이다.

(NFS,클러스터링,SMB,WebSrv...)

 

 

Posted by 짜꾸미의골골몽
|

[MySQL/MariaDB 덤프 및 Import]

/home/mysql/mariadb/bin/mysqldump -uroot -p mydb > mydb.sql

/home/mysql/mariadb/bin/mysql -uroot -p mydb < mydb.sql

[MySQL/MariaDB 특정테이블 백업/복구]

백업 : myslqdump -u DB계정명 -p 대상DB명 테이블명 > backup.sql

ex) #./mysqldump -u root -p mysql user > backup.sql

 

복구 : mysql -u DB계정명 -p 복구할DB명 < backup.sql

ex) #./mysql -u root -p mysql < backup.sql

 

Posted by 짜꾸미의골골몽
|