mongodb安装(docker)

一、创建mongod.conf文件和log目录
vi /opt/mongodb/conf/mongod.conf   #创建配置文件
mkdir -p /opt/mongodb/log
chown -R 999.999 /opt/mongodb/log #修改日志所属用户,不然无法在容器启动前创建日志目录
二、运行容器
#方式一(推荐)
docker run -d --name mongo --restart=always --privileged -p 27017:27017 \
-v /opt/mongodb/data:/data/db \
-v /opt/mongodb/conf:/data/configdb \
-v /opt/mongodb/log:/data/log \
-v /opt/mongodb/backup:/data/backup \
-e TZ=Asia/Shanghai \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
mongo:4.2.2 --config /data/configdb/mongod.conf --bind_ip_all

#方式二
docker run -d --name mongo --restart=always --privileged -p 27017:27017 \
-v /opt/mongodb/data:/data/db \
-v /opt/mongodb/conf:/data/configdb \
-v /opt/mongodb/log:/data/log \
-v /opt/mongodb/backup:/data/backup \
-e TZ=Asia/Shanghai \
mongo:4.2.2 --auth --config /data/configdb/mongod.conf --bind_ip_all
#创建验证用户
docker exec -it mongo mongo admin
db.createUser({user:"admin",pwd:"123456",roles:[{role:'root',db:'admin'}]})
三、开放端口号
#iptables防火墙
iptables -I INPUT -p tcp --dport 27017  -j ACCEPT
service iptables save
#firewall防火墙
firewall-cmd --zone=public --add-port=27017/tcp --permanent
firewall-cmd --reload
四、mongod.conf配置文件
port=27017 #端口
dbpath= /data/db #数据库存文件存放目录
logpath= /data/log/mongo.log #日志文件存放路径
logappend=true #使用追加的方式写日志
#fork=true #以守护进程的方式运行,创建服务器进程,docker方式启动需关闭此选项
maxConns=100 #最大同时连接数
#noauth=true #不启用验证
auth=true
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks
bind_ip = 0.0.0.0 #这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
#replSet=rs0  #副本集名称,所有节点中该值必须相同(配置副本集使用此参数)
五、副本集安装

副本集安装方式和单节点安装方式不同处

  1. 配置文件中需要设置 replSet 值
  2. 配置节点至少2个节点及以上,官方建议至少3个
  3. 如果各节点在不同宿主机中时,docker网络需要使用 host 网络
  4. 选择其中一个节点作为主节点来启动副本集,连接mongodb后使用 rs.initiate() 初始化来指定副本集的所有成员
#初始化话副本集
#方式一
> rs.initiate({
   _id : "rs0",
   members :[
     { _id : 0 , host: "192.168.2.183:27017"},
     { _id : 1 , host: "192.168.2.184:27017"}
   ]
  })
#方式二
#MongoDB副本集通过设置priority决定优先级,默认优先级为1,priority值是0到100之间的数字,数字越大优先级越高,priority=0,则此节点永远不能成为主节点primay。
#1.初始化副本集
> rs.initiate()
#2.添加副本集从节点
> rs.add("192.168.0.9:27017")
> rs.add("192.168.0.10:27017")
#3.设置节点优先级
> cfg = rs.conf() #查看节点顺序
> cfg.members[0].priority = 1
> cfg.members[1].priority = 1
> cfg.members[2].priority = 2 #设置_ID为2的节点为主节点
> rs.reconfig(cfg) #使配置生效
#最后设置从库可读,否则从库无法读
rs0:SECONDARY> rs.slaveOk()
六、配置副本集需要登录验证
  1. 登录主节点
use admin
db.createUser({ user: "username", pwd: "password", roles: [{ role: "root", db: "admin" }] })
  1. 修改配置文件
auth=true #主节点设置为此选项值就行,其他节点无需设置
oplogSize=100
keyFile=/data/configdb/keyfile #注意该文件已映射到容器中
  1. 在主节点生成 keyflie 并复制到其它各节点
# 生成 keyFile
openssl rand -base64 90 -out /opt/mongodb/conf/keyfile
#并复制到其它两个节点
scp /opt/mongodb/conf/keyfile root@192.168.2.184:/opt/mongodb/conf/
  1. 更改三个节点的 keyFile 文件权限和所有者
chmod 600 /opt/mongodb/keyfile # 一定要更改成 600 权限,否正会报错
docker restart mongodb #重启mongodb
七、副本集操作
> rs.conf() # 查看副本集的配置
> rs.status() # 查看副本集状态
> rs.isMaster() # 查看该主机节点是否为副本集主节点
> rs.add("172.16.250.240:27017") # 向副本集中添加成员
> rs.remove("172.16.250.240:27017") # 从副本集中删除成员
> rs.addArb("172.16.250.240:27017") # 向副本集中添加仲裁
> rs.add({"_id":3,"host":"172.16.250.240:27017","priority":0,"hidden":true}) # 向副本集中添加备份节点
> rs.slaveOk();
> db.getMongo().setSlaveOk(); #设置从库可读
> rs.getMongo().setReadPref(策略)
# 策略如下:
# Primary 从主节点读取;
# secondary 从从节点读取;
# nearest 从网络延迟最小的节点读取;
# primaryPreferred 基本上从主节点读取,主节点不可用时,从从节点的读取;
# secondaryPreferred 基本上从从节点读取,从节点不可用时,从主节点读取;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值