Archive


Category: 來玩MongoDB

  • [MongoDB] mongodb log rotate 做法

    當你的MongoDB運行了一段時間, 你會發現主機的硬碟空間為什麼越變越小, 查一下是不是你的MongoDB log作祟. 預設你的MongoDB log會存在同一個記錄檔裡面, 如果你不管理它, 它有可能長成像史前巨獸. 你可以使用logrotate來處理, 但本文不討論這個主題, 我們要用土法煉鋼來達成同樣目的. 閱讀 document, mongo有提到送出一個 kill -SIGUSR1 <mongod process id>, 就能達成log rotate. OK!! 目標確認. 1.找出 mongo process id  2.送 kill -SIGUSR1 給 mongod process id 找出 mongo process id 我使用 ps 來達成, 指令如下 ps -ef|grep [m]ongo|awk ‘{print $2}’ 那寫個shell來送給mongo吧, shell內容如下 #!/bin/bash pid=`ps -ef|grep [m]ongo|awk ‘{print $2}’“kill -SIGUSR1 $pid` 實際執行時出現 kill: […]

  • [MongoDB] MongoDB replset 成員 priority調整

    MongoDB 的 primary是透過 replset成員間選舉產生,但我們可以透過 priority的設定來影響選舉(很邪惡吧) 以下就來介紹怎麼買票(呵~~說錯了,是怎麼設定priority) 首先你要先登入MongoDB primary server,並下指令rs.conf()來確定member的編號 nowgarden:PRIMARY> rs.conf(){        “_id” : “replset”,        “version” : 193744,        “members” : [                {                        “_id” : 14,                        “host” : “mongodb1.nn.com.tw:27017”,                  },                 {                        “_id” : 16,                        “host” : “mongodb3.nn.com.tw:27017”                },                {                        “_id” : 15,                        “host” : “mongodb4.nn.com.tw:27017”                },                {                        “_id” : 13,                        “host” : “mongodb5.nn.com.tw:27017”                }        ]} 記住member的編號不是”_id”後的數字,而是你要從0往下數,例如 mongodb1.nn.com.tw:27017 […]

  • [MongoDB] CentOS上MongoDB的安裝

    如果你要找Ubuntu上MongoDB的安裝,請到 http://charleslin74.pixnet.net/blog/post/388879655 1. 新增一個 /etc/yum.repos.d/mongodb.repo 檔案,加入內容如下 [mongodb] name=MongoDB Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/ gpgcheck=0 enabled=12. 使用下列指令進行安裝如果不指定版本,會下載最新stable版本#yum install mongo-10gen mongo-10gen-server –exclude mongodb-org,mongodb-org-server如果要指定版本,改用下列指令 (指令中的版本號要自己改)#yum install mongo-10gen-2.2.3 mongo-10gen-server-2.2.3 –exclude mongodb-org,mongodb-org-server3. 設定開機啟動#chkconfig mongod on4. 服務的啟動,停止,重啟 #service mongod start#service mongod stop #service mongod restart

  • [MongoDB] 資料庫的備份及還原 mongodump 及 mongorestore 指令的使用 — 線上

    MongoDB 的備份及還原分為線上及離線,本文將介紹線上備份如下 離線方法請參考 http://charleslin74.pixnet.net/blog/post/396875521 線上備份還原方法(mongo啟動中) step1  進行資料庫的的備份,如果不加參數將會對所有DB進行備份,當然你也可以指定備份的DB及collection,而備份的資料會放在所在目錄下dump中 # mongodump # mongodump –collection collection_name –db db_name step2  使用scp將備份下來的資料複製到要還原的主機(假設IP為100.100.100.100) #  scp -r ./dump [email protected]:~/ step3 登入需要還原的主機內,開始進行還原資料 #  mongorestore dump/

  • [MongoDB] 資料庫的備份及還原 mongodump 及 mongorestore 指令的使用 — 離線

    MongoDB 的備份及還原分為線上及離線,本文將介紹離線備份如下 線上方法請參考 http://charleslin74.pixnet.net/blog/post/396878375 離線方法(mongo服務沒有啟動) step1  先停掉MongoDB的服務 # service mongodb stop step2  進行資料庫的的備份,dbpath是mongodb資料存放的路徑,而備份資料會存放在目前所在目錄下的dump資料夾內 # mongodump –dbpath /var/lib/mongodb step3  使用scp將備份下來的資料複製到要還原的主機(假設IP為100.100.100.100) #  scp -r ./dump [email protected]:~/ step4 登入需要還原的主機內,開始進行還原資料 #  mongorestore –dbpath /var/lib/mongodb –journal step5  還原完成,重啟mongo服務 #  service mongodb start  

  • [MongoDB] loading local.system.replset config (LOADINGCONFIG)

    今天遇到了新的問題 > rs.status()   {         “startupStatus” : 1,         “ok” : 0,         “errmsg” : “loading local.system.replset config (LOADINGCONFIG)” }   看字面意思好像是無法讀到關於replset的設定,所以造成mongodb起不來,我的APP會出現 not master的報錯。   有照這篇文章進行除錯 http://ufasoli.blogspot.tw/2013/05/reconfiguring-mongodb-replicaset-after.html 但照做後 rs.conf()仍然沒有任何變化.   最後偶然間找到了問題,我的/etc/hosts中對於本機的IP記錄與本機的實際IP並不相同   所以mongodb replset啟動時會讀取並確認本機狀態,將IP修正後就恢復正常了.

  • [MongoDB] replset加入沒有選舉權的成員

    最近因為IDC移機的需求,要把MongoDB移到其他地方,所以先架了幾台起來,並將它們一一加到了replset 但….發生了 replSet bad config maximum number of voting members is 7 可以參與投票的成員預設只能有七台,所以後續加入的成員只能改為不投票的型式 怎麼做呢??? 如下 rs.add({_id: 11, host: “mongodb-s7.domain.com.tw:27017”, votes: 0}) 重點在於 votes: 0 完成

  • [MongoDB] 注意!!mongodb主機數量

    MongoDB主機數量應為奇數(primary+secondary) 因為primary主機故障失聯時,主機群會進行選舉決定出那一個secondary出線替代成為primary 若主機數為偶數會有問題,可能產生無primary的情形 為解決此一問題,mongodb有另一個主機角色 arbiter,設定方法如下 arbiter主機端 #vi /etc/mongodb.conf 找到這一行  #replSet = xxxxx ,將 # 拿掉並於 = 後改為你所命名的群組,如下 replSet = mydb 更改完後將mongo 重新啟動,以載入新設定 #servcie mongodb restart   primary主機端加入arbiter #mongo mydb:PRIMARY> rs.addArb(“mongodb-arbiter:27017”) Arbiter只會參與仲裁,並不備份資料,所以主機的規格並不需要很高,若環境中只有二台主機(1台primary及1台secondary),請分別於二台主機上皆安裝arbiter,為此為避免與原mongodb衝突,需另跑一mongodb並跑不同的port

  • [MongoDB] mongodb replset 主機及資料備援設定

    此次測試對象主機為三台,分別是 mongodb-test1  mongodb-test2  mongodb-test3 當然進行設定前要把mongodb裝好,安裝請參考 http://charleslin74.pixnet.net/blog/post/388879655 首先我們將 mongodb-test1做為primary的主機,對它進行設定 #vi /etc/mongodb.conf 找到這一行  #replSet = xxxxx ,將 # 拿掉並於 = 後改為你所命名的群組,如下 replSet = mydb 更改完後將mongo 重新啟動,以載入新設定 #servcie mongodb restart 使用mongo指令進入命令控制模式 #mongo 初始化 replSet > rs.initiate(null) 於 replSet中加入自己本機 > rs.add(“mongodb-test1:27017”) 若是回應成功,請先稍待數秒鐘,等伺服器偵測和初使化。然後會發現 MongoDB 的命令提示字元從『SECONDARY』變成『PRIMARY』,此時,代表這台機器已經變成 replSet 中的主要機器。 接著對二台secondary主機皆進行以下設定,並重啟mongo服務 #vi /etc/mongodb.conf 找到這一行  #replSet = xxxxx ,將 # 拿掉並於 = 後改為你所命名的群組,如下 replSet […]

  • [Mongodb] Ubuntu上MongoDB安裝

    增加 10gen 的 repository sudo apt-key adv –keyserver keyserver.ubuntu.com –recv 7F0CEB10echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ | sudo tee /etc/apt/sources.list.d/10gen.list apt-get updateapt-get install mongodb-10gen 參考網址: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/