在etcd v3中並沒有臨時節點的概念,但是支持lease租約機制。
什麼叫lease?其實就是etcd支持申請定時器,比如:可以申請一個TTL=10秒的lease(租約),會返回給你一個lease ID標識定時器。你可以在set一個key的同時攜帶lease ID,那麼就實現了一個自動過期的key。
在etcd中,一個lease可以關聯給任意多的Key,當lease過期後所有關聯的key都將被自動刪除。
通過命令行介紹:
申請租約:從申請開始計算時間
etcdctl lease grant 40
lease 4e5e5b853f528859 granted with TTL(40s)
授權租約:節點的生命伴隨著租約到期將會被DELETE
etcdctl put --lease=4e5e5b853f528859 /test/ok/first xx
OK
撤銷租約:撤銷租約和租約到期一樣,節點都會被刪除
etcdctl lease revoke 4e5e5b853f5286cc
lease 4e5e5b853f5286cc revoked
租約續約:每當到期將會續約
etcdctl lease keep-alive 4e5e5b853f52892b
lease 4e5e5b853f52892b keepalived with TTL(40)
主要方法:
type Lease interface {
// Grant creates a new lease.
Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, error)
// Revoke revokes the given lease.
Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error)
// TimeToLive retrieves the lease information of the given lease ID.
TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error)
// KeepAlive keeps the given lease alive forever.
KeepAlive(ctx context.Context, id LeaseID) (
// KeepAliveOnce renews the lease once.
KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error)
// Close releases all resources Lease keeps for efficient communication with the etcd server.
Close() error
}
更多內容請關注每日編程,每天進步一點。
閱讀更多 每日編程 的文章