검색

1장. 컨테이너에 Red Hat Ceph Storage 배포

download PDF

이 장에서는 컨테이너에 Ansible 애플리케이션을 ceph-ansible 플레이북과 함께 사용하여 Red Hat Ceph Storage 3을 배포하는 방법을 설명합니다.

1.1. 사전 요구 사항

1.1.1. CDN 및 서브스크립션에 Red Hat Ceph Storage 노드 등록

각 RHCS(Red Hat Ceph Storage) 노드를 CDN(Content Delivery Network)에 등록하고 해당 서브스크립션을 연결하여 노드가 소프트웨어 리포지토리에 액세스할 수 있도록 합니다. 각 RHCS 노드는 전체 Red Hat Enterprise Linux 7 기본 콘텐츠와 추가 리포지토리 콘텐츠에 액세스할 수 있어야 합니다.

사전 요구 사항
  • 유효한 Red Hat 서브스크립션
  • RHCS 노드는 인터넷에 연결할 수 있어야 합니다.
  • 설치 중에 인터넷에 액세스할 수 없는 RHCS 노드의 경우 먼저 인터넷에 액세스할 수 있는 시스템에서 다음 단계를 수행해야 합니다.

    1. 로컬 Docker 레지스트리를 시작합니다.

      # docker run -d -p 5000:5000 --restart=always --name registry registry:2
    2. Red Hat 고객 포털에서 Red Hat Ceph Storage 3.x 이미지를 가져옵니다.

      # docker pull registry.access.redhat.com/rhceph/rhceph-3-rhel7
    3. 이미지에 태그를 지정하십시오.

       # docker tag registry.access.redhat.com/rhceph/rhceph-3-rhel7 <local-host-fqdn>:5000/cephimageinlocalreg

      <local-host-fqdn> 을 로컬 호스트 FQDN으로 바꿉니다.

    4. 시작한 로컬 Docker 레지스트리에 이미지를 푸시합니다.

      # docker push <local-host-fqdn>:5000/cephimageinlocalreg

      <local-host-fqdn> 을 로컬 호스트 FQDN으로 바꿉니다.

절차

스토리지 클러스터의 모든 노드에서 root 사용자로 다음 단계를 수행합니다.

  1. 노드를 등록합니다. 메시지가 표시되면 Red Hat Customer Portal 인증 정보를 입력합니다.

    # subscription-manager register
  2. CDN에서 최신 서브스크립션 데이터를 가져옵니다.

    # subscription-manager refresh
  3. Red Hat Ceph Storage에서 사용 가능한 모든 서브스크립션을 나열합니다.

    # subscription-manager list --available --all --matches="*Ceph*"

    적절한 서브스크립션을 식별하고 해당 풀 ID를 검색합니다.

  4. 서브스크립션을 연결합니다.

    # subscription-manager attach --pool=$POOL_ID
    replace
    • 이전 단계에서 식별한 풀 ID가 있는 $POOL_ID 입니다.
  5. 기본 소프트웨어 리포지토리를 비활성화합니다. 그런 다음 Red Hat Enterprise Linux 7 Server, Red Hat Enterprise Linux 7 Server Extras 및 RHCS 리포지토리를 활성화합니다.

    # subscription-manager repos --disable=*
    # subscription-manager repos --enable=rhel-7-server-rpms
    # subscription-manager repos --enable=rhel-7-server-extras-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-els-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-osd-els-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
  6. 최신 패키지를 수신하도록 시스템을 업데이트합니다.

    # yum update
추가 리소스

1.1.2. sudo 액세스를 사용하여 Ansible 사용자 생성

Ansible은 모든 RHCS(Red Hat Ceph Storage) 노드에 root 권한이 있는 사용자로 로그인하고 암호를 요청하지 않고 구성 파일을 생성할 수 있어야 합니다. Ansible을 사용하여 Red Hat Ceph Storage 클러스터를 배포하고 구성할 때 스토리지 클러스터의 모든 노드에서 암호가 없는 루트 액세스 권한을 가진 Ansible 사용자를 생성해야 합니다.

사전 요구 사항

  • 스토리지 클러스터의 모든 노드에 root 또는 sudo 액세스 권한이 있어야 합니다.

