(一)Mongodb全分布式搭建

一.集群规划

1.1.配置规划

【注意】得部署奇数台。

节点 Master Slave1 Slave2
IP 192.168.2.98 192.168.2.99 192.168.2.100
配置实例 a1\b1\c1\configserver1 a2\b2\c2\configserver2 a3\b3\c3\configserver3

1.2.分片规划

说明:1个分片内有3个副本集。如果看不懂分片规划请看例子解释。(看懂忽略此例子)

例子:fang-s-a整行解释。a1-a2-a3副本集对应端口为28111。a1(在Master上)、a2(在Slave1)、a3(在Slave2) 对应着上面的配置实例。现在移至搭建Mongodb第8步操作解释,在主节点Master登录Mongo添加a2(Slave1)、a3(Slave2)这两个次要的副本集。

切片名称 主要副本集 次要副本集 次要副本集 端口
fang-s-a a1(Master) a2(Slave1) a3(Slave2) 28111
fang-s-b b2(Slave1) b1(Master) b3(Slave2) 28112
fang-s-c c3(Slave2) c1(Master) c2(Slave1) 29113
fang-cs configserver1(Master) configserver2(Slave1) configserver3(Slave2) 28200

二.搭建Mongodb

1.下载安装包(master)
# wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.9.tgz
# tar zxvf mongodb-linux-x86_64-rhel62-3.2.9.tgz -C /usr/local/ 解压
# mv /usr/local/mongodb-linux-x86_64-rhel62-3.2.9 /usr/local/mongo  改名
2.分发安装包至各节点(master)
# scp -r /usr/local/mongo root@slave1:/usr/local/
# scp -r /usr/local/mongo root@slave2:/usr/local/
3.创建db目录、日志目录、mongodb配置文件(三台)此处演示一台每台都要改数值对应
3.1.创建db目录
# mkdir -p /mongodb/a1 /mongodb/b1 /mongodb/c1 /mongodb/configserver1 
3.2.创建日志目录
# mkdir -p /home/log/mongodb/a1 /home/log/mongodb/b1 /home/log/mongodb/c1 /home/log/mongodb/configserver1 
3.3.创建mongodb配置文件
# touch /mongodb/mongod-a1-config.yml /mongodb/mongod-b1-config.yml /mongodb/mongod-c1-config.yml /mongodb/mongod-configserver1.yml
4. 生产和copy秘钥用户实例内部认证(master)
# openssl rand -base64 755 > /mongodb/keyfile
# chmod 400 /mongodb/keyfile  授权
# scp /mongodb/keyfile root@slave1:/mongodb/  分发1
# scp /mongodb/keyfile root@slave2:/mongodb/  分发2
5.配置mongodb文件(三台)  配mongod-a1-config.yml + b1 + c1
# vim /mongodb/mongod-a1-config.yml  添加如下。这里只是a1举例 b1+c1也是如此但要改内容的数值与之文件对应。注意下面有空格是固定的对准不然后面启动不了!
# 日志位置
systemLog:
destination: file  # 前面空1格
logAppend: true  # 空1格
path: /home/log/mongodb/a1/mongodb.log  # 空1格
# db存储位置
storage:  
dbPath: /mongodb/a1  # 空1格
journal:  # 空1格
enabled: true  # 空2格
# fork : 后台运行
# pidFilePath: pidfile的位置
processManagement:
fork: true  # 空1格
pidFilePath: /var/run/mongod-a1.pid  # 空1格
# 仅收听本地界面
net:
port: 28111  # 注意这里是a1的端口28111、配置b1时要分配端口28112、配置c1时要分配端口28113。空1格
bindIp: 0.0.0.0  # 空1格
# operation剖析
operationProfiling:
slowOpThresholdMs: 1000  # 空1格
mode: slowOp  # 空1格
# 复制
replication:
replSetName: fang-s-a  # 注意配置b1时这里a要改为b、配置c1时改为c。空1格
# 分片
sharding: 
clusterRole: shardsvr  # 空1格
6.配置mongod-configserver1.yml文件(三台) slave1数值是2 slave2是3注意以下格式有空格,严格空格,不然后面启动不了!
# vim /mongodb/mongod-configserver1.yml
# mongod config
systemLog:
destination: file  # 空1格
logAppend: true  # 空1格
path: /home/log/mongodb/configserver1/mongodb.log  # 空1格
# Where and how to store data.
storage:
dbPath: /mongodb/configserver1  # 空1格
journal:  # 空1格
enabled: true  # 空2格
# fork : fork and run in background
# pidFilePath:location of pidfile
processManagement:
fork: true  # 空1格
pidFilePath: /var/run/mongod-configserver1.pid  # 空1格
# network interfaces
# Listen to local interface only, comment to listen on all interfaces.
net:
port: 28200  # 空1格
bindIp: 0.0.0.0  # 空1格
#operationProfiling:
operationProfiling:
slowOpThresholdMs: 1000  # 空1格
mode: slowOp  # 空1格
#replication:
replication:
replSetName: fang-cs  # 空1格
#sharding:
sharding:
clusterRole: configsvr  # 空1格
7.启动(三台)这里演示一台启动master所有实例
# cd /usr/local/mongo/bin/  进入mongo bin目录
# ./mongod -f /mongodb/mongod-a1-config.yml  启动config服务1-2-3
# ./mongod -f /mongodb/mongod-b1-config.yml
# ./mongod -f /mongodb/mongod-c1-config.yml
# ./mongod -f /mongodb/mongod-configserver1.yml  启动configserver1-2-3
8.登录Mongo(master) → slave1 → slave2
# ./mongo 192.168.2.98:28111/admin  28111是a1服务配置的端口
> use admin  转至主库下
> rs.initiate()  初始化fang-s-a的副本集
> rs.add("slave1:28111")  添加副本集
> rs.add("slave2:28111")
> rs.conf()  查看副本集情况  (此时可以自行插入记录看看同步效果)
# 登录到192.168.2.99  初始化fang-s-b 添加副本集
# ./mongo 192.168.2.99:28112/admin
>rs.initiate()
>rs.add("master:28112")
>rs.add("slave2:28112")
# 登录到192.168.2.100  初始化fang-s-c 添加副本集
# ./mongo 127.168.2.99:28113/admin
rs.initiate()
rs.add("master:28113")
rs.add("slave1:28113")
# 登录到192.168.2.98  初始化fang-cs添加副本集
# ./mongo 127.168.2.98:28200/admin
> rs.initiate()
rs.add("slave1:28200")
rs.add("slave2:28200")
9. 添加分片集群
# 登录到192.168.2.98
# cd /usr/local/mongo/bin/
# ./mongos --port 28300 --configdb fang-cs/master:28200,slave1:28200,slave2:28200 --fork --logpath /home/log/mongodb/mongos.log --bind_ip 0.0.0.0  开启服务
# ./mongo 192.168.2.98:28300/admin  登录
> use admin
> sh.addShard("fang-s-a/master:28111,slave1:28111,slave2:28111")
> sh.addShard("fang-s-b/master:28112,slave1:28112,slave2:28112")
> sh.addShard("fang-s-c/master:28113,slave1:28113,slave2:28113")
10.设置备节点永久读(验证副本集同步)
对于replica set 中的secondary 节点默认是不可读的。在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。
如果通过shell访问mongo,要在secondary进行查询。会出现如下错误:
imageSet:SECONDARY> db.fs.files.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
有两种方法实现从机的查询:
第一种方法:db.getMongo().setSlaveOk();
第二种方法:rs.slaveOk();
但是这种方式有一个缺点就是,下次再通过mongo进入实例的时候,查询仍然会报错,为此可以通过下列方式
vi ~/.mongorc.js
增加一行rs.slaveOk();
这样的话以后每次通过mongo命令进入都可以查询了

11.认证分片(登录mongos)
# ./mongo 192.168.2.131:28300/admin
> use admin 启用分片键 > sh.enableSharding("mytest") > sh.shardCollection("mytest.student",{_id:"hashed"}) > for(var i=1;i<=50;i++){db.student.insert({age:i,"name":"mary",addr:"China"})} 测试 > db.student.find() 查看

posted @ 2020-06-26 15:42  九五二七_唐伯虎  阅读(320)  评论(0编辑  收藏  举报