[redis] 提取 cluster 集群 node 角色 - 迁
通过 redis 的 cluster nodes 命令解析出当前的主从状态
redis-cli -c -p 7000 cluster nodes
运行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: richard
# @Date: 2017-08-17 16:40:03
# @Last Modified by: richard
# @Last Modified time: 2017-11-14 12:11:06
import commands
import os
DEBUG=""
CMD=" -c -p 7000 cluster nodes"
def get_redis_cli_cmd():
ret = commands.getstatusoutput("which redis-cli")
if ret[0] == 0:
return ret[1]+CMD
else:
return False
def merge(master,slave):
for each_m in master:
print "Master: {ip_port},{state},{slot},{id}".format(**each_m)
for each_s in slave:
if each_s['master_id'] == each_m['id']:
print "\tSlave: {ip_port},{state},{id}".format(**each_s)
def parse_content(content):
master_list,slave_list,fail_list=[],[],[]
for each in content:
# print each
if each.find("master") > -1 and each.find("fail") < 0 :
master={}
try:
split_value = each.split()
master['id'] = split_value[0]
master['ip_port'] = split_value[1]
master['state'] = split_value[-2]
master['slot'] = split_value[-1]
except IndexError,e:
print e
else:
master_list.append(master)
if each.find("slave") > -1 and each.find("fail") < 0:
slave={}
try:
split_value = each.split()
slave['id'] = split_value[0]
slave['ip_port'] = split_value[1]
slave['master_id'] = split_value[3]
slave['state'] = split_value[-1]
except IndexError,e:
print e
else:
slave_list.append(slave)
if each.find("fail") > -1:
print "Fail",each
merge(master_list,slave_list)
if __name__ == '__main__':
if DEBUG:
f = open('/tmp/1','r')
GET_INFO=f.readlines()
parse_content(GET_INFO)
else:
redis_cli = get_redis_cli_cmd()
if redis_cli:
cmd = commands.getstatusoutput(redis_cli)
if cmd[0] == 0:
GET_INFO=cmd[1].split('\n')
parse_content(GET_INFO)
else:
print("run error")
else:
print("can't get redis-cli")

浙公网安备 33010602011771号