절차

  1. Ceph 노드에 root 사용자로 로그인합니다.

    ssh root@$HOST_NAME
    replace
    • $HOST_NAME - Ceph 노드의 호스트 이름이 사용됩니다.

    예제

    # ssh root@mon01

    메시지가 표시되면 루트 암호를 입력합니다.

  2. 새 Ansible 사용자를 생성합니다.

    adduser $USER_NAME
    replace
    • $USER_NAME - Ansible 사용자의 새 사용자 이름을 지정합니다.

    예제

    # adduser admin

    중요

    ceph 를 사용자 이름으로 사용하지 마십시오. ceph 사용자 이름은 Ceph 데몬용으로 예약되어 있습니다. 클러스터 전체의 균일한 사용자 이름은 사용 편의성을 향상시킬 수 있지만 침입자가 일반적으로 무차별 공격에 사용하기 때문에 명확한 사용자 이름을 사용하지 마십시오.

  3. 이 사용자에 대한 새 암호를 설정합니다.

    # passwd $USER_NAME
    replace
    • $USER_NAME - Ansible 사용자의 새 사용자 이름을 지정합니다.

    예제

    # passwd admin

    메시지가 표시되면 새 암호를 두 번 입력합니다.

  4. 새로 생성된 사용자에 대해 sudo 액세스를 설정합니다.

    cat << EOF >/etc/sudoers.d/$USER_NAME
    $USER_NAME ALL = (root) NOPASSWD:ALL
    EOF
    replace
    • $USER_NAME - Ansible 사용자의 새 사용자 이름을 지정합니다.

    예제

    # cat << EOF >/etc/sudoers.d/admin
    admin ALL = (root) NOPASSWD:ALL
    EOF

  5. 올바른 파일 권한을 새 파일에 할당합니다.

    chmod 0440 /etc/sudoers.d/$USER_NAME
    replace
    • $USER_NAME - Ansible 사용자의 새 사용자 이름을 지정합니다.

    예제

    # chmod 0440 /etc/sudoers.d/admin

추가 리소스

1.1.3. Ansible에 대해 암호 없는 SSH 활성화

Ansible 관리 노드에서 SSH 키 쌍을 생성하고, 스토리지 클러스터의 각 노드에 공개 키를 배포하여 Ansible이 암호를 확인하지 않고 노드에 액세스할 수 있도록 합니다.

사전 요구 사항
절차

Ansible 관리 노드 및 Ansible 사용자로 다음 단계를 수행합니다.

  1. SSH 키 쌍을 생성하고 기본 파일 이름을 수락하고 암호를 비워 둡니다.

    [user@admin ~]$ ssh-keygen
  2. 스토리지 클러스터의 모든 노드에 공개 키를 복사합니다.

    ssh-copy-id $USER_NAME@$HOST_NAME
    replace
    • $USER_NAME - Ansible 사용자의 새 사용자 이름을 지정합니다.
    • $HOST_NAME - Ceph 노드의 호스트 이름이 사용됩니다.

    예제

    [user@admin ~]$ ssh-copy-id admin@ceph-mon01

  3. ~/.ssh/config 파일을 만들고 편집합니다.

    중요

    ~/.ssh/config 파일을 생성하고 편집하여 ansible-playbook 명령을 실행할 때마다 -u $USER_NAME 옵션을 지정할 필요가 없습니다.

    1. SSH 구성 파일을 생성합니다.

      [user@admin ~]$ touch ~/.ssh/config
    2. 편집할 구성 파일을 엽니다. 스토리지 클러스터의 각 노드에 대한 HostnameUser 옵션을 설정합니다.

      Host node1
         Hostname $HOST_NAME
         User $USER_NAME
      Host node2
         Hostname $HOST_NAME
         User $USER_NAME
      ...
      replace
      • $HOST_NAME - Ceph 노드의 호스트 이름이 사용됩니다.
      • $USER_NAME - Ansible 사용자의 새 사용자 이름을 지정합니다.

      예제

      Host node1
         Hostname monitor
         User admin
      Host node2
         Hostname osd
         User admin
      Host node3
         Hostname gateway
         User admin

  4. ~/.ssh/config 파일에 대해 올바른 파일 권한을 설정합니다.

    [admin@admin ~]$ chmod 600 ~/.ssh/config
추가 리소스
  • ssh_config(5) 매뉴얼 페이지
  • Red Hat Enterprise Linux 7용 시스템 관리자 가이드의 OpenSSH

1.1.4. Red Hat Ceph Storage 방화벽 설정

RHCS(Red Hat Ceph Storage)는 firewalld 서비스를 사용합니다.

Monitor 데몬은 Ceph 스토리지 클러스터 내 통신에 포트 6789 를 사용합니다.

각 Ceph OSD 노드에서 OSD 데몬은 6800-7300 범위의 여러 포트를 사용합니다.

  • 하나는 클라이언트와 통신하고 공용 네트워크를 통해 모니터링합니다.
  • 사용 가능한 경우 클러스터 네트워크를 통해 다른 OSD로 데이터를 전송하는 방법
  • 사용 가능한 경우 클러스터 네트워크에서 하트비트 패킷을 교환하는 방법

Ceph Manager(ceph-mgr) 데몬은 6800-7300 범위의 포트를 사용합니다. 동일한 노드에서 Ceph Monitor를 사용하여 ceph-mgr 데몬을 공동 배치하는 것이 좋습니다.

Ceph Metadata Server 노드(ceph-mds)는 6800-7300 범위의 포트를 사용합니다.

Ceph Object Gateway 노드는 기본적으로 포트 8080 을 사용하도록 Ansible에서 구성합니다. 그러나 기본 포트(예: 포트 80 )를 변경할 수 있습니다.

SSL/TLS 서비스를 사용하려면 포트 443 을 엽니다.

사전 요구 사항

  • 네트워크 하드웨어가 연결되어 있습니다.

절차

