2017/02/27 12:50

DRBD 서버 구성

Posted by JParker
OS/Linux 2017/02/27 12:50
일을 하다보니 여러 환경에서 신기한 작업(?)들을 많이 하게 됩니다. 이번에는 DRBD 환경 구축이 필요하여 아래와 같이 구성하였습니다. 필요하신 분들은 아래의 자료를 참고하여 구축해보시기 바랍니다. 문서의 저작권은 http://root.so, http://jaehun.org 를 운영하는 Jaehun, Park <jaehun@me.com>에게 있으므로, 출처를 반드시 밝혀주시기 바랍니다. 감사합니다.

구성 환경

  • RHEL 6.4 (64bit)
  • DRBD 8.4.0

구성 요건

  •  단일 Primary 모드

구성 개요

  1. DRBD 설치
  2. DRBD 설정파일 작성
  3. DRBD 기동
  4. 데이터 동기화 확인

서버 구성

Host Name   Address
node1 master 192.168.11.151
node2 backup 192.168.11.152
  Virtual IP 192.168.11.150

작업 내용

DRBB를 빌드 하기 위하여 필요한 패키지 설치
$ sudo yum install -y gcc make automake autoconf flex rpm-build kernel-devel \
  libxslt fakeroot
rpmbuild 구축에 앞서 필요로 하는 디렉토리 구조를 생성.
$ mkdir -p /home/help/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
소스 다운로드 (안정버전 drbd 8.4.0)
$ curl -O http://oss.linbit.com/drbd/8.4/drbd-8.4.0.tar.gz
다운로드한 소스를 풉니다.
$ tar zxvf drbd-8.4.0.tar.gz

configure스크립트를 실행.
$ cd drbd-8.4.0
$ ./configure
fakeroot를 이용하여 make를 실행합니다. fakeroot를 사용하는 이유는 RPM을 빌드하기 위함이며,  root권한이기 때문에 fakeroot가 root권한인 것 같이 표현합니다.
$ fakeroot make rpm km-rpm
아무이상없이 빌드가 완성되면 , 아래rpm이 작성된다.
$ ls -1 /home/help/rpmbuild/RPMS/x86_64/
drbd-8.4.0-1.el6.x86_64.rpm
drbd-bash-completion-8.4.0-1.el6.x86_64.rpm
drbd-heartbeat-8.4.0-1.el6.x86_64.rpm
drbd-km-2.6.32_71.el6.x86_64-8.4.0-1.el6.x86_64.rpm
drbd-pacemaker-8.4.0-1.el6.x86_64.rpm
drbd-udev-8.4.0-1.el6.x86_64.rpm
drbd-utils-8.4.0-1.el6.x86_64.rpm
drbd-xen-8.4.0-1.el6.x86_64.rpm
RPM 빌드 완료후 필요한 것은 drbd-utils와 drbd-km입니다. 물론 필요에 따라 해당 패키지를 설치 하시면 됩니다.
$ sudo rpm -ivh \
 /home/help/rpmbuild/RPMS/i386/drbd-utils-8.4.0-1.el6.x86_64.rpm \
 /home/help/rpmbuild/RPMS/i386/drbd-km-2.6.32_71.el6.x86_64-8.4.0-1.el6.x86_64.rpm
커널 모듈에 DRBD를 인식 시킵니다.
$ lsmod | grep drbd
$ sudo modprobe drbd
$ lsmod | grep drbd
drbd                  274063  0
libcrc32c                815  1 drbd
” /etc/init. d/drbd start "실행에 modprobe drbd가 실행되므로, 여기에서는 modprobe 명령어로 커널 모듈을 정상적으로 등록 할 수 있는 것을 확인하는 것입니다. 부팅시 자동으로 등록될 수 있도록 아래와 같이 서비스 등록을 시켜줍니다.
$ chkconfig --list drbd
drbd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

Device File 준비

본인의 경우 LVM으로 각각 100G, 75G 두개의 파티션을 준비했습니다. lv_data : 100G , lv_log : 75G

DRBD 설정

/etc/hosts에 호스트명을 등록해줍니다. 등록을 하는 이유는 config에서 IP를 지정하지만 호스트명을 IP로 변환하는 것을 실패하면 동작되지 않는 문제때문입니다.
$ sudo vi /etc/hosts
> 192.168.11.151 node1
> 192.168.11.152 node2

