Centos7/Centos8 Mongodb4.2分片集群配置(同一主机)

本文为同一主机的示范,要调整多服务器可根据情况进行更改

服务实例端口
mongos路由mongos20000
config服务器1config120001
config服务器2config220002
config服务器3config320003
shard分片主1shard1-120011
shard分片备1shard2-120012
shard分片主2shard2-120021
shard分片备2shard2-220022
shard分片主3shard3-120031
shard分片备3shard3-220032
安装mongos
添加源
vim /etc/yum.repos.d/mongodb-org-4.0.repo
[mongodb-org]
name = MongoDB Repository
baseurl = https://mirrors.aliyun.com/mongodb/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck = 1
enabled = 1
gpgkey = https://www.mongodb.org/static/pgp/server-4.4.asc
yum -y install mongodb-org
groupadd mongodb
useradd -g mongodb mongodb

1、创建数据目录

mkdir /data/mongodb
mkdir /data/mongodb/mongos
mkdir -p /data/mongodb/conf/db{1,2,3} /data/mongodb/conf/log
mkdir /data/mongodb/shard{1,2,3} 
mkdir /data/mongodb/shard{1,2,3}/db{1,2,3} 
mkdir /data/mongodb/shard{1,2,3}/log

2、目录权限

chown -R mongodb:mongodb /data/mongodb
chmod -R 777 /data/mongodb

查看是否有进程运行

ps aux|grep mongo

3、启动config服务器
分别启动三台服务器的配置服务

mongod -f /data/mongodb/conf/config1.yaml
mongod -f /data/mongodb/conf/config2.yaml
mongod -f /data/mongodb/conf/config3.yaml

相关配置文件内容:
config1.yaml

sharding:
  clusterRole: configsvr  
replication:
  replSetName: config  	 
net:
  port: 20001             
  bindIp: 0.0.0.0        
systemLog:
  destination: file        
  logAppend: true		   
  path: /data/mongodb/conf/log/config1.log    
storage:
  dbPath: /data/mongodb/conf/db1          
  journal:
    enabled: true           
processManagement:
  fork: true               
  pidFilePath: /var/run/mongodb/mongodconfig1.pid
  timeZoneInfo: /usr/share/zoneinfo    

config2.yaml

sharding:
  clusterRole: configsvr  
replication:
  replSetName: config  	 
net:
  port: 20002             
  bindIp: 0.0.0.0        
systemLog:
  destination: file        
  logAppend: true		   
  path: /data/mongodb/conf/log/config2.log    
storage:
  dbPath: /data/mongodb/conf/db2          
  journal:
    enabled: true           
processManagement:
  fork: true               
  pidFilePath: /var/run/mongodb/mongodconfig2.pid
  timeZoneInfo: /usr/share/zoneinfo    

config3.yaml

sharding:
  clusterRole: configsvr  
replication:
  replSetName: config  	 
net:
  port: 20003             
  bindIp: 0.0.0.0        
systemLog:
  destination: file        
  logAppend: true		   
  path: /data/mongodb/conf/log/config.log    
storage:
  dbPath: /data/mongodb/conf/db3          
  journal:
    enabled: true           
processManagement:
  fork: true               
  pidFilePath: /var/run/mongodb/mongodconfig3.pid
  timeZoneInfo: /usr/share/zoneinfo    

初始化配置服务器

rs.initiate(
			  {
				_id: "config",
				configsvr: true,
				members: [
				  { _id : 0, host : "127.0.0.1:20001" },
				  { _id : 1, host : "127.0.0.1:20002" },
				  { _id : 2, host : "127.0.0.1:20003" }
				]
			  }
			)

为conf集群添加root用户

use admin;
db.createUser(
			  {
				user: "root",
				pwd: "root",
				roles: [ { role: "root", db: "admin" } ]
			  }
			);

4、启动分片

mongod -f /data/mongodb/conf/shard1-1.yaml
mongod -f /data/mongodb/conf/shard1-2.yaml
mongod -f /data/mongodb/conf/shard2-1.yaml
mongod -f /data/mongodb/conf/shard2-2.yaml
mongod -f /data/mongodb/conf/shard3-1.yaml
mongod -f /data/mongodb/conf/shard3-2.yaml

相关配置文件:
shard1-1.yaml

sharding:
    clusterRole: shardsvr
replication:
    replSetName: shard1
net:
    port: 20011
    bindIp: 0.0.0.0
systemLog:
    destination: file
    logAppend: true
    path: /data/mongodb/shard1/log/shard1-1.log
storage:
    dbPath: /data/mongodb/shard1/db1
    journal:
        enabled: true
processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/mongodshard1-1.pid
    timeZoneInfo: /usr/share/zoneinfo

shard1-2.yaml

sharding:
    clusterRole: shardsvr
replication:
    replSetName: shard2
net:
    port: 20012
    bindIp: 0.0.0.0
systemLog:
    destination: file
    logAppend: true
    path: /data/mongodb/shard1/log/shard1-2.log
storage:
    dbPath: /data/mongodb/shard1/db2
    journal:
        enabled: true
processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/mongodshard1-2.pid
    timeZoneInfo: /usr/share/zoneinfo

shard2-1.yaml

sharding:
    clusterRole: shardsvr
replication:
    replSetName: shard1
net:
    port: 20021
    bindIp: 0.0.0.0
systemLog:
    destination: file
    logAppend: true
    path: /data/mongodb/shard2/log/shard1-1.log
storage:
    dbPath: /data/mongodb/shard2/db1
    journal:
        enabled: true
processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/mongodshard2-1.pid
    timeZoneInfo: /usr/share/zoneinfo

shard2-2.yaml

sharding:
    clusterRole: shardsvr
replication:
    replSetName: shard2
net:
    port: 20022
    bindIp: 0.0.0.0
systemLog:
    destination: file
    logAppend: true
    path: /data/mongodb/shard2/log/shard2-2.log
storage:
    dbPath: /data/mongodb/shard2/db2
    journal:
        enabled: true
processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/mongodshard2-2.pid
    timeZoneInfo: /usr/share/zoneinfo

shard3-1.yaml

sharding:
    clusterRole: shardsvr
replication:
    replSetName: shard1
net:
    port: 20031
    bindIp: 0.0.0.0
systemLog:
    destination: file
    logAppend: true
    path: /data/mongodb/shard3/log/shard3-1.log
storage:
    dbPath: /data/mongodb/shard3/db1
    journal:
        enabled: true
processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/mongodshard3-1.pid
    timeZoneInfo: /usr/share/zoneinfo

shard3-2.yaml

sharding:
    clusterRole: shardsvr
replication:
    replSetName: shard2
net:
    port: 20032
    bindIp: 0.0.0.0
systemLog:
    destination: file
    logAppend: true
    path: /data/mongodb/shard3/log/shard3-2.log
storage:
    dbPath: /data/mongodb/shard3/db2
    journal:
        enabled: true
processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/mongodshard3-2.pid
    timeZoneInfo: /usr/share/zoneinfo

启动分片副本集Ⅰ
登录20011初始化(一主一从一仲裁)

rs.initiate(
				  {
					_id : "shard1",
					members: [
					  { _id : 0, host : "127.0.0.1:20011" ,priority : 2 },
					  { _id : 1, host : "127.0.0.1:20021" ,priority : 1 },
					  { _id : 2, host : "127.0.0.1:20031" ,arbiterOnly :true }
					]
				  }
				)

为share1添加root用户(必须在PRIMARY状态下,可以按回车键可以看到PRIMARY)

use admin;
db.createUser(
			  {
				user: "root",
				pwd: "root",
				roles: [ { role: "root", db: "admin" } ]
			  }
			);

启动分片副本集Ⅱ
登录20012初始化(一主一从一仲裁)

rs.initiate(
				  {
					_id : "shard2",
					members: [
					  { _id : 0, host : "127.0.0.1:20012" ,priority : 2 },
					  { _id : 1, host : "127.0.0.1:20022" ,priority : 1 },
					  { _id : 2, host : "127.0.0.1:20032" ,arbiterOnly :true }
					]
				  }
				)

为share2添加root用户(必须在PRIMARY状态下,可以按回车键可以看到PRIMARY)

use admin;
db.createUser(
			  {
				user: "root",
				pwd: "root",
				roles: [ { role: "root", db: "admin" } ]
			  }
			);

5、启动路由服务器

mongos -f /data/mongodb/conf/mongos.yaml

mongos.yaml

sharding:
    configDB: config/127.0.0.1:20001,127.0.0.1:20002,127.0.0.1:20003
net:
    port: 20000
    bindIp: 0.0.0.0
 
systemLog:
    destination: file
    logAppend: true
    path: /data/mongodb/conf/log/mongos.log
 
processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/mongos.pid
    timeZoneInfo: /usr/share/zoneinfo

连接到mongo路由: 这里的登录密码就是config集群配置的用户名和密码;端口为定义的20000,使用root账户登陆

use admin;
db.auth('root','root');

查看登陆是否成功

添加shard分片集群
把shard1、shard2分片集群都添加进去,每个分片添加一个节点即可,主 从都可以;

sh.addShard( "shard1/127.0.0.1:20011,127.0.0.1:20021,127.0.0.1:20031");
sh.addShard( "shard2/127.0.0.1:20012,127.0.0.1:20022,127.0.0.1:20032");

查看集群状态

sh.status()

6、开启均衡器和分片功能

开启均衡器:

sh.startBalancer()

查看结果:

sh.status()

开启文档分片并测试

use admin;
show dbs;
db.runCommand({enablesharding:"mydb"})
sh.enableSharding("mydb"); //设置world为分片
use world
sh.enableSharding("world"); //设置world为分片
sh.shardCollection("world.tiles",{name:"hashed"}); //设置分片集**
for (var i=0;i<100000;i++) db.world.insert({name:"zs"+i,age:i}); //插入数据
db.teacher.find();//查看数据

版权声明:本文为weixin_48803304原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。