정말 오랜만에 글을 쓰게 되었습니다.
회사 업무와 건강 문제로 너무나도 바쁜 나날이 지났습니다.
xcp-ng와 linstor (oxstor)
proxmox와 xcp-ng를 비교하던 중 xostor라는 분산 스토리지 솔루션에 대해서 알게되었습니다.
아직은 베타지만, 공식적으로 지원 예정이라고 하기에 조금 알아봤어요.
linxtor의 장점과 단점
조사해본 장점은 성능이었습니다.
장점이자 단점으로는 Linux Kernel에 포함되지 않았다는 것이죠.
xcp-ng를 설치해보시면, kernel 버전이 매우 낮다는 것을 알수 있습니다.
25년 1월 기준으로 4.18이었습니다.
다르게 말하면 ceph의 경우, kernel 버전과 함께 ceph 버전도 낮을 수 밖에 없습니다.
반면 linstor와 drbd는 kernel 버전이 낮아도 버전을 높일 수 있습니다.
그래서 kernel에 묶인 것이 장점이자 단점이라고 표현했습니다.
사실 xcp-ng의 커널이 6.4만 되어도, ceph가 linstor 대비 훨씬 좋지 않았을까 생각합니다.
drbd를 사용하는 이유는 xcp-ng의 커널 버전이 낮기 때문이라고 생각해요.
아무튼. 성능 한번 비교해보고 이 글을 작성하게 되었습니다.
벤치마킹: ceph vs linstor
벤치마킹 환경
저는 집에서 proxmox를 사용하고 있습니다.
하지만 테스트를 운영하고 있는 proxmox host에 설치할수는 없기 때문에 vm으로 proxmox를 3개 생성하고,
가상의 proxmox에 ceph와 linstor를 구성하였습니다.
vm의 디스크 옵션은 다음과 같이 주었습니다.

vm은 완전히 똑같이 구성하기 위해, fio 스크립트까지 생성한 후에 복제하였습니다.
Fio 스크립트 파일
fio 스크립트 파일은 다음과 같습니다.
# 4M read
sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=fio_test --bs=4M --iodepth=64 --size=4G --readwrite=read --ramp_time=4
sudo rm fio_test
# 4M write
sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=fio_test --bs=4M --iodepth=64 --size=4G --readwrite=write --ramp_time=4
sudo rm fio_test
# 4K rand read iops
sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=fio_test --bs=4k --iodepth=64 --size=1G --readwrite=randread
sudo rm fio_test
# 4K rand write iops
sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=fio_test --bs=4k --iodepth=64 --size=1G --readwrite=randwrite
sudo rm fio_test
# 4K rand rw iops
sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=fio_test --bs=4k --iodepth=64 --size=1G --readwrite=randrw --rwmixread=65
sudo rm fio_test
구성도
위 설명을 그림으로 나타내면 다음과 같습니다.

실험 결과
1차 실험 결과
결과를 보시면 linstor는 실험이 중단 되었습니다.
중단 이유는 다음 단락에서 설명 드리겠습니다.

1차 실험 중단 및 복구
prx2, 즉 3번 proxmox 노드로 vm을 이동하고 fio를 실행하였으나 실행이 안되었습니다.
terminal에서 fio 명령 입력후 enter 를 눌러 줄이 바뀌었으나 fio가 실행되지 않더군요.
시스템 종료도 불가능하여 proxmox에서 vm을 reset 하였습니다.
지원하지 않는 cpu라고 표시되며 부팅이 중단되었어요.
그래서 linstor vm을 제거하고, ceph vm을 복제해왔습니다.
역시 CPU가 지원되지 않는다며 부팅이 불가능했습니다.
조금 더 모니터링 해보니 prx2가 계속 끊기는 것을 확인할 수 있었습니다.
linstor 뿐만 아니라 ceph에서도, proxmox cluster에서도 prx2가 offline으로 변경되었다가 돌아오는 것을 발견할 수 있었습니다.
결국 prx2를 다른 VMware로 옮겼습니다.
이후의 구성도는 다음과 같습니다.

새로 옮긴 prx2의 부팅을 기다리고, ceph와 linstor의 복구를 기다렸습니다.
복구를 기다리면서 네트워크를 모니터링 했는데, 네트워크 이슈는 없었습니다.
아마 vmware Host 6이 문제가 있던 것으로 보입니다.
ceph vm도 복제하여 부팅했고, 부팅이 되는 것을 확인 했습니다.
linstor의 불안정성과 ceph의 안정성 증명
여기서 linstor가 매우 불안정적이라는 것을 알수 있습니다.
물론 네트워크가 이렇게 자주 끊기면 안되는게 사실이기는 하나..
ceph에선 이 정도 끊김으로는 문제가 없었다는것입니다.
반면 linstor는 만에하나 천억에 하나라도 네트워크 장애가 났을때 파일이 깨질수 있다는 것을 보여주었죠.
심지어 prx에서 ceph의 파일을 linstor로 복제하고 있었음에도,
prx2의 네트워크 장애로 prx와 prx1의 데이터가 손상되었음을 확인할수가 있습니다.
네트워크 이슈를 해결하고 다시 2차 벤치마킹을 진행 했습니다.
2차 실험 결과

실험 결과: linstor vs ceph
성능을 보면 확실히 압도적입니다.
하지만 나의 데이터를 맡길수 있는지는 의문입니다.
나중에 좀더 안정적이 되었을 때, 한번더 고의로 네트워크 장애 일으켜가며 테스트 해보겠습니다.
답글 남기기