MongoDB分佈式集羣分片

MongoDB分佈式集羣分片

MongoDB高可用集羣搭建

1、環境準備

# 啓動時須要使用非root用戶,全部建立一個mongo用戶: useradd mongo # 爲mongo用戶添加密碼: echo 123456 | passwd --stdin mongo # 將mongo添加到sudoers echo "mongo ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/mongo chmod 0440 /etc/sudoers.d/mongo #解決sudo: sorry, you must have a tty to run sudo問題,在/etc/sudoer註釋掉 Default requiretty 一行 sudo sed -i 's/Defaults requiretty/Defaults:chiansun !requiretty/' /etc/sudoers # 建立一個mongo目錄 mkdir /mongo # 給相應的目錄添加權限 chown -R mongo:mongo /mongo # 配置mongo的yum源 cat >> /etc/yum.repos.d/mongodb-org-4.0.repo << EOF [mongodb-org-4.0] name=MongoDB Repository baseurl=http://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc EOF # 關閉selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0 # 關閉防火牆 systemctl disable firewalld systemctl stop firewalld

2、主機規劃

192.168.33.14 node-1 192.168.33.15 node-2 192.168.33.16 node-3 node-1 node-2 node-3 mongos mongos mongos 路由服務器,尋址 config config config 配置服務器,保存配置 shard1主 shard2主 shard3主 分片:保存數據 shard2從 shard3從 shard1從 副本集:備份數據,能夠配置讀寫分離(主負責寫,從負責同步數據和讀) shard3從 shard1從 shard2從

3、安裝部署

# 分別在多臺機器上使用mongo用戶登陸 sudo yum install -y mongodb-org # 分別在多臺機器上建立mongo config server對應的目錄 mkdir -p /mongo/config/{log,data,run} # 分別在多臺機器上修改config server的配置文件 cat > /mongo/config/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/config/log/mongod.log storage: dbPath: /mongo/config/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/config/run/mongod.pid net: port: 27100 bindIp: 0.0.0.0 replication: replSetName: config sharding: clusterRole: configsvr EOF # 啓動全部的mongo config server服務 mongod --config /mongo/config/mongod.conf # 登陸任意一臺配置服務器,初始化配置副本集 mongo --port 27100 # 建立配置 # id名要和replSetName名保持一致 config = { _id : "config", members : [ {_id : 0, host : "192.168.33.14:27100" }, {_id : 1, host : "192.168.33.15:27100" }, {_id : 2, host : "192.168.33.16:27100" } ] } # 初始化副本集配置 rs.initiate(config) # 查看分區狀態 rs.status() # 注意:其中,"_id" : "config"應與配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 爲三個節點的ip和port

1.配置第一個分片和副本集

# 修改mongo shard1 server的配置文件 mkdir -p /mongo/shard1/{log,data,run} # 分別在多臺機器上修改shard1 server的配置文件 cat > /mongo/shard1/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/shard1/log/mongod.log storage: dbPath: /mongo/shard1/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/shard1/run/mongod.pid net: port: 27001 bindIp: 0.0.0.0 replication: replSetName: shard1 sharding: clusterRole: shardsvr EOF # 啓動全部的shard1 server mongod --config /mongo/shard1/mongod.conf # 登錄任意一臺shard1服務器,初始化副本集 mongo --port 27001 # 使用admin數據庫 use admin # 定義副本集配置 config = { _id : "shard1", members : [ {_id : 0, host : "192.168.33.14:27001" }, {_id : 1, host : "192.168.33.15:27001" }, {_id : 2, host : "192.168.33.16:27001" } ] } # 初始化副本集配置 rs.initiate(config); # 查看分區狀態 rs.status()

2.配置第二個分片和副本集