root 사용자로 다음 명령을 실행합니다.

  1. 모든 RHCS 노드에서 firewalld 서비스를 시작합니다. 부팅 시 실행되도록 활성화하고 실행 중인지 확인합니다.

    # systemctl enable firewalld
    # systemctl start firewalld
    # systemctl status firewalld
  2. 모든 모니터 노드에서 공용 네트워크에서 포트 6789 를 엽니다.

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

    소스 주소를 기반으로 액세스를 제한하려면 다음을 수행합니다.

    firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="IP_address/netmask_prefix" port protocol="tcp" \
    port="6789" accept"
    firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="IP_address/netmask_prefix" port protocol="tcp" \
    port="6789" accept" --permanent
    replace
    • Monitor 노드의 네트워크 주소가 있는 ip _address 입니다.
    • CIDR 표기법으로 넷마스크가 있는 넷마스크 _prefix.

    예제

    [root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="192.168.0.11/24" port protocol="tcp" \
    port="6789" accept"

    [root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="192.168.0.11/24" port protocol="tcp" \
    port="6789" accept" --permanent
  3. 모든 OSD 노드에서 공용 네트워크에서 포트 6800-7300 을 엽니다.

    [root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp
    [root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent

    별도의 클러스터 네트워크가 있는 경우 해당 영역에서 명령을 반복합니다.

  4. 모든 Ceph Manager(ceph-mgr) 노드(일반적으로 Monitor와 동일한 노드)에서 공용 네트워크에서 포트 6800-7300 을 엽니다.

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

    별도의 클러스터 네트워크가 있는 경우 해당 영역에서 명령을 반복합니다.

  5. 모든 Ceph 메타데이터 서버(ceph-mds) 노드에서 공용 네트워크에서 포트 6800 을 엽니다.

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

    별도의 클러스터 네트워크가 있는 경우 해당 영역에서 명령을 반복합니다.

  6. 모든 Ceph Object Gateway 노드에서 공용 네트워크에서 관련 포트 또는 포트를 엽니다.

    1. 기본 Ansible 구성된 8080 포트를 엽니다.

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

      소스 주소를 기반으로 액세스를 제한하려면 다음을 수행합니다.

      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="8080" accept"
      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="8080" accept" --permanent
      replace
      • 오브젝트 게이트웨이 노드의 네트워크 주소가 있는 ip _address.
      • CIDR 표기법으로 넷마스크가 있는 넷마스크 _prefix.

      예제

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="8080" accept"

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="8080" accept" --permanent
    2. 선택 사항: Ansible을 사용하여 Ceph Object Gateway를 설치하고 Ansible에서 8080 에서 사용하도록 Ceph Object Gateway를 구성하는 기본 포트를 변경된 경우 포트 80 으로 이 포트를 엽니다.

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

      소스 주소를 기반으로 액세스를 제한하려면 다음 명령을 실행합니다.

      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="80" accept"
      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="80" accept" --permanent
      replace
      • 오브젝트 게이트웨이 노드의 네트워크 주소가 있는 ip _address.
      • CIDR 표기법으로 넷마스크가 있는 넷마스크 _prefix.

      예제

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="80" accept"

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="80" accept" --permanent
    3. 선택 사항: SSL/TLS를 사용하려면 포트 443 을 엽니다.

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

      소스 주소를 기반으로 액세스를 제한하려면 다음 명령을 실행합니다.

      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="443" accept"
      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="443" accept" --permanent
      replace
      • 오브젝트 게이트웨이 노드의 네트워크 주소가 있는 ip _address.
      • CIDR 표기법으로 넷마스크가 있는 넷마스크 _prefix.

      예제

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="443" accept"
      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="443" accept" --permanent

추가 리소스

1.1.5. HTTP 프록시 사용

Ceph 노드가 HTTP/HTTPS 프록시 뒤에 있는 경우 레지스트리의 이미지에 액세스하도록 docker를 구성해야 합니다. HTTP/HTTPS 프록시를 사용하여 Docker에 대한 액세스 권한을 구성하려면 다음 절차를 수행하십시오.

사전 요구 사항
  • 실행 중인 HTTP/HTTPS 프록시
절차
  1. root 로서 docker 서비스에 대한 systemd 디렉터리를 생성합니다.

    # mkdir /etc/systemd/system/docker.service.d/
  2. 루트 로서 HTTP/HTTPS 구성 파일을 만듭니다.

    1. HTTP의 경우 /etc/systemd/system/docker.service.d/http-proxy.conf 파일을 생성하고 파일에 다음 행을 추가합니다.

      [Service]
      Environment="HTTP_PROXY=http://proxy.example.com:80/"
    2. HTTPS의 경우 /etc/systemd/system/docker.service.d/https-proxy.conf 파일을 생성하고 파일에 다음 행을 추가합니다.

      [Service]
      Environment="HTTPS_PROXY=https://proxy.example.com:443/"
  3. root 로서 ceph-ansible 플레이북을 실행하기 전에 HTTP/HTTPS 구성 파일을 스토리지 클러스터의 모든 Ceph 노드에 복사합니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.