Run The Bridge

(Storage) Ceph Storage 구축해보기 본문

Cloud/오픈소스

(Storage) Ceph Storage 구축해보기

anfrhrl5555 2021. 12. 26. 15:24
728x90
반응형

0. 들어가기에 앞서

open source로 유명한 Ceph Storage를 구축해보자. 그전에 Ceph Storage에 대해 조사해보자.

https://www.redhat.com/ko/technologies/storage/ceph

 

Red Hat Ceph Storage

Red Hat® Ceph Storage는오브젝트스토리지및클라우드인프라를위해설계된오픈소프트웨어정의스토리지입니다.자세히알아보십시오.

www.redhat.com

Red Hat Ceph Storage
대규모 확장으로 까다로운 애플리케이션을 지원할 수 있는 스토리지

 

  • 운영 규모를 확장하여 더 빠르게 출시
  • 애플리케이션 개발과 데이터 사이언스 간의 격차 해소
  • 데이터에 대한 보다 심층적인 인사이트 확보

 

Ceph는 다양한 유형의 데몬들이 존재하는데 다음과 같이 이루어져 있다.

출처: https://ubuntu.com/ceph/what-is-ceph

  • ceph-mon클러스터 상태의 맵을 유지 관리하는 클러스터 모니터, 활성 및 실패한 클러스터 노드, 클러스터 구성 및 데이터 배치에 대한 정보를 추적하고 인증을 관리합니다.

  • ceph-mgr클러스터 런타임 메트릭을 유지 관리하고 대시보드 기능을 활성화하며 외부 모니터링 시스템에 대한 인터페이스를 제공하는 관리자.

  • ceph-osdCeph 클러스터에 데이터를 저장하고 데이터 복제, 삭제 코딩, 복구 및 재조정을 처리하는 개체 저장 장치, 개념적으로 OSD는 CPU/RAM의 조각과 기본 SSD 또는 HDD로 생각할 수 있습니다.

  • ceph-rgwhttp/https를 통해 객체 스토리지 API(swift 및 S3)를 제공하는 Rados 게이트웨이
  • ceph-mdsCeph 파일 시스템에 대한 메타데이터를 저장하는 메타 데이터 서버, 파일 시스템의 파일 이름 및 디렉토리를 RADOS 개체에 매핑하고 POSIX 의미 체계를 사용하여 파일에 액세스할 수 있습니다.

  • ceph-iscsiVMware 또는 Windows Server와 같은 기존 블록 스토리지 워크로드에 대해 iSCSI 대상을 제공하는 iSCSI 게이트웨이.

 

Ceph 데몬들 중 내가 생각하기에 중요한 데몬은 mon, mgr, osdCeph 이렇게 3가지가 중요해보인다.

  • mon은 클러스터의 전반적인 관리를 담당하고 있고,
  • mgr는 다른 오픈소스들을 사용할 때 쓰는걸로 보인다.
  • 마지막으로 osd는 storage의 핵심인 저장의 기능을 담당하는걸로 보인다.

1. Ceph Storage prerequisites(master)

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32
UUID=79dac0e0-6de3-4b50-9e74-6990d2fe8d5b
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.43.16
BROADCAST=192.168.43.255
NETMASK=255.255.255.0
GATEWAY=192.168.43.1
DNS1=168.126.63.1
DNS2=168.126.63.2
PREFIX=24
IPV6INIT=no
# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.16 master
192.168.43.17 node1
192.168.43.18 node2
[root@localhost ~]# hostnamectl set-hostname master  # hostname 변경
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld  # 방화벽 중지

여기까지 설정하고 Clone으로 node1, node2를 만든다.

 

Clone은 Manage - Clone으로 설정가능하다.

이제 각 node로 접속해서 IP 변경해주고 disk를 달아줘야 한다.

 

메뉴얼에 나와있는대로 Hard Disk를 추가로 달아준다.

 

가상 디스크이므로 150GB를 전부 잡지않고, 사용하면서 용량을 늘인다.

 

※정리※

1. Clone 뜬 후 접속

2. IP변경 및 hostname 변경

3. disk 추가 시키기

 


2. Ceph Storage prerequisites

# cephuser라는 새 사용자 생성(모든 cluster에서 실행)
useradd –d /home/cephuser –m cephuser
passwd cephuser
# cephuser에 root권한 부여
echo “cephuser ALL = (root) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/cephuser
chmod 0440 /etc/sudoers.d/cephuser


