sudo apt-get install postgresql-13-citus CREATE EXTENSION citus; CREATE TABLE distributed_table (
id SERIAL,
data TEXT
);
SELECT create_distributed_table('distributed_table', 'id'); SELECT citus_add_node('worker_node_address', 5432); INSERT INTO distributed_table (data) VALUES ('example_data'); version: '3'
services:
//сервер конфигурации
configSrv:
image: mongo:latest # docker образ
container_name: configSrv
restart: always
ports:
- "27017:27017"
networks:
app-network:
ipv4_address: 173.17.0.10
volumes:
- config-data:/data/db
command:
[
"--configsvr", //запуск в режиме конфигурации
"--replSet",
"config_server",
"--bind_ip_all",
"--port",
"27017"
]
healthcheck:
test: [ "CMD", "mongo", "--eval", "db.adminCommand('ping')" ]
interval: 5s
start_period: 10s
//1-й шард
shard1:
image: mongo:latest
container_name: shard1
restart: always
ports:
- "27018:27018"
networks:
app-network:
ipv4_address: 173.17.0.9
volumes:
- shard1-data:/data/db
command:
[
"--shardsvr", //запуск в режиме шардинга
"--replSet",
"shard1", //название реплики
"--bind_ip_all",
"--port",
"27018"
]
healthcheck:
test: [ "CMD", "mongo", "--eval", "db.adminCommand('ping')" ]
interval: 5s
start_period: 10s
//2-й шард
shard2:
image: mongo:latest
container_name: shard2
restart: always
ports:
- "27019:27019"
networks:
app-network:
ipv4_address: 173.17.0.8
volumes:
- shard2-data:/data/db
command:
[
"--shardsvr", //запуск в режиме шардинга
"--replSet",
"shard2", //название реплик
"--bind_ip_all", // обратите внимание - она отличается от реплики 1-го шарда
"--port",
"27019"
]
healthcheck:
test: [ "CMD", "mongo", "--eval", "db.adminCommand('ping')" ]
interval: 5s
start_period: 10s
//роутер
mongos_router:
image: mongo:latest
container_name: mongos_router
restart: always
ports:
- "27020:27020"
networks:
app-network:
ipv4_address: 173.17.0.7
command:
[
"mongos", //обычная mongo в режиме роутера
**"--configdb",
"config_server/configSrv:27017",** //передача данных сервера конфигурации
"--bind_ip_all",
"--port",
"27020"
]
healthcheck:
test: [ "CMD", "mongo", "--eval", "db.adminCommand('ping')" ]
interval: 5s
start_period: 10s
networks:
app-network:
driver: bridge
ipam:
driver: default
config:
- subnet: 173.17.0.0/16
volumes:
config-data:
shard1-data:
shard2-data:
docker exec -it configSrv mongosh --port 27017
> rs.initiate(
{
_id : "config_server",
configsvr: true,
members: [
{ _id : 0, host : "configSrv:27017" }
]
}
);
> exit(); docker exec -it shard1 mongosh --port 27018
> rs.initiate(
{
_id : "shard1",
members: [
{ _id : 0, host : "shard1:27018" },
// { _id : 1, host : "shard2:27019" }
]
}
);
> exit();
docker exec -it shard2 mongosh --port 27019
> rs.initiate(
{
_id : "shard2",
members: [
// { _id : 0, host : "shard1:27018" },
{ _id : 1, host : "shard2:27019" }
]
}
);
> exit(); docker exec -it mongos_router mongosh --port 27020
> sh.addShard( "shard1/shard1:27018");
> sh.addShard( "shard2/shard2:27019");
> sh.enableSharding("somedb");
> sh.shardCollection("somedb.helloDoc", { "name" : "hashed" } )
> use somedb
> for(var i = 0; i < 1000; i++) db.helloDoc.insert({age:i, name:"ly"+i})
> db.helloDoc.countDocuments()
> exit(); docker exec -it shard1 mongosh --port 27018
> use somedb;
> db.helloDoc.countDocuments();
> exit(); docker exec -it shard2 mongosh --port 27019
> use somedb;
> db.helloDoc.countDocuments();
> exit();