다음은 DRBD 설정 파일을 수정합니다. 설정 파일은 항상 res로 인식하도록 하고 있습니다.
disk 부분이 미리 준비해둔 LVM 파티션입니다. Volum은 node1과 node2에 따라 틀리므로 주의하시기 바랍니다.
/etc/drbd.d/data.res
resource data {
  protocol C;
  volume 0 {
    device      /dev/drbd0;
    disk        /dev/vg_cs1/data;
    meta-disk   internal;
  }
  volume 1 {
    device      /dev/drbd1;
    disk        /dev/vg_cs1/log;
    meta-disk   internal;
  }
  on node1 {
    address 10.10.10.11:7801;
  }
  on node2 {
    address 10.10.10.12:7801;
  }
}
DRBD 디바이스를 초기화합니다.
$ sudo drbdadm create-md data
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
success
※주의: iptables가 구동중일 경우 DRBD 통신이 원활히 동작되지 않을 수 있으니 참고 바랍니다. DRBD 동작.
$ sudo /etc/init.d/drbd start
Starting DRBD resources: [
     create res: data
   prepare disk: data
    adjust disk: data
     adjust net: data
]
.....
DRBD를 스타트하면 /proc/drbd가 생성됩니다.
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@node1, 2013-10-14 15:10:50
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:106628836 dw:106628836 dr:0 al:0 bm:6400 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:78640764 dw:78640764 dr:0 al:0 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
이 때, 어느 쪽도 Primary가 아닌 Secondary로 동작되는 것을 알 수 있습니다.

데이터 동기화 확인

Primary에서 파일을 작성하고,  Secondary에 데이터 동기화가 이루어지는 것을 확인합니다.

node1: (secondary→primary)

node1을 primary로 강제 변경합니다.
$ sudo drbdadm primary --force data
Primary로부터 Secondary에  동기화 처리가 시작되며, 용량에 따라 동기화 시간이 틀려질 수 있습니다. 저의 경우 약 1시간정도 걸렸습니다.
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by centos@centos, 2011-11-08 16:16:36
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:2664 nr:0 dw:0 dr:104855036 al:0 bm:0 lo:0 pe:3 ua:3 ap:0 ep:1 wo:b oos:128600
        [>....................] sync'ed:  3.2% (128600/104855036)K
        finish: 0:00:45 speed: 2,432 (2,432) K/sec
 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:78640764 nr:0 dw:0 dr:78641436 al:0 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by centos@centos, 2011-11-08 16:16:36
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:131032 nr:0 dw:0 dr:131696 al:0 bm:8 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:78640764 nr:0 dw:0 dr:78641436 al:0 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
DRBD 디바이스를 확인해 보시면 설정한 대로 /dev/drbd0과 /dev/drbd1이 생성되었음을 알게 될 것입니다.
$ ls -la /dev/drbd0
brw-rw---- 1 root disk 147, 0 Nov  8 17:19 /dev/drbd0
기존 사용하던 디스크처럼 동일하게 DRBD 디바이스를 포맷하고, 마운트 하면 사용이 가능합니다.
$ sudo mkfs.ext4 /dev/drbd0
$ sudo mkfs.ext4 /dev/drbd1
$ sudo mkdir /data
$ sudo mount -t ext4 /dev/drbd0 /data
$ sudo mkdir /data/log
$ sudo mount -t ext4 /dev/drbd1 /data/log
마운트후 정상적으로 마운트가 되었는지 확인합니다.
$ ls -la /data
total 18
drwxr-xr-x   4 root root  4096 2013-10-14 18:12 .
dr-xr-xr-x. 28 root root  4096 2013-10-14 16:27 ..
drwxr-xr-x   3 root root  4096 2013-10-14 18:13 log
drwx------   2 root root 16384 2013-10-14 17:54 lost+found

primary·secondary간 데이터 동기되는 것을 확인하기 위해서, 파일을 생성해봅니다.
$ sudo touch /data/test.txt
$ ls -la /data/
total 28
drwxr-xr-x   4 root root  4096 2013-10-14 18:15 .
dr-xr-xr-x. 28 root root  4096 2013-10-14 16:27 ..
drwxr-xr-x   3 root root  4096 2013-10-14 18:13 log
drwx------   2 root root 16384 2013-10-14 17:54 lost+found
-rw-r--r--   1 root root     0 2013-10-14 18:15 test.txt

node1: (primary→secondary)

DRBD가 사용중이므로 secondary로 변경할 수 없으므로, 디바이스를 umount 합니다.
$ sudo umount /data/log
$ sudo umount /dat
DRBD의 모드를 Primary에서 Secondary모드로 변경합니다.
$ sudo drbdadm secondary data
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@node1, 2013-10-14 15:10:50
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:106628984 nr:0 dw:1774620 dr:104856149 al:498 bm:6400 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:80005452 nr:0 dw:1364688 dr:78642521 al:384 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

위와 같이 되었으므로, 기존 Secondary가 Primary로 변경할 수 있는 상태가 됩니다.

node2: (secondary→primary)

node2의 DRBD모드를 Primary로 변경합니다.
$ sudo drbdadm primary data
/proc/drbd에서 Primary가 되었는지 확인합니다.
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@node1, 2013-10-14 15:10:50
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:106628984 dw:106628984 dr:672 al:0 bm:6400 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:80005452 dw:80005452 dr:672 al:0 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
DRBD 디바이스의 내용을 확인하기위하여, 볼륨을 마운트합니다.
$ sudo mkdir /data
$ sudo mount -t ext4 /dev/drbd0 /data/
$ sudo mount -t ext4 /dev/drbd1 /data/log
mount된 디렉토리에서 node1에서 작성하였던 test.txt가 존재하는지를 확인합니다.

