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()