'데이터 엔지니어'로 성장하기

정리하는 걸 좋아하고, 남이 읽으면 더 좋아함

Storage/Ceph

ceph)mc cp로 클러스터간 데이터 옮기기

MightyTedKim 2022. 5. 31. 12:46
728x90
반응형
ceph object-storage를 A서버에서 B서버로 이동하는 방법을 찾다가 mc를 이용

요약

  1. 상황
  2. 원인
  3. 조치
  4. 참고

설명

상황

mc cp --recursive (source) (target) 하니까 에러가남

A서버 ceph의 데이터를 B서버 Ceph로 옮겨야함.

mc 커맨드가 linux에 설치되어 있어서 알아봄, 

mc cp vs mc mirror

- mc cp
 allows for fine-tuned options for single files (but can bulk copy using --recursive)
- mc mirror is focussed on bulk copying and can create buckets
출처 : https://stackoverflow.com/questions/59558166/whats-different-between-mc-cp-recursive-and-mc-mirror-overwrite

mc mirror는 bucket도 만들어진다고 하니, 위험할 것 같아 cp로 테스트

그런데, copy 하려니까 에러가 남

$ mc cp ceph-prod/hgkim/test.parquet ceph-dev/hgkim/test.parquet
mc: <ERROR> Failed to copy `http://10.***.74.***:30***/hgkim/test.parquet `. Put "http://10.***.54.***:30***/hgkim/test.parquet":
readfrom tcp 1**.17.1**.**:43***->1**.17.1**.**:300**:
The request signature we calculated does not match the signature you provided. Check your key and signing method.

참고로 mc alias ls 는 아래와 같음

ceph-prod
  URL       : http://10.***.74.***:30***
  AccessKey : access-key
  SecretKey : secret-key
  API       : s3v2
  Path      : auto

ceph-dev
 URL       : http://10.***.54.***:30***
  AccessKey : access-key
  SecretKey : secret-key
  API       : s3v2
  Path      : auto

 

원인

api를 s3v4에서 s3v2로 변경하면 됨

인터넷을 검색해보니 s3v2로 변경하면된다고 함

https://stackoverflow.com/questions/52450291/any-way-to-configure-what-signature-version-a-minio-server-accepts

 

Any way to configure what signature version a Minio server accepts?

I have a Minio server set up and everything appears to be running normally. For my CLI, I have this in my config.json: "myalias": { "url": "https://myurl", "accessKey": "

stackoverflow.com

aws의 경우에는 key값의 특수문자 때문에 이런 오류가 생긴다고도 함

https://lynlab.co.kr/blog/52

 

AWS 라이브러리의 SignatureDoesNotMatch 해결 방법

AWS 클라이언트를 이용할 때 발생한 SignatureDoesNotMatch 에러의 원인과 해결 방법.

lynlab.co.kr

 

조치

- API       : s3v4 ->   API       : s3v2 변경하니 완료

아래처럼 변경하고

$ vi .mc/config.json
{
        "version": "10",
        "aliases": {
                "ceph-prod": {
                        "url": "http://10.***.74.***:30***",
                        "accessKey": "access-key",
                        "secretKey": "secret-key",
                        "api": "s3v4", #s3v2
                        "path": "auto"
                },
                "ceph-dev": {
                        "url": "http://10.***.54.***:30***",
                        "accessKey": "access-key",
                        "secretKey": "secret-key",
                        "api": "s3v4", #s3v2
                        "path": "auto"
                }
        }

다시 실행하니 작동함

$ mc cp ceph-prod/hgkim/test.parquet ceph-dev/hgkim/test.parquet
...4.***:30***/hgkim/test.parquet:  172.27 KiB / 172.27 KiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 813.12 KiB/s 0sb

 

+ 운영에 적용한다면, readonly 계정을 만들어서 mc host에 등록해주면 안전할 것 같음

https://mightytedkim.tistory.com/105?category=964186 

 

Ceph) readonly 계정 만들기_radosgw,subuser,s3 policy

분석계에서 데이터 당겨서 갈때, readonly로 주고 싶었음 secondary 만들어서 주는게 정석이지만, 과한 것 같아 radosgw + subuser + s3 policy로 구현함 요약 1. 상황 - readonly 계정이 필요함 - multi-site로..

mightytedkim.tistory.com

 

참고

Unable to specify s3v2 when using MC_HOST_ env

- https://github.com/minio/mc/issues/2915

728x90
반응형