$ ls -la /data/ total 20 drwxr-xr-x 3 root root 1024 Nov 8 17:23 . drwxr-xr-x. 3 root root 4096 Nov 8 17:25 .. drwxr-xr-x 3 root root  4096 2013-10-14 18:13 log drwx------ 2 root root 16384 2013-10-14 17:54 lost+found -rw-r--r-- 1 root root     0 2013-10-14 18:15 test.txt

node2: (primary→secondary)

해당 /data/log와 /data 디렉토리를 umount 하고, secondary로 모드를 변경합니다.
$ sudo umount /data/log
$ sudo umount /data
$ sudo drbdadm secondary data
/dev/drbd에서 secondary로 모드가 변경되었는지 확인합니다.
$ cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@node1, 2013-10-14 15:10:50
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:8 nr:106628984 dw:106628992 dr:1385 al:1 bm:6400 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:8 nr:80005452 dw:80005460 dr:1373 al:1 bm:4800 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
이것으로 node1, node2 둘다 secondary로 동작되고 있는 상태입니다. 추후 RHCS나 혹은 heartbeat를 이용하여 해당 클러스터로 묶어서 구동시키실 수 있습니다. 이로서 DRBD 구축에 대한 글을 마치겠습니다. 감사합니다.
2017/02/27 12:50 2017/02/27 12:50
Tags ,
2017/02/27 12:48

IBM 혹은 UEFI로 부팅 않될 경우

Posted by JParker
OS/Linux 2017/02/27 12:48
증상 : RHEL6 버젼 설치를 UEFI 모드로 설치 후 시스템 부팅시 아래와 같은 문구가 출력되는 현상
Invalid magic number: 0 Error 13: Invalid or unsupported executable format Press any key to continue...
원인 : Trusted Execution Technology와 tboot을  BIOS에서 지원합니다. 따라서 TXT와 tboot이 uEFI 모드가 동작중일 때에는 부팅을 할 수 없습니다. 따라서 tboot과 함께 사용하실 수 없습니다. 해결 : 설치시 패키지중 base (기본)에 고급을 보시면 tboot 패키지가 있습니다. 이것을 제외하시고 설치하시기 바랍니다.
2017/02/27 12:48 2017/02/27 12:48
Tags , ,
2017/02/27 12:47

리눅스 본딩 설정하기

Posted by JParker
OS/Linux 2017/02/27 12:47

Linux Bonding 설정하기

본딩이란?한대의 서버에 여러개의 랜카드를 이용하여 대역폭 또는 예비 회선으로 사용할 수 있도록 하는 전송 속도의 분배및 대비책으로 사용하기 위한 기술입니다. 윈도우에서는 티밍(teaming)이라고 불리우기도 하는 기술입니다.

Bonding 종류
  • Mode 0 (balance-rr) balance-round robine ( 2개의 NIC을 순차적으로 분배 + Fault Tolerance) 회선이 2회선일 경우 트래픽을 같이 사용할 수 있어 대역폭을 분산시키는데 효율적입니다. [ A nic -> B nic -> A nic -> B nic 순] 으로 패킷을 분산 시키는 방법입니다. 또한, 장애허용으로 인하여, 한쪽 네트워크에 단절이 오더라도 이를 보안하는 기능이 존재 합니다.
  • Mode 1 (active-backup) 일반 기업들이 많이 쓰고, 흔히들 말하는 네트워크 이중화에 대한 부분으로 사용되어집니다. 실제 사용시에는 2개의 백본에 2개의 NIC에 연결이 되며, 활성화 되어있는 NIC에 문제 발생시 예비 NIC으로 이첩시키는 기능을 합니다. 보통 IDC같은 곳에서는 이중화 보다는 같은 네트워크 스위치에 2회선으로 물려 사용하기도 합니다. 이 모드도 장애허용에 대하여 지원됩니다.
  • Mode 2 (balance-xor) XOR 방식에 따라 패킷을 전송합니다. (Source MAC Address가 Target MAC Address로 비트연산을 하여 ) 모드 0과 비슷하지만 근원지 MAC에서 목적지 MAC으로 비트 연산을 통하여 분배합니다. 보통 방화벽과 비슷한 방식이기는 하나 들어오는 리퀘스트에 MAC을 연결하는 방식입니다.
  • Mode 3 (broadcast) 모든 NIC에 동일한 패킷을 brocast로 발송합니다.
  • Mode 4 (802.3.ad) Dynamic Link Aggregation 정책으로 동작됩니다. speed와 duplex 설정을 공유하는 aggregation groups를 스위칭 장비에서 설정하여야 합니다. 단, 802.3.ad를 지원하는 스위치에서만 사용이 가능하며, 연결대수에 상관없이 그룹화에 따라 회선의 정책이 변경되어 무단절 인터넷 연결을 가능하게 만드는 방식입니다.
  • Mode 5 (balance-tlb) 로드 발랜싱 정책으로 밖으로 내보내지는 트래픽은 분산되어 송출되며, 들어오는 트래픽은 Active되어있는 NIC으로 패킷을 받습니다. 만일 Active 되어있는 NIC의 문제로 패킷을 받지 못하면 또다른 NIC이 실패한 NIC의 MAC Address를 물려받게 됩니다.
  • Mode 6 (balance-alb) 들어오는 트래픽을 분산 처리하여 받습니다. bond에서 트래픽이 많이 존재하지 않는 NIC으로 분산됩니다. 들어오는 로드 발렌싱은 ARP negotiation을 통해서 수행됩니다.

