MongoDB 3.2 维护

一般配置

openssl rand -base64 12 > /app/mongodb/conf/keyfile
cat /app/mongodb/conf/keyfile
pXvFZbWEyteLbTHV

# rep.conf
port=27017 #端口
dbpath=/app/data/mongodb #数据文件存放目录
logpath=/app/logs/mongodb/mongodb.log #日志文件存放目录
logappend=true #使用追加的方式写日志
#fork=true #在后台运行,Systemd启动时,需要注释掉此配置
maxConns=5000 #最大同时连接数 默认2000
storageEngine = wiredTiger
auth=true #启用验证
nohttpinterface=true
rest=false
replSet=rep   #  集群名
oplogSize=10240
keyFile=/app/mongodb/conf/keyfile
wiredTigerCacheSizeGB=4

systemd 启动脚本

说明

  • 使用systemd启动脚本时,配置文件的 fork=true 需要注释掉。
  • Restart=on-failure , 进程如果异常重启,会自动拉起进程。
  • OOMScoreAdjust=-100,会避免被 OOM。 ( OOM 发送的信号为 SIGKILL)
# /etc/systemd/system/mongodb.service
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target

[Service]
#User=mongodb
Restart=on-failure
RestartSec=30
OOMScoreAdjust=-1000
ExecStartPre=/bin/mkdir -p /app/logs/mongodb /app/data/mongodb
ExecStart=/usr/bin/numactl --interleave=all /app/mongodb/bin/mongod --quiet --config /app/mongodb/conf/rep.conf

[Install]
WantedBy=multi-user.target

集群

角色:PRIMARY(主节点,读写) SECONDARY(从节点,保存数据,默认不读写) ARBITER(仲裁节点,不保存数据,不提供读写)
主从节点的角色可以相互切换。
仲裁节点始终为仲裁节点,仲裁节点只参与主从节点切换时的投票。
节点:一般为3个节点、5个节点。3节点的部署,一般为1主1从1仲裁,或1主2从。
5节点部署一般为1主2从2仲裁,或1主3从1仲裁。
硬件配置:主从节点配置需保持一致,仲裁节点配置因不存业务数据,配置可以低一些。

单节点如何无缝升级到集群

  1. 单节点上创建用户和库,正常跑业务。此单节点,就是即将升级到集群中的主节点。
  2. 新增两个节点,参考上文的配置,注意各节点 keyFile 和 replSet 保持一致,正常启动新节点。启动后,不用对这两个节点操作。
  3. 在主节点上执行下文的初始化集群的命令,执行完 rs.initiate(config) 之后,从节点就会自动同步数据
  4. 通过命令 rs.status() 查看集群各节点状态。

初始化集群:

说明: priority 越高,则主从切换的时候优先切换到哪台机器上作为主节点。

config = {
_id:"rep",
"version" : 1,
members:[
{_id:0,host:"192.168.10.2:27017",priority:3},
{_id:1,host:"192.168.10.145:27017",priority:1,arbiterOnly: true},
{_id:2,host:"192.168.10.146:27017",priority:2}
]}
//config.members[1] = {"_id":1,"host":"192.168.10.145:27017","arbiterOnly":true}
rs.initiate(config)

初始化之后,在主节点创建用户,其他数据节点会自动同步用户

/app/mongodb/bin/mongo admin 
db.createUser({user:"aaa",pwd:"123",roles:[{role:"root",db:"admin"}]})

默认读写都是主节点,(根据业务需要)通过以下命令设置从节点只读:

db.setSlaveOk()

重新配置集群

use local
db.dropDatabase()

config = {
_id:"rep",
"version" : 1,
members:[
{_id:0,host:"192.168.10.2:27017",priority:3},
{_id:1,host:"192.168.10.145:27017",priority:1,arbiterOnly: true},
{_id:2,host:"192.168.10.146:27017",priority:2}
]}
//rs.initiate(config)
rs.reconfig(config, {force: true})

查看集群:

rs.config()

use local
db.system.replset.find()

提升指定服务器为 PRIMARY :

cfg = rs.conf()
cfg.members[0].priority = 3
cfg.members[1].priority = 1
cfg.members[2].priority = 2
rs.reconfig(cfg)

将主节点切换到从节点,并且指定时间内都不在作为主节点。

rs.freeze(86400);   // 该节点 xx 秒内不会作为主节点(实际发现下面的命令更有用)

// 主节点切为从节点,并且一天内不能作为主
rs.stepDown(86400);      

关闭从节点

db.shutdownServer()

Docker 部署 mongodb 单节点

自动创建 DB_NAME 的数据库

# docker-compose.yml
version: '2.2'

services:
  mongo:
    image: mongo:4.0
    restart: unless-stopped
    container_name: "mongo"
    command: mongod --smallfiles --oplogSize 128 --replSet rep --storageEngine=wiredTiger
    ports:
    - 50007:27017
    volumes:
    - /srv/mongo/db:/data/db

  mongo-init-replica:
    image: mongo:4.0
    container_name: "mongo-init"
    command: ["bash", "-c", 'sleep 10 && mongo mongo/DB_NAME --eval "rs.initiate({ _id: ''rep'', members: [ { _id: 0, host: ''localhost:27017'' } ]})"']
    depends_on:
      - mongo


常见问题:

  • 关闭 numa
    关闭 numa 可以通过 numactl –interleave=all mongod ... 来实现

  • cmdline oplogsize (10240) different than existing (400) see: http://dochub.mongodb.org/core/increase-oplog
    解决办法,增加 oplogsize 从 400 增加到 10240

  • 初始化时,报错 code 13, 提示 “not authorized on admin to execute command { replSetGetStatus: 1.0 }”
    解决办法: 使用 mongo localhost:27027/admin 命令进行操作(假设服务端口为27027)。

ref:
http://www.cnblogs.com/ljhdo/p/4583276.html

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,502评论 18 139
  • Codis 3.2 部署配置汇总 概念总结 集群配置前需要了解架构,集群分片主要分三种: 客户端分片:这个需要自己...
    三杯水Plus阅读 5,942评论 0 11
  • 最近在研究Docker的源码.读到ApiServer的启动过程时,发现其有一个新的概念,叫做service act...
    AlstonWilliams阅读 1,108评论 1 4
  • 说到挑担,有个人是不能忘记的,他就是小镇上的挑水伯伯。 小镇老街除了有河外,十字街上还有一口公用的井,可以淘米洗菜...
    薇薇安的30天阅读 293评论 0 0
  • 今天最重要的事情就是去学校给小十二选照片啦 本来说好一早去的 因为时间紧张怕来不及去上班 就没去!晚上下班请假啦一...
    路露小魔女阅读 129评论 0 0