mongodb 4.0.8 集群搭建五台集群

配置文件采用yaml方式来配置
生产中取消了仲裁者的角色,因为仲裁者也不会存储数据,只是起到选举的作用,线上为了保证数据安全,每份数据都会配置两个副本集,也就是每份数据存储了三份。优化配置,采用五台集群
使用非root账户搭建mongodb集群。

下载安装Mongodb

 #下载
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.18.tgz
# 解压
tar -xzvf mongodb-linux-x86_64-4.0.18.tgz -C /usr/local/
# 改名
mv mongodb-linux-x86_64-4.0.18 mongodb

1、环境准备

  • 系统系统 centos7.4 安装包:mongodb-linux-x86_64-4.0.18
  • 五台服务器:192.168.90.10/11/12/13/14
  • 服务器规划
服务器 1 服务器 2 服务器 3 服务器 4 服务器 5
192.168.90.10 192.168.90.11 192.168.90.12 192.168.90.13 192.168.90.14
ssh [email protected] -p 8022 ssh [email protected] -p 8023 ssh [email protected] -p 8024 ssh [email protected] -p 8025 ssh [email protected] -p 8026
mongos server mongos server config server config server config server
shard1 server shard2 server shard3 server shard4server shard5 server
shard5 server shard1 server shard2 server shard3server shard4 server
shard4 server shard5 server shard1 server shard2server shard3 server

端口分配:

mongos:20000  路由服务
config:21000  配置服务
shard1:27001
shard2:27002
shard3:27003
shard4:27004
shard5:27005

权限分配:

登录root账户,将安装目录和数据目录权限分配给日常操作(moho:moho0987)账户

chown -R moho:moho /usr/local/
chown -R moho:moho /data

2、创建相关目录
根据服务器的规范,分别在对应的服务器规划,在不同机器上建立conf、mongos、config、shard1、shard2、shard3、shard4、shard5等目录,因为mongos不存储数据,只需要建立日志文件目录即可。

mkdir -p /usr/local/mongodb/conf
mkdir -p /data/mongos/log
mkdir -p /data/config/data
mkdir -p /data/config/log
mkdir -p /data/shard1/data
mkdir -p /data/shard1/log
mkdir -p /data/shard2/data
mkdir -p /data/shard2/log
mkdir -p /data/shard3/data
mkdir -p /data/shard3/log
mkdir -p /data/shard4/data
mkdir -p /data/shard4/log
mkdir -p /data/shard5/data
mkdir -p /data/shard5/log

3、环境变量
为了后续方便操作,配置mongodb的环境变量,需要切到root用户下面

vim /etc/profile
# 内容
export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
# 使立即生效,在安装用户下(moho)执行
source /etc/profile
#查看mongodb版本信息mongod -v 输出版本信息表明配置环境变量成功

2、集群配置

1、config server配置服务器

#在服务器12\13\14 上配置以下内容:
#添加配置文件:
# 编写配置文件 YAML
vim /usr/local/mongodb/conf/config.conf

YAML 格式config server 的 config.conf (每台机器一份)

## content
systemLog:
  destination: file
  logAppend: true
  path: /data/config/log/config.log
# Where and how to store data.
storage:
  dbPath: /data/config/data
  journal:
    enabled: true
# how the process runs
processManagement:
  fork: true
  pidFilePath: /data/config/log/configsrv.pid
# network interfaces
net:
  port: 21000
  bindIp: 192.168.9.12
  #bindIp: 192.168.9.13
  #bindIp: 192.168.9.14
#operationProfiling:
replication:
    replSetName: config        
sharding:
    clusterRole: configsvr

启动三台服务器的config server

 /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/config.conf
numactl --interleave=all mongod --config /usr/local/mongodb/conf/config.conf

登录任意一台配置服务器,初始化配置副本集

#连接
mongo 192.168.90.12:21000
#config变量
config = {
   _id : "config",
   members : [
          {_id : 0, host : "192.168.90.12:21000" },
          {_id : 1, host : "192.168.90.13:21000" },
          {_id : 2, host : "192.168.90.14:21000" }
      ]
  }

初始化副本集结果