기본적인 부분
0 - RR(RoundRobin)방식 로드밸런스. 인터페이스의 라운드로빈(대역폭 상승 + Failover)
1 - Active-Standby (NIC 의 Failover 만을 위한 모드)
한개는 Standby로 기존 것이 문제 생길경우 active로 전환
2 - XOR 방식 / 수신시에는 MAC 어드레스로 매핑, 송신시 1번 NIC 사용
3 - Broadcast 방식 / 모든 Slave NIC 으로 통신 failover 제공
4 - 802.3ad Dynamic Link aggregation
5 - 송신패킷만 로드밸런싱 / 동일 스위치에 물려있어야 함
6 - 송수신패킷 로드밸런싱 / 동일 스위치에 물려있어야 함
Miimon 옵션은?
링크 감시설정 모드로 ms 단위를 사용하며 디폴트값이 0(사용안함)
즉, 0으로 설정하면 Failover가 비활성화되는 부분으로 사용하며,
기본적으로 리눅스에서는 100ms로 사용합니다.
Bonding 하기 지금부터는 CentOS를 이용하여 본딩하는 방법을 알려드리도록 하겠습니다. 이는 Redhat 계열에서는 많이 이용되며, 주로 많이 현업에서 많이 사용되는 것은 모드 1번(Active&Standby)을 사용합니다.
  1. /etc/sysconfig/network 설정 (기본 Gateway를 설정해 줍니다.) 맨 밑줄에 GATEDEV=bond0 추가
  2. /etc/sysconfig/network-scripts/ifcfg-bond0 설정
    DEVICE=bond0            # 연결 디바이스명
    BOOTPROTO=none          # Static (고정), DHCP, none, bootp 형식등이 있음
    ONBOOT=yes              # 부팅시 동작
    USERCTL=no              # 사용자컨트롤 금지
    TYPE=Ethernet           # 타입은 이더넷
    IPADDR=10.0.1.101       # IP
    NETMASK=255.255.255.0   # Netmask
    GATEWAY=10.0.1.1        # Gateway
    BONDING_OPTS=`mode=1 miimon=100 use_carrier=0 primary=eth0`
    
  3. /etc/sysconfig/network-scripts/ifcfg-eth(x) 설정 x=(ex:eth0,1)
    DEVICE=ethX           # 연결 디바이스명 (eth0,1)
    BOOTPROTO=none        # Static (고정), DHCP, none, bootp 형식등이 있음
    ONBOOT=yes            # 부팅시 동작
    USERCTL=no            # 사용자 컨트롤 금지
    TYPE=Ethernet         # 이더넷 타입
    MASTER=bond0          # MASTER는 Bonding 명
    SLAVE=yes             # 대비책으로 구성 (Master는 bond0이므로 Slave 그룹에 가입)
    
  4. /etc/modprobe.conf 설정내에 아래의 사항을 추가
    alias bond0 bonding
    options bond0 mode=1 miimon=100
    # 만일 두개의 본딩을 구성하셔야 한다면 아래 부분으로 이용하시기 바랍니다.
    alias bond0 bonding
    alias bond1 bonding
    options bonding max_bonds=2
    options bonding miimon=100 mode=1
  5. 모듈 로딩 및 네트워크 재시작.
    modprobe bonding # 본딩 모듈 로딩
    /etc/init.d/network restart 혹은 service network restart
    
  6. /proc/net/bonding/bond0 에서 bonding 확인
    Bonding Mode: fault-tolerance (active-backup) # 본딩 모드
    Primary Slave: None
    Currently Active Slave: eth0    # 현재 Active 디바이스명
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 0
    Down Delay (ms): 0
    Slave Interface: eth0
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 1x:xx:xx:xx:e1:40
    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 1x:xx:xx:xx:e1:41
    
위와 같이 정상적으로 동작이 된다면 이상없이 마무리가 된 것입니다. 모드에 따라 설정법이 다르니 참고 하시기 바랍니다.
2017/02/27 12:47 2017/02/27 12:47
2017/02/27 11:18

리눅스 파일 퍼미션

Posted by JParker
OS/Linux 2017/02/27 11:18

파일 권한 이해하기

