一、复制集(replica_sets)搭建
1、主节点配置
# 主节点配置
dbpath=/data/mongo/data/server1
bind_ip=0.0.0.0
port=37017
fork=true
logpath=/data/mongo/logs/server1.log
replSet=lagouCluster
2、两个从节点配置
dbpath=/data/mongo/data/server2
bind_ip=0.0.0.0
port=37018
fork=true
logpath=/data/mongo/logs/server2.log
replSet=lagouCluster
修改同样的配置增加一个仲裁节点
3、创建对应的目录data和log
4、依次启动三个节点,启动命令,修改制定的配置文件
./bin/mongod -f mongo-37017.conf
5、连接server
./bin/mongo --port 37017
6、初始化(任意选择一个节点执行如下命令,相当于初始化一个collection)
var cfg ={"_id":"lagouCluster",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"8.131.93.105:37017","priority":10},
{"_id":2,"host":"8.131.93.105:37018"}
]
}
rs.initiate(cfg)
//初始化后过一会才会发现SECONDARY编程PRIMARY
rs.status()
7、可以在PRIMARY动态增减节点
增加节点
rs.add("8.131.93.105:37019")
删除slave 节点
rs.remove("8.131.93.105:37019")
8、问题记录
如果从节点不能查询数据,需要先在从节点执行命令
rs.slaveOk()
为了保证高可用,在集群当中如果主节点挂掉后,会自动 在从节点中选举一个 重新做为主节点。
9、节点说明
PRIMARY 节点: 可以查询和新增数据
SECONDARY 节点:只能查询 不能新增 基于priority 权重可以被选为主节点
ARBITER(裁判) 节点: 不能查询数据 和新增数据 ,不能变成主节点
10、增加仲裁节点
配置文件同从节点
11、设置各节点的优先级,重新加载配置
var cfg ={"_id":"lagouCluster",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"8.131.93.105:37017","priority":10},
{"_id":2,"host":"8.131.93.105:37018","priority":0},
{"_id":3,"host":"8.131.93.105:37019","priority":5},
{"_id":4,"host":"8.131.93.105:37020","arbiterOnly":true}
]
};
// 重新装载配置,并重新生成集群节点。
rs.reconfig(cfg)
//重新查看集群状态
rs.status()
也可以通过动态增删节点来配置仲裁节点
rs.addArb("8.131.93.105:37020")
二、分片集群
重要概念:分片键、Sharding Server、Config Server、Routing Server
目标:一台服务器上搭建伪集群
1、端口分配
角色 | |||
---|---|---|---|
config-server | 17017 | 17018 | 17019 |
sharding-server(shard1) | 37017 | 37018 | 37019 |
sharding-server(shard2) | 47017 | 47018 | 47019 |
routing-server | 27017 |
sharding-server和config-server都是通过mongod来启动,routing-server是mongos来启动
./bin/mongos -f route/route-27017.conf
2、配置并启动config-server
# 数据库文件位置
dbpath=config/config1
#日志文件位置
logpath=config/logs/config1.log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
bind_ip=0.0.0.0
port = 17017
# 表示是一个配置服务器
configsvr=true
#配置服务器副本集名称
replSet=configsvr
一次启动三个config节点
./bin/mongod -f con/config/config-17017.conf
配置config-server集群
/bin/mongo --port 17017
use admin
var cfg ={"_id":"configsvr",
"members":[
{"_id":1,"host":"8.131.93.105:17017"},
{"_id":2,"host":"8.131.93.105:17018"},
{"_id":3,"host":"8.131.93.105:17019"}]
};
rs.initiate(cfg)
3、配置shard-server集群
var cfg ={"_id":"shard1",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"8.131.93.105:37017"},
{"_id":2,"host":"8.131.93.105:37018"},
{"_id":3,"host":"8.131.93.105:37019"}
]
};
rs.initiate(cfg)
rs.status()
var cfg ={"_id":"shard2",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"8.131.93.105:47017"},
{"_id":2,"host":"8.131.93.105:47018"},
{"_id":3,"host":"8.131.93.105:47019"}
]
};
rs.initiate(cfg)
rs.status()
4、路由中添加分片节点route-27017.conf
port=27017
bind_ip=0.0.0.0
fork=true
logpath=route/logs/route.log
configdb=configsvr/8.131.93.105:17017,8.131.93.105:17018,8.131.93.105:1
7019
启动脚本
./bin/mongos -f route/route-27017.conf
路由中添加分片
./bin/mongo --port 27017
sh.status()
sh.addShard("shard1/8.131.93.105:37017,8.131.93.105:37018,8.131.93.105:37019");
sh.addShard("shard2/8.131.93.105:47017,8.131.93.105:47018,8.131.93.105:47019");
sh.status()