1. 程式人生 > >Mongodb設定Replica Set叢集 並使用PHP來連線

Mongodb設定Replica Set叢集 並使用PHP來連線

Mongodb之前一直是做主從模式,後來官方推薦用Replica Set(簡稱RS)來代替主從,主要是當primary節點出現故障後,RS叢集內會有自動投票選舉primary節點的機制,自動選出新的primary節點,這樣應用程式就不需要關心主從切換的問題。想要配置一個簡單的RS,至少要兩臺機器。我本地用了VMware以NAT方式跑了兩臺VPS,IP分別是:192.168.33.112和192.168.33.119,注意兩臺VPS的訪問互通問題(iptables network等)

1.ssh登陸到112那臺機器上,先下載mongodb最新版 現在是3.0.5 (3.x版本彪悍了很多,無論從讀寫的效能,還是資料壓縮能力)

cd /usr/local/bin
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.5.tgz
tar -zxvf  mongodb-linux-x86_64-3.0.5.tar
mv mongodb-linux-x86_64-3.0.5/ mongodb

2.建立mongodb需要的一些必要的資料夾
mkdir -p /mnt/mongodb/rs/data
mkdir -p /mnt/mongodb/rs/logs
mkdir -p /mnt/mongodb/rs/config

3.建立配置檔案
vi /mnt/mongodb/rs/config/mongod.conf

insert以下內容:
dbpath=/mnt/mongodb/rs/data   #資料存放目錄
logpath=/mnt/mongodb/rs/logs/mongod.log  #日誌檔案目錄
pidfilepath=/mnt/mongodb/rs/mongod.pid  #pid埠檔案

port=27017   #mongodb埠

logappend=true   #追加方式寫日誌檔案
fork=true        #後臺執行
journal=true     #啟用日誌選項,MongoDB的資料操作將會寫入到journal資料夾的檔案裡
oplogSize=2048   #同步操作記錄檔案大小(MB)
smallfiles=true  #使用較小的預設檔案

replSet=27017_0    #副本集名稱,同一個副本集,名稱必須一致

4.跑mongod程序

cd /usr/local/bin/mongodb/bin/
./mongod -f /mnt/mongodb/rs/config/mongod.conf

啟動成功的時候終端會提示
about to fork child process, waiting until server is ready for connections.
forked process: 1286
child process started successfully, parent exiting

然後以同樣的方式在119那臺機也讓mongod跑起來...

5.隨便一臺機器進入命令列管理mongodb,啟動RS:
./mongo 127.0.0.1:27017/admin

輸入RS配置命令

config={_id : '27017_0',members : [{_id : 1, host : '192.168.33.119:27017'},{_id : 2, host : '192.168.33.112:27017'}]}

系統會自動格式化顯示出:
{
	"_id" : "27017_0",
	"members" : [
		{
			"_id" : 1,
			"host" : "192.168.33.119:27017"
		},
		{
			"_id" : 2,
			"host" : "192.168.33.112:27017"
		}
	]
}

這裡我們讓112和119來做RS叢集,然後接下來初始化叢集:
rs.initiate(config);

系統會提示:{ "ok" : 1 } 證明啟動成功!

再輸入命令檢查RS狀態:

rs.status()

系統會顯示:
{
	"set" : "27017_0",
	"date" : ISODate("2015-08-24T19:41:37.778Z"),
	"myState" : 2,
	"members" : [
		{
			"_id" : 1,
			"name" : "192.168.33.119:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 14,
			"optime" : Timestamp(1440445283, 1),
			"optimeDate" : ISODate("2015-08-24T19:41:23Z"),
			"lastHeartbeat" : ISODate("2015-08-24T19:41:37.226Z"),
			"lastHeartbeatRecv" : ISODate("2015-08-24T19:41:37.238Z"),
			"pingMs" : 1,
			"electionTime" : Timestamp(1440445283, 2),
			"electionDate" : ISODate("2015-08-24T19:41:23Z"),
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.33.112:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 129,
			"optime" : Timestamp(1440445283, 1),
			"optimeDate" : ISODate("2015-08-24T19:41:23Z"),
			"configVersion" : 1,
			"self" : true
		}
	],
	"ok" : 1
}

