前面提到region會產生副本分散在每一個tikv store裡,今天如果架設的機器是跨區的,跨機房的,或者雲端上不同的zone,要怎麼控制副本的擴充調度就要透過以下的方式設定。
首先我們利用TiKV可以將特殊的屬性寫在server.labels裡頭,如下圖分別依據zone、dc、rack、host,設定每一台TiKV的位置,我設定每一台TiKV都儲存在分離的zone底下,zone1、zone2、以此類推。
接著要讓pd能夠知道有哪些位置層級,所以要在pd的replication.location-labels底下設定有這些位置層級標籤。
以上設定要在第一次deploy之前搞定。如果是要事後補票就要改用pd-ctl工具。pd-ctl config set location-labels zone,dc,rack,host
接下來設定pd的isolation-level。因為初始化的時候我沒有設定,所以會採預設值不作限制。
此時原本的replication.max-replicas:3,依據我的層級第一層為zone,表示三個副本會平均分配在三個zone底下。
接下來將副本數改成replication.max-replicas:5,這時候原本的zone層級無法保證可以平均分佈5台,就會往下降一層到dc,如果dc有5個可以滿足平均分配的要求,這時候就變成不能保證zone底下平均分配,但是保證在dc層級可以平均分佈5台,如果dc也無法滿足,就在依層級往下。
接下來我用工具指定isolation-level = "zone"pd-ctl config set isolation-level zone
replication.max-replicas:3的情況下,如果我把zone1的機器關了,那麼即使在剩下兩個副本的情況下,因為isolation-level設定為zone,pd也不會再分散第三個副本出來。