failover.py 1.4 KB

1234567891011121314151617181920212223242526272829303132
  1. #!/usr/bin/env python
  2. import os,sys
  3. def change_ip():
  4. id_data = {}
  5. new_data = {}
  6. for i in range(0,6):
  7. po_name = "redis-cluster-ss-%s" %i
  8. ID = os.popen("kubectl exec -ti %s -n public-service -- grep 'myself' /data/nodes.conf | awk -F':' '{print $1}' | awk '{print $1}'" %po_name).read().split('\n')[0:-1][0]
  9. new_ip = os.popen("kubectl get pods %s -n public-service -o wide | awk '{print $6}'| grep -v IP"%po_name).read().split('\n')[0:-1][0]
  10. id_data[po_name] = ID
  11. new_data[po_name] = new_ip
  12. for pod_name in id_data.keys():
  13. for pn in id_data.keys():
  14. print "%s -------------> %s"%(id_data[pn],new_data[pn])
  15. os.system("kubectl exec -ti {po_name} -n public-service -- sed -i 's#{ID} \(.*\):6379#{ID} {new_ip}:6379#g' /data/nodes.conf".format(ID=id_data[pn], new_ip=new_data[pn], po_name=pod_name))
  16. print "replacing {ip} to {new_ip} in the nodes.conf of {po_name}".format(ip=id_data[pn], new_ip=new_data[pn], po_name=pod_name)
  17. print "restart redis..."
  18. os.system("kubectl exec -ti %s -n public-service -- killall redis-server"%pod_name)
  19. if __name__ == '__main__':
  20. run_number = os.popen("kubectl get po -n public-service -o wide | grep -v READY | wc -l").read().split('\n')[0:-1][0]
  21. print "pod of running currently is %s" %run_number
  22. if run_number < 6:
  23. sys.exit("please wait for pod to start...")
  24. else:
  25. print "failover..."
  26. change_ip()