스토리이알피

Solstice Disksuite 설정하기 본문

컴퓨터/서버팁

Solstice Disksuite 설정하기

Storyerp 2019. 12. 8. 20:13
반응형

[ Solstice Disksuite 설정하기 ]

Solstice Disksuite 설정하기

-------------------------------------------------------------------------
1) MetaDB 

- DiskSuite의 전체의 config정보와 metadevice의 상태 정보를 가지고 있는 DB
- slice 당 20M 정도면 충분하고, 최소 2개의 DB 복사본(Replicas) 요구된다.
  권장 사항 : Disk 1      -  3 Replcas
              Disk 2~4   -  각 Disk 당  2 Replias (총 4 ~ 8 )
              Disk 5 이상 -  각 Disk당  1 Replicas  
- MetaDB를 생성할 공간이 없으면, swap를 조금 줄이고, 공간을 확보한다.
- Os Mirror시에는 , 두 Disk에 각각 2개 이상의  MetaDB를 생성한다.


< metadb 확인 시 Replica를 1개만 만들어서, metatool에서 \"urgent\" 상태  확인 >
#metadb ; metatool 
#metadb -a -f -c1 c0t0d0s7 [c0t1d0s7 ]
; -a는 adding, 초기화 또는 추가로 더할 때 사용
  -f는 Force, 초기 생성 시나, 삭제 시 사용 
  -c는 각각의 Slice에 database Replicas의 copy본을  생성한다. 
 

<한번 생성된 slice에는 Replicas를 추가로 더할 수가 없으므로, 지우고 새로 만들어 준다>
#metadb -d -f c0t0d0s7; metadb
;metatool에서 \"critical \" 상태 확인 <- 치명적 에러  
#metadb -a -f -c3 c0t0d0s7;metadb
; metatool에서 \"Attention\" 상태 확인 후 commit 버튼을 눌러서 Attention의
  이유를 확인한다. Or \"Problem List\"에서 확인 가능 
  
[ 추가 Control가 있을 경우, 실험한다.]  
#metadb -a -c3 c1t0d0s7; 
;여전히 \"Attention\"이다 T_T, DiskSuite 4.2의 권고 사항은 Controler 3개 이상이다.

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

2) Cancate  

- Random I/O 성능이 좋다 <- Seek Time이 줄어 들어서..
- /var, /usr , / 등 모든 mount point에 사용 가능하다. --> 미리 Mirror 되어 있을 것을 권장
  한 번 늘인 놈을 다시 줄일 수는 없다.
- ufs expand시 Encapsulate 지원 --> Mirror, Cancate만이 기존의 data 유지

[ c0t0d0s3 = 100m, c0t 1d0s3=100m라고 가정하고 실험한다. ]

< 한 slice를 사용하다가, 공간이 부족해서 cancate로 늘일 때 >
# newfs /dev/dsk/c0t0d0s3
# mount /dev/dsk/c0t0d0s3 /test
# cd /test; mkfile 90m file1;touch test
# mkfile 50m file2 <-- Disk 공간 부족으로 Fail

# umount /test 
# metainit d100 2 1 c0t0d0s3 1 c0t1d0s3 
# metastat  Or metastat -p  (간단히 표시);  상태 확인
# mount /dev/md/dsk/d100 /test
# df -k    ;  아직 200m가 되지 않았음을 확인한다.
# growfs -M /test /dev/md/rdsk/d100 ; c0t1d0s4가 자동으로 format 된다.
   cf> growfs  /dev/md/rdsk/d100 ; mount 되어 있지 않을 때
# df -k     ; 200m 됨을 확인 
# cd /test;mkfile 50m file2; touch test2 <--만들어 짐을 확인

- cancate 뽀개기
# umount /test
# metaclear d100; metastat
# mount /dev/dsk/c0t0d0s3 /test
# cd /test;ls;more test2   <-- 모든 파일이 존재 하지만, I/O Error 발생 
                                   <-- 이 사실로 Cancate의 작동 원리를 생각해 보라...


<미리 생성되어 있는 cancate에 또 다른 Slice 붙여서 용량 늘이기> 
# metattach d100 c3t4d0s0
# growfs -M /test /dev/md/rdsk/d100


< System slice (var) Cancate 하기 >

c0t0d0s3 = /var :1g , c0t1d0s3=2g 로 가정

# metainit -f d20 2 1 c0t0d0s3 1 c0t1d0s3  ; system slice는 -f option 필요
# /etc/vfstab에서 \"/dev/md/dsk/d20 /dev/md/rdsk/d20 /var.... \" 확인 
   바뀌지 않았으면 수정해 둔다.