리눅스를 시작하는 과정중 제일 힘든 부분이 파일에 대한 권한을 이해하는 것입니다. 이 장에서는 파일 권한에 대한 이해와 변경에 대하여 알아볼 것입니다. 권한 설정은 가장 기초적이면서도 가장 강력한 보안 설정이 될 수 있습니다. 흔히 웹호스팅에서 많이 이용되어지는 보안이며, 각 업체마다 제각기 다른 방식으로 시스템을 파일 권한과 여러 프로그램으로 보호를 하고 있답니다. 이처럼 파일 권한설정은 매우 중요할 수 있기에 피할 수 없는 부분입니다.


파일 권한은 무엇인가?

UNIX 시스템에 사용되는 모든 파일 및 폴더는 한 세트의 권한으로 설정이 되어있습니다. 누가 이 파일의 주인이며, 누가 실행할 것인지에 대한 설정입니다. 모든 파일(또는 폴더)에는 소유자 및 그룹이 존재합니다. 만일 여러분이 파일을 작성하였다면, 보통 파일의 소유자가 됩니다. 또한 그룹은 보통 그 파일에 관련된 사용자의 그룹으로 설정이 됩니다.

권한 설정의 유형은?

파일 권한 설정은 세가지 유형의 타입으로 정할 수 있습니다. 첫째, 파일에 대한 소유자 - User 라고 칭하며, U라고 표시하겠습니다. 둘째, 파일에 대한 그룹 - Group 라고 칭하며, G라고 표기하겠습니다. 세째, 파일에 대한 권한 없는 소유자(또는 그룹) - Others라고 칭하며, O라고 표기하겠습니다.

일반 사용자의 권한은?

각각의 세가지 유형인 권한내에는 각각 읽고 쓰고 실행할 수 있는 권한을 가지고 있습니다.
Read - 파일(디렉토리)를 볼 수 있습니다. 디렉토리의 경우 디렉토리 내에 있는 파일들의 리스트를
         보실 수 있습니다.
Write - 파일을 생성하거나 변경을 할 수 있습니다. 파일(디렉토리)를 생성하거나 삭제할 수도 있습니다.
Execute - 만일 파일이 스크립트라면 실행할 수 있습니다. 디렉토리일 경우 억세스가 가능해집니다.

파일 권한에 이용되는 숫자?

파일 권한을 변경시에 이용되는 숫자가 있습니다. 아래와 같이 test 디렉토리의 경우 권한은 755에 해당합니다. data의 경우 644에 해당하게 됩니다. 이는 어떻게 알 수 있을까요? drwxr-xr-x 6 jaehun staff 204 1 30 10:23 test -rw-r--r-- 1 jaehun staff 30261 1 30 10:23 data 자.. 위에서 test 디렉토리를 예제로 분석을 해 보도록 하겠습니다. 앞에서 보신 바와 같이 drwxr-xr-x <-- 파일 혹은 디렉토리의 퍼미션 권한 입니다. 자리수를 세어보시면 총 10자리 이며, 첫번째는 디렉토리 또는 파일등을 나타내는 부분입니다. 뒷자리 9자리를 3개씩 나누어 User, Group, Others로 나뉘게 되며 각각의 의미하는 부분이 Read, Write, eXecute로 읽기, 쓰기, 실행에 해당합니다. 이를 숫자로 표기하면 아래와 같습니다.
Num 읽기 (R) 쓰기 (W) 실행 (X)
0 No No No
1 No No Yes
2 No Yes No
3 No Yes Yes
4 Yes No No
5 Yes No Yes
6 Yes Yes No
7 Yes Yes Yes

위와 같이 숫자에 해당하는 부분은 User, Group, Others의 순으로 3개의 숫자를 이용하여 파일에 권한을 줄 수 있습니다. 여기서 쉽게 생각해보면 읽기 (R)의 경우 해당 숫자는 4이고, 쓰기의 경우는 2, 실행은 1이라 생각을 하면 됩니다. 소유자의 경우 읽고 쓰고 실행이 가능하도록 하며, 그룹사용자는 읽기만 가능해야 하고 기타 사용자는 접근을 할 수 없도록 한다면 아래와 같이 될 것입니다. O = RWX , G = R--, O = --- 위의 부분을 숫자로 변환하면 아래와 같습니다. O = 4+2+1, G = 4+0+0, O = 0+0+0 으로 이를 합산하면 740으로 나오게 됩니다. 아래의 예제는 주로 많이 사용되는 퍼미션들입니다.

777 = rwxrwxrwx
711 = rwx--x--x
755 = rwxr-xr-x
644 = rw-r--r--


파일 권한 변경

