1장. 컨테이너에 Red Hat Ceph Storage 배포
이 장에서는 컨테이너에 Ansible 애플리케이션을 ceph-ansible
플레이북과 함께 사용하여 Red Hat Ceph Storage 3을 배포하는 방법을 설명합니다.
- Red Hat Ceph Storage를 설치하려면 1.2절. “컨테이너에 Red Hat Ceph Storage 클러스터 설치” 를 참조하십시오.
- Ceph Object Gateway를 설치하려면 1.4절. “컨테이너에 Ceph Object Gateway 설치” 를 참조하십시오.
- 메타데이터 서버를 설치하려면 1.5절. “메타데이터 서버 설치” 를 참조하십시오.
-
Ansible
--limit
옵션에 대한 자세한 내용은 1.8절. “제한
옵션 이해” 을 참조하십시오.
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 노드의 경우 먼저 인터넷에 액세스할 수 있는 시스템에서 다음 단계를 수행해야 합니다.
로컬 Docker 레지스트리를 시작합니다.
# docker run -d -p 5000:5000 --restart=always --name registry registry:2
Red Hat 고객 포털에서 Red Hat Ceph Storage 3.x 이미지를 가져옵니다.
# docker pull registry.access.redhat.com/rhceph/rhceph-3-rhel7
이미지에 태그를 지정하십시오.
# docker tag registry.access.redhat.com/rhceph/rhceph-3-rhel7 <local-host-fqdn>:5000/cephimageinlocalreg
<local-host-fqdn>
을 로컬 호스트 FQDN으로 바꿉니다.시작한 로컬 Docker 레지스트리에 이미지를 푸시합니다.
# docker push <local-host-fqdn>:5000/cephimageinlocalreg
<local-host-fqdn>
을 로컬 호스트 FQDN으로 바꿉니다.
절차
스토리지 클러스터의 모든 노드에서 root
사용자로 다음 단계를 수행합니다.
노드를 등록합니다. 메시지가 표시되면 Red Hat Customer Portal 인증 정보를 입력합니다.
# subscription-manager register
CDN에서 최신 서브스크립션 데이터를 가져옵니다.
# subscription-manager refresh
Red Hat Ceph Storage에서 사용 가능한 모든 서브스크립션을 나열합니다.
# subscription-manager list --available --all --matches="*Ceph*"
적절한 서브스크립션을 식별하고 해당 풀 ID를 검색합니다.
서브스크립션을 연결합니다.
# subscription-manager attach --pool=$POOL_ID
- replace
-
이전 단계에서 식별한 풀 ID가 있는
$POOL_ID
입니다.
-
이전 단계에서 식별한 풀 ID가 있는
기본 소프트웨어 리포지토리를 비활성화합니다. 그런 다음 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
최신 패키지를 수신하도록 시스템을 업데이트합니다.
# yum update
추가 리소스
- Red Hat Enterprise Linux 7용 시스템 관리자 가이드의 시스템 및 서브스크립션 관리 장을 참조하십시오.
1.1.2. sudo
액세스를 사용하여 Ansible 사용자 생성
Ansible은 모든 RHCS(Red Hat Ceph Storage) 노드에 root
권한이 있는 사용자로 로그인하고 암호를 요청하지 않고 구성 파일을 생성할 수 있어야 합니다. Ansible을 사용하여 Red Hat Ceph Storage 클러스터를 배포하고 구성할 때 스토리지 클러스터의 모든 노드에서 암호가 없는 루트
액세스 권한을 가진 Ansible 사용자를 생성해야 합니다.
사전 요구 사항
-
스토리지 클러스터의 모든 노드에
root
또는sudo
액세스 권한이 있어야 합니다.
절차
Ceph 노드에
root
사용자로 로그인합니다.ssh root@$HOST_NAME
- replace
-
$HOST_NAME
- Ceph 노드의 호스트 이름이 사용됩니다.
-
예제
# ssh root@mon01
메시지가 표시되면
루트
암호를 입력합니다.새 Ansible 사용자를 생성합니다.
adduser $USER_NAME
- replace
-
$USER_NAME
- Ansible 사용자의 새 사용자 이름을 지정합니다.
-
예제
# adduser admin
중요ceph
를 사용자 이름으로 사용하지 마십시오.ceph
사용자 이름은 Ceph 데몬용으로 예약되어 있습니다. 클러스터 전체의 균일한 사용자 이름은 사용 편의성을 향상시킬 수 있지만 침입자가 일반적으로 무차별 공격에 사용하기 때문에 명확한 사용자 이름을 사용하지 마십시오.이 사용자에 대한 새 암호를 설정합니다.
# passwd $USER_NAME
- replace
-
$USER_NAME
- Ansible 사용자의 새 사용자 이름을 지정합니다.
-
예제
# passwd admin
메시지가 표시되면 새 암호를 두 번 입력합니다.
새로 생성된 사용자에 대해
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
올바른 파일 권한을 새 파일에 할당합니다.
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 사용자로 다음 단계를 수행합니다.
SSH 키 쌍을 생성하고 기본 파일 이름을 수락하고 암호를 비워 둡니다.
[user@admin ~]$ ssh-keygen
스토리지 클러스터의 모든 노드에 공개 키를 복사합니다.
ssh-copy-id $USER_NAME@$HOST_NAME
- replace
-
$USER_NAME
- Ansible 사용자의 새 사용자 이름을 지정합니다. -
$HOST_NAME
- Ceph 노드의 호스트 이름이 사용됩니다.
-
예제
[user@admin ~]$ ssh-copy-id admin@ceph-mon01
~/.ssh/config
파일을 만들고 편집합니다.중요~/.ssh/config
파일을 생성하고 편집하여ansible-playbook
명령을 실행할 때마다-u $USER_NAME
옵션을 지정할 필요가 없습니다.SSH
구성
파일을 생성합니다.[user@admin ~]$ touch ~/.ssh/config
편집할
구성
파일을 엽니다. 스토리지 클러스터의 각 노드에 대한Hostname
및User
옵션을 설정합니다.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
~/.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
사용자로 다음 명령을 실행합니다.
모든 RHCS 노드에서
firewalld
서비스를 시작합니다. 부팅 시 실행되도록 활성화하고 실행 중인지 확인합니다.# systemctl enable firewalld # systemctl start firewalld # systemctl status firewalld
모든 모니터 노드에서 공용 네트워크에서 포트
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
.
-
Monitor 노드의 네트워크 주소가 있는 ip
예제
[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
모든 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
별도의 클러스터 네트워크가 있는 경우 해당 영역에서 명령을 반복합니다.
모든 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
별도의 클러스터 네트워크가 있는 경우 해당 영역에서 명령을 반복합니다.
모든 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
별도의 클러스터 네트워크가 있는 경우 해당 영역에서 명령을 반복합니다.
모든 Ceph Object Gateway 노드에서 공용 네트워크에서 관련 포트 또는 포트를 엽니다.
기본 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
.
-
오브젝트 게이트웨이 노드의 네트워크 주소가 있는 ip
예제
[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
선택 사항: 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
.
-
오브젝트 게이트웨이 노드의 네트워크 주소가 있는 ip
예제
[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
선택 사항: 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
.
-
오브젝트 게이트웨이 노드의 네트워크 주소가 있는 ip
예제
[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
추가 리소스
- 공용 및 클러스터 네트워크에 대한 자세한 내용은 Red Hat Ceph Storage의 네트워크 구성 확인을 참조하십시오.
-
firewalld
에 대한 자세한 내용은 Red Hat Enterprise Linux 7의 보안 가이드의 방화벽 사용 장을 참조하십시오.
1.1.5. HTTP 프록시 사용
Ceph 노드가 HTTP/HTTPS 프록시 뒤에 있는 경우 레지스트리의 이미지에 액세스하도록 docker를 구성해야 합니다. HTTP/HTTPS 프록시를 사용하여 Docker에 대한 액세스 권한을 구성하려면 다음 절차를 수행하십시오.
사전 요구 사항
- 실행 중인 HTTP/HTTPS 프록시
절차
root
로서 docker 서비스에 대한 systemd 디렉터리를 생성합니다.# mkdir /etc/systemd/system/docker.service.d/
루트
로서 HTTP/HTTPS 구성 파일을 만듭니다.HTTP의 경우
/etc/systemd/system/docker.service.d/http-proxy.conf
파일을 생성하고 파일에 다음 행을 추가합니다.[Service] Environment="HTTP_PROXY=http://proxy.example.com:80/"
HTTPS의 경우
/etc/systemd/system/docker.service.d/https-proxy.conf
파일을 생성하고 파일에 다음 행을 추가합니다.[Service] Environment="HTTPS_PROXY=https://proxy.example.com:443/"
-
root
로서ceph-ansible
플레이북을 실행하기 전에 HTTP/HTTPS 구성 파일을 스토리지 클러스터의 모든 Ceph 노드에 복사합니다.