블로그

[Ceph] Ubuntu 14.04 - Ceph Jewel 설치

우분투 14.04 에서 Ceph Jewel 설치법입니다.

설치 환경은 퍼니오의 컨테이너 호스팅의 Ubuntu 14.04 이용했습니다. 로컬 피시에서는 버추얼 박스나

vmware 등의 가상머신을 이용해도 거의 동일하게 세팅이 가능할 듯 합니다.

먼저 ceph_admin, ceph_node1, ceph_node2, ceph_node3 총 4개의 서버를 준비합니다. 컨테이너로

테스트해도 설치부터 오브젝트 스토리지 테스트까지 정상적으로 설치가 됩니다. 물론 가상서버에서도 마찬가지로

정상적으로 설치가 될 것으로 보입니다.

ceph_admin, ceph_node1, ceph_node2, ceph_node3 총 4개서버 세팅

cech_admin 서버 /etc/hosts 에 노드 추가

10.0.100.4    ceph_admin
10.0.100.5    ceph_node1
10.0.100.6    ceph_node2
10.0.100.7    ceph_node3

ceph-admin 노드에 ceph-deploy 설치

# apt-get update
# apt-get install wget
# wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -

ceph 버전에 맞도록 수정해서 실행 (# echo deb http://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list)

# echo deb http://download.ceph.com/debian-jewel/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
# apt-get update
# apt-get install ceph-deploy

ceph-admin 노드에서 각 노드로 접속해서 sudo 사용시 암호 입력 안 하도록 설정

가능한 root 외의 일반계정으로 사용. cephuser 계정으로 사용.

각 노드에 동일한 계정 생성해야 함

# 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

ceph_node 서버들

# apt-get install ntp
# apt-get install python
# apt-get install wget

# 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

ceph_admin 서버

cephuser 로 실행. cephuser 로 ssh 접속시 사용할 key 생성

# ssh-keygen

각 노드로 ssh key 전송

# ssh-copy-id cephuser@ceph_node1
# ssh-copy-id cephuser@ceph_node2
# ssh-copy-id cephuser@ceph_node3

Ceph 모니터들은 6789 포트 사용. Ceph OSD 들은 6800:7300 포트 사용. 각 서버들간 포트 접속 가능한지 체크

Ceph Deploy

http://docs.ceph.com/docs/master/start/quick-ceph-deploy/

모니터 노드 1, OSD 노드 2개로 세팅

ceph_admin 서버에서 cephuser 계정으로 실행

설정파일, 로그파일, 키파일등을 저장할 작업 디렉토리 생성. 작업은 항상 이 디렉토리에서 해야 함

# mkdir ~/my-cluster
# cd ~/my-cluster

디플로이 중 다시 설치하고 싶으면

# ceph-deploy purgedata ceph_node1
# ceph-deploy forgetkeys

Ceph 패키지들도 삭제할 경우 아래 실행. purge 후에 ceph 를 재설치해야 함

# ceph-deploy purge ceph_node1

모니터링 노드 설치

# ceph-deploy new ceph_node1

처음 ceph-deploy 를 실행하면 ~/my-cluster 디렉토리 아래에

ceph-deploy-ceph.log
ceph.conf
ceph.mon.keyring

이 파일들이 생성된다.

osd 노드를 두개로 할 것이므로 ceph.conf 파일을 열어서 [general] 섹션에 아래 추가

osd pool default size = 2

Ceph 설치

# ceph-deploy install ceph_admin ceph_node1 ceph_node2 ceph_node3

Initial 모니터링 서버를 등록하고 키들을 수집

# ceph-deploy mon create-initial

아래 파일들 생성됨

ceph.bootstrap-mds.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-rgw.keyring
ceph.client.admin.keyring

OSD 노드 생성

OSD 디렉토리 생성

ceph_node2 에 생성

# mkdir /var/local/osd0

ceph_node3 에 생성

# mkdir /var/local/osd1

문서에는 없는데 퍼미션 문제로 에러 발생해서 chmod 777 로 퍼미션 풀어줌

OSD 준비

# ceph-deploy osd prepare ceph_node2:/var/local/osd0 ceph_node3:/var/local/osd1

OSD 활성화

# ceph-deploy osd activate ceph_node2:/var/local/osd0 ceph_node3:/var/local/osd1

컨테이너에서 테스트하니 /var/log/ceph/ceph-osd.1.log 에서 ERROR: osd init failed: (36) File name too long 에러 나면서 활성화가 안 되는 듯 ...아래 링크 참고

http://docs.ceph.com/docs/jewel/rados/configuration/filesystem-recommendations/

파일시스템이 ext4 일 경우는 아래처럼 옵션 변경하라고 함

osd max object name len = 256
osd max object namespace len = 64

설정파일과 ceph.client.admin.keyring 파일 카피? /etc/ceph 에 ceph.conf 를 카피하는 듯

# ceph-deploy --overwrite-conf admin ceph_admin ceph_node1 ceph_node2 ceph_node3
# sudo chmod +r /etc/ceph/ceph.client.admin.keyring

my-cluster 의 ceph.conf 를 변경 후 배포할려면 위의 명령으로 배포. 이미 conf 파일이 있을 경우는 --overwrite-conf 옵션을 주면 됨

상태 체크

# ceph health
HEALTH_OK

# ceph pg stat
v135: 64 pgs: 64 active+clean; 0 bytes data, 38011 MB used, 57370 MB / 100534 MB avail

OSD 는 기본적으로 3개 이상(?) 이어야 해서 하나 추가

ceph_node1 에 OSD 설치

# mkdir /var/local/osd2
# chmod 777 /var/local/osd2

ceph_admin 에서

# ceph-deploy osd prepare ceph_node1:/var/local/osd2
# ceph-deploy osd activate ceph_node1:/var/local/osd2

싱크 진행상황 볼려면 아래 명령. active+clean 나오면 완료

# ceph -w
cluster adcbbd9d-53b7-471e-a80a-5ce4fb50a1b8
 health HEALTH_OK
 monmap e1: 1 mons at {ceph_node1=10.0.100.5:6789/0}
        election epoch 4, quorum 0 ceph_node1
 osdmap e16: 4 osds: 3 up, 3 in
        flags sortbitwise
  pgmap v337: 64 pgs, 1 pools, 0 bytes data, 0 objects
        72398 MB used, 70674 MB / 147 GB avail
              64 active+clean

2016-05-12 13:45:06.413000 mon.0 [INF] pgmap v336: 64 pgs: 64 active+clean; 0 bytes data, 72398 MB used, 70674 MB / 147 GB avail
2016-05-12 13:45:09.290845 mon.0 [INF] pgmap v337: 64 pgs: 64 active+clean; 0 bytes data, 

메타데이터 서버 추가 (CephFS 파일시스템을 사용시만 필요)

# ceph-deploy mds create ceph_node1

RGW(RADOS Gwateway) 추가

# ceph-deploy rgw create ceph_node1

기본 포트는 7480 인데 변경할려면 rgw 서버의 /etc/ceph/ceph.conf 에 추가 후

# /etc/init.d/radosgw restart

[client]
rgw frontends = civetweb port=80

모니터링 노드 추가

모니터링 노드에는 ntp 서버가 설치되고 서로 피어링(?) 되어야 함

# ceph-deploy mon add ceph_node2
# ceph-deploy mon add ceph_node3
# ceph quorum_status --format json-pretty

{
    "election_epoch": 8,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "ceph_node1",
        "ceph_node2",
        "ceph_node3"
    ],
    "quorum_leader_name": "ceph_node1",
    "monmap": {
        "epoch": 3,
        "fsid": "adcbbd9d-53b7-471e-a80a-5ce4fb50a1b8",
        "modified": "2016-05-12 14:11:32.978992",
        "created": "2016-05-11 17:52:15.046224",
        "mons": [
            {
                "rank": 0,
                "name": "ceph_node1",
                "addr": "10.0.100.5:6789\/0"
            },
            {
                "rank": 1,
                "name": "ceph_node2",
                "addr": "10.0.100.6:6789\/0"
            },
            {
                "rank": 2,
                "name": "ceph_node3",
                "addr": "10.0.100.7:6789\/0"
            }
        ]
    }
}

오브젝트 테스트

# rados mkpool data
# rados put test-object-1 testfile.txt --pool=data
# rados -p data ls
# ceph osd map data test-object-1
# rados rm test-object-1 --pool=data
2016-05-13 목록