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 root@58.59.88.206 -p 8022 ssh root@58.59.88.206 -p 8023 ssh root@58.59.88.206 -p 8024 ssh root@58.59.88.206 -p 8025 ssh root@58.59.88.206 -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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容