파일 권한에 대한 변경은 권한을 수정하는 명령어로 사용됩니다. -rw-r--r-- 1 jaehun staff 30261 1 30 10:23 data 위와 같은 파일이 있을 경우 소유자는 jaehun이며 staff그룹으로 퍼미션은 644에 해당합니다. 이를 다른 사람들이나 혹은 같은 그룹 사용자에게 읽기, 쓰기 그리고 실행도 가능토록 만드려면 명령어를 이용하여 해당 권한을 변경하실 수 있습니다. 명령어는 chmod 이며, 두가지의 변경 방식이 있습니다. 첫째는 바로 배웠던 숫자를 이용하는 방법과 또다른 방법은 문자열로 이용하는 방법입니다. 숫자로 변경하는 방법의 경우 아래와 같습니다. chmod nnn 파일명(또는 디렉토리명) nnn에는 위에서 배운것처럼 777 명령을 넣게 될 경우 아래와 같이 출력이 될 것입니다. -rwxrwxrwx 1 jaehun staff 30261 1 30 10:23 data 이와는 다르게 문자열로 변경하는 방식은 다음과 같은 단어들을 사용하게 됩니다. u(사용자), g(그룹), o(이외의 사용자)를 각각의 사용자 권한에 사용하며, r(읽기), w(쓰기), x(실행)에 대하여 각각 선언하고 있습니다. 퍼미션을 추가할 때에는 (+) 기호를 뺄때는 (-)기호를 사용하며, 해당 권한 전체 선언은 (=)로 표기합니다. 예제는 아래와 같습니다.
chmod a+x data : 모든 유져에게 x (실행)권한을 줍니다.
chmod u=rwx data : 사용자의 권한을 r(읽기), w(쓰기), x(실행)권한을 줍니다. 이때, 그룹과 기타사용자의 경우 변경이 되지 않습니다. 즉, 사용자의 권한만 변경이 됩니다.
chmod go-w data : 그룹사용자와 기타사용자의 w(쓰기) 권한을 뺍니다. 이때, 소유자인 사용자는 변경되지 않습니다.

파일 권한 확인

항상 파일을 변경하고 다음의 명령을 통하여 모든 파일과 디렉토리들에 대하여 확인을 하실 수 있습니다. ls -al 한 파일(또는 디렉토리)를 확인하실 경우 아래와 같이 사용하시게 되면 확인이 가능합니다. 저의 경우 data 파일을 변경하였으므로 data 파일을 확인하겠습니다. $ ls -l data -rwxrwxrwx 1 jaehun staff 30261 1 30 10:23 data 위와 같이 해당 권한을 확인할 수 있겠습니다. 자. 이제 여러분들은 파일 권한에 대하여 변경이 가능하십니다. 수고하셨습니다.
2017/02/27 11:18 2017/02/27 11:18
2017/02/14 03:17

RHCS: Quorum disk and heuristics

Posted by JParker
OS/Linux 2017/02/14 03:17

RHCS: Quorum disk and heuristics


# Tested on RHEL 6

# A quorum disk is usually used as a tie-breaker to determine which node should be fenced
# in case of problems.

# It adds a number of votes to the cluster in a way that a "last-man-standing" scenario
# can be configured.

# The node with the lowest nodeid that is currently alive will become the "master", who
# is responsible for casting the votes assigned to the quorum disk as well as handling
# evictions for dead nodes.

# Every node of the cluster will write at regular intervals to its own block on a
# quorum disk to show itself as available; if a node fails to update its block it will
# be considered as unavailable and will be evicted. Obviously this is useful to
# determine whether a node that doesn't respond over the network is really down or just
# having network problems. 'cman' network timeout for evicting nodes should be set at
# least twice as high as the timeout for evicting nodes based on their quorum disk
# updates.
# From RHEL 6.3 on, a node that can communicate over the network but has problems to
# write to quorum disk will send a message to other cluster nodes and will avoid to
# be evicted from the cluster.

# 'cman' network timeout is called "Totem Timeout" can be set by adding
# <totem token="timeout_in_ms"/> to /etc/cluster/cluster.conf

# Quorum disk has to be at least 10MB in size and it has to be available to all nodes.

# A quorum disk may be specially useful in these configurations:
#
# - Two node clusters with separate network for cluster communications and fencing.
# The "master" node will win any fence race. From RHEL 5.6 and RHEL 6.1 delayed
# fencing should be used instead
#
# - Last-man-standing cluster

# Configuring a quorum disk
# ------------------------------------------------------------------------------------------

# Take a disk or partition that is available to all nodes and run following command
# mkqdisk -c <device> -l <label>:

mkqdisk -c /dev/sdb -l quorum_disk
mkqdisk v3.0.12.1

Writing new quorum disk label 'quorum_disk' to /dev/sdb.
WARNING: About to destroy all data on /dev/sdb; proceed [N/y] ? y
Initializing status block for node 1...
Initializing status block for node 2...
[...]
Initializing status block for node 15...
Initializing status block for node 16...

# Check (visible from all nodes)
mkqdisk -L
mkqdisk v3.0.12.1

