如何用etcdctl产生分布式环境中的递增ID

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


用golang代码当然很简单,我这里是在shell环境中,使用etcdctl命令行来产生分布式环境中递增ID的生成。

1.先写出一个产生递增ID的bash文件:

# get_id.sh
function main(){
    local v_str=$(etcdctl --cacert=./CACert.txt --cert=./Cert.txt --key=./key.txt --endpoints=11.135.xxx.xxx:2379 --debug=false get /victoria-metrics/vm-agent-count --print-value-only)
        if [ -z "${v_str}" ]; then
            etcdctl --cacert=./CACert.txt --cert=./Cert.txt --key=./key.txt --endpoints=11.135.xxx.xxx:2379 --debug=false put /victoria-metrics/vm-agent-count 0
            return 0
        fi
        let v_index=v_str+1
        etcdctl --cacert=./CACert.txt --cert=./Cert.txt --key=./key.txt --endpoints=11.135.xxx.xxx:2379 --debug=false put /victoria-metrics/vm-agent-count "$v_index"
        return $v_index
}

main
echo "index=$?"

bash -x get_id.sh
执行这个文件,可以看见每次都有递增的ID

2.通过lock命令来加锁执行

etcdctl --cacert=./CACert.txt --cert=./Cert.txt --key=./key.txt --endpoints=11.135.xxx.xxx:2379 --debug=false \
    lock /victoria-metrics/vm-agent-count-lock --ttl=10 bash get_agent_id.sh

have fun 😃

posted on 2022-06-22 21:02  ahfuzhang  阅读(48)  评论(0编辑  收藏  举报