
ืืขืืืขืืึธืคึผืื ื ืืืื-ืืึทืกืข ืคึผืจืึทืืืฉืขืงืก ืืื ืงืืื ืฉืคึผืจืึทื ืจืืงืืืืืขืจื ืึท ืกืคึผืขืฆืืขื ืฆืืืึทื ื ืืื ืื ื ืืฆื ืคืื ืกืคึผืขืฆืืขื ืืืฉืืจืื, ืึธืืขืจ ืืืขื ืขืก ืงืืื ืฆื ืึทืคึผืืึทืงืืืฉืึทื ื ืืื PHP, ืื ืกืืืืึทืฆืืข ืงืขื ืขื ืืืขืจื ืึทืืื ืคืึทืจืฉืืึทืจืงื ืึทื ืืืจ ืืึธืื ืฆื ืึทื ืืืืืงืืขื, ืืืฉื, . ืืื ืืขื ืืึธื ืืืจ ืืืขืื ืจืขืื ืืืขืื ืื ืืึทืงืึทื ืืข ืืืืืืืง ืืื ืืืกืืจืืืืืืื ืกืขืกืืข ืกืืึธืจืืืืฉ ืืื ืืึทืื ืงืึทืืฉืื ื ืืื ืืขืืงืึทืืฉืขื ืืื ืืื ืืืจ ืกืึทืืืื ืื ืคึผืจืึธืืืขืืก ืืื ืืืื "ืงืขืกืืงืื ื" ืคึผืจืืืขืงื.
ืืขืจ ืืขืื ืคืื ืืขืจ ืืขืืขืื ืืืื ืืื ืึท PHP ืึทืคึผืืึทืงืืืฉืึทื ืืืืืจื ืืืืฃ ืื ืกืืืคืึธื ื 2.3 ืคืจืืืืืืขืจืง, ืืืึธืก ืืื ื ืืฉื ืึทืจืืึทื ืืขืจืขืื ื ืืื ืื ืืขืฉืขืคื ืคึผืืึทื ื ืฆื ืืขืจืืืึทื ืืืงื. ืืื ืึทืืืฉืึทื ืฆื ืืึทื ืฅ ื ืึธืจืืึทื ืกืขืกืืข ืกืืึธืจืืืืฉ, ืืขื ืคึผืจืืืขืงื ืืื ืืขืืืขื ืคืื ื ืืฆื "ืงืึทืืฉืื ื ืึทืืฅ" ืคึผืึธืืืืืง ืืื memcached: ืจืขืกืคึผืึธื ืกืขืก ืฆื ืจืืงืืืขืก ืฆื ืื ืืึทืืึทืืืืก ืืื ืึทืคึผื ืกืขืจืืืขืจืก, ืคืึทืจืฉืืื ืคืืึทืืก, ืืึทืงืก ืคึฟืึทืจ ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืคืื ืงืึธื ืืืจืืคืืจืื ื ืืื ืคืื ืืขืจ. ืืื ืึทืืึท ืึท ืกืืืืึทืฆืืข, ืึท ืืจืืืงืืึทืื ืคืื ืืขืืงืึทืืฉืขื ืืืขืจื ืคืึทืืึทื ืคึฟืึทืจ ืื ืึธืคึผืขืจืึทืฆืืข ืคืื โโืื ืึทืคึผืืึทืงืืืฉืึทื. ืืื ืึทืืืฉืึทื, ืงืึทืฉ ืึธื ืืืขืจ ืคืืจื ืฆื ืขืจื ืกื ืคืืืื: ืื DBMS ืืืืื ืฆื ืคึผืืึทืฆื ืืื ืื ืกืืื, ืึทืคึผื ืืึทืืื ืื ืืก ืึธื ืืืืื ืฆื ืคืึทืจืืึธื ืจืืงืืืขืก, ืืื"ื ื. ืกืืึทืืืืืืืจื ืื ืกืืืืึทืฆืืข ืงืขื ื ืขืืขื ืืขื ืก ืคืื ืืื ืื, ืืื ืืื ืืขื ืฆืืื, ืื ืืื ืกื ืืืขื ืืืื ืฉืจืขืงืืขื ืคึผืึทืืขืืขื ืึธืืขืจ ืืึธืจ ืึทื ืึทืืืืืืึทืืึทื.
ืืืจ ืืืื ืืขืืืจืคื ืฆืืฉืืขืื ืื ืคืืืืงืืื ืฆื ืืึธืจืืืึทื ืืึทืื ืืืึธื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืงืืืื ืื, ื.ื. ืืื ืืื ืืืึทื ืขื ืืขืจืื ืืขื ืฆื ืื ืืงืืจ ืงืึธื ืืื ืคืื ืคืึทื ืืงืฉืึทื ืึทืืืื ืืคืืขืืื. ืืึทืื ืื ืงืึทืฉ ื ืื ืืืืื ืงืขืื ืฉืืขืืืง ืฆื ืคืืืืืขืจื, ืึธืืขืจ ืืืื ืคึผืจืืืืจื ืฆื ืืื ืึทืืืื ืืึทืื ืึธื ืืืขืจ ืคืื ืขืก.
ืืืึธืก ืืื ืคืึทืืฉ ืืื ืืขืืงืึทืืฉืขื ืืื?
ืืื ืึทืืืขืืืื, ืื ืืขืงืึทืืฉืขื ืคืึทืจืืขื ืืขืจืื ื ืคึฟืึทืจ PHP ืฉืืืฆื ืคืื ืื ืืขืจืืขืืืืื ืืึทืื ืืื ืกืขืกืืข ืกืืึธืจืืืืฉ ืืืืก ืคืื ืื ืงืขืกืื. ืืขืจ ืืขืงืึทื ืืืึทื ืคึฟืึทืจ ืงืึธื ืกืืกืืขื ื ืฉืืืกื ืืึทืฉืื ื ืึทืืึทืื ืืืจ ืฆื ืืืืึทื ืื ืฉืืขืื ืืึทืื ืืืืฃ ืคืืืข ืกืขืจืืืขืจืก, ืืื ืฆืืง ืึทืืจืขืกืื ื ืืขืืขืจ ืกืคึผืขืฆืืคืืฉ ืฉืืืกื ืฆื ืึท ืกืคึผืขืฆืืคืืฉ ืกืขืจืืืขืจ ืคืื ืืขืจ ืืจืืคึผืข, ืืื ืื ืืขืืืื-ืืื ืคืึทืืืึธืืืขืจ ืืืฉืืจืื ืขื ืฉืืจ ืืืื ืึทืืืืืืึทืืืืึทืื ืคืื ืื ืงืึทืืฉืื ื ืืื ืกื (ืึธืืขืจ, ืืืืืขืจ, ืงืืื ืืึทืื).
ืืื ืื ืืขื ืขื ืึท ืืืกื ืืขืกืขืจ ืืื ืกืขืกืืข ืกืืึธืจืืืืฉ: ืืืจ ืงืขื ืขื ืงืึทื ืคืืืืขืจ memcached.sess_number_of_replicas, ืืื ืึท ืจืขืืืืืึทื ืคืื ืืืึธืก ืื ืืึทืื ืืืขื ืืืื ืกืืึธืจื ืืืืฃ ืขืืืขืืข ืกืขืจืืืขืจืก ืืื ืึทืืึธื, ืืื ืืื ืื ืืขืฉืขืขื ืืฉ ืคืื ืึท ืืืจืืคืึทื ืคืื ืืืื ืืขืืงืึทืืฉืขื ืืืึทืฉืคึผืื, ืื ืืึทืื ืืืขื ืืืื ืืจืึทื ืกืคืขืจื ืคืื ืื ืืขืจืข. ืึธืืขืจ, ืืืื ืืขืจ ืกืขืจืืืขืจ ืงืืื ืฆืืจืืง ืึธื ืืืื ืึธื ืืึทืื (ืืื ืืืืฉืึทืืืึทืื ืืึทืคึผืึทื ื ื ืึธื ืึท ืจืืกืืึทืจื), ืขืืืขืืข ืคืื โโโโืื ืฉืืืกืืขื ืืืขื ืืืื ืจืืืืกืืจืืืืื ืืื ืืืื ืืืืืืข. ืืื ืคืึทืงื ืืึธืก ืืืขื ืืืื ืขื ืึธื ืืืขืจ ืคืื ืกืขืกืืข ืืึทืื, ืืื ื ืขืก ืืื ืงืืื ืืืขื ืฆื "ืืืื" ืฆื ืื ืื ืืขืจ ืจืขืคึผืืืงืข ืืื ืคืึทื ืคืื ืึท ืคืึทืจืคืืจื.
ื ืึธืจืืึทื ืืืืืืึธืืขืง ืืืฉืืจืื ืืขื ืขื ืึทืืืขื ืืขืจ ืืืืคึผื ืืึธืจืืืึธื ืืึทื ืกืงืืืืื ื: ืืื ืืึธืื ืืืจ ืฆื ืคืึทืจืืจืขืกืขืจื ืื ืงืึทืฉ ืฆื ืืืฉืืืืึทื ืืืง ืกืืืขืก ืืื ืฆืืฉืืขืื ืึทืงืกืขืก ืฆื ืขืก ืคึฟืื ืงืึธื ืืึธืืกืืื ืืืืฃ ืคืึทืจืฉืืืขื ืข ืกืขืจืืืขืจืก. ืึธืืขืจ, ืืื ืืื ืืืขืจ ืกืืืืึทืฆืืข, ืื ืืึทื ื ืคืื ืกืืึธืจื ืืึทืื ืืื ื ืืฉื ืืงืกืื ืขืืืขืืข ืืืืืืืื, ืืื ืื ืคืึธืจืฉืืขืืื ื ืคืื ืืืื ืึธืืขืจ ืฆืืืื ื ืึธืืื ืืื ืืึทื ืฅ ืืขื ืื. ืึทืงืงืึธืจืืื ืืื, ืื ืืืืื ื ืืฆืืง ื ืึธืจืืึทื ืืืฉืืจืื ืงืขื ืืืื ืฆื ืขื ืฉืืจ ืื ืึทืืืืืืึทืืืืึทืื ืคืื ืืขืืงืึทืืฉืขื ืืื ืืึทืืื ืืืึท ืืื ืืกืืขืจ ืืืื ืงืึทืฉ ืืืึทืฉืคึผืื ืืื ืืจืืขืื ืฆืืฉืืึทื ื. ืึธืืขืจ, ืขืก ืืื ื ืืฉื ืืขืืืขื ืฆื ื ืืฆื ืืคืืื ืื ืืขืืขืื ืืืื ... ืืึธ ืขืก ืืื ืืืขืจื ืฆื ืืขืจืืึธื ืขื ืื ืึทื ืืืงืืืืื ืคืื ืื ืคืจืืืืืืขืจืง ืืขื ืืฆื ืืื ืืขื ืคึผืจืืืขืงื, ืืืึธืก ืืื ืืืึธืก ืขืก ืืื ืืขืืืขื ืืืืืขืืืขื ืฆื ืืึทืงืืืขื ืื ืึทืคึผืืึทืงืืืฉืึทื ืฆื ืึทืจืืขืื ืืื ืึท ืืขืงื ืคืื ืกืขืจืืืขืจืก. ืืึธืืืจ ืืืื ื ืืฉื ืคืึทืจืืขืกื ืืืขืื ืื ืึธื ืืืขืจ ืคืื ืกืขืกืืข ืืึทืื: ืืขืจ ืงืื ื ืก ืืืื ืืืืืืฉื ืคืื ืื ืืึทืกืืื ืืึธืืึธืื ืคืื ืืืืขืจื.
ืืืขืึทืืื ืขืก ืืื ืคืืจืืื ืื ืจืขืคึผืืึทืงืืืฉืึทื ืคืื ืจืขืงืึธืจืืก ืืื ืืขืืงืึทืืฉืขื ืืื ืืืืคึผืึทืกืื ื ืจืขืคึผืืึทืงืึทื ืืื ืคืึทื ืคืื ืึท ืืขืืช ืึธืืขืจ ืืขืืช. ืืขืืึธืืคึฟื ืืื ืื ืื ืกืืจืืืขื ื ืืขื ืกืืจืึทืืขืืืข .
ืืงืจืืืืขืจ
ืืึธืก ืืื ืึท ืืขืืงืึทืืฉืขื ืจืึทืืืขืจ ืืขืืืขืืึธืคึผืขื ืืืจื Facebook ืฆื ืกืึธืืืืข ืืืื ืคึผืจืึธืืืขืืก. ืขืก ืฉืืืฆื ืื ืืขืืงืึทืืฉืขื ืืขืงืกื ืคึผืจืึธืืึธืงืึธื, ืืืึธืก ืึทืืึทืื ืืืึธื ืืขืืงืึทืืฉืขื ืื ืกืืึทืืืืฉืึทื ื ืฆื ืืขืฉืืืข ืคึผืจืึทืคึผืึธืจืฉืึทื ื. ื ืืืืืืื ืืึทืฉืจืืึทืืื ื ืคืื ืืึทืงืจืึธืืืขืจ ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื ืืื . ืฆืืืืฉื ืื ืืขืจืข ืืืื ืขืก ืงืขื ืืึธื ืืืึธืก ืืืจ ืืึทืจืคึฟื:
- ืจืขืคึผืืึทืงืืื ืจืขืงืึธืจื;
- ืืึธื ืคืึทืืืึทืง ืฆื ืื ืืขืจืข ืกืขืจืืืขืจืก ืืื ืืขืจ ืืจืืคึผืข ืืืื ืึท ืืขืืช ืึทืงืขืจื.
ืืื ืืจืืขืื!
ืืึทืงืจืึธืืืขืจ ืงืึทื ืคืืืืขืจืืืฉืึทื
ืืื ืืืขื ืืืื ืืืืื ืฆื ืื ืงืึธื ืคืืืืจืึทืืืึธื:
{
"pools": {
"pool00": {
"servers": [
"mc-0.mc:11211",
"mc-1.mc:11211",
"mc-2.mc:11211"
},
"pool01": {
"servers": [
"mc-1.mc:11211",
"mc-2.mc:11211",
"mc-0.mc:11211"
},
"pool02": {
"servers": [
"mc-2.mc:11211",
"mc-0.mc:11211",
"mc-1.mc:11211"
},
"route": {
"type": "OperationSelectorRoute",
"default_policy": "AllMajorityRoute|Pool|pool00",
"operation_policies": {
"get": {
"type": "RandomRoute",
"children": [
"MissFailoverRoute|Pool|pool02",
"MissFailoverRoute|Pool|pool00",
"MissFailoverRoute|Pool|pool01"
]
}
}
}
}ืคืืจืืืืก ืืจืื ืคึผืึธืึธืืก? ืคืืจืืืืก ืืขื ืขื ืกืขืจืืืขืจืก ืจืืคึผืืืื? ืืื ืก ืคืืืืจ ืืืืก ืืื ืขืก ืึทืจืืขื.
- ืืื ืืขื ืงืึทื ืคืืืืขืจืืืฉืึทื, mcrouter ืกืึทืืขืงืฅ ืื ืืืขื ืฆื ืืืึธืก ืื ืืขืื ืืืขื ืืืื ืืขืฉืืงื ืืืืืจื ืืืืฃ ืื ืืขืื ืืึทืคึฟืขื. ืืขืจ ืืืืจ ืืึธืื ืืื ืืึธืก
OperationSelectorRoute. - ืืึทืงืืืขื ืจืืงืืืขืก ืืืื ืฆื ืื ืืึทื ืืืขืจ
RandomRouteืืืึธืก ืจืึทื ืืึทืืื ืกืึทืืขืงืฅ ืึท ืืขืงื ืึธืืขืจ ืืึทืจืฉืจืื ืฆืืืืฉื ืืขื ืืข ืึทืืืืฉืขืงืฅchildren. ืืขืืขืจ ืขืืขืืขื ื ืคืื ืืขื ืืขื ืืข ืืื ืืื ืงืขืจ ืึท ืืึทื ืืืขืจMissFailoverRoute, ืืืึธืก ืืืขื ืืืื ืืืจื ืืขืืขืจ ืกืขืจืืืขืจ ืืื ืื ืืขืงื ืืื ืขืก ื ืขืื ืึท ืขื ืืคืขืจ ืืื ืืึทืื, ืืืึธืก ืืืขื ืืืื ืืืืืขืงืขืจื ืฆื ืืขื ืงืืืขื ื. - ืืืื ืืืจ ืืขืืืืื ื ืืืืกืฉืืืกืืขื
MissFailoverRouteืืื ืึท ืืขืงื ืคืื ืืจืื ืกืขืจืืืขืจืก, ืึทืืข ืจืืงืืืขืก ืืืึธืื ืงืืืขื ืขืจืฉืืขืจ ืฆื ืืขืจ ืขืจืฉืืขืจ ืืขืืงืึทืืฉืขื ืืืึทืฉืคึผืื, ืืื ืื ืื ืืื ืืืึธืื ืืึทืงืืืขื ืจืืงืืืขืก ืืืืฃ ืึท ืจืืืืืืฉืืึทื ืืงืขืจ ืืืขื ืขืก ืืื ืงืืื ืืึทืื. ืึทืืึท ืึท ืฆืืืึทื ื ืืืึธืื ืคืืจื ืฆื ืืืขืจืืง ืืึทืกืข ืืืืฃ ืืขืจ ืขืจืฉืืขืจ ืกืขืจืืืขืจ ืืื ืืขืจ ืจืฉืืื, ืึทืืื ืขืก ืืื ืืึทืฉืืึธืกื ืฆื ืืืฉืขื ืขืจืืื ืืจืื ืคึผืึธืึธืืก ืืื ืืืขื ืื ืืื ืคืึทืจืฉืืืขื ืข ืกืืงืืืึทื ืกืื ืืื ืกืขืืขืงืืืจื ืืื ืจืึทื ืืึทืืื. - ืึทืืข ืื ืืขืจืข ืจืืงืืืขืก (ืืื ืืึธืก ืืื ืึท ืจืขืงืึธืจื) ืืขื ืขื ืคึผืจืึทืกืขืกื ื ืืฆื
AllMajorityRoute. ืืขืจ ืืึทื ืืืขืจ ืกืขื ืื ืจืืงืืืขืก ืฆื ืึทืืข ืกืขืจืืืขืจืก ืืื ืื ืืขืงื ืืื ืืืึทืจืื ืคึฟืึทืจ ืจืขืกืคึผืึธื ืกืขืก ืคืื ืืืึท ืืื ืืกืืขืจ N/2 + 1 ืคืื ืืื. ืคืื ื ืืฆืAllSyncRouteืคึฟืึทืจ ืฉืจืืึทืื ืึทืคึผืขืจืืืฉืึทื ื ืืื ืฆื ืืืื ืคืืจืืืื, ืืื ื ืืขื ืืืคึฟื ืจืืงืืืืืขืจื ืึท positive ืขื ืืคืขืจ ืคืื ืึทืืข ืกืขืจืืืขืจืก ืืื ืืขืจ ืืจืืคึผืข - ืึทื ืืขืจืฉ ืขืก ืืืขื ืฆืืจืืงืงืืืขืSERVER_ERROR. ืืึธืืฉ ืืงืจืึธืืืขืจ ืืืขื ืืืืื ืื ืืึทืื ืฆื ืื ืืืฆื ืงืึทืืฉืขืก, ืื ืคืึทื ืคืคึผ ืคึฟืื ืงืฆืืข ืืืขื ืฆืืจืืงืงืืืขื ืึท ืืขืืช ืืื ืืืขื ืืืฉืขื ืขืจืืื ืึธื ืืึธื.AllMajorityRouteืืื ื ืืฉื ืึทืืื ืฉืืจืขื ื ืืื ืึทืืึทืื ืึทืจืืืฃ ืฆื ืืึทืื ืคืื ืื ืื ืืฅ ืฆื ืืืื ืืขื ืืืขื ืืืืก ืคืื ืืื ืกื ืึธื ืื ืคืจืืืืขืืขื ืืืกืงืจืืืื ืืืืื.
ืืืืคึผื ืืืกืึธืจื ืืขืจ ืกืืขืืข ืืื ืึทื ืืืื ืขืก ืืึทืงืข ืืื ืงืืื ืืึทืื ืืื ืื ืงืึทืฉ, ืืขืืึธืื ืคึฟืึทืจ ืืขืืขืจ ืืงืฉื ืคืื ืืขื ืงืืืขื ื N ืจืืงืืืขืก ืฆื ืืขืืงืึทืืฉืขื ืืืขื ืึทืงืฉืื ืืืื ืขืงืกืึทืงืืืืึทื - ืฆื ืึทืืข ืกืขืจืืืขืจืก ืืื ืื ืืขืงื. ืืืจ ืงืขื ืขื ืจืขืืืฆืืจื ืื ื ืืืขืจ ืคืื ืกืขืจืืืขืจืก ืืื ืคึผืึธืึธืืก, ืืืฉื, ืฆื ืฆืืืื: ืงืจืื ืกืืึธืจืืืืฉ ืจืืืืืึทืืืืึทืื, ืืืจ ืืึทืงืืืขืะพืืขืืขืจ ืืืืงืืึทื ืืื ืืืืื ืืงืขืจ ืืึทืกืข ืคืื โโืจืืงืืืขืก ืฆื ืคืขืื ืืืง ืฉืืืกืืขื.
NB: ืืืจ ืงืขื ืืืื ืืขืคึฟืื ืขื ื ืืฆืืง ืืื ืงืก ืคึฟืึทืจ ืืขืจื ืขื ืืึทืงืจืึธืืืขืจ ะธ (ืืื ืืขืจืืขืจืขืื ื ืื ืคืืจืืืืืข), ืคืืจืืจืขืื ืืืง ื ืืื ืฆื ืฉืคึผืืื ืคืื ืคืืจืฉืืืืขื ืข ืคืืจืฉืืขืืื ืืขื.
ืื ืื ืืื ืคืืืกื ืืืง ืืึทืงืจืึธืืืขืจ
ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื (ืืื ืืขืืงืึทืืฉืขื ืืื) ืืืืคื ืืื Kubernetes - ืึทืงืึธืจืืื ืืื, mcrouter ืืื ืืืื ืืืื ืืึธืจื. ืคึฟืึทืจ ืงืึทื ืืืื ืขืจ ืคึฟืึทืจืืึทืืืื ื ืืืจ ื ืืฆื , ืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืคึฟืึทืจ ืืืึธืก ืืืขื ืงืืงื ืืื ืืึธืก:
NB: ืื ืืืกืืื ืืก ืืื ืืขื ืึทืจืืืงื ืืขื ืขื ืืจืืืก ืืื ืื ืจืืคึผืึทืืึทืืึธืจื .
configVersion: 1
project: mcrouter
deploy:
namespace: '[[ env ]]'
helmRelease: '[[ project ]]-[[ env ]]'
---
image: mcrouter
from: ubuntu:16.04
mount:
- from: tmp_dir
to: /var/lib/apt/lists
- from: build_dir
to: /var/cache/apt
ansible:
beforeInstall:
- name: Install prerequisites
apt:
name: [ 'apt-transport-https', 'tzdata', 'locales' ]
update_cache: yes
- name: Add mcrouter APT key
apt_key:
url: https://facebook.github.io/mcrouter/debrepo/xenial/PUBLIC.KEY
- name: Add mcrouter Repo
apt_repository:
repo: deb https://facebook.github.io/mcrouter/debrepo/xenial xenial contrib
filename: mcrouter
update_cache: yes
- name: Set timezone
timezone:
name: "Europe/Moscow"
- name: Ensure a locale exists
locale_gen:
name: en_US.UTF-8
state: present
install:
- name: Install mcrouter
apt:
name: [ 'mcrouter' ]()
... ืืื ืกืงืืฆืข ืขืก ืืืืก ืืขืื ืืฉืึทืจื. ืื ืืฉืืงืึทืืืข ืืึทื ืืื ืึทื ืขืก ืืื ืืืืื ืึท ืงืึทื ืคืืืืขืจืืืฉืึทื ืืขื ืขืจืึทืืึธืจ ืืืืืจื ืืืืฃ ืื ื ืืืขืจ ืคืื ืจืขืคึผืืึทืงืึทื (ืืืื ืืืขืจ ืขืก ืื ืืื ืึท ืืขืจ ืืึทืงืึทื ืืง ืืื ืขืืขืืึทื ื ืึธืคึผืฆืืข, ืืึทื ืืืืื ืขืก ืืื ืื ืืึทืืขืจืงืื ืืขื):
{{- $count := (pluck .Values.global.env .Values.memcached.replicas | first | default .Values.memcached.replicas._default | int) -}}
{{- $pools := dict -}}
{{- $servers := list -}}
{{- /* ะะฐะฟะพะปะฝัะตะผ ะผะฐััะธะฒ ะดะฒัะผั ะบะพะฟะธัะผะธ ัะตัะฒะตัะพะฒ: "0 1 2 0 1 2" */ -}}
{{- range until 2 -}}
{{- range $i, $_ := until $count -}}
{{- $servers = append $servers (printf "mc-%d.mc:11211" $i) -}}
{{- end -}}
{{- end -}}
{{- /* ะกะผะตัะฐััั ะฟะพ ะผะฐััะธะฒั, ะฟะพะปััะฐะตะผ N ััะตะทะพะฒ: "[0 1 2] [1 2 0] [2 0 1]" */ -}}
{{- range $i, $_ := until $count -}}
{{- $pool := dict "servers" (slice $servers $i (add $i $count)) -}}
{{- $_ := set $pools (printf "MissFailoverRoute|Pool|pool%02d" $i) $pool -}}
{{- end -}}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mcrouter
data:
config.json: |
{
"pools": {{- $pools | toJson | replace "MissFailoverRoute|Pool|" "" -}},
"route": {
"type": "OperationSelectorRoute",
"default_policy": "AllMajorityRoute|Pool|pool00",
"operation_policies": {
"get": {
"type": "RandomRoute",
"children": {{- keys $pools | toJson }}
}
}
}
}()
ืืืจ ืจืึธืืื ืขืก ืืืืก ืืื ืื ืคึผืจืึธืืข ืกืืืืืืข ืืื ืงืึธื ืืจืึธืืืจื:
# php -a
Interactive mode enabled
php > # ะัะพะฒะตััะตะผ ะทะฐะฟะธัั ะธ ััะตะฝะธะต
php > $m = new Memcached();
php > $m->addServer('mcrouter', 11211);
php > var_dump($m->set('test', 'value'));
bool(true)
php > var_dump($m->get('test'));
string(5) "value"
php > # ะ ะฐะฑะพัะฐะตั! ะขะตััะธััะตะผ ัะฐะฑะพัั ัะตััะธะน:
php > ini_set('session.save_handler', 'memcached');
php > ini_set('session.save_path', 'mcrouter:11211');
php > var_dump(session_start());
PHP Warning: Uncaught Error: Failed to create session ID: memcached (path: mcrouter:11211) in php shell code:1
Stack trace:
#0 php shell code(1): session_start()
#1 {main}
thrown in php shell code on line 1
php > # ะะต ะทะฐะฒะพะดะธัััโฆ ะะพะฟัะพะฑัะตะผ ะทะฐะดะฐัั session_id:
php > session_id("zzz");
php > var_dump(session_start());
PHP Warning: session_start(): Cannot send session cookie - headers already sent by (output started at php shell code:1) in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Unable to clear session lock record in php shell code on line 1
PHP Warning: session_start(): Failed to read session data: memcached (path: mcrouter:11211) in php shell code on line 1
bool(false)
php >ืืืื ืคึฟืึทืจ ืื ืืขืงืกื ืคืื ืื ืืขืืช ืืื ื ืืฉื ืืขืื ืงืืื ืจืขืืืืืึทืื, ืึธืืขืจ ืคึฟืึทืจ ืื ืึธื ืคึฟืจืขื ""ืืื ืื ืคืจืึธื ื ืืื ืืขืืืขื ืื ืึธืืืืึทืกื ืึทื ืกืึทืืืื ืคึผืจืึธืืืขื ืคืื ืื ืคึผืจืืืขืงื - ืืขืืงืึทืืฉืขื ืืืื ืขืจื ืคึผืจืึธืืึธืงืึธื.
NB: ืืขืจ ASCII ืคึผืจืึธืืึธืงืึธื ืืื ืืขืืงืึทืืฉืขื ืืื ืกืืึธืืขืจ ืืื ืื ืืืื ืขืจื, ืืื ื ืึธืจืืึทื ืืืื ืคืื ืงืึธื ืกืืกืืขื ื ืฉืืืกื ืืึทืฉืื ื ืึทืจืืขื ืืืืื ืืื ืื ืืืื ืขืจื ืคึผืจืึธืืึธืงืึธื. ืืืขืจ ืืึธืก ืืื ื ืืฉื ืืึทืื ืคึผืจืึธืืืขืืก ืคึฟืึทืจ ืึท ืกืคึผืขืฆืืคืืฉ ืคืึทื.
ืืขืจ ืงืื ืฅ ืืื ืืื ืื ืืึทืฉ: ืึทืืข ืืืจ ืืึธืื ืฆื ืืึธื ืืื ืืึทืฉืืืืขื ืฆื ืื ASCII ืคึผืจืึธืืึธืงืึธื ืืื ืึทืืฅ ืืืขื ืึทืจืืขืื .... ืึธืืขืจ, ืืื ืืขื ืคืึทื, ืื ืืืืข ืคืื โโืืืื ืขื ืืคึฟืขืจืก ืืื ืืขืฉืคืืื ืึท ืืจืืืืึทื ืืืืฅ. ืืืจ ืืืขื ื ืื ืืขืคึฟืื ืขื ืื ืจืืืืืง ืขื ืืคึฟืขืจื ืืึธืจื ... ืกืืึทืื, ืคืื ืงืืจืก, ืืืจ ืืขืืืืข ืฆื ืื ืกืืฃ, ืืื ืืื ืื ืึธืคึผืืืืืื ื "ืืึทื ืืฆืขืจ ืงืึทื ืืจืืืืืืื ืืขืจืืช" ืืืขื ืืืื ืืขืืจืืึท ืืื .
ืืึธ, ืื ืจืืืืืง ืึธืคึผืฆืืข ื ืึธืืขื ืืื memcached.sess_binary_protocol. ืขืก ืืืื ืืืื ืคืึทืจืงืจืืคึผืื, ื ืึธื ืืืึธืก ืื ืกืขืฉืึทื ื ืืืขื ืึธื ืืืืื ืืจืืขืื. ืึทืืข ืืืึธืก ืืืืืื ืืื ืฆื ืฉืืขืื ืืขื ืงืึทื ืืืื ืขืจ ืืื ืืึทืงืจืึธืืืขืจ ืืื ืึท ืคึผืึธื ืืื PHP!
ืกืึธืฃ
ืืืื, ืืื ืืืืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจืึทื ืขื ืืขืจืื ืืขื, ืืืจ ืืขื ืขื ืืืืืืช ืฆื ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื: ืื ืคึผืจืึธืืืขื ืืื ืืขืืงืึทืืฉืขื ืฉืืื ืืึธืืขืจืึทื ืฅ ืืื ืกืึทืืืื, ืืื ืื ืจืืืืืึทืืืืึทืื ืคืื ืงืึทืฉ ืกืืึธืจืืืืฉ ืืื ืืขืืืืงืกื. ืืื ืึทืืืฉืึทื ืฆื ืื ืงืืึธืจ ืืื ืืขืจ ืืึธื ืึทืืืืึทื ืืืืืฉืื ืคึฟืึทืจ ืื ืึทืคึผืืึทืงืืืฉืึทื, ืืึธืก ืืื ืึท ืคึผืืึทืฅ ืคึฟืึทืจ ืืึทื ืืืืขืจ ืืืขื ืืจืืขืื ืืืืฃ ืืขืจ ืคึผืืึทืืคืึธืจืืข: ืืืขื ืึทืืข ืงืึทืืคึผืึธืื ืึทื ืฅ ืืึธืื ืึท ืจืขืืขืจืื, ืื ืืขืื ืคืื ืื ืึทืืืื ืืกืืจืึทืืึธืจ ืืื ืืืืขืจ ืกืืืคึผืืึทืคืืื. ืืึธ, ืืขื ืืืคึฟื ืืืื ืืื ืืืึทื ืืืกืึทืืืืึทื ืืืืืฉืื, ืขืก ืงืขื ืงืืงื ืืื ืึท "ืงืจืึทืืฉ", ืึธืืขืจ ืืืื ืขืก ืกืึทืืืขืก ืืขืื, ืืึทืืจืึธืื ืื ืคึผืจืึธืืืขื ืืื ืืื ื ืืฉื ืคืึทืจืฉืึทืคื ื ืืึท ืึธื ืขืก - ืืืึธืก ื ืื?
ืคึผืก
ืืืืขื ืขื ืืืื ืืืืฃ ืืื ืืืขืจ ืืืึธื:
- "ืคืืจ ืืื ืืึทืคึผ" (ื ืืฆื ืกืืืคืึธื ื-ืืขืืึธ ืืื ืึท ืืืึทืฉืคึผืื): ะธ ;
- ยซ'.
ืืงืืจ: www.habr.com
