안녕하세요 에이플랫폼 입니다.
이번에 처음 선보이는 Support Bulletin 시리즈입니다.
고객 지원 사례와 관련 정보들을 모아 시리즈로 작성하게 되었습니다.
발행은 비정기적으로 발행될 예정입니다.
아무래도 공개가 가능한 정보들로 글을 작성해야 하기 때문에...
그래도 앞으로 꾸준히 발행될 예정이니 많은 관심 가져주시면 감사하겠습니다.
📌개요
SingleStore 설치 시 대부분의 경우 일시적인 Node Failure 에 대비하기 위해 자동 시작하도록 설정하는 것을 권장하고 있습니다.
예를 들어 다음과 같은 명령어를 사용하여 모든 Aggregator 및 Leaf 노드에서 SingleStore Daemon 을 자동 시작하게 설정합니다.
$ sdb-admin enable-nodes-autostart --host all
위 명령어를 수행하면 /etc/systemd/system/memsql.service 파일이 생성됩니다.
이 후 시스템이 reboot 되는 경우가 발생하면 systemd Daemon 이 해당 파일을 읽어 SingleStore 를 자동으로 시작하게 합니다.
위와 같이 autostart 하도록 설정했음에도 불구하고 memsql.service 파일을 찾지 못해 SingleStore 가 자동으로 재시작하지 않는 경우가 발견되었습니다.
유사한 현상이 발생한 경우 아래 내용을 확인하여 조치하시기를 권장해 드립니다.
💡원인
대부분의 고객사에서는 SingleStore 의 Software, 설정 파일, 데이터, 로그등을 저장하기 위해 별도의 Directory 를 구성하고 있습니다.
Bare Metal 의 경우는 Root Volume 과 SingleStore 용 Volume 을 별도로 분리하여 마운트시키는 형태를 가지고 있고,
Cloud IaaS 환경에서는 Block Storage 를 iSCSI 등의 방법으로 마운트하여 사용합니다.
문제는 일부 Cloud IaaS 환경에서 별도로 추가된 Volume 이 마운트되지 않은 시점에 systemd Daemon 이 memsql.service 파일을 읽어 SingleStore 를 재시작하려 시도하기 때문에 필요한 파일들을 액세스하지 못해 서비스 실패가 발생하며 다음 두가지의 형태로 나타납니다.
- tarball 형태로 SingleStore 를 설치한 경우
이 경우 autostart 를 활성화 하면 tar install directory 인 /singlestore 밑에 memsql.service 파일이 생성되고 이를 /etc/systemd/system 디렉토리에 심볼릭 링크로 연결합니다.
$ ls -ltr /etc/systemd/system/memsql.service lrwxrwxrwx. 1 root root 27 Nov 28 07:29
memsql.service -> /singlestore/memsql.service
따라서 /singlestore 디렉토리가 마운트되지 않은 경우 memsql.service 파일을 읽을 수 없다는 에러가 발생합니다.
Nov 28 07:41:34 localhost systemd: memsql.service: Failed to open
/etc/systemd/system/memsql.service: No such file or directory
2. rpm 형태로 SingleStore 를 설치한 경우
이 경우엔 memsql.service 파일이 /lib 와 링크된 /usr/lib/systemd/system 밑에 생성되므로 memsql.service 파일 자체는 읽을 수는 있습니다.
하지만 SingleStore 설정 파일이나 Data 파일을 읽을 수 없기 때문에 아래와 유사한 로그 메시지가 발생하며 memsql.service 시작이 실패합니다.
Nov 28 23:46:08 localhost memsqlctl: memsqlctl failed to load the node config file '/singlestore/data/test/AG1/memsql.cnf' referenced by the node metadata file at '/var/lib/memsql/nodes.hcl' (see https://docs.singlestore.com/memsqlctl-redir/missing-memsql-config-file for more information): open /singlestore/data/test/AG1/memsql.cnf: no such file or directory
Nov 28 23:46:08 localhost systemd: memsql.service: main process exited, code=exited, status=1/FAILURE
Nov 28 23:46:08 localhost systemd: Failed to start SingleStore.
Nov 28 23:46:08 localhost systemd: Unit memsql.service entered failed state.
Nov 28 23:4 6:08 localhost systemd: memsql.service failed.
✅조치
위 상황에 대한 조치 방법은 다음과 같습니다.
- memsql.service 파일을 Local Disk Volume 에 위치하도록 이동 (tarball 형태 설치 경우)
- memsql.service 파일을 수정하여 서비스간 의존관계(Dependency) 를 설정
1번의 경우는 rpm 설치 경우와 동일하게 수정하도록 합니다.
$ sudo mv /singlestore/memsql.service /lib/systemd/system/memsql.service
$ sudo ln -s /lib/systemd/system/memsql.service /etc/systemd/system/memsql.service
$ sudo chmod 644 /etc/systemd/system/memsql.service
2번의 경우는 After 및 Requires 항목을 설정해 singlestore.mount 가 실행되고 난 후에 memsql.service 가 시작되도록 의존관계를 부여합니다.
[Unit]
Description=SingleStore
After=network.target singlestore.mount
Requires=singlestore.mount
👍참고
- singlestore.mount 의 경우는 다음 명령어로 확인합니다.
$ sudo systemctl list-units --type=mount
- memsql.service 파일을 수정한 후에는 systemd Daemon 을 재시작해야 수정된 내용이 반영되어 다음 reboot 부터 적용됩니다.
$ sudo systemctl daemon-reload
- sdb-admin 을 이용해 autostart 설정을 disable 후 다시 enable 하는 경우 memsql.service 파일이 초기화됩니다. memsql.service 파일을 수정한 후에는 systemctl 명령어를 이용해 서비스를 disable/enable 하시길 바랍니다.
$ sudo systemctl enable memsql.service
$ sudo systemctl disable memsql.service
$ sudo systemctl start memsql.service
$ sudo systemctl stop memsql.service
- 4. 위 조치 사항은 SingleStore 의 모든 Node 에 각각 적용하여야 합니다.
'SingleStoreDB > 연구노트' 카테고리의 다른 글
Row Generation 튜닝#1 - SingleStore (0) | 2024.01.18 |
---|---|
Row Generation 성능 비교 - SingleStore, Oracle, MySQL, PostgreSQL (0) | 2024.01.12 |
Row Generation - SingleStore, Oracle, MySQL PostgreSQL (1) | 2024.01.04 |
SingleStore Hands-On #6 Unlimited Storage Database (1) | 2023.12.28 |
SingleStore Hands-On #5 Online Scale Out/In (0) | 2023.12.21 |