设为首页 收藏本站
查看: 1026|回复: 0

[经验分享] MongoDB高可用架构搭建及应用

[复制链接]

尚未签到

发表于 2018-10-27 14:05:23 | 显示全部楼层 |阅读模式
  最近公司在使用mongodb,现在先把mongodb的高可用集群贴出来,共大家分享,今后一起讨论.
  特点:非关系型的、分布式的、开源的、水平可扩展的。
  MongoDB高可用架构的搭建
  分片存储服务器规划
  每个分片3服务器,前期采用三台,日后服务器的增加考虑灾备,服务增加的基数最少为两台。
  类型    服务器    用途    系统    说明
  存储/数据
  Server1    Shard1/Shard2/Shard3    Linux 64位    Shard1:10001;Shard2:10002,Shard3:10003;
  Server2    Shard1/Shard2/Shard3    Linux 64位    Shard1:10001;Shard2:10002,Shard3:10003;
  Server3    Shard1/Shard2/Shard3    Linux 64位    Shard1:10001;Shard2:10002,Shard3:10003;
  配置
  Server1    Config1    Linux 64位    Config1:20000;
  Server2    Config2    Linux 64位    Config2:20000;
  Server3    Config3    Linux 64位    Config3:20000;
  路由
  Server1    Mongos1    Linux 64位    Mongos:30000
  Server2    Mongos2    Linux 64位    Mongos:30000
  Server3    Mongos3    Linux 64位    Mongos:30000
  准备
  创建配置、日志、分片、key文件存储目录及验证文件
  [root@Mongo-server-B /]# mkdir /data/config/ -p
  [root@Mongo-server-B /]# mkdir /data/log/ -p
  [root@Mongo-server-B /]# mkdir /data/shard1/ -p
  [root@Mongo-server-B /]# mkdir /data/shard2/ -p
  [root@Mongo-server-B /]# mkdir /data/shard3/ -p
  [root@Mongo-server-B /]# mkdir /data/key/ -p
  创建验证与无验证目录
  [root@Mongo-server-B /]# mkdir /Apps/mongo/bin/nosecurity/ -p
  [root@Mongo-server-B /]# mkdir /Apps/mongo/bin/security/ -p
  创建配置文件
  1,创建验证文件security于/data /key/目录,关赋予可读权限,命令如下:
  [root@Mongo-server-B /]# cd /data/key/
  [root@Mongo-server-B key]# echo 'pomohoshard1key'> security
  [root@Mongo-server-B key]# chmod 600 security
  2,创建shard1.conf、shard2.conf、shard3.conf、configsvr.conf、mongos.conf于/Apps/mongo/bin/nosecurity目录与/Apps/mongo/bin/security目录,内容分别如下:
  shard1.conf
  dbpath = /data/shard1
  shardsvr = true
  replSet = shard1
  bind_ip = 192.168.2.88,localhost
  port = 10001
  oplogSize = 100
  logpath = /data/log/shard1.log
  logappend = true
  profile = 1
  slowms = 5
  rest = true
  fork = true
  keyFile = /data/key/security  #nosecurity目录将该行删除
  shard2.conf
  dbpath = /data/shard2
  shardsvr = true
  replSet = shard2
  bind_ip = 192.168.2.88,localhost
  port = 10002
  oplogSize = 100
  logpath = /data/log/shard2.log
  logappend = true
  profile = 1
  slowms = 5
  rest = true
  fork = true
  keyFile = /data/key/security  #nosecurity目录将该行删除
  shard3.conf
  dbpath = /data/shard3
  shardsvr = true
  replSet = shard3
  bind_ip = 192.168.2.88,localhost
  port = 10003
  oplogSize = 100
  logpath = /data/log/shard3.log
  logappend = true
  profile = 1
  slowms = 5
  rest = true
  fork = true
  keyFile = /data/key/security  #nosecurity目录将该行删除
  configsvr.conf
  dbpath = /data/config
  configsvr = true
  port = 20000
  logpath = /data/log/config.log
  logappend = true
  fork = true
  keyFile = /data/key/security  #nosecurity目录将该行删除
  mongos.conf
  configdb = 192.168.2.88:20000, 192.168.2.89:20000, 192.168.2.90:20000
  port = 30000
  chunkSize = 5
  logpath = /data/log/mongos.log
  logappend = true
  fork = true
  keyFile = /data/key/security  #nosecurity目录将该行删除
  分片配置
  说明:分片要在无验证环境中配置,否则会出现无权限等异常。采用以下命令启动Server1\Server2\Server3上的shard1\shard2\shard3:
  [root@Mongo-server-A bin]# cd /Apps/mongo/bin/
  [root@Mongo-server-A bin]# ./mongod -f ./nosecurity/shard1.conf
  [root@Mongo-server-A bin]# ./mongod -f ./nosecurity/shard2.conf
  [root@Mongo-server-A bin]# ./mongod -f ./nosecurity/shard3.conf
  以下命令查看是否正常启动:
  [root@Mongo-server-A bin]# netstat –lnpt
  启动后连接到shard1\shard2\shard3分别进行配置,以下是具体配置过程:
  [root@Mongo-server-A bin]# ./mongo 192.168.2.88:10001
  >config = {_id: "shard1", members: [
  {_id: 0, host: "192.168.2.88:10001"},
  {_id: 1, host: "192.168.2.89:10001"},
  {_id: 2, host: "192.168.2.90:10001"}]
  }
  > rs.initiate(config)
  >exit
  [root@Mongo-server-A bin]# ./mongo 192.168.2.88:10002
  >config = {_id: "shard2", members: [
  {_id: 0, host: "192.168.2.88:10002"},
  {_id: 1, host: "192.168.2.89:10002"},
  {_id: 2, host: "192.168.2.90:10002"}]
  }
  > rs.initiate(config)
  >exit
  [root@Mongo-server-A bin]# ./mongo 192.168.2.88:10003
  >config = {_id: "shard3", members: [
  {_id: 0, host: "192.168.2.88:10003"},
  {_id: 1, host: "192.168.2.89:10003"},
  {_id: 2, host: "192.168.2.90:10003"}]
  }
  > rs.initiate(config)
  至此,已完成分片配置
  路由设置
  路由是能过config来连接分片服务器,在启动路由进程时,先启动配置进程,路由配置过程如下:
  [root@Mongo-server-A bin]# ./mongod -f ./nosecurity/configsvr.conf
  [root@Mongo-server-A bin]# ./mongos -f ./nosecurity/mongos.conf
  启动后,连接路由进行分片添加,只需配置一台路由。注:分片操作需在admin库下进行,另外必需在无验证要求下进行,即采用前面创建于nosecurity文件夹下的配置。
  [root@Mongo-server-A bin]# ./mongo 192.168.2.88:30000
  mongos> use admin
  mongos> db.runCommand( {addshard:"shard1/192.168.2.88:10001,192.168.2.89:10001,192.168.2.90:10001", name:"shard1", maxsize:20480} )
  mongos> db.runCommand( {addshard:"shard2/192.168.2.88:10002,192.168.2.89:10002,192.168.2.90:10002", name:"shard2", maxsize:20480} )
  mongos> db.runCommand( {addshard:"shard3/192.168.2.88:10003,192.168.2.89:10003,192.168.2.90:10003", name:"shard3", maxsize:20480} )
  命令检查分片添加情况,如出现以下结果则表示配置成功:
  mongos> db.runCommand( { listshards : 1 } )
  {
  "shards" : [
  {
  "_id" : "shard1",
  "host" : "shard1/192.168.2.88:10001,192.168.2.89:10001,192.168.2.90:10001"
  },
  {
  "_id" : "shard2",
  "host" : "shard2/192.168.2.88:10002,192.168.2.89:10002,192.168.2.90:10002"
  },
  {
  "_id" : "shard3",
  "host" : "shard3/192.168.2.88:10003,192.168.2.89:10003,192.168.2.90:10003"
  }
  ],
  "ok" : 1
  }
  权限控制
  MongoDB默认为验证模式。如需对数据库进行权限控制,需先采用无验证模式登录,进入admin库创建管理员用户后,再采用验证模式登录。通过前面创建的管理员帐号进行数据库与用户的创建。MongoDB集群的权限与单台的权限控制的不同之处在于,单台是通过-auth属性,集群是通过keyFile来进行服务器间的验证。以下介绍配置全过程。
  前面的所有步骤,都是在nosecurity模式下进行。如果没有采用非验证模式的需要将所有进程(分片、配置、mongos)停止,将切换到无验证模式。
  步骤一:先进行登录,并切换进admin库创建管理员帐号
  [root@Mongo-server-A bin]# ./mongo 192.168.2.88:30000
  mongos> use admin
  mongos> db.addUser('admin','123456')
  {
  "singleShard" : "192.168.2.88:20000,192.168.2.89:20000,192.168.2.90:20000",
  "n" : 0,
  "connectionId" : 211,
  "err" : null,
  "ok" : 1
  }
  {
  "_id" : ObjectId("4f6c78ddad912a3ac6833ece"),
  "user" : "admin",
  "readOnly" : false,
  "pwd" : "95ec4261124ba5951720b199908d892b"
  }
  验证用户名与密码
  mongos> db.auth('admin','123456')
  1
  mongos>exit
  步骤二:退出后,将Server1\Server2\Server3服务器上MongoDB的所有进程(分片、配置、mongos)停止,将切换到验证模式。具体命令如下:
  [root@Mongo-server-A bin]# killall mongod mongos
  [root@Mongo-server-A bin]# netstat -lnpt
  [root@Mongo-server-A bin]# ./mongod -f ./security/shard1.conf
  [root@Mongo-server-A bin]# ./mongod -f ./security/shard2.conf
  [root@Mongo-server-A bin]# ./mongod -f ./security/shard3.conf
  [root@Mongo-server-A bin]# netstat –lnpt
  [root@Mongo-server-A bin]# ./mongod -f ./security/configsvr.conf
  [root@Mongo-server-A bin]# ./mongos -f ./security/mongos.conf
  启动后,如对库进行查看,则会报以下异常:
  [root@Mongo-server-A bin]# ./mongo 192.168.2.90:30000/admin
  MongoDB shell version: 2.0.3
  connecting to: 192.168.2.90:30000/admin
  > show dbs
  Fri Mar 23 22:28:28 uncaught exception: listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" }
  以下是正常登录后显示的信息:
  [root@Mongo-server-A bin]# ./mongo 192.168.2.90:30000/admin
  MongoDB shell version: 2.0.3
  connecting to: 192.168.2.90:30000/admin
  > db.auth('admin','123456')
  1
  mongos>
  步骤三:以下是数据库及数据库用户创建的过程:
  mongos> use hello
  switched to db hello
  mongos> db.addUser('sa','sa')
  {
  "singleShard" : "shard2/192.168.2.88:10002,192.168.2.89:10002,192.168.2.90:10002",
  "n" : 0,
  "lastOp" : NumberLong("5723101431532093441"),
  "connectionId" : 38,
  "err" : null,
  "ok" : 1
  }
  {
  "user" : "sa",
  "readOnly" : false,
  "pwd" : "75692b1d11c072c6c79332e248c4f699",
  "_id" : ObjectId("4f6c8a6e9f67b049a20a00de")
  }
  mongos> exit
  bye
  [root@Mongo-server-A bin]# ./mongo 192.168.2.90:30000/hello -u sa -p
  MongoDB shell version: 2.0.3
  Enter password:
  connecting to: 192.168.2.90:30000/hello
  > show collections
  system.indexes
  system.users
  > db.system.users.find()
  { "_id" : ObjectId("4f6c8a6e9f67b049a20a00de"), "user" : "sa", "readOnly" : false, "pwd" : "75692b1d11c072c6c79332e248c4f699" }
  创建数据库
  > use pomoho
  > db.addUser("pomoho", "******")
  > db.auth("pomoho","******")
  > use admin
  > db.runCommand( { enablesharding : "pomoho"} )
  > db.runCommand( { shardcollection : "pomoho.tablename", key : {primarykey : 1} } )
  > use pomoho
  > db.stats()
  #设置从库可查询
  db.getMongo().setSlaveOk()
  rs.setSlaveOk()
  show collections
  db.c1.insert({age:30})
  db.c1.find()
  分片设置:db.runCommand( { addshard : "shard1", maxSize:500000} );


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627174-1-1.html 上篇帖子: MongoDB 用户登录权限 下篇帖子: 10分钟配置MongoDB集群(2012.12.17更新)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表