如何用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 😃