MongoDB分片部署

1 部署规划

1.1 版本说明

操作系统版本 CentOS release 6.10 (Final)
数据库版本 MongoDB 4.2.5
内核版本 2.6.32-754.el6.x86_64
CPU 8C
MEM 16G

1.2 安装路径规划

说明项 安装路径 挂载点
软件安装目录 Mongodb二进制程序 /data/mongodb/bin /data
数据文件目录 Mongodb数据文件 /data/mongodb/$port/data /data
配置文件目录 Mongodb配置文件 /data/mongodb/$port/conf /data
日志文件目录 Mongodb日志文件目录 /data/mongodb/$port/log /data

1.3 用户与组规划

根据规划配置用户与组信息:

用户名称 用户目录
mongod mongod /home/mongod

1.4 分片节点规划

Mongodb分片集群分为mongos节点、config集群、 shard集群。Mongos节点建议至少部署两节点(本文部署三节点)实现高可用以及负载均衡。其中mongos和config消耗资源较少,使用较低规格服务器即可;对于shard集群应选用合适的CPU、内存、磁盘的主机。

本文IP、端口规划如下:

角色 协议类型 服务监听端口
mongos TCP/IP 172.32.1.59:28018、172.32.1.91:28018、172.32.1.140:28018
config TCP/IP 172.32.1.59:28020、172.32.1.91:28020、172.32.1.140:28020
shard1 TCP/IP 172.32.1.59:28021、172.32.1.91:28021、172.32.1.140:28021
shard2 TCP/IP 172.32.1.59:28022、172.32.1.91:28022、172.32.1.140:28022

1.5 架构规划

image.png

2 Sharded Cluster集群部署

2.1 创建mongod用户

useradd -u800 mongod

echo 123456|passwd --stdin mongod

2.2 安装mongodb软件

mkdir -p /data/mongodb/bin

tar xf mongodb-linux-x86_64-rhel62-4.2.5.tgz -C /data/

cd mongodb-linux-x86_64-rhel62-4.2.5/bin/ &&\

cp * /data/mongodb/bin

2.3 配置环境变量

cat >> /home/mongod/.bash_profile <<'EOF'
PATH=/data/mongodb/bin/:$PATH
EOF

2.4 禁用大内存页面

echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag

2.5 修改用户限制

cat >> /etc/security/limits.conf <<'EOF'
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
EOF

2.6 修改网络、内存及资源限制相关内核参数

cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_max_syn_backlog = 65535
net.core.somaxconn = 65535
net.ipv4.tcp_max_tw_buckets = 262144
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 120
vm.overcommit_memory = 1
vm.swappiness = 1
fs.file-max = 1024000
EOF
sysctl -p

2.7 关闭selinux和防火墙

service iptables stop
chkconfig iptables off
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.8 创建目录、keyFile并授权

\#按照规划在各节点创建目录

for  i in 18 20 21 22
 do
 mkdir -p /data/mongodb/280$i/conf  
 mkdir -p /data/mongodb/280$i/data  
 mkdir -p /data/mongodb/280$i/log

done

openssl rand -base64 100 -out /data/mongodb/access.key
chmod 600 /data/mongodb/access.key
chown -R mongod.mongod /data/mongodb
#将keyfile传输至各节点
scp /data/mongodb/access.key 172.32.1.91:/data/mongodb/
scp /data/mongodb/access.key 172.32.1.140:/data/mongodb/

2.9 修改配置文件

#config配置文件
systemLog:
 destination: file
 path: /data/mongodb/28020/log/mongodb.conf
 logAppend: true
storage:
 journal:
  enabled: true
 dbPath: /data/mongodb/28020/data
 directoryPerDB: true
 #engine: wiredTiger
 wiredTiger:
  engineConfig:
   cacheSizeGB: 2
   directoryForIndexes: true
  collectionConfig:
   blockCompressor: zlib
  indexConfig:
   prefixCompression: true
net:
 bindIp: 172.32.1.59
 port: 28020
replication:
 oplogSizeMB: 2048
 replSetName: configReplSet
sharding:
 clusterRole: configsvr
processManagement:  
 fork: true
#security:
#authorization: enabled
#keyFile: /data/mongodb/access.key

shard配置文件

systemLog:
destination: file
path: /data/mongodb/28021/log/mongodb.log  
logAppend: true
storage:
journal:
 enabled: true