# reboot ;system mount point  이므로...
# df -k ; 용량이 아직 변하지 않았다.
# growfs -M /var /dev/md/rdsk/d20
# df -k ; 용량 증가 확인

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

3) Stripe

- Sequential I/O 성능이 좋다, 대용량 Av 파일 편집 등에 탁월
- Encapsulate 지원되지 않는다. Stripe구성 시 기존 정보 파괴
- interlace 설정값(default 16k)에 따라, 성능이 좌우된다.
    
[ c0t0d0s3=1g,c0t0d0s4=1g, c0t1d0s3=1g,c0t1d0s4=1g ]
;interlace가 틀린 두 개의 stripe를 만들어서, /tmp에 복사 시간을 비교해 본다.

# metainit d50 1 2 c0t0d0s3 c0t1d0s3 ;newfs /dev/md/rdsk/d50
# metanit d60 1 2 c0t0d0s4 c0t1d0s4  i=1024k ;newfs ~

#mkdir d50; mount /dev/md/dsk/d50 /d50
#mkdir d60; mount /dev/md/dsk/c60 /d60

#cd d50;mkfile 500m ;cp 500m /tmp   <- cp 시간 잰다.
# rm /tmp/500m
# cp d60l;mkfile 500m; cp 500m /tmp <-- cp 시간 비교..


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

  4) Mirror

  - Encapsulate 지원된다.
  - Read Option : Round Robin(교대로 읽기),  Geometric( sequential에 빠름 ) , 
                         First ( target hdd의 성능이 느릴 때 )
  - Write option : Parallel , Serial  ( Write 시간 길어짐 )
  - Pass Number : Reboot 시 Sync단계 0 - none
                           Mirror 하는 Slice가 여러 개 있을 땐, 이 값을 틀리게 줘야  병목이 줄어든다.
      swap은 항상 \'0\' 로 준다.

  * Root DIsk Mirror 하기

  [c0t0d0s0 = root, c0t0d0s1 = swap , c0t1d0 은 target이라 가정 ]
  - System Mount point : /, /swap, /var, /usr... 은  meta device에 일단 넣어 둔 후
    Reboot 한 뒤, md로 OS를 시작시킨 후, target Disk를 붙여서 미러링 해야 한다.

  -백업 & target Disk slice 생성
# cp /etc/vfstab /etc/vfstab_before_md
# cp /etc/system /etc/system_before_root_mirror    
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -n os_mirror -s - /dev/rdsk/c0t1d0s2

- 진행하면서, metatool & 로 변하는 모양을 잘 본다.
<root>
# metainit -f d10 1 1 c0t0d0s0  ; sub Disk d10
# metainit d20 1 1 c0t1d0s0    ; sub Disk d20
# metainit d50 -m d10            ; meta device d50 속에 sub disk d10 넣기
#metaroot d50 ; vfstab의 / 부분을 자동으로 변경하고, system file로 변경
<swap>
# metainit -f d11 1 1 c0t0d0s1  ; swap 
# metainit d21 1 1 c0t1d0s1
# metainit d51 -m d11

..... /var 나 다른 놈이 있으며 계속 작업

#vi /etc/vfstab 수정; / 이외의 부분은 자동으로 안 바뀐다.

# Reboot
 
  - 이제 target disk를 source에 붙여서 동기화시킨다.
     이때, disk I/O 작업이 없어야 한다.

  # lockfs -fa ; ufs lock 걸기 , i/o 발생이 없으면 안 해도 무방
  # metattach d50 d20 
  # metattach d51 d21...
  
  #metastat 나 metatool에서  Sync 되는 것을 확인한다.

-  OBP에 mirror Disk 정보 입력

# cd /usr/platform/sun4u/sbin
# format 명령으로 Mirror Disk의 물리적 주소를 적어 둔다.
# eeprom use-nvramrc\\?=true
# eeprom nvramrc=\'devalias os_mirr /pci@1f,4000/scsi@3/disk@3,0\'
; > ok mode에서 reset 해야 설정됨

  또는 okmode에서 devlias로 작업...


- Boot Test

; 소스, 미러 디스크를 둘 다 장착되어 있는 상태에서
   ok> boot  os_mirr로 test

; 소스 디스크를 빼고, test 할 경우, 간혹 metadb가 소스 디스크 쪽을
  사용하고 있으면, 싱글모드로 빠져서 정상  부팅이 안 될 때가 있다.
  이때는, 싱글 상태에서 빠져버린 디스크 쪽의 metadb를 지우면 된다.
  # metadb -d -f c0t0d0s7


