3.redis実戦:redis自動バックアップとバックアップ管理
redis実戦:redis自動バックアップとバックアップ管理
redisを使用して複数のサービスを開始
実際の導入では、redisは複数のポートを開いてサービスを外部に提供する必要があります.異なる起動パラメータを設定するだけでなく、shellやpythonなどのスクリプトを使用して管理構成を行う必要があります.次に,実際の例を用いて,作業におけるredisに関する動作を紹介する.
必要:
1.複数のredisサービスを自動的に開く必要があります.2.redisを定期的にバックアップする必要がある.3.ディスクの容量を考慮して、バックアップの規模を1つの範囲に制限して、ディスクの容量が不足しないようにする必要があります.4.異なるredisサービスに対して、バックアップファイルもディレクトリ管理が必要である.
/dataディレクトリの下にredisサービスが存在するディレクトリとredisバックアップディレクトリを作成します.
redis-fileでは、異なるポートをバインドし、異なるディレクトリ、バックアップファイル、pidファイルを指定する4つのredisサービスを開始しました.
我々はredisでtest 1サービスの例では、起動スクリプトを表示できます.
その他のredisサービスとredis_test 1は似ているので、総起動スクリプトを設定します.
スクリプトを実行した後、サーバ上のredisサービスを表示します.
複数のredisサービスバックアップ
サービスが正常に開始されると、/data/redis-backupの下で、スクリプトの内容を以下に示す自動バックアップスクリプトを設定する必要があります(redis_backup.py):
このスクリプトを実行すると、バックアップ・ファイルがバックアップ・ディレクトリ(/data/redis-backup)にパッケージされていることがわかります.異なるサービスには独立したディレクトリがあります.
バックアップを自動化するには、バックアップスクリプトの実行コマンドをcrontabに書き込み、タイミング実行の目的を達成する必要があります.
バックアップを継続する場合は、ディスクの容量も考慮する必要があります.これはzabbixサービスで監視し、ディスクの容量が一定パーセントに達したときに手動で削除することができます.これはlowを比較する方法で、スクリプトが自分で問題を発見できるようにするのが最善の方法です.そのため、別のスクリプトを作成してredisのバックアップファイルを定期的に削除する必要があります.最新のバックアップ情報のみを保持します.このスクリプトは、自分で書くことを望んでいます.
redisを使用して複数のサービスを開始
実際の導入では、redisは複数のポートを開いてサービスを外部に提供する必要があります.異なる起動パラメータを設定するだけでなく、shellやpythonなどのスクリプトを使用して管理構成を行う必要があります.次に,実際の例を用いて,作業におけるredisに関する動作を紹介する.
必要:
1.複数のredisサービスを自動的に開く必要があります.2.redisを定期的にバックアップする必要がある.3.ディスクの容量を考慮して、バックアップの規模を1つの範囲に制限して、ディスクの容量が不足しないようにする必要があります.4.異なるredisサービスに対して、バックアップファイルもディレクトリ管理が必要である.
/dataディレクトリの下にredisサービスが存在するディレクトリとredisバックアップディレクトリを作成します.
[root@server1 data]# pwd
/data
[root@server1 data]# ls
redis-backup redis-file
redis-fileでは、異なるポートをバインドし、異なるディレクトリ、バックアップファイル、pidファイルを指定する4つのredisサービスを開始しました.
[root@server1 redis-file]# ls
allredisrun.sh redis_test1 redis_test2 redis_test3 redis_test4
[root@server1 redis-file]# cd redis_test1
[root@server1 redis_test1]# ls
redis.conf redis-server redis_test1.pid redis_test1.rdb run_redis_test1.sh
我々はredisでtest 1サービスの例では、起動スクリプトを表示できます.
[root@server1 redis_test1]# cat run_redis_test1.sh
#!/bin/bash
rootdir=/data/redis-file/redis_test1
${rootdir}/redis-server ${rootdir}/redis.conf --port 6381 --dbfilename redis_test1.rdb --save 900 1000 -save 300 10000 --pidfile redis_test1.pid &
その他のredisサービスとredis_test 1は似ているので、総起動スクリプトを設定します.
[root@server1 redis-file]# cat allredisrun.sh
#!/bin/bash
redis_root_dir="/data/redis-file"
bash="/bin/bash"
for i in `seq 1 4`
do
cd ${redis_root_dir}/redis_test${i}
${bash} ${redis_root_dir}/redis_test${i}/run_redis_test${i}.sh
done
スクリプトを実行した後、サーバ上のredisサービスを表示します.
[root@server1 redis-file]# ps aux |grep redis
root 1602 0.1 0.5 133544 7864 pts/0 Sl 06:45 0:00 /data/redis-file/redis_test1/redis-server 192.168.1.8:6381
root 1604 0.1 0.5 133544 7868 pts/0 Sl 06:45 0:00 /data/redis-file/redis_test2/redis-server 192.168.1.8:6382
root 1606 0.1 0.5 133544 7868 pts/0 Sl 06:45 0:00 /data/redis-file/redis_test3/redis-server 192.168.1.8:6383
root 1612 0.0 0.5 133544 7868 pts/0 Sl 06:45 0:00 /data/redis-file/redis_test4/redis-server 192.168.1.8:6384
root 1619 0.0 0.0 103256 868 pts/0 S+ 06:45 0:00 grep redis
複数のredisサービスバックアップ
サービスが正常に開始されると、/data/redis-backupの下で、スクリプトの内容を以下に示す自動バックアップスクリプトを設定する必要があります(redis_backup.py):
#encoding:utf-8
#!/usr/bin/env python
import os
import tarfile
import time
backupFrom="/data/redis-file"
backupTo="/data/redis-backup"
redisFileSuffix=(".rdb", ".aof")
sourceRedisFile={}
sourceRedisFilePath={}
targetBackupFolder={}
# ,
#0:don't create folder
#1:create folder every hour
#2:create folder every day
folderCut = 2
def now_time():
return time.strftime("%Y%m%d%H%M", time.localtime(time.time()))
def mkdir(dirpath):
if(os.path.exists(dirpath)):
return
os.mkdir(dirpath)
def cutFolder(type):
if type == 0:
return
elif type == 1:
return time.strftime("%Y%m%d", time.localtime(time.time()))
elif type == 2:
return time.strftime("%Y%m%d%H", time.localtime(time.time()))
#
def compressFile(localPath, targetPath, filename):
localfullPath = os.path.join(localPath, filename)
targetfullPath = os.path.join(targetPath, filename + now_time() + ".tar.gz")
tar = tarfile.open(targetfullPath, "w:gz")
tar.add(localfullPath)
tar.close()
print ("compress file: %s ====> %s" % (localfullPath, targetfullPath))
def genRedisBackupFolder():
mkdir(backupTo)
for i in range(0, len(sourceRedisFile)):
targetName = sourceRedisFile[i].split(".")[0]
mkdir(os.path.join(backupTo, targetName))
targetFolder = os.path.join(os.path.join(backupTo, targetName), cutFolder(folderCut))
mkdir(targetFolder)
targetBackupFolder[i] = targetFolder
#
def findRedisFile():
index = 0
for parent, dirnames, filenames in os.walk(backupFrom):
for filename in filenames:
for suffix in redisFileSuffix:
if suffix in filename:
sourceRedisFile[index] = filename
sourceRedisFilePath[index] = parent
index = index + 1
# redis
def compressRedisFiles():
if not (len(sourceRedisFilePath) == len(targetBackupFolder) and
len(targetBackupFolder) == len(sourceRedisFile)):
print "error occured in function compressRedisFiles()!"
for i in range(0, len(sourceRedisFile)):
compressFile(sourceRedisFilePath[i], targetBackupFolder[i], sourceRedisFile[i])
if __name__ == "__main__":
print "================================begin backup redis file=================================="
findRedisFile()
genRedisBackupFolder()
compressRedisFiles()
print "=======================================finished=========================================="
このスクリプトを実行すると、バックアップ・ファイルがバックアップ・ディレクトリ(/data/redis-backup)にパッケージされていることがわかります.異なるサービスには独立したディレクトリがあります.
[root@server1 redis-backup]# python redis_backup.py
================================begin backup redis file==================================
compress file: /data/redis-file/redis_test4/redis_test4.rdb ====> /data/redis-backup/redis_test4/2016071106/redis_test4.rdb201607110646.tar.gz
compress file: /data/redis-file/redis_test1/redis_test1.rdb ====> /data/redis-backup/redis_test1/2016071106/redis_test1.rdb201607110646.tar.gz
compress file: /data/redis-file/redis_test3/redis_test3.rdb ====> /data/redis-backup/redis_test3/2016071106/redis_test3.rdb201607110646.tar.gz
compress file: /data/redis-file/redis_test2/redis_test2.rdb ====> /data/redis-backup/redis_test2/2016071106/redis_test2.rdb201607110646.tar.gz
=======================================finished==========================================
バックアップを自動化するには、バックアップスクリプトの実行コマンドをcrontabに書き込み、タイミング実行の目的を達成する必要があります.
# 1 31
[root@server1 redis-backup]# crontab -l
01,31 * * * * python /data/redis-backup/redis_backup.py
バックアップを継続する場合は、ディスクの容量も考慮する必要があります.これはzabbixサービスで監視し、ディスクの容量が一定パーセントに達したときに手動で削除することができます.これはlowを比較する方法で、スクリプトが自分で問題を発見できるようにするのが最善の方法です.そのため、別のスクリプトを作成してredisのバックアップファイルを定期的に削除する必要があります.最新のバックアップ情報のみを保持します.このスクリプトは、自分で書くことを望んでいます.