VShard - горизонтальное масштабирование в Tarantool
Шпилевой Владислав
Tarantool
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5786528/image2.png)
План доклада
- Зачем?
- Shard
- VShard
- Использование
- Ребалансировка
- Прокси
- Auto read failover
- Write failover
- Мониторинг
New version: https://slides.com/gerold103/vshard-highload
Зачем масштабировать?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
Место
Вычисления
Горизонтальное масштабирование
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3659261/data_icon.png)
Репликация
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3659261/data_icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3659261/data_icon.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3659261/data_icon.png)
ABCD
ABCD
ABCD
ABCD
![](https://upload.wikimedia.org/wikipedia/commons/8/8d/RIAN_archive_645322_V._I._Lenin_State_Library_of_the_USSR.jpg)
Горизонтальное масштабирование
Шардинг
A
B
C
D
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662542/data_icon_partial.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662542/data_icon_partial.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
Шардинг
Range
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
0
1900
1970
2018
2001
1895
![](https://st.kp.yandex.net/images/film_iphone/iphone360_42782.jpg)
1965
![](https://st.kp.yandex.net/images/film_big/89544.jpg)
SELECT * FROM movie WHERE year > 1950;
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408051/20744.jpg)
Шардинг
Hash
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
Lord of The Rings
The Arrival of a Train
![](https://st.kp.yandex.net/images/film_iphone/iphone360_42782.jpg)
Операция Ы
![](https://st.kp.yandex.net/images/film_big/89544.jpg)
SELECT * FROM movie WHERE name = "Lord of The Rings";
![](https://www.shareicon.net/download/2015/10/25/661733_paper_512x512.png)
![](https://www.shareicon.net/download/2015/10/25/661733_paper_512x512.png)
![](https://www.shareicon.net/download/2015/10/25/661733_paper_512x512.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5046306/paper__1_.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408051/20744.jpg)
Tarantool Shard
function shard_function(primary_key)
return guava(crc32(primary_key))
end
Первый шардинг в Tarantool
![](https://images.ua.prom.st/696402863_w640_h640_cid2717986_pid491648499-6a46d0e6.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5046368/car_no_wheels.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
Request
old hash
new hash
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
Нет локальности
Медленный решардинг
Нестабильные чтения
SELECT
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
master
Tarantool Shard
format = {{'id', 'unsigned'},
{'email', 'string'}}
box.schema.create_space('customer', {format = format})
format = {{'id', 'unsigned'},
{'customer_id', 'unsigned'},
{'balance', 'number'}}
box.schema.create_space('account', {format = format})
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5028371/bank-icon-11.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
user {100, 'foo@mail.ru'}
account {1, 100, 123}
100 != 1 → разные хеши → разные узлы
Tarantool VShard
Buckets
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408063/vshard_basic.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408063/vshard_basic.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408063/vshard_basic.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408063/vshard_basic.png)
Replicaset
Data → Bucket → Storage
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5031377/hand1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5031378/hand2.png)
User defined map
Internal map
format = {{'id', 'unsigned'},
{'email', 'string'},
{'bucket_id', 'unsigned'}}
box.schema.create_space('customer', {format = format})
format = {{'id', 'unsigned'},
{'customer_id', 'unsigned'},
{'balance', 'number'},
{'bucket_id', 'unsigned'}}
box.schema.create_space('account', {format = format})
Локальность по bucket_id
Связка данных
user { 100, 'bar@mail.ru', 5 }
account {1, 100, 123, 5 }
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
Использование
5
Можно еще раз? Что это дает?
Связка данных
Использование
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
customer {1, 'bar@mail.ru'}
account {1, 1, 100}
account {2, 1, 200}
account {3, 1, 300}
SELECT * FROM accounts WHERE customer_id = 1;
3 запроса
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
customer {1, 'bar@mail.ru', 5}
account {1, 1, 100, 5}
account {2, 1, 200, 5}
account {3, 1, 300, 5}
1 запрос
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
...
...
5
Shard
VShard
Использование
function create_user(email)
local customer_id = next_id()
local bucket_id = crc32(customer_id)
box.space.customer:insert(customer_id, email, bucket_id)
end
function add_account(customer_id)
local id = next_id()
local bucket_id = crc32(customer_id)
box.space.account:insert(id, customer_id, 0, bucket_id)
end
Как масштабировать?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5047545/run.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5047545/run.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5047545/run.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5047545/run.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5047545/run.png)
Использование
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
#
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
= Const
Реконфигурация
vshard.storage.cfg(new_config)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/4910098/799cbe2494ac10761303868f937c68d0-tiny-recycle-arrow-by-vexels.png)
Failover
![](https://png.icons8.com/metro/1600/scales.png)
Rebalancer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://2xbbhjxc6wk3v21p62t8n4d4-wpengine.netdna-ssl.com/wp-content/uploads/2012/11/zk_logo_use2.png)
Zookeeper
![](https://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Ansible_logo.svg/832px-Ansible_logo.svg.png)
new_cfg.sharding[new_uuid] = {
uuid = new_uuid,
replicas = {
{
name = new_replica1,
uri = 'example.com:113',
uuid = replica1_uuid,
master = true,
},
{
name = new_replica2,
uri = 'example.com:114',
uuid = replica2_uuid,
}
}
}
vshard.storage.cfg(new_cfg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
Ребалансировка
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5793537/102080-_34.png)
- вычислить баланс
- построить маршруты бакетов
- отправить маршруты
Routes
Routes
vshard.storage.info()
![](https://d30y9cdsu7xlg0.cloudfront.net/png/147513-200.png)
100
![](https://d30y9cdsu7xlg0.cloudfront.net/png/147513-200.png)
200
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
#
= 1000
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
#
= 2000
new_cfg.sharding[uuid1].weight = 100
new_cfg.sharding[uuid2].weight = 200
vshard.storage.cfg(new_cfg)
![](https://naklejki-na-avto.ru/images/product/l/212733530.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5047545/run.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5047545/run.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5047545/run.png)
Data
Ребалансировка
Read
Write
Сеть
![](https://vokrug.tv/pic/person/c/4/5/1/4/c45147dee729311ef5b5c3003946c48f.jpeg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3659261/data_icon.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
Read
Write
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5704962/w512h5121390640324broom512.png)
Read
Как не блокировать запись?
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
Write
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3659261/data_icon.png)
Bucket Pin
![](https://png.icons8.com/metro/1600/pin.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3659261/data_icon.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
box.begin()
vshard.storage.bucket_pin(10)
vshard.storage.bucket_pin(11)
box.commit()
--
-- Do anything with these buckets.
--
box.begin()
vshard.storage.bucket_unpin(10)
vshard.storage.bucket_unpin(11)
box.commit()
Replicaset Lock
![](http://simpleicon.com/wp-content/uploads/lock-7.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3659261/data_icon.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
![](https://d30y9cdsu7xlg0.cloudfront.net/png/394460-200.png)
new_cfg.sharding[uuid].lock = true
vshard.storage.cfg(new_cfg)
Что осталось?
- Нет локальности
- Решардинг замедляет все
- Нестабильные чтения
?
Прокси
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408063/vshard_basic.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408063/vshard_basic.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408063/vshard_basic.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408063/vshard_basic.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3208827/router-symbol.png)
bucket_id → storage
vshard.router
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3208827/router-symbol.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3208827/router-symbol.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3208827/router-symbol.png)
Прокси
r = vshard.router
accounts = r.call(bucket_id,
'get_accounts',
{customer_id})
function get_accounts(customer_id)
local customer =
box.space.accounts.index.customer
return customer:select({customer_id})
end
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3208827/router-symbol.png)
![](https://png.icons8.com/ios/1600/robot-2.png)
Routing
![](https://png.icons8.com/ios/1600/robot-2.png)
?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
Развернуть
функцию на
стораджах
Auto read failover
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662619/data_icon_little_green.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3208827/router-symbol.png)
Write
Read
Зона 1
Зона 2
Зона ...
Зона K - 1
Зона K
Зона N
Зона 1 | Зона 2 | ... | Зона K | |
Зона 1 | w(1, 1) | w(1, 2) | w(1, i) | w(1, K) |
Зона 2 | w(2, 1) | w(2, 2) | w(2, i) | w(2, K) |
... | w(j, 1) | w(j, 2) | w(j, i) | w(j, K) |
Зона K | w(K, 1) | w(K, 2) | w(K, i) | w(K, K) |
Auto read failover
new_cfg.weights = {
[1] = {
[1] = 0,
[2] = 100,
[3] = 200,
},
[2] = {
[1] = 300,
[2] = 0,
[3] = 400,
},
[3] = {
[1] = 500,
[2] = 600,
[3] = 0,
}
}
new_cfg.zone = 1
vshard.router.cfg(new_cfg)
Зона 1
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3208827/router-symbol.png)
Зона 2
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3208827/router-symbol.png)
Зона 3
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3662568/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/3208827/router-symbol.png)
100
200
300
400
500
600
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5043909/server.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5043909/server.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5043909/server.png)
![](https://png.icons8.com/small/1600/country.png)
![](https://s3.amazonaws.com/kinlane-productions/bw-icons/bw-performance.png)
Write failover
replicas = new_cfg.sharding[uud].replicas
replicas[old_master_uuid].master = false
replicas[new_master_uuid].master = true
vshard.storage.cfg(new_cfg)
![](https://png.icons8.com/metro/1600/hand.png)
![](https://naklejki-na-avto.ru/images/product/l/212733530.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5045705/data_icon_little.png)
![](http://simpleicon.com/wp-content/uploads/flag.png)
Read
Write
Be Master
Write
Write
Sync
![](http://simpleicon.com/wp-content/uploads/flag.png)
![](http://simpleicon.com/wp-content/uploads/flag.png)
![](http://simpleicon.com/wp-content/uploads/flag.png)
![](http://simpleicon.com/wp-content/uploads/flag.png)
![](http://simpleicon.com/wp-content/uploads/flag.png)
Read
Write
Мониторинг
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408071/1670.jpg)
vshard.storage.info()
---
- replicasets:
<replicaset_2>:
uuid: <replicaset_2>
master:
uri: storage@127.0.0.1:3303
<replicaset_1>:
uuid: <replicaset_1>
master: missing
bucket:
receiving: 0
active: 0
total: 0
garbage: 0
pinned: 0
sending: 0
status: 2
replication:
status: slave
alerts:
- ['MISSING_MASTER', 'Master is not configured for '
'replicaset <replicaset_1>']
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408112/Шкала-боли-1-1200x626.jpg)
vshard.storage.buckets_info()
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5048202/incandescent-2027143_960_720.png)
Мониторинг
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408071/1670.jpg)
vshard.router.info()
---
- replicasets:
<replicaset_2>:
replica: &0
status: available
uri: storage@127.0.0.1:3303
uuid: 1e02ae8a-afc0-4e91-ba34-843a356b8ed7
bucket:
available_rw: 500
uuid: <replicaset_2>
master: *0
<replicaset_1>:
replica: &1
status: available
uri: storage@127.0.0.1:3301
uuid: 8a274925-a26d-47fc-9e1b-af88ce939412
bucket:
available_rw: 400
uuid: <replicaset_1>
master: *1
bucket:
unreachable: 0
available_ro: 800
unknown: 200
available_rw: 700
status: 1
alerts:
- ['UNKNOWN_BUCKETS', '200 buckets are not discovered']
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408112/Шкала-боли-1-1200x626.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5048202/incandescent-2027143_960_720.png)
Итоги
... локальность данных,
... гранулярный решардинг,
... auto read failover
![](https://s3.amazonaws.com/media-p.slid.es/uploads/320931/images/5408073/photo1.jpg)
![](http://pluspng.com/img-png/png-the-end-big-image-png-2400.png)