這裡我們可以看到RS叢集的詳細資訊,可以看到119那臺機器被選為primary節點,112被選為secondary節點,以後如果要新增機器做橫向擴充套件的時候 只需要將要新增到叢集中的機器add進來就行了,或者某臺機器出了故障需要排除的話,也可以很方便的remove掉。

6.使用PHP來連線:

對於應用端(PHP),在框架連線mongodb的類裡面,你可以這樣寫:

$m = new MongoClient("mongodb://192.168.33.112:27017,192.168.33.119:27017", array("replicaSet" => "27017_0"));
$data = array('act_id'=>345, 'act_code'=>'freebeauty');
$res = $m->testdb->testcollection->insert($data);

注意replicaset(副本集名)要寫上,這樣叢集才可以自動發現節點...

然後在主節點命令列下(預設slave節點沒法讀寫):

27017_0:PRIMARY> use testdb;
switched to db testdb
27017_0:PRIMARY> db.testcollection.find();
{ "_id" : ObjectId("55dbe8c83643a783470041a7"), "act_id" : NumberLong(345), "act_code" : "freebeauty" }
27017_0:PRIMARY> 
寫入成功驗證!

如果你在secondary節點訪問的話,是不可讀的:

27017_0:SECONDARY> db.testcollection.find();
Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
27017_0:SECONDARY> 
27017_0:SECONDARY>

That's it~

相關推薦

Mongodb設定Replica Set叢集 使用PHP連線

Mongodb之前一直是做主從模式,後來官方推薦用Replica Set(簡稱RS)來代替主從,主要是當primary節點出現故障後,RS叢集內會有自動投票選舉primary節點的機制,自動選出新的primary節點,這樣應用程式就不需要關心主從切換的問題。想要配置一個簡單

mongodb Replica Set叢集修改ip

針對這種修改常用兩種方案,第一種方案適合針對單臺修改ip,只要在主的上面修改即可。第二種針對叢集大規模修改ip操作。 1.第一種,來回切換,一步一步切換ip。 首先,針對分的mongo進行修改ip操作,修改完成之後登入到主的mongo。 進行進行修改分的IP地址: cfg

MongoDB 新增Replica Set例項

1. 原副本集(單節點): # mongo 127.0.0.1:22001 use admin config = { _id:"shard1", members:[                      {_id:0,host:"10.101.1.140:22001"}

mongodb叢集環境搭建Replica Set

  1.引子       mongodb的叢集搭建方式主要有三種,主從模式,Replica set模式,sharding模式, 三種模式各有優劣,適用於不同的場合,屬Replica set應用最為廣泛,主從模式現在用的較少,sharding模式最為完備,但配置維護較為複

搭建Mongodb叢集:分片Sharding+副本集Replica Set

檔案配置:1. mongodb0.cfgport=27017replSet=rs1shardsvr=truelogpath=D:\mongodb\logs\r0.logdbpath=D:\mongodb\db\r0keyFile=D:\mongodb\key\keyfile

mongo學習筆記四:Mongodb的三種叢集(Replica Set)

cfg是可以任意的名字,當然最好不要是mongodb的關鍵字,conf,config都可以。最外層的_id表示replica set的名字,members裡包含的是所有節點的地址以及優先順序。優先順序最高的即成為主節點,即這裡的192.168.1.131:27017。特別注意的是,對於仲裁節點,需要有個特別的

Replica Set副本集方式的mongodb集群搭建

replica set副本集方式的mongodb集群搭建1.環境:單臺服務器上開啟四個mongodb實例來實現mongodb的Replica Set副本集方式的集群搭建2.配置文件:master主實例配置文件:[[email protected] ~]# cat /usr/local/mongodb