{
    "_id" : "config",
    "members" : [
        {
            "_id" : 0,
            "host" : "192.168.90.12:21000"
        },
        {
            "_id" : 1,
            "host" : "192.168.90.13:21000"
        },
        {
            "_id" : 2,
            "host" : "192.168.90.14:21000"
        }
    ]
}
rs.initiate(config)
#查看分区状态
rs.status();
#其中,"_id" : "configs"应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的ip和port
这样配置服务器就配置好了

3、配置分片、副本集

#配置第一个分片副本集
#在服务器 10、11、12上面做以下配置
#配置文件
vi /usr/local/mongodb/conf/shard1.conf
##配置文件内容
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /data/shard1/log/shard1.log
 
# Where and how to store data.
storage:
  dbPath: /data/shard1/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 20
 
# how the process runs
processManagement:
  fork: true 
  pidFilePath: /data/shard1/log/shard1.pid
 
# network interfaces
net:
  port: 27001
  bindIp: 192.168.90.10
 
#operationProfiling:
replication:
    replSetName: shard1
sharding:
    clusterRole: shardsvr

启动三台服务器的shard1 server

/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard1.conf
numactl --interleave=all mongod  --config  /usr/local/mongodb/conf/shard1.conf

登陆任意一台服务器,初始化副本集

mongo 192.168.90.10:27001
#使用admin数据库
use admin
#定义副本集配置
config = {
     _id : "shard1",
      members : [
         {_id : 0, host : "192.168.90.10:27001" },
         {_id : 1, host : "192.168.90.11:27001" },
         {_id : 2, host : "192.168.90.12:27001" }
      ]
 }

初始化副本集配置

rs.initiate(config);
#查看分区状态
rs.status();

配置第二组个分片副本集

#在服务器11、12、13上面做以下配置
#配置文件
vi /usr/local/mongodb/conf/shard2.conf
#配置文件内容
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /data/shard2/log/shard2.log
 
# Where and how to store data.
storage:
  dbPath: /data/shard2/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 20
 
# how the process runs
processManagement:
  fork: true 
  pidFilePath: /data/shard2/log/shard2.pid
 
# network interfaces
net:
  port: 27002
  bindIp: 192.168.90.11
 
 
#operationProfiling:
replication:
    replSetName: shard2
sharding:
    clusterRole: shardsvr

三台服务器的shard2 server

/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard2.conf
numactl --interleave=all mongod  --config /usr/local/mongodb/conf/shard2.conf

登陆任意一台服务器,初始化副本集

mongo 192.168.90.32:27002
#使用admin数据库
use admin
#定义副本集配置
config = {
...    _id : "shard2",
...     members : [
...         {_id : 0, host : "192.168.90.11:27002" },
...         {_id : 1, host : "192.168.90.12:27002" },
...         {_id : 2, host : "192.168.90.13:27002" }
...     ]
... }
初始化副本集配置
rs.initiate(config);
#查看分区状态
rs.status();

配置第三组分片副本集

#在服务器12、13、14上面做以下配置
#配置文件
vi /usr/local/mongodb/conf/shard3.conf
#配置文件
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /data/shard3/log/shard3.log
 
# Where and how to store data.
storage:
  dbPath: /data/shard3/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 20
# how the process runs
processManagement:
  fork: true 
  pidFilePath: /data/shard3/log/shard3.pid
 
# network interfaces
net:
  port: 27003
  bindIp: 192.168.90.12
 
 
#operationProfiling:
replication:
    replSetName: shard3
sharding:
    clusterRole: shardsvr

启动三台服务器的shard3 server

/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard3.conf
numactl --interleave=all mongod  --config  /usr/local/mongodb/conf/shard3.conf

登陆任意一台服务器,初始化副本集

mongo 192.168.90.13:27003
#使用admin数据库
use admin
#定义副本集配置
config = {
      _id : "shard3",
        members : [
            {_id : 0, host : "192.168.90.12:27003" },
            {_id : 1, host : "192.168.90.13:27003" },
            {_id : 2, host : "192.168.90.14:27003" }
        ]
   }
初始化副本集配置
rs.initiate(config);
#查看分区状态
rs.status();

配置第四个分片副本集

#在服务器10、13、14上面做以下配置
$配置文件
vi /usr/local/mongodb/conf/shard4.conf
#配置文件内容
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /data/shard4/log/shard4.log
 
# Where and how to store data.
storage:
  dbPath: /data/shard4/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 20
 
