Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

1.2. Ceph 모니터

Ceph 모니터는 클러스터 맵의 마스터 사본을 유지 관리하는 경량의 프로세스입니다. 모든 Ceph 클라이언트는 Ceph 모니터에 연락하여 클러스터 맵의 현재 사본을 검색하여 클라이언트가 풀에 바인딩하고 데이터를 읽고 쓸 수 있습니다.

Ceph 모니터는 Paxos 프로토콜의 변형을 사용하여 클러스터 전체에서 맵 및 기타 중요한 정보에 대한 합의를 설정합니다. Paxos의 특성으로 인해 Ceph는 쿼럼을 구축하기 위해 실행 중인 대부분의 모니터가 필요하므로 합의를 설정해야합니다.

중요

프로덕션 클러스터에 대한 지원을 받으려면 별도의 호스트에 3개 이상의 모니터가 필요합니다.

홀수의 모니터 배포를 권장합니다. 홀수의 모니터는 짝수의 모니터보다 실패에 더 높은 복원력을 갖습니다. 예를 들어, 2개의 모니터 배포에서 쿼럼을 유지하기 위해 Ceph는 어떠한 실패도 허용할 수 없습니다. 모니터 3개, 모니터 4개, 1개의 실패가 있는 경우, 모니터 5개와 함께 오류가 발생합니다. 따라서 홀수의 숫자를 사용하는 것이 좋습니다. Ceph에서는 대부분의 모니터가 실행되고 있고 서로 통신할 수 있어야 하며, 3개 중 2개, 4개 중 3개 등에서 통신할 수 있어야 합니다.

멀티 노드 Ceph 스토리지 클러스터의 초기 배포를 위해 Red Hat은 세 개 이상의 모니터가 있는 경우 한 번에 2개 이상의 모니터를 늘려야 합니다.

모니터는 경량화되어 있으므로 OpenStack 노드와 동일한 호스트에서 실행할 수 있습니다. 그러나 Red Hat은 별도의 호스트에서 모니터를 실행하는 것이 좋습니다.

중요

Red Hat은 동일한 노드에서 Ceph 모니터 및 OSD의 배치를 지원하지 않습니다. 이렇게 하면 스토리지 클러스터 성능에 부정적인 영향을 미칠 수 있습니다.

Red Hat은 컨테이너화된 환경에서 Ceph 서비스를 조합하여만 지원합니다.

스토리지 클러스터에서 모니터를 제거하는 경우 Ceph 모니터에서 Paxos 프로토콜을 사용하여 마스터 스토리지 클러스터 맵에 대한 합의를 설정하는 것이 좋습니다. 쿼럼을 설정하려면 충분한 모니터가 있어야 합니다.

추가 리소스

1.2.1. 새 Ceph Monitor 노드 준비

스토리지 클러스터에 새 Ceph Monitor를 추가할 때 별도의 노드에 배포합니다. 스토리지 클러스터의 모든 모니터 노드에 대해 노드 하드웨어가 균일해야 합니다.

사전 요구 사항