/dev/block/8:16:
/dev/disk/by-id/ata-VBOX_HARDDISK_VB0ea68140-6869d321:
/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VB0ea68140-6869d321:
/dev/disk/by-path/pci-0000:00:0d.0-scsi-1:0:0:0:
/dev/sdb:
Magic: eb7a62c2
Label: quorum_disk
Created: Thu Jul 31 16:57:36 2014
Host: nodeB
Kernel Sector Size: 512
Recorded Sector Size: 512

# Scoring & Heuristics
# ------------------------------------------------------------------------------------------

# As an option, one or more heuristics can be added to the cluster configuration.
# Heuristics are tests run prior to accessing the quorum disk. These are sanity checks for
# the system. If the heuristic tests fail, then qdisk will, by default, reboot the node in
# an attempt to restart the machine in a better state.

# We can configure up to 10 purely arbitrary heuristics. It is generally a good idea to
# have more than one heuristic. By default, only nodes scoring over 1/2 of the total
# maximum score will claim they are available via the quorum disk, and a node whose score
# drops too low will remove itself (usually, by rebooting).

# The heuristics themselves can be any command executable by "sh -c".

# Typically, the heuristics should be snippets of shell code or commands which help
# determine a node's usefulness to the cluster or clients. Ideally, we want to add traces
# for all of our network paths, and methods to detect availability of shared storage.


# Adding the quorum disk to our cluster
# ------------------------------------------------------------------------------------------

# On 'luci' management console (first, check the box under Homebase --> Preferences to have
# access to "Expert" mode), go to cluster administration --> Configure --> QDisk, check
# "Use a Quorum Disk" and "By Device Label", and enter the label given to the quorum disk.
# Define a TKO (Times to Knock Out), the number of votes and the interval for the quorum
# disk to be updated by every node.

# The interval (timeout) of the qdisk is by default 1 second. If the load on the system is
# high, it is very easy for the qdisk cycle to take more than 1 second (I'll set it to 3).

# Totem token is set to 10 seconds by default. This is too short in most cases. A simple
# rule to configure totem timeout could be "a little bit" more than 2 x qdiskd's timeout.
# I'll set it to 50 seconds (50000 ms)

# After adding the quorum disk on Luci console, we'll have following entry in our
# /etc/cluster/cluster.conf file:

# <quorumd interval="3" label="quorum_disk" tko="8" votes="1"/>
# <totem token="50000"/>

# On the command line, we can run following commands to obtain same result:

ccs -f /etc/cluster/cluster.conf --settotem token=70000
ccs -f /etc/cluster/cluster.conf --setquorumd interval=3 label=quorum_disk tko=8 votes=1

# If we had defined a heuristic in "Heuristics" section, by entering heuristic program
# (I'll use three pings to different servers as heuristics), interval score and tko, we'd
# have the following:

# <quorumd interval="3" label="quorum_disk" tko="8" votes="1">
# <heuristic program="/sbin/ping nodeC -c1 -w1" tko="8"/>
# <heuristic program="/sbin/ping nodeD -c1 -w1" tko="8"/>
# <heuristic program="/sbin/ping nodeE -c1 -w1" tko="8"/>
# </quorumd>


# Once our quorum disk is configured, the option "expected_votes" must be adapted and
# the option "two_node" is not necessary anymore so have to change following line in
# cluster.conf file:
#
<cman expected_votes="1" two_node="1">

# by
<cman expected_votes="3">



# Do not forget to propagate changes to the rest of nodes in the cluster

ccs -h nodeA -p myriccipasswd --sync --activate


# Quorum disk timings
# ------------------------------------------------------------------------------------------

# Qdiskd should not be used in environments requiring failure detection times of less than
# approximately 10 seconds.
#
# Qdiskd will attempt to automatically configure timings based on the totem timeout and
# the TKO. If configuring manually, Totem's token timeout must be set to a value at least
# 1 interval greater than the the following function:
#
# interval * (tko + master_wait + upgrade_wait)
#
# So, if you have an interval of 2, a tko of 7, master_wait of 2 and upgrade_wait of 2,
# the token timeout should be at least 24 seconds (24000 msec).
#
# It is recommended to have at least 3 intervals to reduce the risk of quorum loss during
# heavy I/O load. As a rule of thumb, using a totem timeout more than 2x of qdiskd's
# timeout will result in good behavior.
#
# An improper timing configuration will cause CMAN to give up on qdiskd, causing a
# temporary loss of quorum during master transition.


# Show cluster basic information
# ------------------------------------------------------------------------------------------

# Before adding a quorum disk:

cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster config_version="25" name="mycluster">
<clusternodes>
<clusternode name="nodeA" nodeid="1"/>
<clusternode name="nodeB" nodeid="2"/>
</clusternodes>
<cman expected_votes="1" two_node="1">
<multicast addr="239.192.XXX.XXX"/>
</cman>
<rm log_level="7"/>
</cluster>


clustat # (RGManager cluster)
Cluster Status for mycluster @ Thu Jul 31 17:13:41 2014
Member Status: Quorate

Member Name ID Status
------ ---- ---- ------
nodeA 1 Online, Local
nodeB 2 Online