dbPath: /data/mongodb/28021/data
directoryPerDB: true
\#engine: wiredTiger
wiredTiger:
 engineConfig:
  cacheSizeGB: 4
  directoryForIndexes: true
 collectionConfig:
  blockCompressor: zlib
 indexConfig:
  prefixCompression: true
net:
bindIp: 172.32.1.59
port: 28021
replication:
oplogSizeMB: 2048
replSetName: shard1
sharding:
clusterRole: shardsvr
processManagement:
fork: true
#security:
#authorization: enabled
#keyFile: /data/mongodb/access.key

mongos配置文件

systemLog:
 destination: file
 path: /data/mongodb/28018/log/mongos.log
 logAppend: true
net:
 bindIp: 172.32.1.59
 port: 28018
sharding:
 configDB: configReplSet/172.32.1.59:28020,172.32.1.91:28020,172.32.1.140:28020
processManagement:  
 fork: true
#security:
#keyFile: /data/mongodb/access.key

2.10 启动Sharded Cluster集群

\#启动config集群

su - mongod

mongod -f /data/mongodb/28020/conf/mongod.conf  

\#连接mongo

mongo 172.32.1.59:28020

\#初始化副本集configReplSet

config = {_id: 'configReplSet', members: [

​       {_id: 0, host: '172.32.1.59:28020'},

​       {_id: 1, host: '172.32.1.91:28020'},

​       {_id: 2, host: '172.32.1.140:28020'}]

   }

rs.initiate(config)

\#启动shard集群

su - mongod

mongod -f /data/mongodb/28021/conf/mongod.conf  

\#连接mongo

mongo 172.32.1.59:28021

\#初始化副本集configReplSet

config = {_id: 'shard1', members: [

​       {_id: 0, host: '172.32.1.59:28021'},

​       {_id: 1, host: '172.32.1.91:28021'},

​       {_id: 2, host: '172.32.1.140:28021'}]

   }

rs.initiate(config)

\#创建管理员用户

db.createUser({

 user: 'sharddba',  // 用户名

 pwd: 'sharddba',  // 密码

 roles:[{

  role: 'root',  // 角色

  db: 'admin'  // 数据库

 }]

})

\#启动mongos节点

su - mongod

mongos -f /data/mongodb/28018/conf/mongos.conf  

\#连接mongo

mongo 172.32.1.59:28018



\#添加分片节点

use admin

db.runCommand( { addshard : "shard1/172.32.1.59:28021,172.32.1.91:28021,172.32.1.140:28021",name:"shard1"} )

db.runCommand( { addshard : "shard2/172.32.1.59:28022,172.32.1.91:28022,172.32.1.140:28022",name:"shard2"} )

db.runCommand( { listshards : 1 } )

\#创建管理员用户

db.createUser({

 user: 'dba',  // 用户名

 pwd: 'dba',  // 密码

 roles:[{

  role: 'root',  // 角色

  db: 'admin'  // 数据库

 }]

})

\#查看分片状态

sh.status();

\#开启数据库分片

db.runCommand( { enablesharding : "test" } )

use test

 

\#创建索引

db.t1.createIndex( { id: 1 }, {background: true} )

\#开启集合范围分片

use admin

db.runCommand( { shardcollection : "test.t1",key : {id: 1} } )

\#测试

use test

for(i=0;i<1000;i++){ db.t.insert({"id":i,"name":"zj","age":23,"date":new Date()}); }

db.t1.stats()

\#创建索引

db.t2.createIndex( { id: 1 }, {background: true} )

\#开启集合hash分片

use admin

sh.shardCollection( "test.t2", { id: "hashed" } )

\#测试

use test

for(i=0;i<1000;i++){ db.t2.insert({"id":i,"name":"zj","age":23,"date":new Date()}); }

db.t2.stats()

2.11 开启集群keyfile认证

#各节点均关闭
su - mongod
mongod -f /data/mongodb/28020/conf/mongod.conf --shutdown
#将配置文件中#security注释部分取消,注意调整缩进
#启动mongo
su - mongod
mongod -f /data/mongodb/28020/conf/mongod.conf  

2.12 配置副本节点永久只读

echo "rs.slaveOk()" >.mongorc.js

猜你喜欢

转载自blog.csdn.net/qq_42979842/article/details/107526541