절차

  1. 새 노드를 서버 랙에 추가합니다.
  2. 새 노드를 네트워크에 연결합니다.
  3. 새 노드에 Red Hat Enterprise Linux 7 또는 Ubuntu 16.04를 설치합니다.
  4. NTP를 설치하고 안정적인 시간 소스를 구성합니다.

    [root@monitor ~]# yum install ntp
  5. 방화벽을 사용하는 경우 TCP 포트 6789를 엽니다.

    Red Hat Enterprise Linux

    [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp
    [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp --permanent

    우분투

    iptables -I INPUT 1 -i $NIC_NAME -p tcp -s $IP_ADDR/$NETMASK_PREFIX --dport 6789 -j ACCEPT

    우분투 예

    [user@monitor ~]$ sudo iptables -I INPUT 1 -i enp6s0 -p tcp -s 192.168.0.11/24 --dport 6789 -j ACCEPT

1.2.2. Ansible을 사용하여 Ceph 모니터 추가

홀수의 모니터를 유지하기 위해 한 번에 두 개의 모니터를 추가하는 것이 좋습니다. 예를 들어 스토리지 클러스터에 모니터 3개가 있는 경우 Red Hat은 5개의 모니터로 확장할 것을 권장합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 새 노드에 대한 루트 액세스 권한 보유.

절차

  1. [mons] 섹션의 /etc/ansible/hosts Ansible 인벤토리 파일에 새 Ceph Monitor 노드를 추가합니다.

    예제

    [mons]
    monitor01
    monitor02
    monitor03
    $NEW_MONITOR_NODE_NAME
    $NEW_MONITOR_NODE_NAME

  2. Ansible이 Ceph 노드에 연결할 수 있는지 확인합니다.

    # ansible all -m ping
  3. 디렉터리를 Ansible 구성 디렉터리로 변경합니다.

    # cd /usr/share/ceph-ansible
  4. Ansible Playbook을 실행합니다.

    $ ansible-playbook site.yml

    Ceph의 컨테이너화된 배포에 새 모니터를 추가하는 경우 site-docker.yml 플레이북을 실행합니다.

    $ ansible-playbook site-docker.yml
  5. Ansible 플레이북이 완료되면 새 모니터 노드가 스토리지 클러스터에 있습니다.

1.2.3. 명령줄 인터페이스를 사용하여 Ceph Monitor 추가

홀수의 모니터를 유지하기 위해 한 번에 두 개의 모니터를 추가하는 것이 좋습니다. 예를 들어 스토리지 클러스터에 모니터 3개가 있는 경우 Red Hat은 너무 5개의 모니터를 확장할 것을 권장합니다.

중요

Red Hat은 노드당 하나의 Ceph 모니터 데몬만 실행하는 것이 좋습니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 실행 중인 Ceph Monitor 노드와 새 모니터 노드에 대한 root 액세스 권한이 있어야 합니다.

절차

  1. Red Hat Ceph Storage 3 모니터 리포지토리를 추가합니다.

    Red Hat Enterprise Linux

    [root@monitor ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-els-rpms

    우분투

    [user@monitor ~]$ sudo bash -c 'umask 0077; echo deb https://$CUSTOMER_NAME:$CUSTOMER_PASSWORD@rhcs.download.redhat.com/3-updates/Tools $(lsb_release -sc) main | tee /etc/apt/sources.list.d/Tools.list'
    [user@monitor ~]$ sudo bash -c 'wget -O - https://www.redhat.com/security/fd431d51.txt | apt-key add -'

  2. 새 Ceph Monitor 노드에 ceph-mon 패키지를 설치합니다.

    Red Hat Enterprise Linux

    [root@monitor ~]# yum install ceph-mon

    우분투

    [user@monitor ~]$ sudo apt-get install ceph-mon

  3. 스토리지 클러스터가 시작 또는 재시작 시 모니터를 식별할 수 있도록 Ceph 구성 파일에 모니터의 IP 주소를 추가합니다.

    스토리지 클러스터의 기존 모니터 노드에 있는 Ceph 구성 파일의 [mon] 또는 [global] 섹션에 새 모니터를 추가하려면 다음을 수행합니다. DNS 확인 가능한 호스트 이름 또는 IP 주소 목록인 mon_host 설정: "," 또는 ";" 또는 ". 선택적으로 새 모니터 노드에 대해 Ceph 구성 파일에 특정 섹션을 생성할 수도 있습니다.

    구문

    [mon]
    mon host = $MONITOR_IP:$PORT $MONITOR_IP:$PORT ... $NEW_MONITOR_IP:$PORT

    또는

    [mon.$MONITOR_ID]
    host = $MONITOR_ID
    mon addr = $MONITOR_IP

    초기 쿼럼 그룹의 모니터를 수행하려면 Ceph 구성 파일의 [global] 섹션에 있는 mon_initial_members 매개변수에 호스트 이름도 추가해야 합니다.

    예제

    [global]
    mon initial members = node1 node2 node3 node4 node5
    ...
    [mon]
    mon host = 192.168.0.1:6789 192.168.0.2:6789 192.168.0.3:6789 192.168.0.4:6789 192.168.0.5:6789
    ...
    [mon.node4]
    host = node4
    mon addr = 192.168.0.4
    
    [mon.node5]
    host = node5
    mon addr = 192.168.0.5

    중요

    프로덕션 스토리지 클러스터 REQUIRE는 고가용성을 보장하기 위해 mon_initial_membersmon_host 에 설정된 세 개 이상의 모니터입니다. 초기 모니터가 한 개뿐인 스토리지 클러스터에서 두 개의 모니터를 더 추가하지만 mon_initial_membersmon_host 에 추가하지 않는 경우 초기 모니터의 실패로 인해 스토리지 클러스터가 잠길 수 있습니다. 추가하는 모니터가 mon_initial_membersmon_host 의 일부인 모니터를 사용하는 경우 새 모니터를 mon_initial_membersmon_host 에 추가해야 합니다.

  4. 업데이트된 Ceph 구성 파일을 모든 Ceph 노드 및 Ceph 클라이언트에 복사합니다.

    구문

    scp /etc/ceph/$CLUSTER_NAME.conf $TARGET_NODE_NAME:/etc/ceph

    예제

    [root@monitor ~]# scp /etc/ceph/ceph.conf node4:/etc/ceph

  5. 새 모니터 노드에 모니터의 데이터 디렉터리를 생성합니다.

    구문

    mkdir /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID

    예제

    [root@monitor ~]# mkdir /var/lib/ceph/mon/ceph-node4

  6. 실행 중인 모니터 노드와 새 모니터 노드에서 임시 디렉터리를 생성하여 이 프로세스에 필요한 파일을 보관합니다. 이 디렉터리는 이전 단계에서 만든 모니터의 기본 디렉터리와 달라야 하며 모든 단계가 완료된 후 제거할 수 있습니다.

    구문

    mkdir $TEMP_DIRECTORY

    예제

    [root@monitor ~]# mkdir /tmp/ceph

  7. ceph 명령을 실행할 수 있도록 실행 중인 모니터 노드의 admin 키를 새 모니터 노드로 복사합니다.

    구문

    scp /etc/ceph/$CLUSTER_NAME.client.admin.keyring $TARGET_NODE_NAME:/etc/ceph

    예제

    [root@monitor ~]# scp /etc/ceph/ceph.client.admin.keyring node4:/etc/ceph

  8. 실행 중인 모니터 노드에서 모니터 인증 키를 검색합니다.

    구문

    ceph auth get mon. -o /$TEMP_DIRECTORY/$KEY_FILE_NAME

    예제

    [root@monitor ~]# ceph auth get mon. -o /tmp/ceph/ceph_keyring.out

  9. 실행 중인 모니터 노드에서 모니터 맵을 검색합니다.

    구문

    ceph mon getmap -o /$TEMP_DIRECTORY/$MONITOR_MAP_FILE

    예제

    [root@monitor ~]# ceph mon getmap -o /tmp/ceph/ceph_mon_map.out

  10. 수집한 모니터 데이터를 새 모니터 노드에 복사합니다.

    구문

    scp /tmp/ceph $TARGET_NODE_NAME:/tmp/ceph

    예제

    [root@monitor ~]# scp /tmp/ceph node4:/tmp/ceph

  11. 이전에 수집한 데이터에서 새 모니터의 데이터 디렉토리를 준비합니다. 모니터 맵의 경로를 지정하여 모니터 맵에서 쿼럼 정보를 검색해야 합니다. 모니터 인증 키의 경로도 지정해야 합니다.

    구문

    ceph-mon -i $MONITOR_ID --mkfs --monmap /$TEMP_DIRECTORY/$MONITOR_MAP_FILE --keyring /$TEMP_DIRECTORY/$KEY_FILE_NAME

    예제

    [root@monitor ~]# ceph-mon -i node4 --mkfs --monmap /tmp/ceph/ceph_mon_map.out --keyring /tmp/ceph/ceph_keyring.out

  12. 사용자 지정 이름이 있는 스토리지 클러스터의 경우 /etc/sysconfig/ceph 파일에 다음 행을 추가합니다.

    Red Hat Enterprise Linux

    [root@monitor ~]# echo "CLUSTER=<custom_cluster_name>" >> /etc/sysconfig/ceph

    우분투

    [user@monitor ~]$ sudo echo "CLUSTER=<custom_cluster_name>" >> /etc/default/ceph

  13. 새 모니터 노드에서 소유자 및 그룹 권한을 업데이트합니다.

    구문

    chown -R $OWNER:$GROUP $DIRECTORY_PATH

    예제

    [root@monitor ~]# chown -R ceph:ceph /var/lib/ceph/mon
    [root@monitor ~]# chown -R ceph:ceph /var/log/ceph
    [root@monitor ~]# chown -R ceph:ceph /var/run/ceph
    [root@monitor ~]# chown -R ceph:ceph /etc/ceph

  14. 새 모니터 노드에서 ceph-mon 프로세스를 활성화하고 시작합니다.

    구문

    systemctl enable ceph-mon.target
    systemctl enable ceph-mon@$MONITOR_ID
    systemctl start ceph-mon@$MONITOR_ID

    예제

    [root@monitor ~]# systemctl enable ceph-mon.target
    [root@monitor ~]# systemctl enable ceph-mon@node4
    [root@monitor ~]# systemctl start ceph-mon@node4

추가 리소스

1.2.4. Ansible을 사용하여 Ceph 모니터 제거

Ansible을 사용하여 Ceph 모니터를 제거하려면 shrink-mon.yml 플레이북을 사용합니다.

사전 요구 사항

  • Ansible 관리 노드.
  • Ansible에서 배포한 실행 중인 Red Hat Ceph Storage 클러스터.

절차

  1. /usr/share/ceph-ansible/ 디렉토리로 변경합니다.

    [user@admin ~]$ cd /usr/share/ceph-ansible
  2. shrink-mon.yml 플레이북을 infrastructure-playbooks 디렉터리에서 현재 디렉터리로 복사합니다.

    [root@admin ceph-ansible]# cp infrastructure-playbooks/shrink-mon.yml .
  3. Red Hat Ceph Storage의 일반 또는 컨테이너화된 배포에 대해 shrink-mon.yml 플레이북을 실행합니다.

    [user@admin ceph-ansible]$ ansible-playbook shrink-mon.yml -e mon_to_kill=<hostname> -u <ansible-user>

    교체:

    • 모니터 노드의 짧은 호스트 이름이 있는 <hostname> 입니다. 더 많은 모니터를 제거하려면 호스트 이름을 쉼표로 구분합니다.
    • Ansible 사용자 이름이 있는 <ansible-user>

    예를 들어 monitor1 호스트 이름이 있는 노드에 있는 모니터를 제거하려면 다음을 수행합니다.

    [user@admin ceph-ansible]$ ansible-playbook shrink-mon.yml -e mon_to_kill=monitor1 -u user
  4. 클러스터의 모든 Ceph 구성 파일에서 Monitor 항목을 제거합니다.
  5. 모니터가 성공적으로 제거되었는지 확인합니다.

    [root@monitor ~]# ceph -s

추가 리소스

1.2.5. 명령줄 인터페이스를 사용하여 Ceph Monitor 제거

Ceph 모니터를 제거하려면 스토리지 클러스터에서 ceph-mon 데몬을 제거하고 스토리지 클러스터 맵을 업데이트해야 합니다.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 모니터 노드에 root 액세스 권한이 있어야 합니다.

절차

  1. monitor 서비스를 중지합니다.

    구문

    systemctl stop ceph-mon@$MONITOR_ID

    예제

    [root@monitor ~]# systemctl stop ceph-mon@node3

  2. 스토리지 클러스터에서 모니터를 삭제합니다.

    구문

    ceph mon remove $MONITOR_ID

    예제

    [root@monitor ~]# ceph mon remove node3

  3. 기본적으로 Ceph 구성 파일인 /etc/ceph/ceph.conf 에서 monitor 항목을 제거합니다.
  4. 스토리지 클러스터의 나머지 모든 Ceph 노드에 Ceph 구성 파일을 재배포합니다.

    구문

    scp /etc/ceph/$CLUSTER_NAME.conf $USER_NAME@$TARGET_NODE_NAME:/etc/ceph/

    예제

    [root@monitor ~]# scp /etc/ceph/ceph.conf root@$node1:/etc/ceph/

  5. 컨테이너만 해당. monitor 서비스를 비활성화합니다.

    참고

    컨테이너를 사용하는 경우에만 5-9단계를 수행합니다.

    구문

    systemctl disable ceph-mon@$MONITOR_ID

    예제

    [root@monitor ~]# systemctl disable ceph-mon@node3

  6. 컨테이너만 해당. systemd에서 서비스를 제거합니다.

    [root@monitor ~]# rm /etc/systemd/system/ceph-mon@.service
  7. 컨테이너만 해당. systemd 관리자 설정을 다시로드합니다.

    [root@monitor ~]# systemctl daemon-reload
  8. 컨테이너만 해당. 실패한 모니터 장치의 상태를 재설정합니다.

    [root@monitor ~]# systemctl reset-failed
  9. 컨테이너만 해당. ceph-mon RPM을 제거합니다.

    [root@monitor ~]# docker exec node3 yum remove ceph-mon
  10. 모니터 데이터를 보관합니다.

    구문

    mv /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID /var/lib/ceph/mon/removed-$CLUSTER_NAME-$MONITOR_ID

    예제

    [root@monitor ~]# mv /var/lib/ceph/mon/ceph-node3 /var/lib/ceph/mon/removed-ceph-node3

  11. 모니터 데이터를 삭제합니다.

    구문

    rm -r /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID

    예제

    [root@monitor ~]# rm -r /var/lib/ceph/mon/ceph-node3

추가 리소스

1.2.6. 비정상적인 스토리지 클러스터에서 Ceph 모니터 제거

이 절차에서는 비정상 스토리지 클러스터에서 ceph-mon 데몬을 제거합니다. 배치 그룹이 영구적으로 활성 상태가 아닌 비정상적인 스토리지 클러스터 + 정리.

사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • 모니터 노드에 root 액세스 권한이 있어야 합니다.
  • 실행 중인 하나 이상의 Ceph Monitor 노드.

절차

  1. 남아 있는 모니터를 식별하고 해당 노드에 로그인합니다.

    [root@monitor ~]# ceph mon dump
    [root@monitor ~]# ssh $MONITOR_HOST_NAME
  2. ceph-mon 데몬을 중지하고 monmap 파일의 사본을 추출합니다. :

    구문

    systemctl stop ceph-mon@$MONITOR_ID
    ceph-mon -i $MONITOR_ID --extract-monmap $TEMPORARY_PATH

    예제

    [root@monitor ~]# systemctl stop ceph-mon@node1
    [root@monitor ~]# ceph-mon -i node1 --extract-monmap /tmp/monmap

  3. 지원되지 않는 모니터(s)를 제거합니다.

    구문

    monmaptool $TEMPORARY_PATH --rm $MONITOR_ID

    예제

    [root@monitor ~]# monmaptool /tmp/monmap --rm node2

  4. 제거된 모니터(s)와 함께 Surviving 모니터 맵을urviving 모니터에 삽입합니다.

    구문

    ceph-mon -i $MONITOR_ID --inject-monmap $TEMPORARY_PATH

    예제

    [root@monitor ~]# ceph-mon -i node1 --inject-monmap /tmp/monmap