热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库的安装部署过程

第一节准备工作一安装mongodb我这里选用rehl5.6作为其运行载体。1.下载mongodb的linux版本(注意32位和64位的区别),下载地址:http://www.mongodb.org/downloads#wgethttp://fastdl.mongodb.org/linux/mongodb-linux-x

第一节 准备工作
 一 安装mongodb
  我这里选用rehl 5.6作为其运行载体。
  1. 下载mongodb的linux版本(注意32位和64位的区别),下载地址:http://www.mongodb.org/downloads
   # wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz
  2. 将下载的mongodb安装文件 mongodb-linux-x86_64-2.0.4.tgz 放到/usr/local/下
  3. 解压
   # tar -zxvf mongodb-linux-x86_64-2.0.4.tgz
   重命名
   # mv mongodb-linux-x86_64-2.0.4 /usr/local/mongodb
  4. 创建数据库文件目录, # mkdir -p /data/mongodb,我把数据库文件目录放在当前文件夹下,# mkdir -p data/db,创建日志目录 #mkdir -p log
 二 启动
  首先用命令进入到bin目录下:cd /usr/local/mongodb/bin
  方式一:直接运行命令启动
  ./mongod ?port 10000 ?fork ?logpath= logpath=/data/mongodb/log/mongodb.log -- logappend -- dbpath=/data/mongodb/data/db
  方式二:通过配置文件方式启动(推荐)。
  1.在服务器上新建mongodb.conf配置文件(建议用命令生成,放在mongodb同一个目录下)
  内容为:
  port=10000 #端口号
  fork=true #以守护进程的方式运行,创建服务器进程
  #master=true #单主从配置时设为主服务器
  #salve=true ##单主从配置时设为从服务器
  logpath=/data/mongodb/log/mongodb.log #日志输出文件路径
  logappend=true #日志输出方式
  dbpath=/data/mongodb/data/db #数据库路径
  replSet=blort #设置富本集的名字
  shardsvr=true #设置是否分片
  2.运行./mongod ?config ~/.mongodb.conf 命令(--config可以直接写成-f)。
  输出:
  all output going to: /data/mongodb/log/mongodb.log
  forked process: 5315
  mongodb 启动参数
--quiet                              # 安静输出
    --port arg                        # 指定服务端口号,默认端口27017
    --bind_ip arg                  # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
    --logpath arg                  # 指定MongoDB日志文件,注意是指定文件不是目录
--logappend                   # 使用追加的方式写日志
    --pidfilepath arg             # PID File 的完整路径,如果没有设置,则没有PID文件
    --keyFile arg                   # 集群的私钥的完整路径,只对于Replica Set 架构有效
    --unixSocketPrefix arg  # UNIX域套接字替代目录,(默认为 /tmp)
--fork                                 # 以守护进程的方式运行MongoDB,创建服务器进程
--auth                                # 启用验证
--cpu                                 # 定期显示CPU的CPU利用率和iowait
    --dbpath arg                     # 指定数据库路径
    --diaglog arg                    # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
--directoryperdb              # 设置每个数据库将被保存在一个单独的目录
--journal                            # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
    --journalOptions arg       # 启用日志诊断选项
--ipv6                                 # 启用IPv6选项
--jsonp                              # 允许JSONP形式通过HTTP访问(有安全影响)
    --maxConns arg             # 最大同时连接数 默认2000
--noauth                           # 不启用验证
--nohttpinterface             # 关闭http接口,默认关闭27018端口访问
--noprealloc                     # 禁用数据文件预分配(往往影响性能)
--noscripting                    # 禁用脚本引擎
--notablescan                  # 不允许表扫描
--nounixsocket                # 禁用Unix套接字监听
    --nssize arg (=16)           # 设置信数据库.ns文件大小(MB)
--objcheck                        # 在收到客户数据,检查的有效性,
    --profile arg                      # 档案参数 0=off 1=slow, 2=all
--quota                              # 限制每个数据库的文件数,设置默认为8
    --quotaFiles arg               #  number of files allower per db, requires --quota
--rest                                  # 开启简单的rest API
--repair                              # 修复所有数据库run repair on all dbs
    --repairpath arg               # 修复库生成的文件的目录,默认为目录名称dbpath
    --slowms arg (=100)       # value of slow for profile and console log
--smallfiles                       # 使用较小的默认文件
    --syncdelay arg (=60)    # 数据写入磁盘的时间秒数(0=never,不推荐)
--sysinfo                           # 打印一些诊断系统信息
--upgrade                        # 如果需要升级数据库
    * Replicaton 参数

   --------------------------------------------------------------------------------

    --fastsync                      # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