* Root disk unmirror 하기
; 미러링을 제거할 때는, 미러링 할 때의 반대 순서로 하면 된다.

#metadetach d50 d20
#metadetach d51 d21
#metaroot  /dev/dsk/c0t0d0s0
; /etc/vfstab에서 / 이외의 부분은 자동으로 바뀌지 않으므로,
  /dev/md을 원 OS 영역으로 바꿔준다.
# Reboot

# df -k로 / 에서 md가 사라진 것을 확인
# metaclear -r d50; metaclear d10
# metaclear -r d51; metaclear d11
# metaclear d20; metaclear d21...

; 더 이상 md 기능을 사용치 않으려면, metadb를 다 지우고
  pkg를 찾어서 제거한다.


cf> Swap 은 Sync 할 필요성이 없어서  mirror 목록에서 빼 버려도 될 것 같은데...,
   Swap가 없어도 Boot 하는데, 지장이 없을 텐데.... 왜 사용할까?


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

5) Raid 5

  - Read 성능은 좋으나, Write성능은 나쁘다.
  - Raid3 은 sequential I/O에 좋으나, random i/o는 나쁘다.

# metainit d5 -r c3t4d0s3 c3t5d0s3 c3t6d0s3 [ -i 16k ]
# newfs /dev/md/rdsk/d5
# mount ....  /raid5 ; mkfiles 500m 500m;touch raid5

  
* hot spare pool

# metahs -a hsp01 c0t7d0s3
# metaparam -h hsp01 d5 

cf > 복수개의 Raid Metadevice를 하나의 spare에 둘 수 있다.
- hot spare설정 후, 강제로 disk(c3t4d0s3) 를 하나 빼고,  미리 만들어 두었던 
   raid5 파일을 수정하여, hot spare에 Volume이 자동으로 Re-sync
   됨을 확인한다.  
   <-- 자동 sync 가 안 될 땐, raid5 mount 자리에, 작은 파일을 하나 만들어서
          I/O를 발생시킨다.
   <-- gui에서 volume의  Attention 표시와 빠진 디스크 자리에 spare가 들어감을
          확인


* hot spare로 넘어 가 있을 때  file Disk 교환
# metareplace -e d5 c3t4d0s3 
- 다시 Resync 되고, Attention이 사라진다.

* hot spare가 없을 때, Disk 수동 교환하기
# metareplace d5 c3t4d0s3 c3t7d0s4

-----------------------------------------------------------------------
6) UFS logging

- 대용량 FS가 깨졌을 때, 복구 시간을 단축시키기 위하여 저널링 log 사용하기
-  log : Fs= 1M:100M  
- / , /var/ ,/usr/ opt 등 System Mount point은 사용 불가 
- Raid5에서 사용하는 것은 성능 때문에 권장하지 않는다. 

* 기존의 fs에 ufs logging 기능을 더할 때
/data = c0t3d0s6,   

# umount /data
# metainit d60 -t  c0t3d0s6  c0t4d0s3
# vfstab 수정, mount    

*  첨부터 ufs logging meta device 만들기
# metainit d61 -t c0t3d0s5 c0t4d0s3
# newfs /dev/md/rdsk/d61
# mount

                           
                           
7) 기 타

- 사용하지 않은 기능이 있을 때, boot시 경고 메시지가 출력되므로
   /etc/system 파일에서 주석 처리한다.

- 제거하기
   
    1. 무식하게 제거하기 
      - md 실행 전에 백업해 두었던 system 파일을 restore 시키고,
        vfstab을 restore 시킨 후, reboot 한다.
      

    2. 깔끔하게 제거하기
      - 모든 meta device를 제거한다.
         단, system mount point (특히 OS 미러 시 ), 바로 제거할 수 없으므로
         생성한 반대 순서로 차례차례 제거해 나가야 한다.
         vfstab에서 모든 md를 원래 slice로 변경하고, 
         특히  / 부분은 \"metaroot /dev/rdsk/오리지널 슬라이스\"를 꼭 해준 뒤
         Reboot 하여, 모든 meta device를 제거한다.

      - 모든 slice가 md에서 빠진 후, metadb를 제거하고, pkg를 제거한다.

 


=======================================================
Solstice DiskSuite

솔라리스 9에는 Solstice DiskSuite라는 것이 있다. 한마디로 말해 소프트웨어 레이드(RAID) 프로그램이다.