# 修改mongo shard2 server的配置文件 mkdir -p /mongo/shard2/{log,data,run} # 分別在多臺機器上修改shard2 server的配置文件 cat > /mongo/shard2/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/shard2/log/mongod.log storage: dbPath: /mongo/shard2/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/shard2/run/mongod.pid net: port: 27002 bindIp: 0.0.0.0 replication: replSetName: shard2 sharding: clusterRole: shardsvr EOF # 啓動全部的shard2 server mongod --config /mongo/shard2/mongod.conf # 登錄任意一臺shard2服務器,初始化副本集 mongo --port 27002 # 使用admin數據庫 use admin # 定義副本集配置 config = { _id : "shard2", members : [ {_id : 0, host : "192.168.33.14:27002" }, {_id : 1, host : "192.168.33.15:27002" }, {_id : 2, host : "192.168.33.16:27002" } ] } # 初始化副本集配置 rs.initiate(config) # 查看分區狀態 rs.status()

3.配置第三個分片和副本集

# 修改mongo shard3 server的配置文件 mkdir -p /mongo/shard3/{log,data,run} # 分別在多臺機器上修改shard3 server的配置文件 cat > /mongo/shard3/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/shard3/log/mongod.log storage: dbPath: /mongo/shard3/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/shard3/run/mongod.pid net: port: 27003 bindIp: 0.0.0.0 replication: replSetName: shard3 sharding: clusterRole: shardsvr EOF # 啓動全部的shard3 server mongod --config /mongo/shard3/mongod.conf # 登錄任意一臺的shard3服務器,初始化副本集 mongo --port 27003 # 使用admin數據庫 use admin # 定義副本集配置 config = { _id : "shard3", members : [ {_id : 0, host : "192.168.33.14:27003" }, {_id : 1, host : "192.168.33.15:27003" }, {_id : 2, host : "192.168.33.16:27003" } ] } # 初始化副本集配置 rs.initiate(config) # 查看分區狀態 rs.status()

4.配置mongos路由器

##### 注意:啓動mongos是守候進程是由於/mongo/mongos/mongod.conf缺乏了fork: true這個配置####### ------------------------------------------------------------------------------------------ mkdir -p /mongo/mongos/{log,data,run} # 添加mongs的配置文件 cat > /mongo/mongos/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/mongos/log/mongod.log processManagement: fork: true pidFilePath: /mongo/mongos/run/mongod.pid net: port: 27200 bindIp: 0.0.0.0 sharding: configDB: config/192.168.33.14:27100,192.168.33.15:27100,192.168.33.16:27100 EOF # 注意,這裏configDB後面的config要與配置服務器的_id保持一致 # 啓動路由服務器 mongos --config /mongo/mongos/mongod.conf # 登陸其中的一臺路由節點,手動啓用分片 mongo --port 27200 # 添加分片到mongos sh.addShard("shard1/192.168.33.14:27001,192.168.33.15:27001,192.168.33.16:27001") sh.addShard("shard2/192.168.33.15:27002,192.168.33.16:27002,192.168.33.14:27002") sh.addShard("shard3/192.168.33.16:27003,192.168.33.14:27003,192.168.33.15:27003") # 設置slave可讀 rs.slaveOk()

5.經常使用操做

#沒有分片是由於沒有開啓分片規則 # 對bike這個數據庫開啓分片功能 use admin db.runCommand({"enablesharding":"bike"}) # 對bike數據庫下的users集合按id的hash進行分片 db.runCommand({"shardcollection":"bike.users","key":{_id:'hashed'}}) # 啓動全部的config server mongod --config /mongo/config/mongod.conf # 啓動全部的shard1 mongod --config /mongo/shard1/mongod.conf # 啓動全部的shard2 mongod --config /mongo/shard2/mongod.conf # 啓動全部的shard3 mongod --config /mongo/shard3/mongod.conf # 啓動全部的mongos mongos --config /mongo/mongos/mongod.conf # 關閉服務 mongod --shutdown --dbpath /mongo/shard3/data mongod --shutdown --dbpath /mongo/shard2/data mongod --shutdown --dbpath /mongo/shard1/data mongod --shutdown --dbpath /mongo/config/data
©著做權歸做者全部:來自51CTO博客做者hzde0128的原創做品,如需轉載,請註明出處,不然將追究法律責任
相關文章
相關標籤/搜索