zhuce 发表于 2018-10-25 09:02:21

mongodb set开启认证的安装配置

  环境:
  系统均为Centos 7,
  mongodb-linux-x86_64-rhel70-3.4.5.tgz
  节点:
  node0:Primary
  node1:Secondary
  node2:Secondary
  node3:Arbiter
  node0:
  解压mongodb包到 /usr/local/mongodb
  在/usr/local/mongodb下创建 etc、log目录
  把/usr/local/mongodb/bin添加到/etc/profile系统环境变量
  创建放在数据目录 /var/lib/mongodb/data
  创建服务启动脚本
  vi /usr/lib/systemd/system/mongodb.service 添加如下内容
  
  Description=Mongodb Monitoring and Control Daemon
  After=Network.target
  #Network must be start before this service
  
  Type=forking
  ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf
  ExecStop=/usr/local/mongodb/bin/mongod --shutdown
  KillMode=process
  Restart=on-failure
  #Restart=always
  # always mean restart service even this service stop by yourself,using pkill or kill to stop a service.
  RestartSec=15s
  
  WantedBy=multi-user.target
  ########
  设置开机启动
  systemctl enable mongodb
  其他3个节点跟上面操作一样
  node0:
  生成SSL KEY文件
  openssl rand -base64 741 > /usr/local/mongodb/mongodb.key
  把 /usr/local/mongodb/mongodb.key 文件复制到其他3个节点
  配置mongodb
  node0:
  cat /usr/local/mongodb/etc/mongodb.conf
dbpath=/var/lib/mongodb/data  
logpath=/usr/local/mongodb/log/mongodb.log
  
pidfilepath=/usr/local/mongodb/mongodb.pid
  
directoryperdb=true
  
logappend=true
  
#replSet=mggroup1
  
bind_ip=0.0.0.0
  
port=27017
  
oplogSize=10000
  
fork=true
  
#noprealloc=true
  
#keyFile=/usr/local/mongodb/mongodb.key
  
maxConns=10000
  如果需要在直接执行 mongod -f config_file_path,把fork=true注释
  创建用户
  启动mongodb
  systemctl start mongodb
  打开mongodb shell
  mongo --port 27017
use admin  
db.createUser( {
  
user: "mgpai",
  
pwd: "passwd",
  
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  
});
  
db.createUser( {
  
user: "mgroot",
  
pwd: "passwd",
  
roles: [ { role: "root", db: "admin" } ]
  
});
  

  

  
# 退出
  
quit()
  

  
# 查看用户
  
db.system.users.find()
  

  
# 删除用户
  
db.system.users.remove({user:'username'})
  停止node0 mongodb服务
  systemctl stop mongodb
  把/usr/local/mongodb/etc/mongodb.conf配置文件中下面两注释取消
  #replSet=mggroup1
  #keyFile=/usr/local/mongodb/mongodb.key
  node0重新开启mongodb服务
  systemctl start mongodb
  其他3个节点配置文件: cat /usr/local/mongodb/etc/mongodb.conf
dbpath=/var/lib/mongodb/data  
logpath=/usr/local/mongodb/log/mongodb.log
  
pidfilepath=/usr/local/mongodb/mongodb.pid
  
directoryperdb=true
  
logappend=true
  
replSet=mggroup1
  
bind_ip=0.0.0.0
  
port=27017
  
oplogSize=10000
  
fork=true
  
#noprealloc=true
  
keyFile=/usr/local/mongodb/mongodb.key
  
maxConns=10000
  其他3个节点都开启mongodb服务
  replica set配置
  node0: 登录mongodb
  mongo 127.0.0.1:27017 /admin -u mgroot -p
  输入密码
cfg = {_id: 'mggroup1', members: [  
    {_id:0, host:'192.168.1.13:1707', priority:2},
  
    {_id:1, host:'192.168.1.16:1707', priority:1},
  
    {_id:2, host:'192.168.1.17:1707', priority:1},
  
    {_id:3, host:'192.168.1.19:1707', arbiterOnly:true},
  
    ]
  
}
  

  
# cfg变量可取其它名,不与mongodb的主要关键字冲突就行
  

  
# 初始化,只能执行一次,若想取消,把dbpath下的文件删除,重启服务
  
rs.initiate(cfg)
  

  

  
# 查看replica set状态
  
rs.status()
  
#myState本节点状态,1表示 Primary, 2 表示 Secondary, 7 表示 Arbiter
  附:让mongodb set 的secondary支持读操作
  对于replica set 中的secondary 节点默认是不可读的。在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。
  如果通过shell访问mongo,要在secondary进行查询。会出现如下错误:
  imageSet:SECONDARY> db.fs.files.find()
  error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
  有两种方法实现从机的查询:
  第一种方法:db.getMongo().setSlaveOk();
  第二种方法:rs.slaveOk();
  但是这种方式有一个缺点就是,下次再通过mongo进入实例的时候,查询仍然会报错,为此可以通过下列方式
  vi ~/.mongorc.js
  增加一行rs.slaveOk();
  这样的话以后每次通过mongo命令进入都可以查询了
  如果是通过java访问secondary的话则会报下面的异常
  com.mongodb.MongoException: not talking to master and retries used up
  解决的办法很多。
  第一种方法:在java代码中调用dbFactory.getDb().slaveOk();
  第二种方法:在java代码中调用
  dbFactory.getDb().setReadPreference(ReadPreference.secondaryPreferred());//在复制集中优先读secondary,如果secondary访问不了的时候就从master中读
  或
  dbFactory.getDb().setReadPreference(ReadPreference.secondary());//只从secondary中读,如果secondary访问不了的时候就不能进行查询
  第三种方法:在配置mongo的时候增加slave-ok="true"也支持直接从secondary中读
  
  
  


页: [1]
查看完整版本: mongodb set开启认证的安装配置