Redis Cluster Backup
Redis Cluster, 또는 Sentinel 구조일 경우 Slave 서버의 .rdb 파일을 백업하도록 ansible 명령을 cronjob에 등록해서 사용 가능합니다.
1. 원격 서버에서 각 서버의 role을 확인하여 slave 일 경우만 백업
2. 백업 실패할 경우 메일 발송
3. 기간이 오래된 경우 백업 디렉토리에서 오래된 파일 삭제
사용하는 Util은 https://www.tencentcloud.com/ko/document/product/571/13749 에서 redis-port를 다운로드 하여 사용합니다.
백업 방식은 백업을 하는 Manager 서버에서 각 Cluster로 ssh를 사용해서 Manager 서버 mount 된 Nas Storage로 백업되도록 합니다.
cronjob 등록: ansible-playbook -i 백업대상서버리스트.yml redis_cluster_backup.yml -uSSH계정정보
redis_cluster_backup.yml
- hosts: all
become: yes
gather_facts: yes
tasks:
- name: slave check
shell: |
redis-cli -p 포트번호 -c info replication | grep role | cut -d ':' -f 2
register: result
- name: run backup
shell: |
redis-dump "{{ inventory_hostname }}":포트번호 -o 백업디렉토리위치/`date '+%Y%m%d-%H'`-"{{ ansible_hostname }}".rdb
when: result.stdout == "slave"
delegate_to: 127.0.0.1
register: backup_result
- name: Send a result mail
mail:
host: 메일서버
subject: 메일 제목
body: |
Check Redis Replica Backup.
hostname: {{ ansible_fqdn }}
IP: {{ ansible_all_ip4_addresses[0] }}
to: 수신자메일주소
from: 송신자메일주소
backup_result.changed != true and result.stdout == "slave"
- name: Delete expired backup
shell: |
find 백업디렉토리/"{{ item }}" -mindepth 1 -mtime 1 -delete
delegate_to: 127.0.0.1
when: backup_result.changed == true
with_items: "{{ group_names }}"
Redis Cluster Restore
Nas Storage에 백업 된 파일을 복원하려는 서버에 복사합니다.
Cluster의 백업 본이 5개라면, 기존 서버 구성과 동일하게 5개의 Master가 구성되도록 인스턴스를 올리고 백업 본을 각 서버 로컬 디렉토리로 복사합니다.
1. .rdb 파일 복사, redis 서비스 시작 계정으로 소유 권한 변경
2. 새로 구성한 서버의 redis 서비스 중지
3. redis configuration 에서 appendonly no로 설정/ master 서버에 복사한 rdb파일을 새로 copy한 백업 본 파일로 변경
4. master 서버 redis 서비스 시작
5. redis-cli 접속 후, cluster info로 데이터 로딩 결과 확인
6. slave 서버 redis 서비스 시작
7. 전체 서버의 configuration에서 appendonly yes로 변경
config set appendonly yes
8. db size, log 확인
'Database > Redis' 카테고리의 다른 글
max number of clients reached 오류 (0) | 2022.09.08 |
---|