# how the process runs
processManagement:
  fork: true 
  pidFilePath: /data/shard4/log/shard4.pid
 
# network interfaces
net:
  port: 27004
  bindIp: 192.168.90.10
 
 
#operationProfiling:
replication:
    replSetName: shard4
sharding:
    clusterRole: shardsvr

启动三台服务器的shard4 server

/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard4.conf

numactl --interleave=all mongod  --config /usr/local/mongodb/conf/shard4.conf
登陆任意一台服务器,初始化副本集
mongo 192.168.0.34:27004
#使用admin数据库
use admin
#定义副本集配置
config = {
...    _id : "shard4",
...     members : [
...         {_id : 0, host : "192.168.90.10:27004" },
...         {_id : 1, host : "192.168.90.13:27004" },
...         {_id : 2, host : "192.168.00.14:27004" }
...     ]
... }
初始化副本集配置
rs.initiate(config);
#查看分区状态
rs.status();

配置第五个分片副本集

#在服务器10、11、14上面做以下配置
#配置文件
vi /usr/local/mongodb/conf/shard5.conf
#配置文件内容
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /data/shard5/log/shard5.log
 
# Where and how to store data.
storage:
  dbPath: /data/shard5/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 20
 
# how the process runs
processManagement:
  fork: true 
  pidFilePath: /data/shard5/log/shard5.pid
 
# network interfaces
net:
  port: 27005
  bindIp: 192.168.0.35
 
 
#operationProfiling:
replication:
    replSetName: shard5
sharding:
    clusterRole: shardsvr
启动三台服务器的shard5 server
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard5.conf
numactl --interleave=all mongod  --config  /usr/local/mongodb/conf/shard5.conf
登陆任意一台服务器,初始化副本集
mongo 192.168.0.10:27005
#使用admin数据库
use admin
#定义副本集配置
config = {
...    _id : "shard5",
...     members : [
...         {_id : 0, host : "192.168.90.10:27005" },
...         {_id : 1, host : "192.168.90.11:27005" },
...         {_id : 2, host : "192.168.90.14:27005" }
...     ]
... }
初始化副本集配置
rs.initiate(config);
#查看分区状态
rs.status();

至此,五个分片和副本集搭建完毕

4、配置路由服务器 mongos

以下配置在服务器10、11上执行

注意:先启动配置服务器和分片服务器,后启动路由实例

vi /usr/local/mongodb/conf/mongos.conf
#配置文件
systemLog:
  destination: file
  logAppend: true
  path: /data/mongos/log/mongos.log
processManagement:
  fork: true
#  pidFilePath: /usr/local/mongodb/mongos.pid
 
# network interfaces
net:
  port: 20000
  bindIp: 192.168.90.10

#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
sharding:
   configDB: config/192.168.90.12:21000,192.168.90.13:21000,192.168.90.14:21000

启动二台服务器的 mongos server

#/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongos.conf
mongos  --config  /usr/local/mongodb/conf/mongos.conf

5、启用分片

目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。

登陆任意一台mongos 路由服务

mongo 192.168.0.10:20000
#使用admin数据库
use  admin
#串联路由服务器与分配副本集
sh.addShard("shard1/192.168.90.10:27001,192.168.90.11:27001,192.168.90.12:27001")
sh.addShard("shard2/192.168.90.11:27002,192.168.90.12:27002,192.168.90.13:27002")
sh.addShard("shard3/192.168.90.12:27003,192.168.90.13:27003,192.168.90.14:27003")
sh.addShard("shard4/192.168.90.10:27004,192.168.90.13:27004,192.168.90.14:27004")
sh.addShard("shard5/192.168.90.10:27005,192.168.90.11:27005,192.168.90.14:27005")

#查看集群状态
sh.status()

mongodb的五台集群搭建就已经完成了;

配置用户

#进入mongodb shell
mongo 192.168.90.11:20000
# 切换admin
use admin
创建一个超级用户

db.createUser(
  {
    user: "root",
    pwd: "xeon#388w3ww",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

验证用户

db.system.users.find()
# db.auth('admin','xeon#388w3ww') 不好用 ??
mongo 192.168.90.10:20000 -u "root" --authenticationDatabase "admin" -p

关闭服务

 ./mongod
> use admin
> db.shutdownServer()

你可能感兴趣的:(mongodb 4.0.8 集群搭建五台集群)