gen_port_setup.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/usr/bin/python3
  2. import csv
  3. import os
  4. NODE_IPS=["192.168.0.1", "192.168.0.2", "192.168.0.3", "192.168.0.4"]
  5. NUM_CPUS=6
  6. RAFT_GROUP=3
  7. TOTAL_SLOTS=16384
  8. cluster_script = {}
  9. def bucket(seq, num):
  10. avg = len(seq) / float(num)
  11. out = []
  12. last = 0.0
  13. while last < len(seq):
  14. out.append(seq[int(last):int(last + avg)])
  15. last += avg
  16. return out
  17. try:
  18. os.mkdir("/tmp/raft")
  19. except:
  20. dir = 1
  21. for ip in NODE_IPS:
  22. try:
  23. os.mkdir(os.path.join("/tmp/raft", ip))
  24. except:
  25. dir = 1
  26. with open('/tmp/raft/slots.csv', mode='w') as slots_file:
  27. slots_writer = csv.writer(
  28. slots_file,
  29. delimiter=',',
  30. quotechar='"',
  31. quoting=csv.QUOTE_MINIMAL)
  32. p = 1
  33. slot_row = []
  34. for x in bucket(range(TOTAL_SLOTS), (len(NODE_IPS)*NUM_CPUS)/RAFT_GROUP):
  35. r = "Slots: %s-%s Port: %d" %(x[0], x[-1], 19900 +p)
  36. for i in range(0,RAFT_GROUP):
  37. ip = NODE_IPS[len(slot_row)%len(NODE_IPS)]
  38. if 19900+p in cluster_script:
  39. cluster_script[19900+p].append(ip)
  40. else:
  41. cluster_script[19900+p] = [ip]
  42. if len(slot_row) == len(NODE_IPS):
  43. slots_writer.writerow(slot_row)
  44. slot_row = []
  45. slot_row.append(r)
  46. p += 1
  47. slots_writer.writerow(slot_row)
  48. with open('/tmp/raft/setup_cluster.sh', mode='w') as outf:
  49. outf.write("#!/bin/bash -ex\n\n\n")
  50. for port in cluster_script:
  51. outf.write("\necho \"Setting up Raft Groups - port %d\"\n\n" %port)
  52. outf.write("/usr/local/bin/redis-cli -h %s -p %d raft.cluster init\n" %(cluster_script[port][0], port))
  53. for x in cluster_script[port][1:]:
  54. outf.write("/usr/local/bin/redis-cli -h %s -p %d raft.cluster join %s:%d\n" %(x, port, cluster_script[port][0], port))
  55. outf.write("\n\n\n# Sleep until raft cluster is created\necho \"Waiting for Raft to stabilize\"\nsleep 10\n\n# Linking Shards\n\n")
  56. l = list(cluster_script.keys())
  57. for p in l[1:-1]:
  58. outf.write("/usr/local/bin/redis-cli -h %s -p %d RAFT.SHARDGROUP LINK %s:%d\n" %(cluster_script[l[0]][0], l[0], cluster_script[p][0], p))