搭建高可用MongoDB集群(Replica set

mongodb mongodb副本集 replica set mongodb集群 MongoDB基礎可參考http://blog.51cto.com/kaliarch/2044423一、概述1.1 MongoDB副本集通俗來講,mongodb的副本集相當於具有自動故障恢復的主從集群,主從集群和

How to monitor mongodb replica set using prometheu

global rom dash off afa nload .com fir ash How to monitor mongodb replica set using prometheus 監控mongodb replica set其實有很多方式: Using zabbi

How To Setup MongoDB 4.0 Replica Set

ODB cati 優先 proto time repl com alt table 本文介紹如何配置MongoDB的Replica Set服務,並介紹了如何做主從切換以及添加新節點。此環境都在一臺服務器上完成。 1、配置MongoDB Replica Set 1.1 創建配

mongodb replica set 配置高性能多服務器詳解

自定義 rep error: plain sync ntc rtb fin repl mongodb的多服務器配置,以前寫過一篇文章,是master-slave模式的,請參考:詳解mongodb 主從配置。master-slave模式,不能自動實現故障轉移和恢復。所以推薦大

MongoDB Replica Set搭建

第0部分 業務資訊 業務名稱: xyz 埠號: 28017 第1部分 準備環境 建立mongodb使用者 # useradd mongodb 建立資料目錄 # mkdir -pv /data1/mongodb/28017/data # chown -R mongodb.

MongoDB Replica Set 副本集

1、簡介 MongoDB複製是將資料同步在多個伺服器的過程,類似MySQL Replication是一種非同步複製; 複製提供了資料的冗餘備份,並在多個伺服器上儲存資料副本,提高了資料的可用性, 並可以保證資料的安全性。 2、MongoDB複製特點 (1) mongodb的節點有三種角色:pr

MongoDB新增仲裁節點報錯replica set IDs do not match辦法

背景:由於歷史原因,某個MongoDB副本集只有一主一從雙節點,無法滿足自動故障轉移要求,需要配置一個仲裁節點。 原有節點192.168.10.20:27017,192.168.10.21:27017,現在準備在20上配置一個新節點27018當做仲裁   在當前主節點上執行 repse

MongoDB添加仲裁節點報錯replica set IDs do not match辦法

成功 init 官方 iter god 狀態 滿足 prim 報錯 背景:由於歷史原因,某個MongoDB副本集只有一主一從雙節點,無法滿足自動故障轉移要求,需要配置一個仲裁節點。 原有節點192.168.10.20:27017,192.168.10.21:27017,現在

mongodb複製集Replica Set使用簡介

MongoDB高可用 對於MongoDB,可以支援使用單機模式提供服務,但是在實際的生產環境中,單機模式將面臨很大的風險,一旦這個資料庫服務出現問題,就會導致線上的服務出現錯誤甚至崩潰。因此,在實際生產環境下,需要對MongoDB做相應的主備處理,提高資料庫服務的可用性。 對於提高可用性,一些博文裡提到了

MongoDB 4.0 複製集 replica set 搭建

MongoDB replica set : A replica set in MongoDB is a group of mongod processes that maintain the same data set. Replica sets provide re

MongoDB 複製集(Replica Set)

複製集(replica Set)或者副本集是MongoDB的核心高可用特性之一,它基於主節點的oplog日誌持續傳送到輔助節點,並重放得以實現主從節點一致。再結合心跳機制,當感知到主節點不可訪問或宕機的情形下,輔助節點通過選舉機制來從剩餘的輔助節點中推選一

使用docker-compose製作mongodb 4 的replica set複製集(可用方案)

首先我的環境是CentOS 6.9+Docker 1.9.1。所以不能跑version "2"和version "3"的寫法。docker-compose.yml寫法如下:   rs0:     image: mongo:latest    

【封裝】java中為什麼要將屬性進行私有化,又使用set和get方法設定和獲取屬性呢?

其實這裡體現的就是封裝的思想: 將資料與行為進行分離。 試想, 如果外面的程式可以隨意修改一個類的成員變數,會造成不可預料的程式錯誤, 就象一個人的名字, 不能被外部隨意修改,只能通過各種給定的方法去