mongodb使用mongos鏈接復制集


我們知道mongodb現在生產環境大部分還是使用的復制集來作為主流,據我了解。很多公司現在都是使用復制集的方式,而我們通過mongos可以巧妙的解決鏈接的問題,我們先從環境說起:

首先我們要模仿搭建的環境是:
server1:mongod primary+mongod config+mongos
server2:mongod primary+mongod config+mongos
server3:mongod primary+mongod config+mongos

其實就是一個分片復制集,只不過這里我們啟動了一個分片節點,所有的數據庫和集合並沒有采用分片的操作,我們的所有鏈接可以通過三個mongos鏈接,三個mongos和mongo confir是獨立的,目的是為了當其中一組down掉以后出現單點的問題。

下面是我們自己要搭建的環境
線上環境:
server1:mongodb+config+mongos
server2:mongodb+config+mongos

兩個mongod是一個復制集,兩個config+mongos是各自獨立的。

我們采用的是一主一從的分片復制集,也是一個分片,啟動兩套mongos.
 
首先我們搭建第一步,安裝mongodb數據庫,兩台機器上都要安裝mongodb:
1:解壓壓縮文件
tar -zxvf mongodb-linux-x86_64-rhel62-3.4.2.tgz
mkdir /home/maxiangqian/
mv mongodb-linux-x86_64-rhel62-3.4.2 /home/maxiangqian/

2:加入環境變量

export PATH=/home/maxiangqian/mongodb-linux-x86_64-rhel62-3.4.2/bin:$PATH

3:創建用戶和目錄

其他配置:
創建用戶和目錄:
[root@localhost mongodb]# mkdir -p /home/mongodb/db27017/data
[root@localhost mongodb]# mkdir -p /home/mongodb/db27017/log
[root@localhost mongodb]# mkdir -p /home/mongodb/db27017/tmp
[root@localhost mongodb]# mkdir -p /home/mongodb/db27017/key

4:關閉配置SELinux

vi /etc/selinux/config

配置:

SELINUX=disabled
打開端口:
[root@localhost log]# /sbin/iptables -I INPUT -p tcp --dport 27017 -j ACCEPT
[root@localhost log]# /sbin/iptables -I INPUT -p tcp --dport 27018 -j ACCEPT
[root@localhost log]# /sbin/iptables -I INPUT -p tcp --dport 27019 -j ACCEPT
[root@localhost log]# /etc/rc.d/init.d/iptables save

查看狀態:/etc/init.d/iptables status

查看端口狀態:netstat -tnl |grep 27017
5:創建一個專用的配置文件,配置文件的內容我們再上一篇已經講過了,這里不再貼出來了。
vi mongodb27017.conf

6:啟動

mongod -f /home/mongodb/db27017/mongodb27017.cnf

7:為主實例配置超級管理員賬號:maxiangqian

這點一定要留意,因為只有主才能創建管理員賬號,當我們初始化復制集的時候,賬號是會同步過去的,如果說我們在沒初始化的時候就創建了管理員賬號的話,初始化復制集的時候就會出問題。
use admin
db.createUser(
{
user: "maxiangqian",
pwd: "maxiangqian",
roles: [ { role: "root", db: "admin" } ]
}
)
8:開啟驗證,以及keyfile(主從兩台都是要開啟的)
先生成一個keyfile文件,拷貝到server2上的相同位置:
openssl rand -base64 756 > /home/mongodb/db27017/key/autokey
chmod 400 /home/mongodb/db27017/key/autokey
cp /home/mongodb/db27017/key/autokey /home/sa/
scp -P 9880 autokey sa@172.16.16.35:/home/sa/

9:初始化復制集

config = {
_id : "mongodbtestmxq",
members :
[
{ _id : 0, host : "172.16.16.34:27017" },
{ _id : 1, host : "172.16.16.35:27017" }
]
}

創建復制集配置對象,其中id=warringstates是表示復制集的名稱

且應該和配置文件中的一致
之后的一個數組中的每一個json對象都表示一個結點的id和地址和端口
rs.initiate(config)

10:驗證復制集

