使用docker-compose搭建mongdb分片3主机

host1ip:192.168.3.55

host2ip:192.168.3.56

host3ip:192.168.3.57

初始化docker-compose目录

创建docker-compose主文件夹

mkdir -p /root/iatc/commpwr
cd /root/iatc/commpwr
mkdir data mongos shard1 shard2 shard3

生成key.file,在一台机器生成,其他机器拷贝

openssl rand -base64 756 > key.file
chmod chmod 400 key.file

将key.file拷贝到其他机器后都需要重新修改权限为400

chmod chmod 400 key.file

编辑docker-compose.yml文件,内容如下

 version: '3'
 services:
     rs_config_server:
          container_name: 'rs_config_server'
          image: 'mongo:latest'
          restart: always
          volumes:
          - ${PWD}/data/db:/data/db 
          - ${PWD}/data/configdb:/data/configdb 
          - ${PWD}/key.file:/data/mongodb/key.file
          ports:
          - 27019:27019
          command: --configsvr --replSet "rs_config_server" --bind_ip_all
     rs_shard_server_01:
          container_name: 'rs_shard_server_01'
          image: 'mongo:latest'
          restart: always
          volumes:
          - ${PWD}/shard1/db:/data/db  
          - ${PWD}/shard1/configdb:/data/configdb
          - ${PWD}/key.file:/data/mongodb/key.file
          ports:
          - 27118:27018
          command: --shardsvr --replSet "rs_shard_server_01" --bind_ip_all 
     rs_shard_server_02:
          container_name: 'rs_shard_server_02'
          image: 'mongo:latest'
          restart: always
          volumes:
          - ${PWD}/shard2/db:/data/db  
          - ${PWD}/shard2/configdb:/data/configdb
          - ${PWD}/key.file:/data/mongodb/key.file
          ports:
          - 27218:27018
          command: --shardsvr --replSet "rs_shard_server_02" --bind_ip_all 
     rs_shard_server_03:
          container_name: 'rs_shard_server_03'
          image: 'mongo:latest'
          restart: always
          volumes:
          - ${PWD}/shard3/db:/data/db  
          - ${PWD}/shard3/configdb:/data/configdb
          - ${PWD}/key.file:/data/mongodb/key.file
          ports:
          - 27318:27018
          command: --shardsvr --replSet "rs_shard_server_03" --bind_ip_all 
     rs_mongos_server:
          container_name: 'rs_mongos_server'
          image: 'mongo:latest'
          restart: always
          volumes:
          - ${PWD}/mongos/db:/data/db 
          - ${PWD}/mongos/configdb:/data/configdb
          - ${PWD}/key.file:/data/mongodb/key.file
          ports:
          - 27017:27017
          command: mongos --configdb rs-config-server/192.168.3.55:27019,192.168.3.56:27019,192.168.3.57:27019 --bind_ip_all 

docker-compose每台机器拷贝,然后执行下面命令启动

docker-compose up -d

放行防火墙端口

firewall-cmd --permanent --add-port=27019/tcp
firewall-cmd --permanent --add-port=27118/tcp
firewall-cmd --permanent --add-port=27218/tcp
firewall-cmd --permanent --add-port=27318/tcp
firewall-cmd --permanent --add-port=27017/tcp
firewall-cmd --reload

在一台机器上配置集群和分片参数

初始化配置服务器

执行命令

docker exec -it rs_config_server bash
mongo --host 192.168.3.55 --port 27019
rs.initiate({
	_id: "rs_config_server",
	configsvr: true,
	members: [{
		_id: 0,
		host: "192.168.3.55:27019"
	}, {
		_id: 1,
		host: "192.168.3.56:27019"
	}, {
		_id: 2,
		host: "192.168.3.57:27019"
	}, ]
});
# 查看状态
rs.status()

开始关联分片集群或设置仲裁节点,这里不设置仲裁

shard1分片执行如下命令

docker exec -it rs_shard_server_01 bash
mongo --host 192.168.3.55 --port 27118
rs.initiate({
	_id: "rs_shard_server_01",
	members: [{
		_id: 0,
		host: "192.168.3.55:27118"
	}, {
		_id: 1,
		host: "192.168.3.56:27118"
	}, {
		_id: 2,
		host: "192.168.3.57:27118"
	}, ]
});
#查看状态
rs.status()

shard2分片执行如下命令

docker exec -it rs_shard_server_02 bash
mongo --host 192.168.3.55 --port 27218
rs.initiate({
	_id: "rs_shard_server_02",
	members: [{
		_id: 0,
		host: "192.168.3.55:27218"
	}, {
		_id: 1,
		host: "192.168.3.56:27218"
	}, {
		_id: 2,
		host: "192.168.3.57:27218"
	}, ]
});
# 查看状态
rs.status()

shard3分片执行如下命令

docker exec -it rs_shard_server_03 bash
mongo --host 192.168.3.55 --port 27318
rs.initiate({
	_id: "rs_shard_server_03",
	members: [{
		_id: 0,
		host: "192.168.3.55:27318"
	}, {
		_id: 1,
		host: "192.168.3.56:27318"
	}, {
		_id: 2,
		host: "192.168.3.57:27318"
	}, ]
});
#查看状态
rs.status()

配置路由mongos

执行命令


 docker exec -it rs_mongos_server bash 

 mongo --host 192.168.3.55 --port 27017
 # 配置 mongo router 路由信息
 sh.addShard("rs_shard_server_01/192.168.3.55:27118,192.168.3.56:27118,192.168.3.57:27118");
 sh.addShard("rs_shard_server_02/192.168.3.55:27218,192.168.3.56:27218,192.168.3.57:27218");
 sh.addShard("rs_shard_server_03/192.168.3.55:27318,192.168.3.56:27318,192.168.3.57:27318");
 
 #查看状态
 sh.status()

测试分片


docker exec -it rs_mongos_server bash
mongo --host 192.168.3.55 --port 27017
use admin
#  testdb1开启分片功能
db.runCommand( { enablesharding  : "testdb1"});
db.runCommand( { shardcollection : "testdb1.tab1",key : {id: 1} } )

# 添加数据 
use testdb1;
for(var i=1;i<=10000;i++) 
db.tab1.save({id:i,"test1":"testval1"});

#查看分片状态
db.tab1.stats();
#查看数据分布
db.tab1.getShardDistribution();

你可能感兴趣的:(分享学习,docker,容器,运维)