3. Ceph Storage package install & setting

- python package 설치

yum -y install python3  # python3 설치(모든 cluster)

 

- NTP 설치 및 구성(한국 시간 설정 및 날짜와 시간 동기화)

yum -y install ntp ntpdate ntp-doc
yum -y install ntpdate time.bora.net
hwclock --systohc

# chronyd가 중지되어야 ntpd를 사용 할 수 있다.
systemctl stop chronyd
systemctl disable chronyd

# ntpd 데몬 시작
systemctl enable ntpd && systemctl start ntpd
root@master ~ # systemctl status ntpd
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-12-27 16:10:13 KST; 23h left
  Process: 2207 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCES                                                                                               S)
 Main PID: 2208 (ntpd)
   CGroup: /system.slice/ntpd.service
           └─2208 /usr/sbin/ntpd -u ntp:ntp -g

Dec 27 16:10:13 master ntpd[2208]: Listen normally on 3 ens32 192.168.43.16 UDP 123
Dec 27 16:10:13 master ntpd[2208]: Listen normally on 4 lo ::1 UDP 123
Dec 27 16:10:13 master ntpd[2208]: Listen normally on 5 ens32 fe80::20c:29ff:feee:cc...123
Dec 27 16:10:13 master ntpd[2208]: Listening on routing socket on fd #22 for interfa...tes
Dec 27 16:10:13 master ntpd[2208]: 0.0.0.0 c016 06 restart
Dec 27 16:10:13 master ntpd[2208]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Dec 27 16:10:13 master ntpd[2208]: 0.0.0.0 c011 01 freq_not_set
Dec 27 16:10:20 master ntpd[2208]: 0.0.0.0 c61c 0c clock_step -86330.705264 s
Dec 26 16:11:29 master ntpd[2208]: 0.0.0.0 c614 04 freq_mode
Dec 26 16:11:30 master ntpd[2208]: 0.0.0.0 c618 08 no_sys_peer
Hint: Some lines were ellipsized, use -l to show in full.

 

- selinux 비활성화

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

selinux 비활성화

 

- host파일 구성 및 ping 테스트

# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.16 master
192.168.43.17 node1
192.168.43.18 node2
ping master

ping node1

ping node2

 

- Repositories 등록

# vi /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-nautilus/el7/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc


[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc


[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
yum -y install ceph-deploy  # ceph-deploy 설치, master에서 입력
ceph-deploy new master
ceph-deploy install master node1 node2

new, install 부분 설치 시 오류가 날 수 있다. 구글링 ㄱㄱ~

 

다음 사이트에서 해결법을 찾을 수 있었다.

https://opennaru.freshdesk.com/support/solutions/articles/1000074986-no-module-named-pkg-resources-%EC%98%A4%EB%A5%98-%EB%B0%9C%EC%83%9D%EC%8B%9C

 

 

 

No module named pkg_resources 오류 발생시

다음과 같은 오류가 발생하면, ImportError: No module named pkg_resources sudo yum install python-setuptools 명령을 실행하여 추가 모듈을 설치하여야 합니다.

opennaru.freshdesk.com

 yum -y install python-setuptools  # 추가모듈을 설치해준다.

- 재입력

root@master /etc/yum.repos.d # ceph-deploy new master
root@master /etc/yum.repos.d # ceph-deploy install master node1 node2

 

다음과 같이 yes/no를 물어보면서 멈추는데 yes를 한다.

The authenticity of host 'node1 (192.168.43.17)' can't be established.
ECDSA key fingerprint is SHA256:EvdZh6BDrGDC8r2B4cEHRBXOWl14hm7bd6KPziqKEAU.
ECDSA key fingerprint is MD5:09:87:73:0a:9f:14:1b:c8:55:2a:33:d9:52:fa:6c:d1.
Are you sure you want to continue connecting (yes/no)? yes
# 각 node 사용자에 맞게 비밀번호 입력
root@node1's password: ******
root@node2's password: ******

 

- /etc/ceph/ceph.conf 파일 수정(일단 메뉴얼대로 따라만해서 어떤 설정을 가지는지는 모른다.)

[global]
fsid = 0d6faed8-5dd7-4658-95b1-57d0d0d28792
mon_initial_members = master
mon_host = 192.168.43.16
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx


filestore_xattr_use_omap = true

public network = 192.168.43.0/24
osd_pool_default_size = 2
rbd_default_features = 1
osd_journal_size = 10240
osd_pool_default_pg_num = 128
osd_pool_default_pgp_num = 128


[mon]
mon_host = master
mon_addr = 192.168.43.16
mon_clock_drift_allowed = .3
mon_clock_drift_warn_backoff = 30
mon_osd_full_ratio = .90
mon_osd_nearfull_ratio = .85
mon_osd_report_timeout = 300
debug_ms = 1
debug_mon = 20
debug_paxos = 20
debug_auth = 20


[mon.0]
host = master
mon_addr = 192.168.43.16:6789


[mon.1]         # 이 부분은 생략 가능
host = node1
mon_addr = 192.168.43.17:6789


[mgr]
mgr initial modules = balancer dashboard


[mds]
mds_standby_replay = true
mds_cache_size = 250000
debug_ms = 1
debug_mds = 20
debug_journaler = 20


[mds.0]
host = master


[osd.0]
host = node1


[osd.1]
host = node2

 

[root@master ~]# ceph-deploy --overwrite-conf mon create-initial

 

[root@master ~]# ceph-deploy mon create master

 

[root@master ~]# ceph-deploy gatherkeys master

 

[root@master ~]# ceph-deploy mds create master

 

- OSD 추가

lsblk -f
root@master /dev # lsblk -f
NAME            FSTYPE      LABEL UUID                                   MOUNTPOINT
sda
├─sda1          xfs               98294413-1e03-4421-9af0-f33d56def5d2   /boot
└─sda2          LVM2_member       W4lpfK-cH2m-qOYs-n6pA-Rubi-i2Q8-JywzC9
  ├─centos-root xfs               9058dd80-4f90-49ed-89cc-c053f1245b3b   /
  ├─centos-swap swap              29a319c3-69f2-44c5-bb8e-ebbb82e72943   [SWAP]
  └─centos-home xfs               8d8efb1f-d0bd-46ed-8a72-f55607fc98f9   /home
sdb
sr0
[root@master ~]# ceph-deploy osd create --data /dev/sdb

 

[root@master ~]# ceph-deploy osd create --data /dev/sdb node2

 

ceph-deploy mgr create master

 

ceph-deploy admin master node1 node2

 

- ceph 상태 확인

ceph -s || ceph health

위의 명령어를 입력 후 health 부분에 health OK가 떠야하는데 HEALTH_WARN이 뜬다 ~ 고쳐보자.

 

다음 사이트에서 도움을 얻을 수 있었다.

https://github.com/rook/rook/issues/7746

 

ceph: Mons are allowing insecure global_id reclaim · Issue #7746 · rook/rook

Bug Report Current Behaviour: ceph status return "HEALTH_WARN" with reason: mons are allowing insecure global_id reclaim Expected behavior: ceph status return "HEALTH_OK" How to...

github.com

root@master /etc/ceph # ceph config set mon auth_allow_insecure_global_id_reclaim false

해결완료: HEALTH_OK


4. Ceph Storage Dashbaord

[root@master ~]# yum install -y ceph-mgr-dashboard
[root@master ~]# ceph mgr module enable dashboard
[root@master ~]# ceph mgr module ls | grep -A 10 enabled_modules
[root@master ~]# ceph dashboard create-self-signed-cert
Self-signed certificate created

 

- 사용자 생성

[root@master ~]# ceph dashboard ac-user-create [사용자계정ID] -i [Password저장파일경로] [role]
root@master ~ # echo "admin" >> password  # password 파일을 사전에 만들어 두고 내용 입력
ceph dashboard ac-user-create admin -i /root/password administrator
{"username": "admin", "lastUpdate": 1640505620, "name": null, "roles": ["administrator"], "password": "$2b$12$EZYrVk661xOA28c5JUv3wuL.Pe6F.bw3byBVnuUmcvOMSjhqonVAO", "email": null}

 

- dashboard 생성 확인

root@master ~ # ceph mgr services
{
    "dashboard": "https://master:8443/"
}

 

- 접속모습

 

이제부터 관리하는 것은 관리자의 몫....

 

 

728x90
반응형

'Cloud > 오픈소스' 카테고리의 다른 글

docker Rotary  (0) 2022.02.23
harbor  (0) 2022.02.22
CRI-O project  (0) 2022.02.21
Podman  (2) 2022.02.16
ArgoCD 구축해보기  (0) 2021.12.28
Comments