--autoresync                 # 如果从库与主库同步数据差得多,自动重新同步,
    --oplogSize arg            # 设置oplog的大小(MB)
    * 主/从参数

   --------------------------------------------------------------------------------

    --master                        # 主库模式
--slave                           # 从库模式
    --source arg                 # 从库 端口号
    --only arg                      # 指定单一的数据库复制
    --slavedelay arg          # 设置从库同步主库的延迟时间
    * Replica set(副本集)选项:

   --------------------------------------------------------------------------------

    --replSet arg                   # 设置副本集名称
    * Sharding(分片)选项

   --------------------------------------------------------------------------------

    --configsvr                       # 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
--shardsvr                        # 声明这是一个集群的分片,默认端口27018
--noMoveParanoia        # 关闭偏执为moveChunk数据保存?
 

 三 查询进程和关闭数据库
  1. 运行 ps -ef|grep mongo 命令查询服务器进程
  2. 运行 kill -2 5315命令kill掉5315的进程
 四 进入数据库并简单操作数据库
  1.运行./mongo ?port 1000进入刚刚启动的端口号为10000的数据库
  2.使用use test可以切换集合(相当于数据库表),这里切换到了test集合
  3.使用db.test.insert("a","b");向集合插入数据
  4.使用db.test.find();查询集合里的数据
  5.更多shell命令请查阅相关文档

 五 注意事项
  1. 防火墙设置(测试时可直接关闭linux关闭防火墙:立即但不永久生效:service iptables stop重启永久生效:chkconfig iptables off)