主節點:
mongodbtestmxq:PRIMARY> use maxiangqian
switched to db maxiangqian
mongodbtestmxq:PRIMARY> db.maxiagnqian.insert({"id":1,"name":"maxiangqian"})
WriteResult({ "nInserted" : 1 })
mongodbtestmxq:PRIMARY> db.maxiagnqian.find()
{ "_id" : ObjectId("58eb1aaddf342c94989755e7"), "id" : 1, "name" : "maxiangqian" }

從節點驗證:

mongodbtestmxq:SECONDARY> use maxiangqian
switched to db maxiangqian
mongodbtestmxq:SECONDARY> db.maxiagnqian.find()
{ "_id" : ObjectId("58eb1aaddf342c94989755e7"), "id" : 1, "name" : "maxiangqian" }

發現這個認證復制集搭建是OK的。

下面我們開始啟動mongos和config,mongos就相當於一個路由的功能,config會配置分片集群的信息
11:啟動config的分片
mongod -f /home/mongodb/config/mongoconfig27018.conf

然后我們看一下配置文件:

[root@localhost config]# cat mongoconfig27018.conf
dbpath=/home/mongodb/config/data/
configsvr=true
port=27018
keyFile=/home/sa/autokey
fork = true
logpath = /home/mongodb/config/log/mongo.logi
replSet=configmxq

初始化復制集,也要加認證,添加管理員賬號:

config = {
_id : "configmxq",
members :
[
{ _id : 0, host : "172.16.16.34:27018" },
{ _id : 1, host : "172.16.16.35:27018" }
]
}
rs.initiate(config)

12:啟動mongos

首先我們看一下配置文件:
[root@localhost mongos]# cat mongos27019.conf
port=27019
configdb=configmxq/172.16.16.34:27018,172.16.16.35:27018
keyFile=/home/sa/autokey
fork = true
logpath = /home/mongodb/mongos/log/mongo.log

然后直接進行啟動:

mongos -f /home/mongodb/mongos/mongos27019.conf

13:進入mongos進行分片的設置:

直接進行操作就可以了,所有的鏈接又要走mongos才能保證數據沒問題。
mongos> use admin
switched to db admin
mongos> db.auth("maxiangqian","maxiangqian")
1
mongos> show dbs
admin 0.000GB
config 0.000GB
maxiangqian 0.000GB
mongos> db.maxiangqian.find()
mongos> use maxiangqian
switched to db maxiangqian
mongos> db.maxiangqian.find()
mongos> db.maxiangqian.insert({"id":2,"name":"maxiangqian2"})
WriteResult({ "nInserted" : 1 })
從主庫直接插入一條數據:
mongodbtestmxq:PRIMARY> db.maxiangqian.insert({"id":3,"name":"maxiangqian3"})
然后返回mongos直接進行查看:
mongos> db.maxiangqian.find()
{ "_id" : ObjectId("58eb34a9289626fe9f9c2586"), "id" : 2, "name" : "maxiangqian2" }
{ "_id" : ObjectId("58eb35516c6683eeb8a72b9a"), "id" : 3, "name" : "maxiangqian3" }

看到數據是沒問題的。應該是配置好了。到這里,也算配置結束了。

下面還是貼一下基本的配置文件吧,方便大家查閱:

1:mongod配置文件
dbpath = /home/mongodb/db27017/data/
logpath = /home/mongodb/db27017/log/mongo.log
pidfilepath = /home/mongodb/db27017/tmp/mongo.pid
keyFile = /home/sa/autokey
directoryperdb = true
logappend = true
smallfiles = true
fork = true
auth = true
port = 27017
replSet = mongodbtestmxq
maxConns = 10240
shardsvr=true

2:config配置文件

dbpath=/home/mongodb/config/data/
configsvr=true
port=27018
keyFile=/home/sa/autokey
fork = true
logpath = /home/mongodb/config/log/mongo.log
replSet=configmxq

3:mongos配置文件

port=27019
configdb=configmxq/172.16.16.34:27018,172.16.16.35:27018
keyFile=/home/sa/autokey
fork = true
logpath = /home/mongodb/mongos/log/mongo.log

 

 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM