def chk_redis_env(redis_port): err_flg = [0] with settings(warn_only=True): for each_port in redis_port: """check redis file""" redis_file = {} redis_file['rdb_file'] = "%s/redis-%d-dump.rdb" %\ (gvar.REDIS_DATA_DIR, each_port) redis_file['redis_pid_file'] = "%s/%d.pid" %\ (gvar.REDIS_TMP_DIR, each_port) redis_file['redis_log_file'] = "%s/redis-%d.log" %\ (gvar.REDIS_LOG_DIR, each_port) for filetype, filepath in redis_file.items(): redis_file_chk = '[ ! -f %s ]' % filepath log_str = '[%s] %d %s `%s` check' %\ (env.host, each_port, filetype, filepath) sudo_and_chk(redis_file_chk, log_str, err_flg, get_code_info()) port_chk = "[ `ss -lnt|awk '{print $4}'| grep %d|wc -l` -eq 0 ]" % each_port log_str = '[%s] Check port %d whether free' %\ (env.host, each_port) sudo_and_chk(port_chk, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 else: return 1
def chk_zk_node(zk_servers, product_name): try_times = 0 """Check zookeeper whether exist.""" try: f_name, f_lineno = get_code_info() f_lineno += 3 zk = KazooClient(zk_servers) zk.start() except Exception as e: f_name, f_lineno = get_code_info() f_lineno -= 2 gvar.LOGGER.error("%s:[line:%d] Failed to connect Zookeeper." % (f_name, f_lineno)) return 0 """Check node whether exist.""" node_path = '/codis3/%s' % product_name f_name, f_lineno = get_code_info() f_lineno += 2 exists = zk.exists(node_path) zk.stop() if exists: gvar.LOGGER.error( "%s:[line:%d] Zookeeper node_path `%s` already exists!" % (f_name, f_lineno, node_path)) return 0 else: gvar.LOGGER.info("%s:[line:%d] Zookeeper node_path `%s` not exists!" % (f_name, f_lineno, node_path)) return 1
def deploy_redis(redis_port, redis_cfg): err_flg = [0] with settings(warn_only=True): mkdir_cmd = "mkdir -p %s/{log,etc,pid,data}" % gvar.REDIS_DIR log_str = '[%s] Make redis dir' % env.host sudo_and_chk(mkdir_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 cfg_name = gvar.REDIS_CFG_NAME % (redis_port) cfg_path = '%s/%s' % (gvar.REDIS_CONF_DIR, cfg_name) create_cfg_cmd = '''cat << EOF > %s %s EOF''' % (cfg_path, redis_cfg) log_str = '[%s] Create redis cfg `%s`' % (env.host, cfg_path) sudo_and_chk(create_cfg_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chown_cmd = "chown -R web.web %s/{log,etc,pid,data}" % gvar.REDIS_DIR log_str = '[%s] Chown redis dir' % env.host sudo_and_chk(chown_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def deploy_fe_supervise(fe_port, zk_servers): err_flg = [0] with settings(warn_only=True): fe_supervise_path = '%s/codis_fe' % gvar.SUPERVISE_DIR mkdir_cmd = 'mkdir -p %s' % fe_supervise_path log_str = '%s] Mkdir `%s`' % (env.host, fe_supervise_path) sudo_and_chk(mkdir_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 fe_supervise = scripts.fe_supervise.format(zk_servers=zk_servers, fe_port=fe_port) run_script_path = '%s/run' % fe_supervise_path create_run_script = '''cat << EOF > %s %s EOF''' % (run_script_path, fe_supervise) log_str = '[%s] Create fe supervise run script' % env.host sudo_and_chk(create_run_script, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chown_cmd = 'chown -R web.web %s' % fe_supervise_path log_str = '[%s] Chown fesupervise' % env.host sudo_and_chk(chown_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chmod_cmd = 'chmod +x %s' % run_script_path log_str = '[%s] Chmod fe supervise run script `%s`' %\ (env.host, run_script_path) sudo_and_chk(chmod_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def startup_proxy(port_list, seq=0): """ port_list: syntax: [(proxy_port, admin_port), ...] example: [(19000, 21000), (19100, 21100)] seq: action: The start suffix of Supervise dir. """ err_flg = [0] with settings(warn_only=True): num = len(port_list) for idx, suffix in enumerate(range(seq, seq + num)): proxy_name = gvar.PROXY_NAME.format(suffix=suffix) proxy_supervise_path = '%s/%s' % (gvar.SUPERVISE_DIR, proxy_name) startup_cmd = 'su - web -c \"%s %s &\"' % (gvar.SUPERVISE_CMD, proxy_supervise_path) log_str = '[%s] Startup proxy' % env.host sudo_and_chk(startup_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 proxy_url = '%s:%s/proxy' % (env.host, port_list[idx][1]) chk_proxy_status_cmd =\ 'curl -s -w %%{http_code} -o /dev/null %s' % proxy_url log_str = '[%s] Try get proxy status' % env.host sudo_and_rechk(chk_proxy_status_cmd, log_str, err_flg, get_code_info(), 1, '200') if err_flg[0]: return 0 return 1
def setup_redis_replication(dashboard_port): err_flg = [0] with settings(warn_only=True): dashboard_addr = '%s:%d' % (env.host, dashboard_port) dashboard_url = "http://%s/topom" % dashboard_addr chk_dashboard_status_cmd = 'curl -s -w %%{http_code} -o /dev/null %s' % dashboard_url log_str = '[%s] Try get dashboard status' % env.host sudo_and_rechk(chk_dashboard_status_cmd, log_str, err_flg, get_code_info(), 1, '200') if err_flg[0]: return 0 response = requests.get(dashboard_url) data = response.text datas = json.loads(data) models = datas['stats']['group']['models'] for model in models: servers = model['servers'] for i, server in enumerate(servers): if i == 0: master_ip = server['server'].split(":")[0] master_port = server['server'].split(":")[1] else: slave_ip = server['server'].split(":")[0] slave_port = int(server['server'].split(":")[1]) r = redis.Redis(host=slave_ip, port=slave_port) # 最多尝试三次,一次成功退出 success_flg = 0 for j in range(3): try: f_name, f_lineno = get_code_info() f_lineno += 2 ret = r.slaveof(master_ip, master_port) if ret: success_flg = 1 log_str = "%s:[line:%d] [%s] Redis %s Slaveof execute succeed." % \ (f_name, f_lineno, slave_ip, slave_port) gvar.LOGGER.info(log_str) break except Exception as e: f_name, f_lineno = get_code_info() f_lineno -= 9 gvar.LOGGER.warning("%s:[line:%d] [%s] %s" % \ (f_name, f_lineno, slave_server, e)) if success_flg: break # else: # gvar.LOGGER.error("%s:[line:%d] [%s] %s" % # (f_name, f_lineno, env.host, e)) if not success_flg: gvar.LOGGER.warning("%s:[line:%d] [%s:%d] Slaveof execute failed." % \ (f_name, f_lineno, slave_ip, slave_port)) return 0 return 1
def deploy_sync(port_pair, product_name, dashboard_addr, sync_local_zk_servers, sync_remote_zk_servers): err_flg = [0] with settings(warn_only=True): sync_cfg = Template(scripts.sync_cfg).render(\ sync_local_zk_servers=sync_local_zk_servers, sync_remote_zk_servers=sync_remote_zk_servers, product_name=product_name) config_path = "%s/sync/%s" % (gvar.CODIS_CONF_DIR, gvar.SYNC_CFG_NAME) create_cfg_cmd = '''cat << EOF > %s %s EOF''' % (config_path, sync_cfg) log_str = '[%s] Create sync cfg `%s`' % (env.host, config_path) sudo_and_chk(create_cfg_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 sync_supervise_path = '%s/%s' % (gvar.SUPERVISE_DIR, gvar.SYNC_NAME) sync_supervise = scripts.sync_supervise.format( product_name=product_name, dashboard_addr=dashboard_addr, host=env.host, proxy_port=port_pair[0], admin_port=port_pair[1]) run_script_path = '%s/run' % sync_supervise_path mkdir_cmd = 'mkdir -p %s' % sync_supervise_path log_str = '[%s] Mkdir `%s`' % (env.host, sync_supervise_path) sudo_and_chk(mkdir_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 create_run_script = '''cat << EOF > %s %s EOF''' % (run_script_path, sync_supervise) log_str = '[%s] Create sync supervise run script' % env.host sudo_and_chk(create_run_script, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chown_cmd = 'chown -R web.web %s' % sync_supervise_path log_str = '[%s] Chown sync supervise' % env.host sudo_and_chk(chown_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chmod_cmd = 'chmod +x %s' % run_script_path log_str = '[%s] Chmod sync supervise run script `%s`' %\ (env.host, run_script_path) sudo_and_chk(chmod_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def create_user(): err_flg = [0] with settings(warn_only=True): chk_cmd = 'egrep "^web:" /etc/passwd' log_str = '[%s] Check user whether exists' % env.host ret = sudo_and_chk(chk_cmd, log_str, [0], get_code_info(), info_only=1) if not ret: create_cmd = 'useradd web' log_str = '[%s] Add user web' % env.host sudo_and_chk(create_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def deploy_dashboard(zk_servers, dashboard_port, product_name): err_flg = [0] with settings(warn_only=True): config_path = "%s/dashboard/%s" % (gvar.CODIS_CONF_DIR, gvar.DASHBOARD_CFG_NAME) dashboard_cfg = scripts.dashboard_cfg % (zk_servers, product_name, env.host, dashboard_port) create_cfg_cmd = '''cat << EOF > %s %s EOF''' % (config_path, dashboard_cfg) log_str = '[%s] Create dashbaord cfg `%s`' % (env.host, config_path) sudo_and_chk(create_cfg_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 dashboard_supervise_path = '%s/%s' % (gvar.SUPERVISE_DIR, gvar.DASHBOARD_NAME) mkdir_cmd = 'mkdir -p %s' % dashboard_supervise_path log_str = '[%s] Mkdir `%s`' % (env.host, dashboard_supervise_path) sudo_and_chk(mkdir_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 dashboard_supervise = scripts.dashboard_supervise.format( product_name=product_name) run_script_path = '%s/run' % dashboard_supervise_path create_run_script = '''cat << EOF > %s %s EOF''' % (run_script_path, dashboard_supervise) log_str = '[%s] Create dashboard supervise run script' % env.host sudo_and_chk(create_run_script, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chown_cmd = 'chown -R web.web %s' % dashboard_supervise_path log_str = '[%s] Chown dashboard supervise' % env.host sudo_and_chk(chown_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chmod_cmd = 'chmod +x %s' % run_script_path log_str = '[%s] Chmod dashboard supervise run script `%s`' %\ (env.host, run_script_path) sudo_and_chk(chmod_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def add_servers(redis_port, dashboard_port, host_list, start_group=1, interval=0): err_flg = [0] with settings(warn_only=True): codis_admin_cmd = '%s/codis-admin' % gvar.CODIS_BIN_DIR dashboard_addr = '%s:%d' % (env.host, dashboard_port) group_num = start_group for host_group in host_list: for port in redis_port: for host in host_group: server_addr = '%s:%d' % (host, port) add_server_cmd =\ '%s --dashboard=%s --group-add --gid=%d --addr=%s' %\ (codis_admin_cmd, dashboard_addr, group_num, server_addr) log_str = '[%s] Dashboard add server `%s`' % (env.host, server_addr) sudo_and_chk(add_server_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 group_num += 1 time.sleep(interval) if err_flg[0]: return 0 return 1
def startup_sentinel(sentinel_port): err_flg = [0] for i in range(3): start_cmd = 'su - web -c "%s/codis-server %s/sentinel-%d.conf --sentinel"' % \ (gvar.CODIS_BIN_DIR, gvar.REDIS_CONF_DIR, sentinel_port) log_str = '[%s] Sentinel %d startup command execute' % \ (env.host, sentinel_port) sudo_and_chk(start_cmd, log_str, err_flg, get_code_info()) time.sleep(2) if err_flg[0]: return 0 r = redis.Redis(host=env.host, port=sentinel_port) success_flg = 0 for j in range(3): try: f_name, f_lineno = get_code_info() f_lineno += 2 ret = r.ping() if ret: success_flg = 1 log_str = "%s:[line:%d] [%s] Sentinel `%d` startup succeed." % \ (f_name, f_lineno, env.host, sentinel_port) gvar.LOGGER.info(log_str) # written by liyouwei break # written by liyouwei except Exception as e: f_name, f_lineno = get_code_info() f_lineno -= 9 gvar.LOGGER.warning("%s:[line:%d] [%s] %s" % (f_name, f_lineno, env.host, e)) if success_flg: break # else: # gvar.LOGGER.error("%s:[line:%d] [%s] %s" % # (f_name, f_lineno, env.host, e)) if not success_flg: gvar.LOGGER.warning( "%s:[line:%d] [%s:%d] Sentinel try startup failed %d." % (f_name, f_lineno, env.host, sentinel_port, i)) return 0 return 1
def startup_redis(redis_port): err_flg = [0] for port in redis_port: for i in range(3): start_cmd = 'su - web -c "numactl --interleave=all %s/codis-server %s/%d.conf"' %\ (gvar.CODIS_BIN_DIR, gvar.REDIS_CONF_DIR, port) log_str = '[%s] Redis %d startup startup command execute' %\ (env.host, port) sudo_and_chk(start_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 r = redis.Redis(host=env.host, port=port, db=0) time.sleep(1) success_flg = 0 for j in range(3): try: f_name, f_lineno = get_code_info() f_lineno += 2 ret = r.ping() if ret: success_flg = 1 log_str = "%s:[line:%d] [%s] Redis `%d` startup succeed." %\ (f_name, f_lineno, env.host, port) gvar.LOGGER.info(log_str) break except Exception as e: f_name, f_lineno = get_code_info() f_lineno -= 9 gvar.LOGGER.warning("%s:[line:%d] [%s] %s" % (f_name, f_lineno, env.host, e)) if j < 2: time.sleep(2) if success_flg: break if not success_flg: gvar.LOGGER.warning("%s:[line:%d] [%s:%d] Redis startup failed." % (f_name, f_lineno, env.host, port)) return 0 return 1
def chk_dashboard(product_name, dashboard_port): err_flg = [0] with settings(warn_only=True): dashboard_supervise_path = '%s/%s' % (gvar.SUPERVISE_DIR, gvar.DASHBOARD_NAME) dashboard_supervise_chk = '[ ! -d %s ]' % dashboard_supervise_path log_str = '[%s] Dashboard supervise `%s` check' %\ (env.host, dashboard_supervise_path) sudo_and_chk(dashboard_supervise_chk, log_str, err_flg, get_code_info()) chk_supervise_process_cmd = 'ps -ef |grep "%s" |grep -v grep| wc -l' %\ dashboard_supervise_path log_str = '[%s] Check dashboard supervise process `%s`' %\ (env.host, chk_supervise_process_cmd) sudo_and_chk(chk_supervise_process_cmd, log_str, err_flg, get_code_info(), 1, '0') dashboard_log_file = '%s/%s' % (gvar.CODIS_LOG_DIR, gvar.DASHBOARD_NAME) chk_dashboard_log_file = 'ls %s*' % dashboard_log_file log_str = '[%s] Dashboard log file `%s`' % (env.host, chk_dashboard_log_file) ret = sudo_and_chk(chk_dashboard_log_file, log_str, [0], get_code_info(), info_only=1) if ret: f_name, f_lineno = get_code_info() f_lineno -= 4 gvar.LOGGER.error("[%s] %s:[line:%d] Dashboard have log error!" % (env.host, f_name, f_lineno)) err_flg[0] = 1 dashboard_pid_file = '%s/%s.pid' % (gvar.CODIS_TMP_DIR, gvar.DASHBOARD_NAME) chk_dashboard_pid = '[ ! -f %s ]' % dashboard_pid_file log_str = '[%s] Check dasboard pidfile `%s`' % (env.host, dashboard_pid_file) sudo_and_chk(chk_dashboard_pid, log_str, err_flg, get_code_info()) chk_dashboard_process_cmd =\ 'ps -ef |grep "%s.toml" |grep -v grep| wc -l' %\ gvar.DASHBOARD_NAME log_str = '[%s] Check dasboard process `%s`' %\ (env.host, chk_dashboard_process_cmd) sudo_and_chk(chk_dashboard_process_cmd, log_str, err_flg, get_code_info(), 1, '0') port_chk = "[ `ss -lnt|awk '{print $4}'| grep %d|wc -l` -eq 0 ]" % dashboard_port log_str = '[%s] Check dashboard port %d whether free' %\ (env.host, dashboard_port) sudo_and_chk(port_chk, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 else: return 1
def chk_redis_dir(): with settings(warn_only=True): chk_dir = '[ ! -f /data/server/redis ] && [ ! -d /data/server/redis ]' log_str = '[%s] Check /data/server/redis' % env.host ret = sudo_and_chk(chk_dir, log_str, [0], get_code_info(), info_only=1) if ret: return 1 else: return 0
def startup_redis(redis_port): err_flg = [0] for i in range(3): start_cmd = 'su - web -c "%s/redis-server %s/redis-%d.conf"' %\ (gvar.REDIS_BIN_DIR, gvar.REDIS_CONF_DIR, redis_port) log_str = '[%s] Redis startup startup command execute' % env.host sudo_and_chk(start_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 r = redis.Redis(host=env.host, port=redis_port, db=0) time.sleep(5) success_flg = 0 for j in range(3): try: f_name, f_lineno = get_code_info() f_lineno += 2 ret = r.ping() if ret: success_flg = 1 log_str = "%s:[%d] Redis %s startup succeed." %\ (f_name, f_lineno, env.host) gvar.LOGGER.info(log_str) break except Exception as e: f_name, f_lineno = get_code_info() f_lineno -= 9 gvar.LOGGER.warning("%s[line:%d] [%s] %s" % (f_name, f_lineno, env.host, e)) if j < 2: time.sleep(2) if success_flg: break else: gvar.LOGGER.error("%s[line:%d] [%s] %s" % (f_name, f_lineno, env.host, e)) return 0 return 1
def deploy_sentinel(sentinel_port): err_flg = [0] with settings(warn_only=True): cfg = Template(scripts.sentinel_cfg).render(port=sentinel_port) cfg_path = '%s/sentinel-%s.conf' % (gvar.SENTINEL_CONF_DIR, sentinel_port) create_cfg_cmd = '''cat << EOF > %s %s EOF''' % (cfg_path, cfg) log_str = '[%s] Create sentinel cfg `%s`' % (env.host, cfg_path) sudo_and_chk(create_cfg_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chown_cmd = 'chown -R web.web %s' % gvar.SENTINEL_CONF_DIR log_str = '[%s] Chown sentinel conf' % env.host sudo_and_chk(chown_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def get_redis_ver(): err_flg = [0] ver_ret = [0] with settings(warn_only=True): get_ver = "%s/redis-server --version" % gvar.REDIS_BIN_DIR log_str = '[%s] Get version' % env.host sudo_and_chk(get_ver, log_str, err_flg, get_code_info(), get_ret=ver_ret, info_only=1) if err_flg[0]: return None else: return ver_ret[0].split()[2].split('=')[1]
def startup_dashboard(dashboard_port): err_flg = [0] with settings(warn_only=True): dashboard_supervise_path = '%s/%s' % (gvar.SUPERVISE_DIR, gvar.DASHBOARD_NAME) startup_cmd = 'su - web -c \"%s %s &\"' % (gvar.SUPERVISE_CMD, dashboard_supervise_path) log_str = '[%s] Startup dashboard' % env.host sudo_and_chk(startup_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 dashboard_url = '%s:%s/topom' % (env.host, dashboard_port) chk_dashboard_status_cmd =\ 'curl -s -w %%{http_code} -o /dev/null %s' % dashboard_url log_str = '[%s] Try get dashboard status' % env.host sudo_and_rechk(chk_dashboard_status_cmd, log_str, err_flg, get_code_info(), 1, '200') if err_flg[0]: return 0 return 1
def deploy_redis(redis_port, max_mem_size): err_flg = [0] with settings(warn_only=True): for port in redis_port: cfg = Template(scripts.redis_cfg).render(port=port, max_mem_size=max_mem_size) cfg_path = '%s/%s.conf' % (gvar.REDIS_CONF_DIR, port) create_cfg_cmd = '''cat << EOF > %s %s EOF''' % (cfg_path, cfg) log_str = '[%s] Create redis cfg `%s`' % (env.host, cfg_path) sudo_and_chk(create_cfg_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chown_cmd = 'chown -R web.web %s' % gvar.REDIS_CONF_DIR log_str = '[%s] Chown redis conf' % env.host sudo_and_chk(chown_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def startup_fe(fe_port): err_flg = [0] with settings(warn_only=True): fe_supervise_path = '%s/codis_fe' % gvar.SUPERVISE_DIR startup_cmd = 'su - web -c \"%s %s &\"' % (gvar.SUPERVISE_CMD, fe_supervise_path) log_str = '[%s] Startup fe' % env.host sudo_and_chk(startup_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 fe_url = '%s:%s' % (env.host, fe_port) chk_fe_status_cmd =\ 'curl -s -w %%{http_code} -o /dev/null %s' % fe_url log_str = '[%s] Try get fe status' % env.host sudo_and_rechk(chk_fe_status_cmd, log_str, err_flg, get_code_info(), 1, '200') if err_flg[0]: return 0 return 1
def install_redis_pkg(redis_urls, redis_pkg_name, redis_unpack_dir): err_flg = [0] with settings(warn_only=True): wget_cmd = 'cd /data/server;wget %s' % redis_urls log_str = '[%s] Wget redis package' % env.host sudo_and_chk(wget_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 unpack_cmd = 'cd /data/server;tar xf %s;mv %s redis' %\ (redis_pkg_name, redis_unpack_dir) log_str = '[%s] Unpack redis package' % env.host sudo_and_chk(unpack_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 compile_cmd = 'cd %s;make' % gvar.REDIS_SRC_DIR log_str = '[%s] Redis compile' % env.host sudo_and_chk(compile_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 move_comand_file = 'mkdir -p %s;mv %s/{%s} %s' %\ (gvar.REDIS_BIN_DIR, gvar.REDIS_SRC_DIR, gvar.REDIS_CMD, gvar.REDIS_BIN_DIR) log_str = '[%s] Move redis comand file' % env.host sudo_and_chk(move_comand_file, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chown_cmd = 'chown -R web.web %s' % gvar.REDIS_DIR log_str = '[%s] Chown `%s`' % (env.host, gvar.REDIS_DIR) sudo_and_chk(chown_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def slaveof(slave_host, slave_port, master_host, master_port): r = redis.Redis(host=slave_host, port=slave_port, db=0) r.slaveof(master_host, master_port) role = r.info()['role'] f_name, f_lineno = get_code_info() f_lineno -= 2 if role == 'slave': gvar.LOGGER.info("%s[line:%d] Slaveof execute succed." % (f_name, f_lineno)) return 1 else: gvar.LOGGER.error("%s[line:%d] Slaveof execute failed." % (f_name, f_lineno)) return 0
def resync_sentinel(dashboard_port): err_flg = [0] with settings(warn_only=True): codis_admin_cmd = '%s/codis-admin' % gvar.CODIS_BIN_DIR dashboard_addr = '%s:%d' % (env.host, dashboard_port) resync_sentinel_cmd =\ '%s --dashboard=%s --sentinel-resync' \ %(codis_admin_cmd, dashboard_addr) log_str = '[%s] Dashboard resync sentinel.' % (env.host) sudo_and_chk(resync_sentinel_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def rebalance_slots(dashboard_port): err_flg = [0] with settings(warn_only=True): codis_admin_cmd = '%s/codis-admin' % gvar.CODIS_BIN_DIR dashboard_addr = '%s:%d' % (env.host, dashboard_port) rebalance_cmd = '%s --dashboard=%s --rebalance --confirm' % ( codis_admin_cmd, dashboard_addr) log_str = '[%s] Dashboard rebalance slots' % env.host sudo_and_chk(rebalance_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def startup_sync(port_pair): err_flg = [0] with settings(warn_only=True): sync_name = gvar.SYNC_NAME sync_supervise_path = '%s/%s' % (gvar.SUPERVISE_DIR, sync_name) startup_cmd = 'su - web -c \"%s %s &\"' % (gvar.SUPERVISE_CMD, sync_supervise_path) log_str = '[%s] Startup sync' % env.host sudo_and_chk(startup_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 sync_url = '%s:%s/proxy' % (env.host, port_pair[1]) chk_sync_status_cmd =\ 'curl -s -w %%{http_code} -o /dev/null %s' % sync_url log_str = '[%s] Try get sync status' % env.host sudo_and_rechk(chk_sync_status_cmd, log_str, err_flg, get_code_info(), 1, '200') if err_flg[0]: return 0 return 1
def chk_codis3_dir(info_only): err_flg = [0] with settings(warn_only=True): codis_cmd = 'codis-admin,codis-dashboard,codis-fe,codis-proxy,\ codis-server,redis-cli' chk_cmd = 'ls %s/bin/{%s}' % (gvar.CODIS_DIR, codis_cmd) log_str = '[%s] Codis command files `%s`' % (env.host, chk_cmd) sudo_and_chk(chk_cmd, log_str, err_flg, get_code_info(), info_only=info_only) if err_flg[0]: return 0 else: return 1
def chk_redis_dir(info_only): err_flg = [0] with settings(warn_only=True): chk_cmd = 'ls %s/{redis-server,redis-cli}' % gvar.REDIS_BIN_DIR log_str = '[%s] Redis command files `%s`' % (env.host, chk_cmd) sudo_and_chk(chk_cmd, log_str, err_flg, get_code_info(), info_only=info_only) if err_flg[0]: return 0 else: return 1
def add_groups(dashboard_port, group_num, start_group=1): err_flg = [0] with settings(warn_only=True): codis_admin_cmd = '%s/codis-admin' % gvar.CODIS_BIN_DIR dashboard_addr = '%s:%d' % (env.host, dashboard_port) for gid in range(start_group, start_group + group_num): create_group_cmd = '%s --dashboard=%s --create-group --gid=%d' %\ (codis_admin_cmd, dashboard_addr, gid) log_str = '[%s] Dashboard create group %d' % (env.host, gid) sudo_and_chk(create_group_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 if err_flg[0]: return 0 return 1
def deploy_ha_scripts(master_host, slave_host, redis_port, pkg_urls): err_flg = [0] with settings(warn_only=True): scripts = ['redis_master', 'redis_backup', 'redis_fault', 'redis_stop'] for each in scripts: chk_script_cmd = '[ -f %s/%s.sh ]' % (gvar.SCRIPT_DIR, each) log_str = '[%s] Check backup scripts' % env.host ret = sudo_and_chk(chk_script_cmd, log_str, [0], get_code_info(), info_only=1) if not ret: get_script_cmd = "cd %s && wget %s" %\ (gvar.SCRIPT_DIR, pkg_urls[each]) log_str = '[%s] Get %s scripts' % (env.host, each) sudo_and_chk(get_script_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 if env.host == master_host: change_host = slave_host else: change_host = master_host redis_master_chk = 'less %s/redis_master.sh |\ egrep -w "SLAVEOF" |egrep -w "%d"' % (gvar.SCRIPT_DIR, redis_port) log_str = '[%s] Check redis_backup file whether exists entry' % env.host ret = sudo_and_chk(redis_master_chk, log_str, [0], get_code_info(), info_only=1) if not ret: add_redis_master =\ 'echo "\\\\$REDISCli -p %d SLAVEOF NO ONE >> \\\\$LOGFILE \ 2>&1" >> %s/redis_master.sh' % (redis_port, gvar.SCRIPT_DIR) log_str = '[%s] Add entry into redis_master script.' % env.host sudo_and_chk(add_redis_master, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 redis_backup_chk = 'less %s/redis_backup.sh |\ egrep -w "%s" |egrep -w "%s"' % (gvar.SCRIPT_DIR, change_host, redis_port) log_str = '[%s] Check redis_backup file whether exists entry' % env.host ret = sudo_and_chk(redis_backup_chk, log_str, [0], get_code_info(), info_only=1) if not ret: add_redis_backup = 'echo "\\\\$REDISCli -p %d SLAVEOF %s %d >> \ \\\\$LOGFILE 2>&1" >> %s/redis_backup.sh' % (redis_port, change_host, redis_port, gvar.SCRIPT_DIR) log_str = '[%s] Add entry into redis_backup script.' % env.host sudo_and_chk(add_redis_backup, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1
def install_codis3_pkg(): err_flg = [0] with settings(warn_only=True): get_ver_cmd = "rpm -q centos-release|awk -F '-' '{print $3}'" log_str = '[%s] Get OS version' % env.host ret = sudo_and_get_result(get_ver_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 if ret == "6": codis_urls = gvar.CENTOS6_URL elif ret == "7": codis_urls = gvar.CENTOS7_URL else: gvar.LOGGER.error("[%s] %s:[line:%d] OS version not in 6 or 7!" % (env.host, f_name, f_lineno)) return 0 wget_cmd = 'cd /data/install;rm -rf %s;wget %s' % ( gvar.CODIS_PKG_NAME, codis_urls) log_str = '[%s] Wget codis package' % env.host sudo_and_chk(wget_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 unpack_cmd = 'cd /data/install;tar xf %s -C /data/server' % gvar.CODIS_PKG_NAME log_str = '[%s] Unpack codis3 package' % env.host sudo_and_chk(unpack_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chown_cmd = 'chown -R web.web %s' % gvar.CODIS_DIR log_str = '[%s] Chown `%s`' % (env.host, gvar.CODIS_DIR) sudo_and_chk(chown_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 chk_crontab_cmd = 'grep "find /data/server/codis3_drc/log -mtime +3 -exec rm -rf {}" /var/spool/cron/root' log_str = '[%s] Check crontab file whether exists entry' % (env.host) ret = sudo_and_chk(chk_crontab_cmd, log_str, [ 0], get_code_info(), info_only=1) if not ret: add_crontab_cmd = 'echo "0 3 * * * find /data/server/codis3_drc/log -mtime +3 -exec rm -rf {} \;" >> /var/spool/cron/root' log_str = '[%s] Add crontab' % (env.host) sudo_and_chk(add_crontab_cmd, log_str, err_flg, get_code_info()) if err_flg[0]: return 0 return 1