首頁 資料庫 mysql教程 mongodb replica set 多服务器 高可用 配置 详解

mongodb replica set 多服务器 高可用 配置 详解

Jun 07, 2016 pm 04:33 PM
mongodb set 可用 伺服器 高可用

mongodb的多服务器配置,以前写过一篇文章,是master-slave模式的,请参考: mongodb 主从 配置 详解 。master-slave模式,不能自动实现故障转移和恢复。所以推荐大家使用mongodb的replica set,来实现多服务器的高可用。给我的感觉是replica set好像自带了h

mongodb的多服务器配置,以前写过一篇文章,是master-slave模式的,请参考:mongodb 主从 配置 详解。master-slave模式,不能自动实现故障转移和恢复。所以推荐大家使用mongodb的replica set,来实现多服务器的高可用。给我的感觉是replica set好像自带了heartbeat功能,挺强大的。

一,三台服务器,1主,2从

服务器1:127.0.0.1:27017

服务器2:127.0.0.1:27018

服务器3:127.0.0.1:27019

1,创建数据库目录

[root@localhost ~]# mkdir /var/lib/{mongodb_2,mongodb_3}
登入後複製

在一台机子上面模拟,三台服务器,所以把DB目录分开了。

2,创建配置文件

[root@localhost ~]# cat /etc/mongodb.conf |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'  //主服务器配置
port = 27017        //监听端口
fork = true         //后台运行
pidfilepath = /var/run/mongodb/mongodb.pid    //进程PID文件
logpath = /var/log/mongodb/mongodb.log        //日志文件
dbpath =/var/lib/mongodb           //db存放目录
journal = true                   //存储模式
nohttpinterface = true           //禁用http
directoryperdb=true              //一个数据库一个文件夹
logappend=true                  //追加方式写日志
replSet=repmore                 //集群名称,自定义
oplogSize=1000                  //oplog大小
[root@localhost ~]# cat /etc/mongodb_2.conf |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'  //从服务器
port = 27018
fork = true
pidfilepath = /var/run/mongodb/mongodb_2.pid
logpath = /var/log/mongodb/mongodb_2.log
dbpath =/var/lib/mongodb_2
journal = true
nohttpinterface = true
directoryperdb=true
logappend=true
replSet=repmore
oplogSize=1000
[root@localhost ~]# cat /etc/mongodb_3.conf |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'  //从服务器
port = 27019
fork = true
pidfilepath = /var/run/mongodb/mongodb_3.pid
logpath = /var/log/mongodb/mongodb_3.log
dbpath =/var/lib/mongodb_3
journal = true
nohttpinterface = true
oplogSize = 1000
directoryperdb=true
logappend=true
replSet=repmore
登入後複製

在这里要注意一点,不要把认证开起来了,不然查看rs.status();时,主从服务器间,无法连接,"lastHeartbeatMessage" : "initial sync couldn't connect to 127.0.0.1:27017"

3,启动三台服务器

mongod -f /etc/mongodb.conf
mongod -f /etc/mongodb_2.conf
mongod -f /etc/mongodb_3.conf
登入後複製

注意:初次启动时,主服务器比较快的,从服务器有点慢。

二,配置并初始化replica set

1,配置replica set节点

> config = {_id:"repmore",members:[{_id:0,host:'127.0.0.1:27017',priority :2},{_id:1,host:'127.0.0.1:27018',priority:1},{_id:2,host:'127.0.0.1:27019',priority:1}]}
登入後複製

2,初始化replica set

> rs.initiate(config);
{
    "info" : "Config now saved locally.  Should come online in about a minute.",
    "ok" : 1
}
登入後複製

3,查看replica set各节点状态

repmore:PRIMARY> rs.status();
{
    "set" : "repmore",
    "date" : ISODate("2013-12-16T21:01:51Z"),
    "myState" : 2,
    "syncingTo" : "127.0.0.1:27017",
    "members" : [
        {
            "_id" : 0,
            "name" : "127.0.0.1:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 33,
            "optime" : Timestamp(1387227638, 1),
            "optimeDate" : ISODate("2013-12-16T21:00:38Z"),
            "lastHeartbeat" : ISODate("2013-12-16T21:01:50Z"),
            "lastHeartbeatRecv" : ISODate("2013-12-16T21:01:50Z"),
            "pingMs" : 0,
            "syncingTo" : "127.0.0.1:27018"
        },
        {
            "_id" : 1,
            "name" : "127.0.0.1:27018",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 1808,
            "optime" : Timestamp(1387227638, 1),
            "optimeDate" : ISODate("2013-12-16T21:00:38Z"),
            "errmsg" : "syncing to: 127.0.0.1:27017",
            "self" : true
        },
        {
            "_id" : 2,
            "name" : "127.0.0.1:27019",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 1806,
            "optime" : Timestamp(1387227638, 1),
            "optimeDate" : ISODate("2013-12-16T21:00:38Z"),
            "lastHeartbeat" : ISODate("2013-12-16T21:01:50Z"),
            "lastHeartbeatRecv" : ISODate("2013-12-16T21:01:51Z"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "syncing to: 127.0.0.1:27018",
            "syncingTo" : "127.0.0.1:27018"
        }
    ],
    "ok" : 1
}
登入後複製

在这里要注意,rs.initiate初始化也是要一定时间的,刚执行完rs.initiate,我就查看状态,从服务器的stateStr不是SECONDARY,而是stateStr" : "STARTUP2",等一会就好了。

三,replica set主,从测试

1,主服务器测试

repmore:PRIMARY> show dbs;
local    1.078125GB
repmore:PRIMARY> use test
switched to db test
repmore:PRIMARY> db.test.insert({'name':'tank','phone':'12345678'});
repmore:PRIMARY> db.test.find();
{ "_id" : ObjectId("52af64549d2f9e75bc57cda7"), "name" : "tank", "phone" : "12345678" }
登入後複製

2,从服务器测试

[root@localhost mongodb]# mongo 127.0.0.1:27018   //连接
MongoDB shell version: 2.4.6
connecting to: 127.0.0.1:27018/test
repmore:SECONDARY> show dbs;
local    1.078125GB
test    0.203125GB
repmore:SECONDARY> db.test.find();     //无权限查看
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
repmore:SECONDARY> rs.slaveOk();       //从库开启
repmore:SECONDARY> db.test.find();     //从库可看到主库刚插入的数据
{ "_id" : ObjectId("52af64549d2f9e75bc57cda7"), "name" : "tank", "phone" : "12345678" }
repmore:SECONDARY> db.test.insert({'name':'zhangying','phone':'12345678'});   //从库只读,无插入权限
not master
登入後複製

到这儿,我们的replica set就配置好了。

四,故障测试

前面我说过,mongodb replica set有故障转移功能,下面就模拟一下,这个过程

1,故障转移

1.1,关闭主服务器

[root@localhost mongodb]# ps aux |grep mongod    //查看所有的mongod
root     16977  0.2  1.1 3153692 44464 ?       Sl   04:31   0:02 mongod -f /etc/mongodb.conf
root     17032  0.2  1.1 3128996 43640 ?       Sl   04:31   0:02 mongod -f /etc/mongodb_2.conf
root     17092  0.2  0.9 3127976 38324 ?       Sl   04:31   0:02 mongod -f /etc/mongodb_3.conf
root     20400  0.0  0.0 103248   860 pts/2    S+   04:47   0:00 grep mongod
[root@localhost mongodb]# kill 16977  //关闭主服务器进程
[root@localhost mongodb]# ps aux |grep mongod
root     17032  0.2  1.1 3133124 43836 ?       Sl   04:31   0:02 mongod -f /etc/mongodb_2.conf
root     17092  0.2  0.9 3127976 38404 ?       Sl   04:31   0:02 mongod -f /etc/mongodb_3.conf
root     20488  0.0  0.0 103248   860 pts/2    S+   04:47   0:00 grep mongod
登入後複製

1.2,在主库执行命令

repmore:PRIMARY> show dbs;
Tue Dec 17 04:48:02.392 DBClientCursor::init call() failed
登入後複製

1.3,从库查看状态,如下图,

replica set 故障测试

replica set 故障测试

以前的从库变主库了,故障转移成功

2,故障恢复

mongod -f /etc/mongodb.conf
登入後複製

启动刚被关闭的主服务器,然后在登录到主服务器,查看状态rs.status();已恢复到最原始的状态了。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mongodb一般用哪個版本 mongodb一般用哪個版本 Apr 07, 2024 pm 05:48 PM

mongodb一般用哪個版本

用PHP建構IP代理伺服器的最佳實務指南 用PHP建構IP代理伺服器的最佳實務指南 Mar 11, 2024 am 08:36 AM

用PHP建構IP代理伺服器的最佳實務指南

nodejs和vuejs區別 nodejs和vuejs區別 Apr 21, 2024 am 04:17 AM

nodejs和vuejs區別

如何將Dnsmasq設定為DHCP中繼伺服器 如何將Dnsmasq設定為DHCP中繼伺服器 Mar 21, 2024 am 08:50 AM

如何將Dnsmasq設定為DHCP中繼伺服器

mongodb建立的資料庫在哪裡 mongodb建立的資料庫在哪裡 Apr 07, 2024 pm 05:39 PM

mongodb建立的資料庫在哪裡

epic伺服器離線進不了遊戲怎麼辦? epic離線進不了遊戲解決方法 epic伺服器離線進不了遊戲怎麼辦? epic離線進不了遊戲解決方法 Mar 13, 2024 pm 04:40 PM

epic伺服器離線進不了遊戲怎麼辦? epic離線進不了遊戲解決方法

mongodb資料庫的優勢有哪些 mongodb資料庫的優勢有哪些 Apr 07, 2024 pm 05:21 PM

mongodb資料庫的優勢有哪些

如何在伺服器上安裝 PHP FFmpeg 擴充功能? 如何在伺服器上安裝 PHP FFmpeg 擴充功能? Mar 28, 2024 pm 02:39 PM

如何在伺服器上安裝 PHP FFmpeg 擴充功能?

See all articles