第二节 副本集
 简单的说,副本集就是有自动故障恢复功能的主从集群,副本集没有固定的"主节点",集群会通过投票选举一个"主节点"。当主节点岩机时,会变更到其他节点。副本集布在不同机器上时,至少要启动三个(单数)数据库服务器进程,否则启动时投票不成功会一直初始化不了。
 一 以配置文件方式启动三台机器上的数据库服务器
  1. 三台服务器的配置文件:
   port=10000 #端口号
   fork=true #以守护进程的方式运行,创建服务器进程
   logpath=/data/mongodb/log/mongodb.log #日志输出文件路径
   logappend=true #日志输出方式
   dbpath=/data/mongodb/data/db #数据库路径
   replSet=blort #设置富本集的名字为blort,replSet是让服务器知道在这个"blort"副本集中还有别的机器
   # replSet=blort /10.10.112.181:10000, 10.10.112.191:10000#设置富本集的名字,这种方式也可以,意思就是"blort"副本集其他机器,位置在10.10.112.181:10000和10.10.112.191:10000,但不推荐
  2. 通命令启动三台数据库服务器
   /usr/local/mongodb/bin/mongod -f /data/mongodb/blort/config.conf
   /usr/local/mongodb/bin/mongod -f /data/mongodb/blort2/config.conf
   /usr/local/mongodb/bin/mongod -f /data/mongodb/blort3/config.conf
 二 初始化副本集(只能初始化一次)
  /usr/local/mongodb/bin/mongo --port 30001
  use admin
  方法一:
  db.runCommand({"replSetInitiate":{"_id":"blort","members":[{"_id":0,"host":"10.10.113.122:30001"},{"_id":1,"host":"10.10.113.122:30002"},{"_id":2,"host":"10.10.113.122:30003","arbiterOnly":true}]}})
  方法二:
  cOnfig={_id:'blort',members:[{"_id":0,host:'10.10.113.122:30001},{"_id":1,host:'10.10.113.122:30002'},{"_id":2,"host":"10.10.113.122:30003","arbiterOnly":true}]};
  rs.initiate(config);

 三 增加和设置副本集
  有几种不同类型的节点可以存在于副本集:
  Standard :存在于副本,参与投票,有可能成为活跃节点(即主节点)
  Passive :存储了完整的数据副本,参与投票,不能成为活跃节点
  Arbiter:仲裁者,只参与投票,不能成为活跃节点
  Priority:优先级,(投票会投优先级高的,如果相同,则投数据最新的)
  以上类型可以通过以下命令对副本集合进行修改或者增加服务器
  db.runCommand({"replSetReconfig":{"_id":"test3","version":2,"members":[{"_id":0,"host":"10.10.113.122:30001"},{"_id":1,"host":"10.10.113.122:30002"},{"_id":2,"host":"10.10.113.122:30003","arbiterOnly":true}]}})
  增加副本服务器
  在增加一个从服务器节点
  a.以相同副本集名字启动一台服务器
  b.通过rs.add命令往system.replset添加新的从服务器成员
  rs.add("10.10.113.122:30005"); 或者rs.add({"_id":4,"host":"10.10.113.122:30005"})
  添加仲裁
  rs.addArb("10.10.113.122:30004");

 四 读扩展
  待研究
 五 用户校验
  未成功
  use test;
  db.addUser("test","123456");
  db.auth("test","123456");
  db.system.users.find();
  db.system.users.remove("test","123456");
第二节 replica sets + shard (双机方案,单机模拟)
 一 准备
  mkdir -p /data/mongodb/shard1-1/db/
  mkdir -p /data/mongodb/shard1-1/log/
  /data/mongodb/shard1-1/config.conf
   port=30001   #端口号
   fork=true   #以守护进程的方式运行,创建服务器进程
   #nohttpinterface=true   # 关闭http接口,默认关闭27018端口访问 port + 1000
   rest = true  #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个
   shardsvr=true  #启动分片
   #oplogSize=100  #复制日志大小 MB
   logpath=/data/mongodb/shard1-1/log/shard1-1.log   #日志输出文件路径
   logappend=true   #日志输出方式
   dbpath=/data/mongodb/shard1-1/db   #数据库路径
   directoryperdb=true  # 设置每个数据库将被保存在一个单独的目录
   replSet=shard1   #设置富本集的名字为shard1,replSet是让服务器知道在这个"shard1"副本集中还有别的机器

   #auth=true # 启用验证
  mkdir -p /data/mongodb/shard1-1a/db/
  mkdir -p /data/mongodb/shard1-1a/log/
  /data/mongodb/shard1-1a/config.conf
   port=30002   #端口号
   fork=true   #以守护进程的方式运行,创建服务器进程
   #nohttpinterface=true   # 关闭http接口,默认关闭27018端口访问 port + 1000
   rest = true  #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个
   shardsvr=true  #启动分片
   #oplogSize=100  #复制日志大小 MB
   logpath=/data/mongodb/shard1-1a/log/shard1-1a.log   #日志输出文件路径
   logappend=true   #日志输出方式
   dbpath=/data/mongodb/shard1-1a/db   #数据库路径
   directoryperdb=true  # 设置每个数据库将被保存在一个单独的目录
   replSet=shard1   #设置富本集的名字为shard1,replSet是让服务器知道在这个"shard1"副本集中还有别的机器

   #auth=true # 启用验证
  mkdir -p /data/mongodb/shard1-2/db/
  mkdir -p /data/mongodb/shard1-2/log/
  /data/mongodb/shard1-2/config.conf
   port=30003   #端口号
   fork=true   #以守护进程的方式运行,创建服务器进程
   #nohttpinterface=true   # 关闭http接口,默认关闭27018端口访问 port + 1000
   rest = true  #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个
   shardsvr=true  #启动分片
   #oplogSize=100  #复制日志大小 MB
   logpath=/data/mongodb/shard1-2/log/shard1-2.log   #日志输出文件路径
   logappend=true   #日志输出方式
   dbpath=/data/mongodb/shard1-2/db   #数据库路径
   directoryperdb=true  # 设置每个数据库将被保存在一个单独的目录
   replSet=shard1   #设置富本集的名字为shard1,replSet是让服务器知道在这个"shard1"副本集中还有别的机器

   #auth=true # 启用验证
  mkdir -p /data/mongodb/shard2-1/db/
  mkdir -p /data/mongodb/shard2-1/log/
  /data/mongodb/shard2-1/config.conf
   port=32001   #端口号
   fork=true   #以守护进程的方式运行,创建服务器进程
   #nohttpinterface=true   # 关闭http接口,默认关闭27018端口访问 port + 1000
   rest = true  #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个
   shardsvr=true  #启动分片
   #oplogSize=100  #复制日志大小 MB
   logpath=/data/mongodb/shard2-1/log/shard2-1.log   #日志输出文件路径
   logappend=true   #日志输出方式
   dbpath=/data/mongodb/shard2-1/db   #数据库路径
   directoryperdb=true  # 设置每个数据库将被保存在一个单独的目录
   replSet=shard2   #设置富本集的名字为shard2,replSet是让服务器知道在这个"shard2"副本集中还有别的机器

   #auth=true # 启用验证
  mkdir -p /data/mongodb/shard2-1a/db/
  mkdir -p /data/mongodb/shard2-1a/log/
  /data/mongodb/shard2-1a/config.conf
   port=32002   #端口号
   fork=true   #以守护进程的方式运行,创建服务器进程
   #nohttpinterface=true   # 关闭http接口,默认关闭27018端口访问 port + 1000
   rest = true  #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个
   shardsvr=true  #启动分片
   #oplogSize=100  #复制日志大小 MB
   logpath=/data/mongodb/shard2-1a/log/shard2-1a.log   #日志输出文件路径
   logappend=true   #日志输出方式
   dbpath=/data/mongodb/shard2-1a/db   #数据库路径
   directoryperdb=true  # 设置每个数据库将被保存在一个单独的目录
   replSet=shard2   #设置富本集的名字为shard2,replSet是让服务器知道在这个"shard2"副本集中还有别的机器

   #auth=true # 启用验证
  mkdir -p /data/mongodb/shard2-2/db/
  mkdir -p /data/mongodb/shard2-2/log/
  /data/mongodb/shard2-2/config.conf
   port=32003   #端口号
   fork=true   #以守护进程的方式运行,创建服务器进程
   #nohttpinterface=true   # 关闭http接口,默认关闭27018端口访问 port + 1000
   rest = true  #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个
   shardsvr=true  #启动分片
   #oplogSize=100  #复制日志大小 MB
   logpath=/data/mongodb/shard2-2/log/shard2-2.log   #日志输出文件路径
   logappend=true   #日志输出方式
   dbpath=/data/mongodb/shard2-2/db   #数据库路径
   directoryperdb=true  # 设置每个数据库将被保存在一个单独的目录
   replSet=shard2   #设置富本集的名字为shard2,replSet是让服务器知道在这个"shard2"副本集中还有别的机器

   #auth=true # 启用验证
  mkdir -p /data/mongodb/config1/db/
  mkdir -p /data/mongodb/config1/log/
  /data/mongodb/config1/config.conf
   dbpath = /data/mongodb/config1/db
   cOnfigsvr= true
   port = 40001
   logpath =/data/mongodb/config1/log/config1.log
   logappend = true
   fork = true
   #auth=true # 启用验证
  mkdir -p /data/mongodb/config2/db/
  mkdir -p /data/mongodb/config2/log/
  /data/mongodb/config2/config.conf
   dbpath = /data/mongodb/config2/db
   cOnfigsvr= true
   port = 40002
   logpath =/data/mongodb/config2/log/config2.log
   logappend = true
   fork = true
   #auth=true # 启用验证
  mkdir -p /data/mongodb/config3/db/
  mkdir -p /data/mongodb/config3/log/
  /data/mongodb/config3/config.conf
   dbpath = /data/mongodb/config3/db
   cOnfigsvr= true
   port = 40003
   logpath =/data/mongodb/config3/log/config3.log
   logappend = true
   fork = true
   #auth=true # 启用验证
  mkdir -p /data/mongodb/mongos1/log/
  /data/mongodb/mongos1/config.conf
   cOnfigdb=10.10.113.122:40001,10.10.113.122:40002,10.10.113.122:40003
   port = 50001
   chunkSize = 1
   logpath =/data/mongodb/mongos1/log/mongos1.log
   logappend = true
   fork = true

   #auth=true # 启用验证
  mkdir -p /data/mongodb/mongos2/log/
  /data/mongodb/mongos2/config.conf
   cOnfigdb=10.10.113.122:40001,10.10.113.122:40002,10.10.113.122:40003
   port = 50002
   chunkSize = 1
   logpath =/data/mongodb/mongos2/log/mongos2.log
   logappend = true
   fork = true

   #auth=true # 启用验证

 二 启动
  shard1 副本 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard1-1/config.conf
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard1-1a/config.conf
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard1-2/config.conf
  /usr/local/mongodb/bin/mongo --port 30001
  use admin
  db.runCommand({"replSetInitiate":{"_id":"shard1","members":[{"_id":0,"host":"10.10.113.122:30001"},{"_id":1,"host":"10.10.113.122:30002","arbiterOnly":true},{"_id":2,"host":"10.10.113.122:30003"}]}})
  shard2 副本 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard2-1/config.conf
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard2-1a/config.conf
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard2-2/config.conf
  /usr/local/mongodb/bin/mongo --port 31001
  use admin
  db.runCommand({"replSetInitiate":{"_id":"shard2","members":[{"_id":0,"host":"10.10.113.122:32001"},{"_id":1,"host":"10.10.113.122:32002","arbiterOnly":true},{"_id":2,"host":"10.10.113.122:32003"}]}})
  config1 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/config1/config.conf
  config2 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/config2/config.conf
  config3 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/config3/config.conf
  mongos1 启动
  /usr/local/mongodb/bin/mongos -f /data/mongodb/mongos1/config.conf
  mongos2 启动
  /usr/local/mongodb/bin/mongos -f /data/mongodb/mongos2/config.conf
  /usr/local/mongodb/bin/mongo --port 50001
  use admin
  db.runCommand({addshard:"shard1/10.10.113.122:30001,10.10.113.122:30003",name:"shard1", maxsize:100})
  db.runCommand({addshard:"shard2/10.10.113.122:32001,10.10.113.122:32003",name:"shard2", maxsize:100})
  db.runCommand({listshards:1})
  use test
  db.test.insert({"aaa":"bbb"});

第三节 replica sets + shard (3机高可用 , 一主双备份)
 一 方案
  每个分片3服务器,前期采用三台,日后服务器的增加考虑灾备,服务增加的基数最少为三台(或才有双机方案)。
  Server1 10.10.113.122 Server1 10.10.113.132 Server3 10.10.113.133
  

  类型    服务器   用途       系统   说明
  存储/数据   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;
 二 准备
  安装mongodb 参照第一节
  linux 传文件
  # scp mongodb-linux-x86_64-2.0.4.tgz root@10.10.113.132:/root
  # ssh 10.10.113.132
  删除目录
  # rm -r -f /data/mongodb
  创建配置、日志、分片、key文件存储目录及验证文件
  mkdir /data/mongodb/configsvr/ -p
  mkdir /data/mongodb/log/ -p
  mkdir /data/mongodb/shard1/ -p
  mkdir /data/mongodb/shard2/ -p
  mkdir /data/mongodb/shard3/ -p
  mkdir /data/mongodb/key/ -p
  mkdir /data/mongodb/conf/security/ -p
  mkdir /data/mongodb/conf/nosecurity/ -p
  创建配置文件
   1、 创建验证文件security于/data/mongodb/key/目录,关赋予可读权限,命令如下:
   cd /data/mongodb/key/
   echo 'hycloudmongodbkey' > security
   chmod 600 security
   2、 创建shard1.conf、shard2.conf、shard3.conf、configsvr.conf、mongos.conf于/data/mongodb/conf/security/ 和 /data/mongodb/conf/nosecurity/的目录,内容分别如下:
   shard1.conf
dbpath = /data/mongodb/shard1

directoryperdb = true

shardsvr = true

replSet = shard1

#bind_ip = 10.10.113.122,localhost

port = 10001

oplogSize = 100

logpath =/data/mongodb/log/shard1.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
   shard2.conf
dbpath = /data/mongodb/shard2

directoryperdb = true

shardsvr = true

replSet = shard2

#bind_ip = 10.10.113.122,localhost

port = 10002

oplogSize = 100

logpath = /data/mongodb/log/shard2.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
   shard3.conf
dbpath = /data/mongodb/shard3

directoryperdb = true

shardsvr = true

replSet = shard3

#bind_ip = 10.10.113.122,localhost

port = 10003

oplogSize = 100

logpath = /data/mongodb/log/shard3.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
   configsvr.conf
dbpath = /data/mongodb/configsvr

directoryperdb = true

cOnfigsvr= true

port = 20000

logpath =/data/mongodb/log/configsvr.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
   mongos.conf
cOnfigdb=10.10.113.122:20000, 10.10.113.132:20000, 10.10.113.133:20000

port = 30000

chunkSize = 1  #单位 mb 生成环境请使用 200 或删除

logpath =/data/mongodb/log/mongos.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
  分片配置
   说明:分片要在无验证环境中配置,否则会出现无权限等异常。采用以下命令启动Server1\Server2\Server3上的shard1\shard2\shard3:

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard1.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard2.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard3.conf

   以下命令查看是否正常启动:

   # netstat -lnpt # 或 ps -ef | grep mongo

   启动后连接到shard1\shard2\shard3分别进行配置,在任意一台服务器即可,以下是具体配置过程:

   # /usr/local/mongodb/bin/mongo --port 10001
   >use admin
   >cOnfig= {_id:"shard1", members: [

           {_id: 0, host:"10.10.113.122:10001"},

           {_id: 1, host:"10.10.113.132:10001"},

           {_id: 2, host:"10.10.113.133:10001"}]

        };

   >rs.initiate(config)

   >exit

   # /usr/local/mongodb/bin/mongo --port 10002

   >use admin
   >cOnfig= {_id:"shard2", members: [

           {_id: 0, host:"10.10.113.132:10002"},

           {_id: 1, host:"10.10.113.133:10002"},

           {_id: 2, host:"10.10.113.122:10002"}]

     };

   >rs.initiate(config)

   >exit

   # /usr/local/mongodb/bin/mongo --port 10003
   >use admin

   >cOnfig= {_id:"shard3", members: [

           {_id: 0, host:"10.10.113.133:10003"},

           {_id: 1, host:"10.10.113.122:10003"},

           {_id: 2, host:"10.10.113.132:10003"}]

     };

   >rs.initiate(config)

   至此,已完成分片配置
  路由设置
   路由是能过config来连接分片服务器,在启动路由进程时,先启动配置进程,路由配置过程如下:

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/configsvr.conf

   # /usr/local/mongodb/bin/mongos -f /data/mongodb/conf/nosecurity/mongos.conf

   启动后,连接路由进行分片添加,只需配置一台路由。注:分片操作需在admin库下进行,另外必需在无验证要求下进行,即采用前面创建于nosecurity文件夹下的配置。

   # /usr/local/mongodb/bin/mongo --port 30000

   mongos> use admin

   mongos> db.runCommand({addshard:"shard1/10.10.113.122:10001,10.10.113.132:10001,10.10.113.133:10001",name:"shard1", maxsize:20480} )

   mongos> db.runCommand({addshard:"shard2/10.10.113.122:10002,10.10.113.132:10002,10.10.113.133:10002",name:"shard2", maxsize:20480} )

   mongos> db.runCommand({addshard:"shard3/10.10.113.122:10003,10.10.113.132:10003,10.10.113.133:10003",name:"shard3", maxsize:20480} )

   命令检查分片添加情况,如出现以下结果则表示配置成功:

   mongos> db.runCommand( {listshards : 1 } )
  权限控制
   MongoDB默认为验证模式。如需对数据库进行权限控制,需先采用无验证模式登录,进入admin库创建管理员用户后,再采用验证模式登录。通过前面创建的管理员帐号进行数据库与用户的创建。MongoDB集群的权限与单台的权限控制的不同之处在于,单台是通过-auth属性,集群是通过keyFile来进行服务器间的验证。以下介绍配置全过程。

   前面的所有步骤,都是在nosecurity模式下进行。如果没有采用非验证模式的需要将所有进程(分片、配置、mongos)停止,将切换到无验证模式。

   步骤一:先进行登录,并切换进admin库创建管理员帐号

   # /usr/local/mongodb/bin/mongo --port 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)停止,将切换到验证模式。具体命令如下:

   #killall mongod mongos

   #netstat -lnpt

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard1.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard2.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard3.conf

   # netstat -lnpt

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/configsvr.conf

   # /usr/local/mongodb/bin/mongos -f /data/mongodb/conf/security/mongos.conf

   启动后,如对库进行查看,则会报以下异常:

   # /usr/local/mongodb/bin/mongo 10.10.113.122:30000/admin

   MongoDB shell version: 2.0.4

   connecting to:10.10.113.122:30000/admin

   > show dbs

   Fri Mar 23 22:28:28 uncaughtexception: listDatabases failed:{ "ok" : 0, "errmsg" :"unauthorized" }

   以下是正常登录后显示的信息:

   # /usr/local/mongodb/bin/mongo 10.10.113.122:30000/admin

   MongoDB shell version: 2.0.4

   connecting to:10.10.113.122:30000/admin

   >db.auth('admin','123456')

   1

   mongos>

   步骤三:以下是数据库及数据库用户创建的过程:

   mongos> use hello

   switched to db hello

   mongos>db.addUser('sa','sa')

   {

     "singleShard" :"shard2/10.10.113.122:10002,10.10.113.132:10002,10.10.113.133:10002",

     "n" : 0,

     "lastOp" :NumberLong("5723101431532093441"),

     "connectionId" : 38,

     "err" : null,

     "ok" : 1

   }

   {

     "user" : "sa",

     "readOnly" : false,

     "pwd" :"75692b1d11c072c6c79332e248c4f699",

     "_id" :ObjectId("4f6c8a6e9f67b049a20a00de")

   }

   mongos> exit

   bye

   # /usr/local/mongodb/bin/mongo 10.10.113.122:30000/hello -u sa -p

   MongoDB shell version: 2.0.4

   Enter password:

   connecting to:10.10.113.122:30000/hello

   > show collections

   system.indexes

   system.users

   > db.system.users.find()

   { "_id" :ObjectId("4f6c8a6e9f67b049a20a00de"), "user" :"sa", "readOnly" : false, "pwd" :"75692b1d11c072c6c79332e248c4f699" }

  分片
   # /usr/local/mongodb/bin/mongo -port 30000
   > use test
   导入数据
   > use admin
   > db.runCommand({"enablesharding":"test"})
   > db.runCommand({"shardcollection":"test.doc","key":{"_id":1}})
第四节 replica sets + shard (3机高可用 , 一主一备份一仲裁)
 一 方案
  每个分片3服务器,前期采用三台,日后服务器的增加考虑灾备,服务增加的基数最少为三台(或用有双机方案)。
  Server1 10.10.113.122 Server1 10.10.113.132 Server3 10.10.113.133
  

  类型    服务器   用途       系统   说明
  存储/数据   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;
 二 准备
  安装mongodb 参照第一节
  linux 传文件
  # scp mongodb-linux-x86_64-2.0.4.tgz root@10.10.113.132:/root
  # ssh 10.10.113.132
  创建配置、日志、分片、key文件存储目录及验证文件
  mkdir /data/mongodb/configsvr/ -p
  mkdir /data/mongodb/log/ -p
  mkdir /data/mongodb/shard1/ -p
  mkdir /data/mongodb/shard2/ -p
  mkdir /data/mongodb/shard3/ -p
  mkdir /data/mongodb/key/ -p
  mkdir /data/mongodb/conf/security/ -p
  mkdir /data/mongodb/conf/nosecurity/ -p
  创建配置文件
   1、 创建验证文件security于/data/mongodb/key/目录,关赋予可读权限,命令如下:
   cd /data/mongodb/key/
   echo 'hycloudmongodbkey' > security
   chmod 600 /data/mongodb/key/security
   2、 创建shard1.conf、shard2.conf、shard3.conf、configsvr.conf、mongos.conf于/data/mongodb/conf/security/ 和 /data/mongodb/conf/nosecurity/的目录,内容分别如下:
   shard1.conf
dbpath = /data/mongodb/shard1

directoryperdb = true

shardsvr = true

replSet = shard1

#bind_ip = 10.10.113.122,localhost

port = 10001

oplogSize = 100

logpath =/data/mongodb/log/shard1.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
   shard2.conf
dbpath = /data/mongodb/shard2

directoryperdb = true

shardsvr = true

replSet = shard2

#bind_ip = 10.10.113.122,localhost

port = 10002

oplogSize = 100

logpath = /data/mongodb/log/shard2.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
   shard3.conf
dbpath = /data/mongodb/shard3

directoryperdb = true

shardsvr = true

replSet = shard3

#bind_ip = 10.10.113.122,localhost

port = 10003

oplogSize = 100

logpath = /data/mongodb/log/shard3.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
   configsvr.conf
dbpath = /data/mongodb/configsvr

directoryperdb = true

cOnfigsvr= true

port = 20000

logpath =/data/mongodb/log/configsvr.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
   mongos.conf
cOnfigdb=10.10.113.122:20000, 10.10.113.132:20000, 10.10.113.133:20000

port = 30000

chunkSize = 1  #单位 mb 生成环境请使用 200 或删除

logpath =/data/mongodb/log/mongos.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
  分片配置
   说明:分片要在无验证环境中配置,否则会出现无权限等异常。采用以下命令启动Server1\Server2\Server3上的shard1\shard2\shard3:

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard1.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard2.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard3.conf

   以下命令查看是否正常启动:

   # netstat -lnpt # 或 ps -ef | grep mongo

   启动后连接到shard1\shard2\shard3分别进行配置,在任意一台服务器即可,以下是具体配置过程:(注意不能在仲裁机器初始化)

   # /usr/local/mongodb/bin/mongo --port 10001
   >use admin
   >cOnfig= {_id:"shard1", members: [

           {_id: 0, host:"10.10.113.122:10001"},

           {_id: 1, host:"10.10.113.132:10001"},

           {_id: 2, host:"10.10.113.133:10001","arbiterOnly":true}]

        };

   >rs.initiate(config)

   >exit

   # /usr/local/mongodb/bin/mongo --port 10002

   >use admin
   >cOnfig= {_id:"shard2", members: [

           {_id: 0, host:"10.10.113.132:10002"},

           {_id: 1, host:"10.10.113.133:10002"},

           {_id: 2, host:"10.10.113.122:10002","arbiterOnly":true}]

     };

   >rs.initiate(config)

   >exit
   # /usr/local/mongodb/bin/mongo --port 10003
   >use admin

   >cOnfig= {_id:"shard3", members: [

           {_id: 0, host:"10.10.113.133:10003"},

           {_id: 1, host:"10.10.113.122:10003"},

           {_id: 2, host:"10.10.113.132:10003","arbiterOnly":true}]

     };

   >rs.initiate(config)

   至此,已完成分片配置
  路由设置
   路由是能过config来连接分片服务器,在启动路由进程时,先启动配置进程,路由配置过程如下:

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/configsvr.conf

   # /usr/local/mongodb/bin/mongos -f /data/mongodb/conf/nosecurity/mongos.conf

   启动后,连接路由进行分片添加,只需配置一台路由。注:分片操作需在admin库下进行,另外必需在无验证要求下进行,即采用前面创建于nosecurity文件夹下的配置。

   # /usr/local/mongodb/bin/mongo --port 30000

   mongos> use admin
   # maxsize:20480 #单位 mb 分片限制大小 根据实际服务器来定
   mongos> db.runCommand({addshard:"shard1/10.10.113.122:10001,10.10.113.132:10001,10.10.113.133:10001",name:"shard1", maxsize:20480} )

   mongos> db.runCommand({addshard:"shard2/10.10.113.132:10002,10.10.113.133:10002,10.10.113.122:10002",name:"shard2", maxsize:20480} )

   mongos> db.runCommand({addshard:"shard3/10.10.113.133:10003,10.10.113.122:10003,10.10.113.132:10003",name:"shard3", maxsize:20480} )

   命令检查分片添加情况,如出现以下结果则表示配置成功:

   mongos> db.runCommand( {listshards : 1 } )
  权限控制
   MongoDB默认为验证模式。如需对数据库进行权限控制,需先采用无验证模式登录,进入admin库创建管理员用户后,再采用验证模式登录。通过前面创建的管理员帐号进行数据库与用户的创建。MongoDB集群的权限与单台的权限控制的不同之处在于,单台是通过-auth属性,集群是通过keyFile来进行服务器间的验证。以下介绍配置全过程。

   前面的所有步骤,都是在nosecurity模式下进行。如果没有采用非验证模式的需要将所有进程(分片、配置、mongos)停止,将切换到无验证模式。

   步骤一:先进行登录,并切换进admin库创建管理员帐号

   # /usr/local/mongodb/bin/mongo --port 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)停止,将切换到验证模式。具体命令如下:

   # killall mongod mongos

   # netstat -lnpt

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard1.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard2.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard3.conf

   # netstat -lnpt # ps -ef | grep mongo

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/configsvr.conf

   # /usr/local/mongodb/bin/mongos -f /data/mongodb/conf/security/mongos.conf

   启动后,如对库进行查看,则会报以下异常:

   # /usr/local/mongodb/bin/mongo 10.10.113.122:30000/admin

   MongoDB shell version: 2.0.4

   connecting to:10.10.113.122:30000/admin

   > show dbs

   Fri Mar 23 22:28:28 uncaughtexception: listDatabases failed:{ "ok" : 0, "errmsg" :"unauthorized" }

   以下是正常登录后显示的信息:

   # /usr/local/mongodb/bin/mongo 10.10.113.122:30000/admin

   MongoDB shell version: 2.0.4

   connecting to:10.10.113.122:30000/admin

   >db.auth('admin','123456')

   1

   mongos>

   步骤三:以下是数据库及数据库用户创建的过程:

   mongos> use hello

   switched to db hello

   mongos>db.addUser('sa','sa')

   {

     "singleShard" :"shard2/10.10.113.122:10002,10.10.113.132:10002,10.10.113.133:10002",

     "n" : 0,

     "lastOp" :NumberLong("5723101431532093441"),

     "connectionId" : 38,

     "err" : null,

     "ok" : 1

   }

   {

     "user" : "sa",

     "readOnly" : false,

     "pwd" :"75692b1d11c072c6c79332e248c4f699",

     "_id" :ObjectId("4f6c8a6e9f67b049a20a00de")

   }

   mongos> exit

   bye

   # /usr/local/mongodb/bin/mongo 10.10.113.122:30000/hello -u sa -p

   MongoDB shell version: 2.0.4

   Enter password:

   connecting to:10.10.113.122:30000/hello

   > show collections

   system.indexes

   system.users

   > db.system.users.find()

   { "_id" :ObjectId("4f6c8a6e9f67b049a20a00de"), "user" :"sa", "readOnly" : false, "pwd" :"75692b1d11c072c6c79332e248c4f699" }

  分片
   # /usr/local/mongodb/bin/mongo -port 30000
   > use admin
   > db.runCommand({"enablesharding":"test"})
   > db.runCommand({"shardcollection":"test.doc","key":{"_id":1}})
   > db.runCommand({"shardcollection":"test.txt","key":{"_id":1}})
   索引
   > use test
   > db.fs.chunks.ensureIndex({files_id: 1}); 
   > use admin
   > db.runCommand({ shardcollection : "test.fs.chunks", key : { files_id : 1 }}) 

   
   索引
   > use test
   > db.doc.ensureIndex({"letter":1})
   导入数据
   查询数据
   分片管理
   > use config
   > show collections
   > db.shards.find()
   > db.databases.find()
   > db.chunks.find()
   > db.printShardingStatus()
 


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
author-avatar
娟紫恋蓝_610
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有