MongoDB集群搭建:副本+分片

环境规划服务器规划 192.168.3.167                    192.168.3.168                    192.168.3.170 mongos                             mongos                              mongos config server                     config server                       config server shard server1 主节点         shard server1 副节点           shard server1 仲裁 shard server2 仲裁            shard server2 主节点           shard server2 副节点 shard server3 副节点         shard server3 仲裁              shard server3 主节点 端口分配: mongos:20000  config:27017 shard1:27001  shard2:27002  shard3:27003   配置yum源并安装mongodb3.6
cat > /etc/yum.repos.d/mongodb-org-3.6.repo << EOF
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
EOF
​
yum install mongodb-org -y
目录创建: 分别在每台机器建立conf、mongos、config、shard1、shard2、shard3目录,因为mongos不存储数据,只需要建立日志文件目录即可 配置服务: 可以根据业务需求创建相应目录,此文档按yum安装所产生的/etc/mongo.ocnf文件默认配置,如果自行创建记得修改目录权限
chown -R mongod:mongod /var/lib/mongo
vim /etc/mongod.conf
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27017
  bindIp: 0.0.0.0
replication:
  replSetName: csReplSet
sharding:
  clusterRole: configsvr  
启动所有的mongo config server服务
mongod --config /etc/mongod.conf
 副本服务登录任意一台配置服务器,初始化配置副本集
mongo --port 27017
#创建配置
config = {
  _id : "csReplSet", 
  members : [ 
  {_id : 1, host : "192.168.3.167:27017" }, 
  {_id : 2, host : "192.168.3.168:27017" }, 
  {_id : 3, host : "192.168.3.170:27017" } 
  ] 
}
#初始化副本集
rs.initiate(config)
#查看状态
rs.status()
其中,"_id" : " csReplSet "应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的 ip 和 port   分片服务: 配置分片副本集(三台机器) 1.设置第一个分片副本集
vim /etc/shard1.conf
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/shard1.log
storage:
  dbPath: /var/lib/mongo/shard1/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/shard1.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27001
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr
  
#启动所有的shard1 server
mongod --config /etc/shard1.conf
​
#登陆任意一台shard1服务器,初始化副本集
mongo --port 27001
use admin
#定义副本集配置
config = {
   _id : "shard1",
    members : [
        {_id : 1, host : "192.168.3.167:27001",priority:2 },
        {_id : 2, host : "192.168.3.168:27001",priority:1 },
        {_id : 3, host : "192.168.3.170:27001",arbiterOnly: true }
    ]
}
#初始化副本集配置
rs.initiate(config);
​
#查看分区状态
rs.status()
​
====================
#配置第二个分片和副本集
vim /etc/shard2.conf
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/shard2.log
storage:
  dbPath: /var/lib/mongo/shard2/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/shard2.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27002
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
replication:
  replSetName: shard2
sharding:
  clusterRole: shardsvr
  
#启动所有的shard2 server
mongod --config /etc/shard2.conf
​
#登陆任意一台非仲裁节点服务器,初始化副本集
mongo --port 27002
use admin
​
#定义副本集配置
config = {
   _id : "shard2",
    members : [
        {_id : 1, host : "192.168.3.167:27002",arbiterOnly: true },
        {_id : 2, host : "192.168.3.168:27002",priority:2 },
        {_id : 3, host : "192.168.3.170:27002",priority:1 }
    ]
}
#初始化副本集配置
rs.initiate(config);
​
#查看分区状态
rs.status()
​
#配置第三个分片和副本集
vim /etc/shard3.conf
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/shard3.log
storage:
  dbPath: /var/lib/mongo/shard3/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/shard3.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27003
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
replication:
  replSetName: shard3
sharding:
  clusterRole: shardsvr
  
#启动所有的shard3 server
mongod --config /etc/shard3.conf
​
#初始化副本集配置
rs.initiate(config)
​
#查看分区状态
rs.status()
路由服务: 配置路由服务器 mongos 先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(三台机器)
vim /etc/mongos.conf
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongos.log
processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/mongos.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 20000
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
sharding:
  configDB: csReplSet/192.168.3.167:27017,192.168.3.168:27017,192.168.3.170:27017
​
#注意监听的配置服务器,只能有1个或者3个 csReplSet为配置服务器的副本集名字
configDB: csReplSet/192.168.3.167:21000, 192.168.3.168:21000, 192.168.3.170:21000
​
#启动路由服务器
mongos --config /etc/mongos.conf
​
#检查状态
netstat -tunlp | grep mongo
tcp        0      0 0.0.0.0:27001           0.0.0.0:*               LISTEN      8810/mongod     
tcp        0      0 0.0.0.0:27002           0.0.0.0:*               LISTEN      6962/mongod    
tcp        0      0 0.0.0.0:27003           0.0.0.0:*               LISTEN      12671/mongod      tcp        0      0 0.0.0.0:20000           0.0.0.0:*               LISTEN      13577/mongos      tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      10328/mongod  
启用分片 目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效
#登录其中的一台路由节点,手动启用分片
mongo --port 20000
use admin
#添加分片到mongos
sh.addShard("shard1/192.168.3.167:27001,192.168.3.168:27001,192.168.3.170:27001")
sh.addShard("shard2/192.168.3.167:27002,192.168.3.168:27002,192.168.3.170:27002")
sh.addShard("shard3/192.168.3.167:27003,192.168.3.168:27003,192.168.3.170:27003")
​
#查看集群状态
sh.status()

0 个评论

要回复文章请先登录注册