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 프로토콜을 사용하여 마스터 스토리지 클러스터 맵에 대한 합의를 설정하는 것이 좋습니다. 쿼럼을 설정하려면 충분한 모니터가 있어야 합니다.
추가 리소스
- 지원되는 모든 Ceph 구성은 Red Hat Ceph Storage 지원 구성 지식 베이스 문서를 참조하십시오.
1.2.1. 새 Ceph Monitor 노드 준비
스토리지 클러스터에 새 Ceph Monitor를 추가할 때 별도의 노드에 배포합니다. 스토리지 클러스터의 모든 모니터 노드에 대해 노드 하드웨어가 균일해야 합니다.
사전 요구 사항
- 네트워크 연결.
-
새 노드에
root
액세스 권한이 있어야 합니다. - Red Hat Enterprise Linux 또는 Ubuntu 설치 가이드의 Red Hat Ceph Storage 설치 요구 사항을 검토하십시오.
절차
- 새 노드를 서버 랙에 추가합니다.
- 새 노드를 네트워크에 연결합니다.
- 새 노드에 Red Hat Enterprise Linux 7 또는 Ubuntu 16.04를 설치합니다.
NTP를 설치하고 안정적인 시간 소스를 구성합니다.
[root@monitor ~]# yum install ntp
방화벽을 사용하는 경우 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 클러스터.
-
새 노드에 대한
루트
액세스 권한 보유.
절차
[mons]
섹션의/etc/ansible/hosts
Ansible 인벤토리 파일에 새 Ceph Monitor 노드를 추가합니다.예제
[mons] monitor01 monitor02 monitor03 $NEW_MONITOR_NODE_NAME $NEW_MONITOR_NODE_NAME
Ansible이 Ceph 노드에 연결할 수 있는지 확인합니다.
# ansible all -m ping
디렉터리를 Ansible 구성 디렉터리로 변경합니다.
# cd /usr/share/ceph-ansible
Ansible Playbook을 실행합니다.
$ ansible-playbook site.yml
Ceph의 컨테이너화된 배포에 새 모니터를 추가하는 경우
site-docker.yml
플레이북을 실행합니다.$ ansible-playbook site-docker.yml
- Ansible 플레이북이 완료되면 새 모니터 노드가 스토리지 클러스터에 있습니다.
1.2.3. 명령줄 인터페이스를 사용하여 Ceph Monitor 추가
홀수의 모니터를 유지하기 위해 한 번에 두 개의 모니터를 추가하는 것이 좋습니다. 예를 들어 스토리지 클러스터에 모니터 3개가 있는 경우 Red Hat은 너무 5개의 모니터를 확장할 것을 권장합니다.
Red Hat은 노드당 하나의 Ceph 모니터 데몬만 실행하는 것이 좋습니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
-
실행 중인 Ceph Monitor 노드와 새 모니터 노드에 대한
root
액세스 권한이 있어야 합니다.
절차
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 -'
새 Ceph Monitor 노드에
ceph-mon
패키지를 설치합니다.Red Hat Enterprise Linux
[root@monitor ~]# yum install ceph-mon
우분투
[user@monitor ~]$ sudo apt-get install ceph-mon
스토리지 클러스터가 시작 또는 재시작 시 모니터를 식별할 수 있도록 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_members
및mon_host
에 설정된 세 개 이상의 모니터입니다. 초기 모니터가 한 개뿐인 스토리지 클러스터에서 두 개의 모니터를 더 추가하지만mon_initial_members
및mon_host
에 추가하지 않는 경우 초기 모니터의 실패로 인해 스토리지 클러스터가 잠길 수 있습니다. 추가하는 모니터가mon_initial_members
및mon_host
의 일부인 모니터를 사용하는 경우 새 모니터를mon_initial_members
및mon_host
에 추가해야 합니다.업데이트된 Ceph 구성 파일을 모든 Ceph 노드 및 Ceph 클라이언트에 복사합니다.
구문
scp /etc/ceph/$CLUSTER_NAME.conf $TARGET_NODE_NAME:/etc/ceph
예제
[root@monitor ~]# scp /etc/ceph/ceph.conf node4:/etc/ceph
새 모니터 노드에 모니터의 데이터 디렉터리를 생성합니다.
구문
mkdir /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID
예제
[root@monitor ~]# mkdir /var/lib/ceph/mon/ceph-node4
실행 중인 모니터 노드와 새 모니터 노드에서 임시 디렉터리를 생성하여 이 프로세스에 필요한 파일을 보관합니다. 이 디렉터리는 이전 단계에서 만든 모니터의 기본 디렉터리와 달라야 하며 모든 단계가 완료된 후 제거할 수 있습니다.
구문
mkdir $TEMP_DIRECTORY
예제
[root@monitor ~]# mkdir /tmp/ceph
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
실행 중인 모니터 노드에서 모니터 인증 키를 검색합니다.
구문
ceph auth get mon. -o /$TEMP_DIRECTORY/$KEY_FILE_NAME
예제
[root@monitor ~]# ceph auth get mon. -o /tmp/ceph/ceph_keyring.out
실행 중인 모니터 노드에서 모니터 맵을 검색합니다.
구문
ceph mon getmap -o /$TEMP_DIRECTORY/$MONITOR_MAP_FILE
예제
[root@monitor ~]# ceph mon getmap -o /tmp/ceph/ceph_mon_map.out
수집한 모니터 데이터를 새 모니터 노드에 복사합니다.
구문
scp /tmp/ceph $TARGET_NODE_NAME:/tmp/ceph
예제
[root@monitor ~]# scp /tmp/ceph node4:/tmp/ceph
이전에 수집한 데이터에서 새 모니터의 데이터 디렉토리를 준비합니다. 모니터 맵의 경로를 지정하여 모니터 맵에서 쿼럼 정보를 검색해야 합니다.
모니터 인증 키의 경로도 지정해야 합니다.
구문
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
사용자 지정 이름이 있는 스토리지 클러스터의 경우
/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
새 모니터 노드에서 소유자 및 그룹 권한을 업데이트합니다.
구문
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
새 모니터 노드에서
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
추가 리소스
- Red Hat Enterprise Linux 또는 Ubuntu 용 설치 가이드의 Red Hat Ceph Storage 리포지토리 활성화 섹션을 참조하십시오.
1.2.4. Ansible을 사용하여 Ceph 모니터 제거
Ansible을 사용하여 Ceph 모니터를 제거하려면 shrink-mon.yml
플레이북을 사용합니다.
사전 요구 사항
- Ansible 관리 노드.
- Ansible에서 배포한 실행 중인 Red Hat Ceph Storage 클러스터.
절차
/usr/share/ceph-ansible/
디렉토리로 변경합니다.[user@admin ~]$ cd /usr/share/ceph-ansible
shrink-mon.yml
플레이북을infrastructure-playbooks
디렉터리에서 현재 디렉터리로 복사합니다.[root@admin ceph-ansible]# cp infrastructure-playbooks/shrink-mon.yml .
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
-
모니터 노드의 짧은 호스트 이름이 있는
- 클러스터의 모든 Ceph 구성 파일에서 Monitor 항목을 제거합니다.
모니터가 성공적으로 제거되었는지 확인합니다.
[root@monitor ~]# ceph -s
추가 리소스
- Red Hat Ceph Storage 설치에 대한 자세한 내용은 Red Hat Enterprise Linux 또는 Ubuntu 설치 가이드 를 참조하십시오.
1.2.5. 명령줄 인터페이스를 사용하여 Ceph Monitor 제거
Ceph 모니터를 제거하려면 스토리지 클러스터에서 ceph-mon
데몬을 제거하고 스토리지 클러스터 맵을 업데이트해야 합니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
-
모니터 노드에
root
액세스 권한이 있어야 합니다.
절차
monitor 서비스를 중지합니다.
구문
systemctl stop ceph-mon@$MONITOR_ID
예제
[root@monitor ~]# systemctl stop ceph-mon@node3
스토리지 클러스터에서 모니터를 삭제합니다.
구문
ceph mon remove $MONITOR_ID
예제
[root@monitor ~]# ceph mon remove node3
-
기본적으로 Ceph 구성 파일인
/etc/ceph/ceph.conf
에서 monitor 항목을 제거합니다. 스토리지 클러스터의 나머지 모든 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/
컨테이너만 해당. monitor 서비스를 비활성화합니다.
참고컨테이너를 사용하는 경우에만 5-9단계를 수행합니다.
구문
systemctl disable ceph-mon@$MONITOR_ID
예제
[root@monitor ~]# systemctl disable ceph-mon@node3
컨테이너만 해당. systemd에서 서비스를 제거합니다.
[root@monitor ~]# rm /etc/systemd/system/ceph-mon@.service
컨테이너만 해당. systemd 관리자 설정을 다시로드합니다.
[root@monitor ~]# systemctl daemon-reload
컨테이너만 해당. 실패한 모니터 장치의 상태를 재설정합니다.
[root@monitor ~]# systemctl reset-failed
컨테이너만 해당.
ceph-mon
RPM을 제거합니다.[root@monitor ~]# docker exec node3 yum remove ceph-mon
모니터 데이터를 보관합니다.
구문
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
모니터 데이터를 삭제합니다.
구문
rm -r /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID
예제
[root@monitor ~]# rm -r /var/lib/ceph/mon/ceph-node3
추가 리소스
- 자세한 내용은 Knowledgebase 솔루션 How to re-deploy Ceph Monitor in a director deployed Ceph cluster 에서 참조하십시오.
1.2.6. 비정상적인 스토리지 클러스터에서 Ceph 모니터 제거
이 절차에서는 비정상 스토리지 클러스터에서 ceph-mon
데몬을 제거합니다. 배치 그룹이 영구적으로 활성 상태가 아닌 비정상적인 스토리지 클러스터 + 정리
.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
-
모니터 노드에
root
액세스 권한이 있어야 합니다. - 실행 중인 하나 이상의 Ceph Monitor 노드.
절차
남아 있는 모니터를 식별하고 해당 노드에 로그인합니다.
[root@monitor ~]# ceph mon dump [root@monitor ~]# ssh $MONITOR_HOST_NAME
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
지원되지 않는 모니터(s)를 제거합니다.
구문
monmaptool $TEMPORARY_PATH --rm $MONITOR_ID
예제
[root@monitor ~]# monmaptool /tmp/monmap --rm node2
제거된 모니터(s)와 함께 Surviving 모니터 맵을urviving 모니터에 삽입합니다.
구문
ceph-mon -i $MONITOR_ID --inject-monmap $TEMPORARY_PATH
예제
[root@monitor ~]# ceph-mon -i node1 --inject-monmap /tmp/monmap