cman_tool status
Version: 6.2.0
Config Version: 25
Cluster Name: mycluster
Cluster Id: 4946
Cluster Member: Yes
Cluster Generation: 168
Membership state: Cluster-Member
Nodes: 2
Expected votes: 1
Total votes: 2
Node votes: 1
Quorum: 1
Active subsystems: 8
Flags: 2node
Ports Bound: 0 11
Node name: nodeA
Node ID: 1
Multicast addresses: 239.192.XXX.XXX
Node addresses: XXX.XXX.XXX.XXX



# After adding a quorum disk:

cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster config_version="26" name="mycluster">
<clusternodes>
<clusternode name="nodeA" nodeid="1"/>
<clusternode name="nodeB" nodeid="2"/>
</clusternodes>
<cman expected_votes="3">
<multicast addr="239.192.XXX.XXX"/>
</cman>
<rm log_level="7"/>
<quorumd interval="3" label="quorum_disk" tko="8" votes="1">
<heuristic program="/sbin/ping nodeC -c1 -w1" tko="8"/>
<heuristic program="/sbin/ping nodeD -c1 -w1" tko="8"/>
<heuristic program="/sbin/ping nodeE -c1 -w1" tko="8"/>
</quorumd>
<totem token="70000"/>
</cluster>


clustat # (RGManager cluster)
Cluster Status for mycluster @ Thu Jul 31 17:20:07 2014
Member Status: Quorate

Member Name ID Status
------ ---- ---- ------
nodeA 1 Online, Local
nodeB 2 Online
/dev/sdb 0 Online, Quorum Disk


cman_tool status
Version: 6.2.0
Config Version: 28
Cluster Name: mycluster
Cluster Id: 4946
Cluster Member: Yes
Cluster Generation: 168
Membership state: Cluster-Member
Nodes: 2
Expected votes: 3
Quorum device votes: 1
Total votes: 3
Node votes: 1
Quorum: 2
Active subsystems: 11
Flags:
Ports Bound: 0 11 177 178
Node name: nodeA
Node ID: 1
Multicast addresses: 239.192.XXX.XXX
Node addresses: XXX.XXX.XXX.XXX
2017/02/14 03:17 2017/02/14 03:17
2017/01/25 09:22

HP계열중 B320i 혹은 B120i RAID 관련

Posted by JParker
OS/Linux 2017/01/25 09:22
HP 제품군중 최악의 RAID 부분이 B120i 또는 B320i라고 말할 수 있습니다.

레드햇 계열에서는 거의 인식이 되지 않을 뿐더러 거의 RAID1을 묶어도 소프트웨어 RAID 처럼
필요가 없을 정도입니다.

제가 이정도로 말씀드리는 것은 끝에 i 가 붙는 모델들은 거의 드라이버 인식이 되지 않기때문입니다.

HP MicroServer Gen8,HP DL360e 등 "e" 쓰리즈가 그부분에 해당 되고 있습니다.


아래와 같이 해결 하실 수 있습니다.

1. RAID 컨트롤러를 사용하지 않음.
- B320i 의 경우
  부팅시 System Option -> HP Smart Array B320i Raid 설정 -> DISABLED 변경

- B120i SATA 컨트롤러의 경우
  부팅시 System Option -> SATA Controller Option -> Embedded SATA 설정 -> DISABLE
  ENABLE SATA AHCI SUPPORT 설정

2. RAID 컨트롤러 사용해야 할 경우

2-1. 아래에서 파일 드라이버 다운로드

RHEL7 또는 CENTOS7
http://h20564.www2.hpe.com/hpsc/swd/public/detail?swItemId=MTX_9200a10168684afbbb4efce88a

RHEL6 또는 CENTOS6
http://h20566.www2.hpe.com/hpsc/swd/public/detail?swItemId=MTX_030c07a99fd84a71a9a2161438&sp4ts.oid=5293146

2-2. 설치 시디 부팅후 GRUB내에서 "linux dd blacklist=ahci"  입력이후 설치시 드라이브 넣으라고 할 때에 USB 꼽고 설치.

이후 정상 동작하는 것을 볼 수 있습니다.


2017/01/25 09:22 2017/01/25 09:22
Tags , , , ,
2017/01/16 17:48

Snow Peak Titanium Mini Solo Cookset

Posted by JParker
취미/백패킹 2017/01/16 17:48

가격 : $79.95

사용자 삽입 이미지

2017/01/16 17:48 2017/01/16 17:48
2017/01/04 15:51

침낭 - Montbell DownHugger 800 #0

Posted by JParker
취미/백패킹 2017/01/04 15:51
침낭은 보통 800 필파워 정도 되는 것으로 이용하는 것이 좋습니다.
1500 이상급은 백패킹에 들어가는것도 힘들지만 무게도 감당하기 힘듭니다.
가격 : ¥56,000 + 세금 (국내는 약 74만원)
사용자 삽입 이미지


2017/01/04 15:51 2017/01/04 15:51
Tags