(一)MongoDB分布式搭建

一.集群规划

规划分片、副本集、服务配置、配置实例

切片名称 Master Slave1 Slave2 端口
fang-s-a a1 a2 a3 28111
fang-s-b b2 b1 b3 28112
fang-s-c c3 c1 c2 29113
fang-cs configserver1 configserver2 configserver3 28200
fang-cs实例 a1、b1、c1 a2、b2、c2 a3、b3、c3  

二.搭建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
logAppend: true
path: /home/log/mongodb/a1/mongodb.log
# db存储位置
storage:
dbPath: /mongodb/a1
journal:
enabled: true
# fork : 后台运行
# pidFilePath: pidfile的位置
processManagement:
fork: true
pidFilePath: /var/run/mongod-a1.pid
# 仅收听本地界面
net:
port: 28111  # 注意这里端口b1要改28112、c1要改28113
bindIp: 0.0.0.0
# operation剖析
operationProfiling:
slowOpThresholdMs: 1000
mode: slowOp
# 复制
replication:
replSetName: fang-s-a  # 注意b1配置这里a要改b、c1要改28113
# 分片
sharding: 
clusterRole: shardsvr
6.配置mongod-configserver1.yml文件(三台) slave1数值是2 slave2是3注意以下格式是固定不然后面启动不了!
# vim /mongodb/mongod-configserver1.yml
# mongod config
systemLog:
destination: file
logAppend: true
path: /home/log/mongodb/configserver1/mongodb.log
# Where and how to store data.
storage:
dbPath: /mongodb/configserver1
journal:
enabled: true
# fork : fork and run in background
# pidFilePath:location of pidfile
processManagement:
fork: true
pidFilePath: /var/run/mongod-configserver1.pid
# network interfaces
# Listen to local interface only, comment to listen on all interfaces.
net:
port: 28200
bindIp: 0.0.0.0
#operationProfiling:
operationProfiling:
slowOpThresholdMs: 1000
mode: slowOp
#replication:
replication:
replSetName: fang-cs
#sharding:
sharding:
clusterRole: configsvr
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命令进入都可以查询了

猜你喜欢

转载自www.cnblogs.com/Agent9527/p/13195205.html
今日推荐