搞毛都沒有中文文獻跟設定檔解說
林盃自己土砲
有任何理解錯誤歡迎留言指正我感恩!
參考聯結:官方文件
- 支援標準memcached協定,程式不須改變寫法
- 多對一,降低連結數
- 多種hash演算法
- 依照字元分散資料
可複製資料到不同的pool,消除讀取無法負擔的錯誤
- 測試全新的硬體時,可以將少量資料shadow過去
- 即時讀取設定檔
- 多種路由方式配置
- 自動偵測目的狀態,自動調整配置
- 暖機模式
- 多重指派,可以把同一份資料複製到另外一組叢集
- 可靠的刪除模式
- 叢集支援:設定只要一份
- 豐富的debug指令
- 可靠的服務,所有memcached能用的指令都能夠使用
- 可接受memcached所不能接受的資料長度
開始玩
./mcrouter -p 5000 -f config
-p 指定port
-f 指定設定檔
簡單的設定
一個Pool,兩台機器,分散式存取資料
{
"pools":{
"MyPool":{
"servers":[
"127.0.0.1:11211",
"192.168.25.128:11211"
]
}
},
"route":"PoolRoute|MyPool"
}
AllFastestRoute
兩個pool,AllFastestRoute (存時都一起存,但取時取最快的,慢回的丟掉)
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"AllFastestRoute",
"children":["PoolRoute|MyPool","PoolRoute|YourPool"]
}
}
AllInitialRoute
AlllinitialRoute( 從children的第一台存取,就算其他資料先回,也只用第一台的。除非資料錯誤)
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"AllInitialRoute",
"children":["PoolRoute|MyPool","PoolRoute|YourPool"]
}
}
AllMajorityRoute
AllMajorityRoute ( 送出同樣的要求給全部的目標,全部收到以後進行比對,將最常出現的送回給使用者 )
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"AllMajorityRoute",
"children":["PoolRoute|MyPool","PoolRoute|YourPool"]
}
}
AllSyncRoute
AllSyncRoute ( 送出要求給全部的children,收集回應直,然後把最差的結果回給mcrouter ,例如空值or error)
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"AllMajorityRoute",
"children":["PoolRoute|MyPool","PoolRoute|YourPool"]
}
}
NullRoute
不管怎樣都回應空值
DevNullRoute
會回應狀態的不管怎樣都回應空值
FailoverRoute
FailoverRoute ( 使用第一組children,如果失敗,就使用第二組children,如果都失敗,就回應失敗 ) 如果是key找不到,不算error,則使用 MissFailoverRoute
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"FailoverRoute",
"children":["PoolRoute|MyPool","PoolRoute|YourPool"]
}
}
FailoverWithExptimeRoute
與FailoverRoute雷同,不過擁有更細部的設定
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"FailoverWithExptimeRoute",
"normal":"PoolRoute|MyPool",
"failover":"PoolRoute|YourPool",
}
}
上面設定預設使用MyPool,失敗則使用YourPool
還有更細部的可選設定
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"FailoverWithExptimeRoute",
"normal":"PoolRoute|MyPool",
"failover":"PoolRoute|YourPool",
"failover_exptime":60,
"settings":{
"tko":{
"gets":true,
"updates":true,
"deletes":true
},
"connectTimeout":{
"gets":true,
"updates":true,
"deletes":true
},
"dataTimeout":{
"gets":true,
"updates":true,
"deletes":true
}
}
}
}
可選
failover_exptime:代表超時多久TTL,預設是60
settings:裡面可以更細部設定各個要不要塞到failover裡面,如果是false就直接回error
tko很蠢,自己看 XDDDD 連結
大概是說他會紀錄失敗次數,然後判定他是死的。tko就是 技術擊倒 "technical knockout"
HashRoute
雜湊演算法,哈希值? XD? (利用各種演算法去分配值)
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"HashRoute",
"children":["PoolRoute|MyPool","PoolRoute|YourPool"]
}
}
預設的演算法是 ch3
當然也可以自己指定
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"HashRoute",
"children":["PoolRoute|MyPool","PoolRoute|YourPool"],
"salt":"GOD",
"hash_func":"Crc32",
"weights":0.5
}
}
可選
salt:在進行hash前的字串,加點鹽巴
hash_func:hash演算法
weights:權重,只在Crc32有用
HostIdRoute
依照Client Host ID 分配
{
"pools":{
"MyPool":{
"servers":["127.0.0.1:11211"]
},
"YourPool":{
"servers":["192.168.25.128:11211"]
}
},
"route":{
"type":"HostIdRoute",
"children":["PoolRoute|MyPool","PoolRoute|YourPool"]
}
}
我自己就被分配到YourPool
留言
張貼留言