1. Architecture
1) Ceph의 구성
A. Ceph : Ceph은 Node 단위로 Storage를 Clustering 해주는 Open Soure
B. Ceph은 3가지의 방식의 Storage 방식을 제공한다.
I. 각 방식은 Object Storage, Block Device, File System 이다.
II. RADOS
가) 데이터가 Clustering 되어 저장되는 Storage Daemon
나) Data를 Crush하여 데이터를 저장
다) Crush
Object의 ID Hashing을 통해 PG(Placement Group)에 할당되고 PG는 다시 PG ID와 Crush를 통해 OSD(Object Storage Daemon)에 할당된다.
라) Pools : 데이터가 저장되는 논리적 파티션
(ㄱ) 클라이언트는 모니터가 가지고 있는 Cluster Map을 조회하고 저장할 객체를 Pool에 전달함
(ㄴ) Pool의 크기나 Replica의 수, Crush Rule, PG(Placement Group) 수에 따라 저장방법을 결정
① Crush Rule : 데이터가 분산되는 정책, 기본적으로 Tree 형태에서 가중치를 설정하는 부분
② Placement Group (PG) : 클라이언트와 osd간 연결 역할
III. RadosGW(Object Storage) : AWS S3 및 Openstack Swift와 호환되는 RESTFul API 서비스를 제공하는 라이브러리
IV. RBD : SnapShot 및 Clone 기능을 가지고 있는 Block Device를 제공
V. CephFS (File System) : Posix를 제공하는 파일시스템, 마운트 가능.
C. Ceph은 OSD, Monitor, Manager, MDS 4개의 데몬으로 이루어 진다.
I. Osd : 데이터를 저장하고 Replication, Recovery, Rebalacing을 수행, 데이터 HA를 위해 3개 이상 구성을 권장
II. Monitor : Cluster 상태 정보를 저장, HA를 위해 3개 이상 구성 권장
III. Manager : Storage Uriliztion, Performance, System Load와 같은 Cluster 상태정보를 추적 Ha를 위해 2개이상 구성을 권장
IV. MDS : File System 사용 시 메타 정보를 저장 (Ceph Block Devices나 Ceph Object Storage는 MDS를 사용하지 않음)
2) Ceph 장점
A. Scale-out 인프라에 잘 어울림
B. IaaS 및 PaaS 형태로 모두 사용가능
2. 설치
1) 사전 설치 패키지
apt update
apt upgrade
apt install -y --no-install-recommends vim net-tools iputils-ping gnupg dirmngr software-properties-common ntp python python-pip openssh-server udev lvm2
A. ceph-deploy 버전이 2.1 부터 python3 사용 가능 (현재 stable 2.0.1)
B. Python 버전 설정 방법
I. Python 설치 위치 확인
which python
which python3
II. Python 버전 관리 되고 있는지 여부 확인하고 버전 추가
update-alternatives --config python
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
# 맨 뒤의 번호는 기존에 사용되지 않았던 번호로 지정
# 다시 다른 버전을 선택하고 싶다면
update-alternatives --config python # 이후 지정번호 선택
III. Python 버전에 맞는 pip도 설치
update-alternatives --config pip
update-alternatives --install /usr/bin/pip pip /usr/bin/pip 1
2) Ceph 설치 (Ceph-deploy)
A. 해당 예제의 구조
Node | Port | Hostname | Network | Descriptions |
OSD | 6800:7300 | ceph-ods1 | 192.168.137.80 | ODS x 4ea |
ceph-ods2 | 192.168.137.130 | ODS x 4ea | ||
ceph-ods3 | 192.168.137.46 | ODS x 4ea | ||
ceph-ods4 | 192.168.137.247 | ODS x 4ea | ||
MON1/MGR1 | 6789 6800:7300 |
ceph-mon1 | 192.168.137.6 | |
MON2/MGR2 | ceph-mon2 | 192.168.137.208 | ||
MON3/MDS | 6800:7300 | ceph-mon3 | 192.168.137.195 | |
ADMIN CLI | ceph-cli | 192.168.137.167 | Deploy |
B. Ceph Repo 등록 및 ceph-deploy 설치 (모든 노드)
wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add -
echo deb https://download.ceph.com/debian-octopus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
apt update
apt install -y ceph-deploy
C. 각 노드가 네트워크가 유기적으로 연결되어 있어야 하기 때문에 key로 연결 (모든 노드)
가) Host명 설정
sudo vi /etc/hostname
ceph-mon1
# 위와 같은 방식으로 쓸 host명을 지정한 후
# 수정 될 /etc/hosts의 host명과 동일하지 않을 때 osd 설치 시 문제 발생
sudo reboot
나) openssh-server 구동 여부 확인
sudo systemctl status ssh
다) ssh 연결을 위한 hosts 파일 수정하여 host
sudo vi /etc/hosts
#아래 내역 추가
192.168.137.167 ceph-cli
192.168.137.6 ceph-mon1
192.168.137.208 ceph-mon2
192.168.137.195 ceph-mon3
192.168.137.80 ceph-osd1
192.168.137.130 ceph-osd2
192.168.137.46 ceph-osd3
192.168.137.247 ceph-ods4
라) ceph에서 사용할 계정을 생성하고 비밀번호 생성하고 sudo 권한 추가
useradd -d /home/cephuser -m cephuser
passwd cephuser
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
chmod 0440 /etc/sudoers.d/cephuser
# 파일 열어서 확인 vi /etc/sudoers.d/cephuser
마) ssh 연결
# 비밀번호 입력하지 않고 key 파일로 연결하기 위해 nologin 옵션 제거
ls -l /run/nologin
rm /run/nologin
#새로 생성된 아이디로 ssh 접근 가능하도록 key 생성
sudo su - cephuser
ssh-keygen
# ssh config 파일 수정
cat << EOM > ~/.ssh/config
Host ceph-cli
Hostname ceph-cli
User cephuser
Host ceph-mon1
Hostname ceph-mon1
User cephuser
Host ceph-mon2
Hostname ceph-mon2
User cephuser
Host ceph-mon3
Hostname ceph-mon3
User cephuser
Host ceph-osd1
Hostname ceph-osd1
User cephuser
Host ceph-osd2
Hostname ceph-osd2
User cephuser
Host ceph-osd3
Hostname ceph-osd3
User cephuser
Host ceph-osd4
Hostname ceph-osd4
User cephuser
EOM
# vi ~/.ssh/config 로 확인
# ssh key 파일 복사
for node in ceph-cli ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2 ceph-osd3 ceph-osd4; do ssh-copy-id cephuser@$node; done
D. 기존 데이터가 있다면 삭제 처리 (ceph-cli 노드에서만 실행)
ceph-deploy purge ceph-cli ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2 ceph-osd3 ceph-osd4
ceph-deploy purgedata ceph-cli ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2 ceph-osd3 ceph-osd4
ceph-deploy forgetkeys
rm ceph.*
E. 초기 MON 지정 (ceph-cli 노드에서만 실행)
ceph-deploy new ceph-mon1 ceph-mon2 ceph-mon3
F. 각 node에 ceph을 설치한다. (ceph-cli 노드에서만 실행)
ceph-deploy install --release octopus ceph-cli ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2 ceph-osd3 ceph-osd4
G. 모니터 노드 초기화 [노드 배치와 키 복사 등] (ceph-cli 노드에서만 실행)
ceph-deploy mon create-initial
H. 클라이언트 어드민 키링 배포 (ceph-cli 노드에서만 실행)
ceph-deploy admin ceph-cli ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2 ceph-osd3 ceph-osd4
I. MGR 노드 생성 (ceph-cli 노드에서만 실행)
ceph-deploy mgr create ceph-mon1 ceph-mon2
J. 파일이 저장될 osd 생성 (ceph-cli 노드에서만 실행)
for node in ceph-osd1 ceph-osd2 ceph-osd3 ceph-osd4; do
ceph-deploy osd create --data /dev/sdb $node;
ceph-deploy osd create --data /dev/sdc $node;
ceph-deploy osd create --data /dev/sdd $node;
ceph-deploy osd create --data /dev/sde $node;
ceph-deploy osd create --data /dev/sdf $node;
done
K. cephFS를 사용하기 위한 MDS설치
[Object Storage, Block Device만 사용한다면 설치할 필요 없음]
(ceph-cli 노드에서만 실행)
ceph-deploy mds create ceph-mon3
L. 설치 조회 및 완료 (ceph-cli 노드에서만 실행)
sudo ceph –s
M. Dashboard 설치 (ceph-mon1 노드에서만 실행)
가) Mgr이 설치된 node에 설치
나) Dashboard 설정 가능 변경
sudo ceph mgr module enable dashboard
다) Error ENOENT: all mgr daemons do not support module ‘dashboard’, pass –force to force enablement 가 발생 시 MGR Node에 Dashboard 설치
sudo apt install ceph-mgr-dashboard
sudo ceph mgr module enable dashboard
라) 해당 페이지 인증 생성
sudo ceph dashboard create-self-signed-cert
마) Dashboard에 사용할 계정 생성
# ceph dashboard ac-user-create <ID> <PASSWORD> administrator
sudo ceph dashboard ac-user-create team epdlxjxla administrator
바) Dashboard 서비스 정보 조회 및 해당 url 접속
sudo ceph mgr services
3. 출처
1) Architecure
A. https://ssup2.github.io/theory_analysis/Ceph_CRUSH_Map_Bucket_Algorithm/
B. https://yeti.tistory.com/240
C. https://sungup.github.io/2020/02/02/Ceph-Self-Study-01.html
2) 설치
A. https://yumserv.tistory.com/273
B. https://bobocomi.tistory.com/2?category=755670
C. https://www.server-world.info/en/note?os=CentOS_7&p=ceph14&f=4
최근댓글