이 슈트를 쓰는 가장 큰 이유는 미러링에 있다고 생각한다. 두 개의 하드디스크를 미러링 한 다음 한 개의 하드가 고장 났다면, 고장한 하드를 떼어버리고, vfstab에서 md부분을 원래대로 예를 들어 c0d0s0해 주면 완벽하게 복구된다.

디스크를 통째로 미러링 하는 방법도 있다고 하는데, 그건 인터넷을 뒤져보자. 여기서 설명하는 건 단순한 이해를 돕고자 함이다.

1. 전제조건 
c0d0s7과 c0d1s7 (각각 12GB)을 /export/home으로 설정할 것이다. 모든 작업은 루트로 했다. c0d0s7과 c0d1s7은 모두 포맷을 마친 상태다. (나중에 알았지만 포맷 안 해도 된다)

2. 메타 DB 생성
메타 DB라는 걸 먼저 생성한다. 
# metadb -a -f -c 1 /dev/dsk/c0d0s7 /dev/dsk/c0d1s7
-a는 생성하라는 거고 -f는 강제로 실행하라는 거고 -c 1은 리플리카의 개수. 기본값이 1이다.

3. 이제 md.tab를 수정할 차례다.
md.tab을 vi로 열어보면 각종 설정에 대한 설명이 나온다. 한번 읽어보는 것도 도움될 것이다. 솔라리스 8에서는 이 파일의 위치가 좀 달라질 수 있다. 솔라리스 9 x86 12/02 버전을 사용했다.

3-1. 미러
# vi /etc/lvm/md.tab
d0 2 1 /dev/dsk/c0d0s7 1 /dev/dsk/c0d1s7

d0 메타 장치 이름
2 2개의 슬라이스를 만듦
1 뒤에 나오는 1개의 논리 디바이스를 한 개의 슬라이스를 만듦
/dev/dsk/cXtXdXsX 논리 디바이스 이름

d0 2 1 /dev/dsk/c0d0s7 1 /dev/dsk/c0d1s7
         | | |       |         |       |
         + + +-------+         +-------+

/dev/dsk/c0d0s7 슬라이스를 1개의 슬라이스로, /dev/dsk/c0d1s7 슬라이스를 1개의 슬라이스로 해서 총 2개의 슬라이스 가지는 한 개의 d0 메타 장치를 만듦

3-2. 스트라이핑
# vi /etc/lvm/md.tab
d0 1 2 /dev/dsk/c0d0s7 /dev/dsk/c0d1s7 -i 32k

d0 메타 장치 이름
1 1개의 슬라이스를 만듦
2 뒤에 나오는 2개의 논리 디바이스를 한 개의 디바이스로 만듦
/dev/dsk/cXdXsX  논리 디바이스 이름
-i 32k 인터레이스 사이즈 (32k 단위로 데이터를 쪼갬)

d0 1 2 /dev/dsk/c0d0s7 /dev/dsk/c0d1s7 -i 32k
  | | |       |               |          |  |
         + + +-------+---------------+----------+--+

  /dev/dsk/c0d0s7 슬라이스와 /dev/dsk/c0d1s7 슬라이스를 한 개의 32k의인터레이스 사이즈를 가지는 1개의 슬라이스로 한개의 d0메타 장치를 만듦

3-3. 다음과 같이 하면 어떻게 될까?
d0 2 3 c0t1d0s2 c0t2d0s2 c0t3d0s2 -i 16k \\
     3 c1t1d0s2 c1t2d0s2 c1t3d0s2 -i 32k

     RAID 1+0를 구현했다. ^^

여기까지 하면 vi /etc/lvm/md.tab에 들어가는 내용이 무엇인지 감을 잡았으리라 믿는다. 이외에도 많다. RAID 5도 구현할 수 있다. md.tab의 man페이지를 참고하자.

4. 마운팅 및 포맷
d0 디바이스를 초기화하고 포맷한 다음 마운팅 하면 된다.

# metainit d0
# newfs /dev/md/rdsk/d0
# vi /etc/vfstab
/dev/md/dsk/d0 /dev/md/rdsk/d0        /export/home    ufs     2       yes        -
# mountall

반응형

'컴퓨터 > 서버팁' 카테고리의 다른 글

리눅스 /etc/fstab 설정  (1) 2019.12.08
D2 Array 추가  (0) 2019.12.08
Raid2에서 Raid5로 변경  (0) 2019.12.08
SUN 서버 Customer Service Report  (0) 2019.12.08
솔라리스 디스크 추가  (0) 2019.12.08
Comments