コード例 #1
0
ファイル: check_env.py プロジェクト: bopopescu/redis
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
コード例 #2
0
ファイル: check_env.py プロジェクト: bopopescu/redis
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
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
コード例 #9
0
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
コード例 #10
0
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
コード例 #11
0
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
コード例 #12
0
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
コード例 #13
0
ファイル: check_env.py プロジェクト: bopopescu/redis
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
コード例 #14
0
ファイル: check_env.py プロジェクト: bopopescu/redis
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
コード例 #15
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
コード例 #16
0
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
コード例 #17
0
ファイル: check_env.py プロジェクト: bopopescu/redis
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]
コード例 #18
0
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
コード例 #19
0
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
コード例 #20
0
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
コード例 #21
0
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
コード例 #22
0
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
コード例 #23
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
コード例 #24
0
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
コード例 #25
0
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
コード例 #26
0
ファイル: deploy_codis_env.py プロジェクト: bopopescu/redis
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
コード例 #27
0
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
コード例 #28
0
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
コード例 #29
0
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
コード例 #30
0
ファイル: deploy_codis_env.py プロジェクト: bopopescu/redis
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