RHCS설치 및 사용하기(KVM guest 환경에서)

클러스터는 보통 두대 이상의 컴퓨터가 상호작용하며 특정 작업을 수행하는것을 의미한다. 클러스터는 보통 HA(High Avaliablity), 로드밸런싱(Load Balancing), High Performence 등의 용도로 사용한다.

여기서는 2개의 node와 1 개의 스토리지 노드를 사용할 것이며, 각각의 노드는 CentOS6.3 최소설치버전(CentOS-6.3-x86_64-minimal.iso)을 이용했다. 192.168.1.x 는 ha 구성용으로 사용한다.

구성환경은 아래와 같으며, Node-C에 클러스터 매니저를 설치했다.

Node-A(Node-1): 192.168.100.31(192.168.1.1)
Node-B(Node-2): 192.168.100.32(192.168.1.2)
Node-C(Node-3): 192.168.100.33(Cluster Management Server)

# cat /etc/hosts
192.168.100.31 cent63-a
192.168.100.32 cent63-b
192.168.100.33 cent63-c

1. RHCS(RedHat Cluster Suite)와 Conga(Web base management suit) 설치

모든 노드에 yum groupinstall “High Availability” 커맨드로 관련 패키지를 설치한다.

# yum groupinstall "High Availability"

2. 클러스터 관리서버(Node-C)에 yum groupinstall “High Availability Management”로 관련 패키지를 설치한다.

# yum groupinstall "High Availability Management"

3. Node-A, B의 /etc/cluster/cluster.conf 화일을 아래와 같이 수정한다.

<?xml version=”1.0″?>
<cluster config_version=”23″ name=”Cent63-cluster”>
<clusternodes>
<clusternode name=”cent63-a” nodeid=”1″/>
<clusternode name=”cent63-b” nodeid=”2″/>
</clusternodes>
</cluster>

클러스터의 이름은, Cent63-cluster가 되며, cent63-a, cent63-b가 클러스터 된다.

4. Node-A, B 에서 아래 서비스를 실행한다.

# chkconfig cman on
# chkconfig rgmanager on
# chkconfig modclusterd on

# passwd ricci
Changing password for user ricci.
New password:
BAD PASSWORD: it is too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.

# /etc/init.d/cman start
Starting cluster:
Checking if cluster has been disabled at boot... [ OK ]
Checking Network Manager... [ OK ]
Global setup... [ OK ]
Loading kernel modules... [ OK ]
Mounting configfs... [ OK ]
Starting cman... [ OK ]
Waiting for quorum... [ OK ]
Starting fenced... [ OK ]
Starting dlm_controld... [ OK ]
Starting gfs_controld... [ OK ]
Unfencing self... [ OK ]
Joining fence domain... [ OK ]
# /etc/init.d/ricci start
Starting oddjobd: [ OK ]
Starting ricci: [ OK ]
# /etc/init.d/rgmanager start
Starting Cluster Service Manager: [ OK ]
# /etc/init.d/modclusterd start
Starting Cluster Module - cluster monitor: Setting verbosity level to LogBasic
[ OK ]

5. 매니지먼트 노드에서는 아래 서비스를 시작한다.

# chkconfig luci on
# chkconfig ricci on

# /etc/init.d/luci start
Starting saslauthd: [ OK ]
Start luci... [ OK ]
Point your web browser to https://cent63-c:8084 (or equivalent) to access luci
# /etc/init.d/ricci start
Starting oddjobd: [ OK ]
Starting ricci: [ OK ]

여기서, luci가 실행되지 않는 문제가 발생했으며, https://access.redhat.com/knowledge/solutions/66259 를 참고하여, 아래 패키지를 다운그레이드 하여 해결했다.

# yum downgrade python-repoze-who-friendlyform-1.0-0.3.b3.el6

여기까지 실행했다면, luci 서버에 로그인한다. 웹브라우져에서 https://192.168.100.22:8084  (luci 서버의 ip주소)하면 아래와같이 로그인 창이 나온다.  id는 root, 비밀번호는 root의 비밀번호를 입력하면 로그인 할 수 있다.

luci login

luci login

로그인한 후, 위에서 설정한 cent63-cluster가 보이지 않았다. 새로 생성하려면, 이미 생성되었다는 메시지만 보일 뿐이다. 그래서, 모든 노드의 /etc/cluster/cluster.conf 를 지우고, 클러스터 서비스를 중지 시켰다.

# cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
# /etc/init.d/rgmanager stop
# /etc/init.d/cman stop

클러스터를 다시 만들면 아래처럼 정상적으로 보이게 된다.

create cluster

create cluster

이제, Failover domain, Resource, Service Group을 등록하여 사용하면 된다.

내 경우, apache 서버를 resource로 등록해 보았으나, 정상작동하지 않아서, 동일 서비스를 스크립트로 지정했더니 잘 되었다.

lucci-3

service running…

터미널 창에서는 clustat 커맨드를 이용하여 확인 가능하다.

# clustat
Cluster Status for Cent63-cluster @ Thu Mar 28 12:49:49 2013
Member Status: Quorate

Member Name ID Status
—— —- —- ——
cent63-a 1 Online, rgmanager
cent63-b 2 Online, Local, rgmanager

Service Name Owner (Last) State
——- —- —– —— —–
service:HTTPd cent63-a started

6. 클러스터 서비스의 정지.
# /etc/init.d/rgmanager stop
# /etc/init.d/cman stop
# /etc/init.d/ricci stop
# /etc/init.d/modclusterd stop

7. 클러스터에서 iSCSI 와 GFS2 사용.

iscsi 서버: 192.168.100.35

각 노드에 iscsi와, gfs2 를 설치한다. iscsi사용은 freeNAS에서 iscsi사용하기를 참고… 혹시 iscsi가 예전 target을 찾고 있다면, 예전 target을 지워준다( # iscsiadm -m node -o delete <ip address>)

# yum install iscsi-initiator-utils gfs2-utils

cent63-c에서, iSCSI 디바이스를 마운트하고, gfs2 화일시스템을 생성한다.

# mkfs.gfs2 -t Cent63-cluster:gfs2fs -j 4 /dev/sda1
This will destroy any data on /dev/sda1.
It appears to contain: data

Are you sure you want to proceed? [y/n] y

Device: /dev/sda1
Blocksize: 4096
Device Size 5.00 GB (1310465 blocks)
Filesystem Size: 5.00 GB (1310464 blocks)
Journals: 4
Resource Groups: 20
Locking Protocol: "lock_dlm"
Lock Table: "Cent63-cluster:gfs2fs"
UUID: c2c6666b-f069-2ebb-ac05-7446f25b0773

cent64-a, b 에서 iscsi서비스를 실행한 후,  iSCSI 장치를 마운트 하여 사용한다. gfs2 덕분에, a 노드에서 화일을 생성하거나 삭제하면, b노드에서도 바로 적용되는것을 볼 수 있다.

# mount -t gfs2 /dev/sda1 /iscsi

 

18 comments

Skip to comment form

  1. 웹사이트에서 luci 접속이 안되는데 어떻게 해야하나요 ??

    downgrade 하면 upgrade만 가능하다가 출력이 나와요

    1. 버전은 어떻게 되나요? 구성할 때 사용한 버전별 차이도 있을 수 있을듯 하네요.

  2. 안녕하세요,

    서버를 2개밖에 구성하지 못하는 상황에서는 Manager 노드를 Node A 또는 Node B에다 설치하면 되나요?

    1. 네, 한쪽 노드에 설치하시면 될것 같아요. 다만, 운영중 매니지먼트 서버가 설치된 서버의 장애발생은 고려해야 하겠지요.

      1. 감사합니다.
        추가로 방화벽 설정으로 setup에서 전체 방화벽 해제 말고
        해당 포트만 허용해서 접속하고 싶은데요,
        luci 8084
        ricci 11111
        cman 5404, 5405
        말고 또 뭐가 있는지 아시나요..?
        위 4개만 해주니까 노드 등록하고 join cluster 가 안되네요 ㅠ

        1. modclusterd tcp 16851 도 있어요.
          ;^^

  3. 흠,, 추가 해줬는데도 안되네요 ㅠㅠ
    -I INPUT -m state –state NEW -m multiport -p udp -s 192.168.111.0/24 -d 192.168.111.0/24 –dports 5404,5405 -j ACCEPT
    -I INPUT -m state –state NEW -p tcp -s 192.168.111.0/24 -d 192.168.111.0/24 –dport 21064 -j ACCEPT
    -I INPUT -m state –state NEW -p tcp -s 192.168.111.0/24 -d 192.168.111.0/24 –dport 11111 -j ACCEPT
    -I INPUT -m state –state NEW -p tcp -s 192.168.111.0/24 -d 192.168.111.0/24 –dport 16851 -j ACCEPT

    위 내용들을 iptables 에 추가했어요,

    RedHat 문서보니까 아래 내용에 관해서 방화벽 설정해주라고 해서 한건데..
    5404, 5405 UDP corosync/cman (클러스터 관리자)
    11111 TCP ricci (업데이트된 클러스터 정보를 전달)
    21064 TCP dlm (분산형 잠금 관리자)
    16851 TCP modclusterd

    안되니까 너무 답답하네요,,ㅠ

    1. 일단 iptables 중지 하시고 정상 작동 되는지 먼저 확인해 보시고, 정상작동할때 netstat로 사용 포트확인. 그리고 다시 iptables 설정하고 해 보시죠.

      1. 정상 작동이라고 하면 어떤 걸 말씀하시는 건가요??

        1) service iptables stop
        2) 정상 작동? (luci가 안들어가진다든지, 이런거 말씀하시는건가요..?)

        1. 네, 방화벽 문제인지 먼저 확인할 필요가 있어서요.
          방화벽 정지상태인데도 문제가 동일하다면 iptables 문제가 아니라고 봐야죠.

            • 질문! on 2017년 7월 23일 at 2:03 오후

            우선 iptables stop 시키면, luci 안들어가집니다.
            그다음
            -A INPUT -m state –state NEW -m tcp -p tcp –dport 8084 -j ACCEPT
            추가 시키고 iptables restart 하면 luci 관리페이지 들어가져요,
            그럼 iptables는 잘 되는거고, 다른데 문제가 있는거라고 봐야하나요,,흠

            • snowffox on 2017년 7월 23일 at 6:30 오후
              Author

            문서를 보니, 멀티캐스트도 허용해 놓아야 하네요.

            $ iptables -I INPUT -m state –state NEW -m multiport -p udp -s 192.168.1.0/24 -d 192.168.1.0/24 –dports 5404,5405 -j ACCEPT

            $ iptables -I INPUT -m addrtype –dst-type MULTICAST -m state –state NEW -m multiport -p udp -s 192.168.1.0/24 –dports 5404,5405 -j ACCEPT

            참고 : https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Cluster_Administration/s2-iptables_firewall-CA.html

            다른 문서에는 이부분이 없는 것도 있어서 상관 없을 것 같기도 해요.

  4. cman start 할 때,

    Waiting for quorum… 에서 Fail 뜨는데,,,
    iptables에 5404, 5405 추가 해도 안됩니다.
    포트가 이게 아닌건가요,,흠
    아예 방화벽 자체를 해제하면 성공하는데, iptables로 설정하면 저러네요

    1. 양쪽 노드 모두 iptables 설정 동일한것은 맞지요?
      iptables 문제 맞는듯 하네요.
      해당 포트로 통신이 되는지 확인 하려면 tcpdump로 확인 해 보는 방법이 있습니다.
      cman포트 번호는 맞습니다.

      1. 네,, 설정 동일하게 했습니다.
        흠 tcpdump 어떤 옵션을 줘서 해야하나요

        1. tcpdump 옵션이 많긴한데, 간단히
          tcpdump -t -x tcp port 80
          tcpdump -t -x udp port 80
          이런 식으로 확인해 보시면 될듯 합니다.

          cman은 udp 포트를 사용하니까
          tcpdump -t-x udp port 5404 or 5405

          이렇게 하면 패킷 볼 수 있습니다.

            • 질문! on 2017년 7월 25일 at 4:30 오후

            네 감사합니다.
            추가로, 스토리지는 꼭 gfs2 로 포맷해야하나요?
            iscsi 말고 실제 사이트 나가서 스토리지에 구성을 하는데, 파일시스템 유형을 xfs 로 해야하는 상황인데
            이부분에는 상관이 없나요?

            • snowffox on 2017년 7월 25일 at 4:51 오후
              Author

            active/standby 구성이라면 상관없을것 같네요.
            active/active 구성에서 디스크 동시 접근해야하면 안되고요.

댓글 남기기

Your email address will not be published.

%d 블로거가 이것을 좋아합니다: