아빠 용돈으로 만든 Ceph Server, Cluster HAT + Raspberry Pi Zero를 구축했습니다.

입문


Ceph는 OpenStack과 Kubernetes의 세계에서Volume와Object Storage로 자주 사용되지만 분포식 시스템에서도 많은 노드가 필요하고 개인적인 용도로 집에서 사용하는 사람은 드물다.
또 세계에는 이미 개인 용도, 법인 용도의 저장 서비스가 많이 있어 매우 편리하고 싸다.
하지만 나는 많은 사람들이 Do It Yourself로 어떤 것도 구축하고 싶지 않다고 생각한다.이런 사람들이 꼭 추천해야 할 것은 이번에 소개된'아버지의 용돈으로 만든 Ceph Server'입니다.
아버지의 용돈은 사람에 따라 정의가 크게 달라지는데 이번 예산은 3만 엔 이내다.

개념


다음과 같은 개념으로 서버를 구축했습니다.
  • 아버지의 용돈(3만 엔 정도)도 충분히 만들 수 있다
  • Ceph rbd 및 radosgw 이동
  • Bluestore 이동
  • 배포, 제품 품질에 구애됨(완전 자동화)
  • 하드웨어


    하드웨어 구성에는 다음과 같은 구성이 있습니다.나는 3만 엔 안에 발이 좀 있다고 생각한다.방법을 생각하느냐에 따라 더 싸게 살 수 있을 것이다.
  • Cluster HAT
  • 4개의 Raspberry Pi Zero 보드를 쉽게 연결할 수 있음
  • https://clusterhat.com
  • 4000엔대
  • Raspberry Pi Zero
  • 700엔 정도(단, 가게에 따라 구매 제한이 있음)
  • https://www.switch-science.com/catalog/3190/
  • Cluster HAT Case
  • 1500엔 정도
  • https://www.modmypi.com/raspberry-pi/cases-183/raspberry-pi-b-plus2-and-3-cases-1122/cases-for-hats-and-boards-1133/cluster-hat-case
  • Raspberry Pi Model B
  • 5000엔대
  • https://www.switch-science.com/catalog/3050/
  • SD Card x4
  • 1장 3000엔대 x4 = 1200엔
  • Raspberry Pi용 전원 공급 장치
  • 2.5A USB 전원 코드 지원
  • 일반 USB 케이블의 경우 전력 부족으로 인해 손상될 수 있습니다. 주의
  • 외관


    각 부품을 클러스터 HAT Case에 결합하면 다음 모양새가 표시됩니다.
    크기가 아마존 에코 닷보다 조금 커서 상당히 작다고 생각합니다.

    기본 노드


    먼저 다음 명령을 사용하여 Raspberry Pi Zero의 각 노드를 초기화합니다.
    요점은ceph의 데이터 영역이 LVM으로 구성되어 있다는 것이다.루트 파티션에 20GB를 할당하고 나머지 영역은 LVM으로 할당합니다.
    # node 電源ON
    clusterhat on p1
    
    # node に SSH login
    node SSH login
    ssh [email protected]
    
    # volume のリサイズ
    sudo resize2fs /dev/mmcblk0p2 20G
    sudo fdisk /dev/mmcblk0
    # d 2
    # n p 2 98304 +20G w
    sudo reboot
    sudo resize2fs /dev/mmcblk0p2 20G
    
    # LVM の設定
    sudo fdisk /dev/mmcblk0
    # n p 3 42041344 249737215
    # t 3 8e w
    sudo partprobe /dev/mmcblk0
    sudo apt update
    sudo apt install lvm2
    
    # 再作成する場合は、古いリソースを一旦削除する
    sudo lvremove /dev/vg1/lv1
    sudo vgremove vg1
    sudo pvremove /dev/mmcblk0p3
    
    sudo pvcreate /dev/mmcblk0p3
    sudo pvdisplay
    sudo vgcreate vg1 /dev/mmcblk0p3
    sudo vgdisplay
    # filestore を使う場合は、journal volume(lv1-journal) を作成する
    # rocksdb の場合は不要
    sudo lvcreate --name lv1-journal --size 200MB vg1
    sudo lvcreate --name lv1 --size 98GB vg1
    sudo lvdisplay
    
    # Swap ファイルのサイズを 2GB に増やす
    sudo vi /etc/dphys-swapfile
    +-+-
    CONF_SWAPSIZE=2048
    +-+-
    sudo systemctl stop dphys-swapfile
    sudo systemctl start dphys-swapfile
    
    # SSH authorized_keys の設定
    mkdir ~/.ssh
    vi ~/.ssh/authorized_keys
    
    

    소프트웨어 준비


    Raspberry Pi의 운영 체제로서 Cluster HAT에서 제공하는 Raspbian을 사용합니다.기본적으로 Raspbian과 같지만 Cluster HAT를 제어하는 소프트웨어 등이 설치되어 있기 때문에 원시 Raspbian을 사용자 정의하는 것보다 더 편리하다.
    한편, 이번 구조에서는 라즈베리 파이 제로가 삽입된 SD카드에 Ceph의 데이터 영역을 만들어야 하기 때문에 리눅스 LVM에 대응하는 Ceph version 12.2.8(Luminous)을 구축했다.
    Raspberry Pi Zero를 위해 Ceph 2진 프로그램을 구축하려면 약간의 기교와 일주일 정도의 구축 시간이 필요합니다.아래의 문서를 참고하여 코드의 일부를 수정하면 순조롭게 운행할 수 있다.

    LLVM 구축 프로세스

    git clone https://github.com/llvm-mirror/llvm.git
    cd llvm
    git checkout release_70
    cd tools
    git clone https://github.com/llvm-mirror/clang.git
    cd clang
    git checkout release_70
    cd ..
    git clone https://github.com/llvm-mirror/lld.git
    cd lld
    git checkout release_70
    cd ../../..
    mkdir llvm-build
    cd llvm-build
    cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=ARM ../llvm
    make
    make install
    update-alternatives --install /usr/bin/cc cc /usr/local/bin/clang 100
    update-alternatives --install /usr/bin/c++ c++ /usr/local/bin/clang++ 100
    update-alternatives --install /usr/bin/cpp cpp /usr/local/bin/clang-cpp 100
    

    Ceph 패키지 구축 프로세스

    curl -O http://www.trial-ride.net/patch-armhf-new.diff
    git clone https://github.com/ceph/ceph.git
    cd ceph
    git checkout -b v12.2.8 refs/tags/v12.2.8
    git submodule update --init --recursive
    patch -p1 < ../patch-armhf-new.diff
    ./install-deps.sh
    sed -i 's/\(WITH_CEPHFS_JAVA\)=ON/\1=OFF/' debian/rules
    
    sudo apt install reprepro
    git add .
    git commit -m "support for raspbian"
    ./make-debs.sh /home/pi/ceph-build
    cd /home/pi/ceph-build/Raspbian
    tar czvf ceph-repo-12.2.8-armhf.tar.gz db dists pool stretch
    

    배포 프로세스


    Ceph의 배치 방법으로ceph-ansible를 사용했습니다.ceph-ansible는 각양각색의 구성에 대응하는 생산 품질의 배치 도구이기 때문에 경영자 개인뿐만 아니라 안심하고 사용할 수 있다.
    다음 절차에 따라 배치를 실시하였다.
    # ceph-ansible のインストール
    sudo apt install -y git
    git clone https://github.com/ceph/ceph-ansible.git
    cd ceph-ansible
    export branch=stable-3.2
    git checkout $branch
    cd ~
    
    # jewel をデプロイする場合は、stable-3.0 にする必要がある
    # luminous, mimic の場合は stable-3.2 を指定する
    sudo apt install -y virtualenv python-dev libffi-dev libssl-dev
    virtualenv venv
    source venv/bin/activate
    
    # stable-3.0 の場合
    pip install -r ceph-ansible/tests/requirements.txt
    # stable-3.2 の場合
    pip install -r ceph-ansible/requirements.txt
    
    sudo mkdir /etc/ansible
    sudo vi /etc/ansible/hosts
    +++
    [mons]
    p1.local
    p2.local
    p3.local
    
    [osds]
    p1.local
    p2.local
    p3.local
    
    [mgrs]
    p1.local
    p2.local
    p3.local
    
    [rgws]
    p1.local
    p2.local
    p3.local
    +++
    
    sudo ln -s ~/ceph-ansible/group_vars /etc/ansible/group_vars
    cd ~/ceph-ansible
    cd group_vars
    cp all.yml.sample all.yml
    vi all.yml
    +++
    ceph_origin: repository
    ceph_repository: custom
    ceph_stable: True
    ceph_stable_release: luminous
    cephx: true
    monitor_interface: "usb0"
    journal_size: 2048
    osd_mkfs_options_xfs: -f -i size=2048
    osd_mount_options_xfs: noatime,largeio,inode64,swalloc
    public_network: 172.19.181.0/24
    cluster_network: 172.19.181.0/24
    
    ceph_origin: repository
    ceph_repository: custom
    ceph_custom_repo: http://www.trial-ride.net/ceph-raspbian.armv6
    +++
    
    cp osds.yml.sample osds.yml
    vi osds.yml
    # filestore の場合
    +++
    osd_objectstore: filestore
    osd_scenario: lvm
    lvm_volumes:
      - data: lv1
        data_vg: vg1
        journal: lv1-journal
        journal_vg: vg1
    +++
    # rocksdb の場合
    +++
    osd_objectstore: bluestore
    osd_scenario: lvm
    lvm_volumes:
      - data: lv1
        data_vg: vg1
    +++
    
    cd ..
    cp site.yml.sample site.yml
    
    # デプロイの実行
    ansible-playbook site.yml -b
    

    데이텀 결과


    rados bench를 실행한 결과는 다음과 같습니다.
    성능에 관해서는 그다지 빠르지 않다.
    pi@p1:~ $ sudo rados mkpool mypool
    pi@p1:~ $ sudo rados -p mypool bench 10 write -b 123
    hints = 1
    Maintaining 16 concurrent writes of 123 bytes to objects of size 123 for up to 10 seconds or 0 objects
    Object prefix: benchmark_data_p1_13471
      sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
        0       2         2         0         0         0           -           0
        1      15        77        62 0.00708616 0.00727272    0.280682    0.232659
        2      16       144       128 0.00740415 0.00774193    0.128686    0.231646
        3      16       214       198 0.00766135 0.00821114    0.281453    0.231473
        4      16       270       254 0.00738524 0.00656891    0.216874     0.24727
        5      16       338       322 0.00749572 0.00797653    0.218095    0.243478
        6      16       404       388 0.00753443 0.00774193    0.175373     0.24238
        7      16       478       462 0.00769518 0.00868034    0.160927    0.239925
        8      16       553       537 0.00782772 0.00879765    0.145773    0.235024
        9      16       628       612 0.00793464 0.00879765    0.199223    0.231789
       10      16       696       680 0.00793851 0.00797653    0.179024    0.231877
    Total time run:         10.160294
    Total writes made:      697
    Write size:             123
    Object size:            123
    Bandwidth (MB/sec):     0.00804696
    Stddev Bandwidth:       0.000705981
    Max bandwidth (MB/sec): 0.00879765
    Min bandwidth (MB/sec): 0.00656891
    Average IOPS:           68
    Stddev IOPS:            6
    Max IOPS:               75
    Min IOPS:               56
    Average Latency(s):     0.232101
    Stddev Latency(s):      0.0742895
    Max latency(s):         0.733679
    Min latency(s):         0.080719
    Cleaning up (deleting benchmark objects)
    Removed 697 objects
    Clean up completed and total clean up time :8.070982
    

    총결산


    이번 문서에서 "아빠 용돈으로 Ceph Cluster 할 수 있나요?"Cluster HAT를 주제로 다양한 Cluster HAT를 쓰러뜨린 결과를 정리했다.
    결과적으로 자신이 하는 것보다 클라우드 서비스를 사는 것이 더 빠르고 더 싸다.그렇긴 하지만 언젠가는 상황이 역전될 때가 올 거라고 예상합니다.
    예를 들어 올해 Ceph Day Berlin에서 Ambedded 씨가 발표한 슬라이드를 보면 ARM을 바탕으로 ceph cluster를 구축하면 1개의 호스트에 고밀도로 많은 디스크를 설치하는 단점(NUMA Memory Access의 병목, 1개의 호스트가 고장나면 많은 OSD가 멈추고 서비스의 영향이 크다는 등)에서 해방된다전력 소비량을 줄일 수 있기 때문에 합리적으로 보인다.
    올해 AWS EC2 등에서도 ARM 아키텍처를 사용할 수 있게 되면서 다양한 ARM에 바람이 불고 있다.앞으로 ARM의 움직임도 놓칠 수 없다.
  • https://www.slideshare.net/Inktank_Ceph/ceph-day-berlin-5-reasons-to-use-armbased-microserver-architecture-for-ceph-cluster
  • 좋은 웹페이지 즐겨찾기