配置文件采用yaml方式来配置
生产中取消了仲裁者的角色,因为仲裁者也不会存储数据,只是起到选举的作用,线上为了保证数据安全,每份数据都会配置两个副本集,也就是每份数据存储了三份。优化配置,采用五台集群
使用非root账户搭建mongodb集群。
下载安装Mongodb
#下载
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.18.tgz
# 解压
tar -xzvf mongodb-linux-x86_64-4.0.18.tgz -C /usr/local/
# 改名
mv mongodb-linux-x86_64-4.0.18 mongodb
1、环境准备
- 系统系统 centos7.4 安装包:mongodb-linux-x86_64-4.0.18
- 五台服务器:192.168.90.10/11/12/13/14
- 服务器规划
服务器 1 | 服务器 2 | 服务器 3 | 服务器 4 | 服务器 5 |
---|---|---|---|---|
192.168.90.10 | 192.168.90.11 | 192.168.90.12 | 192.168.90.13 | 192.168.90.14 |
ssh [email protected] -p 8022 | ssh [email protected] -p 8023 | ssh [email protected] -p 8024 | ssh [email protected] -p 8025 | ssh [email protected] -p 8026 |
mongos server | mongos server | config server | config server | config server |
shard1 server | shard2 server | shard3 server | shard4server | shard5 server |
shard5 server | shard1 server | shard2 server | shard3server | shard4 server |
shard4 server | shard5 server | shard1 server | shard2server | shard3 server |
端口分配:
mongos:20000 路由服务
config:21000 配置服务
shard1:27001
shard2:27002
shard3:27003
shard4:27004
shard5:27005
权限分配:
登录root账户,将安装目录和数据目录权限分配给日常操作(moho:moho0987)账户
chown -R moho:moho /usr/local/
chown -R moho:moho /data
2、创建相关目录
根据服务器的规范,分别在对应的服务器规划,在不同机器上建立conf、mongos、config、shard1、shard2、shard3、shard4、shard5等目录,因为mongos不存储数据,只需要建立日志文件目录即可。
mkdir -p /usr/local/mongodb/conf
mkdir -p /data/mongos/log
mkdir -p /data/config/data
mkdir -p /data/config/log
mkdir -p /data/shard1/data
mkdir -p /data/shard1/log
mkdir -p /data/shard2/data
mkdir -p /data/shard2/log
mkdir -p /data/shard3/data
mkdir -p /data/shard3/log
mkdir -p /data/shard4/data
mkdir -p /data/shard4/log
mkdir -p /data/shard5/data
mkdir -p /data/shard5/log
3、环境变量
为了后续方便操作,配置mongodb的环境变量,需要切到root用户下面
vim /etc/profile
# 内容
export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
# 使立即生效,在安装用户下(moho)执行
source /etc/profile
#查看mongodb版本信息mongod -v 输出版本信息表明配置环境变量成功
2、集群配置
1、config server配置服务器
#在服务器12\13\14 上配置以下内容:
#添加配置文件:
# 编写配置文件 YAML
vim /usr/local/mongodb/conf/config.conf
YAML 格式config server 的 config.conf (每台机器一份)
## content
systemLog:
destination: file
logAppend: true
path: /data/config/log/config.log
# Where and how to store data.
storage:
dbPath: /data/config/data
journal:
enabled: true
# how the process runs
processManagement:
fork: true
pidFilePath: /data/config/log/configsrv.pid
# network interfaces
net:
port: 21000
bindIp: 192.168.9.12
#bindIp: 192.168.9.13
#bindIp: 192.168.9.14
#operationProfiling:
replication:
replSetName: config
sharding:
clusterRole: configsvr
启动三台服务器的config server
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/config.conf
numactl --interleave=all mongod --config /usr/local/mongodb/conf/config.conf
登录任意一台配置服务器,初始化配置副本集
#连接
mongo 192.168.90.12:21000
#config变量
config = {
_id : "config",
members : [
{_id : 0, host : "192.168.90.12:21000" },
{_id : 1, host : "192.168.90.13:21000" },
{_id : 2, host : "192.168.90.14:21000" }
]
}
初始化副本集结果
{
"_id" : "config",
"members" : [
{
"_id" : 0,
"host" : "192.168.90.12:21000"
},
{
"_id" : 1,
"host" : "192.168.90.13:21000"
},
{
"_id" : 2,
"host" : "192.168.90.14:21000"
}
]
}
rs.initiate(config)
#查看分区状态
rs.status();
#其中,"_id" : "configs"应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的ip和port
这样配置服务器就配置好了
3、配置分片、副本集
#配置第一个分片副本集
#在服务器 10、11、12上面做以下配置
#配置文件
vi /usr/local/mongodb/conf/shard1.conf
##配置文件内容
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/shard1/log/shard1.log
# Where and how to store data.
storage:
dbPath: /data/shard1/data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 20
# how the process runs
processManagement:
fork: true
pidFilePath: /data/shard1/log/shard1.pid
# network interfaces
net:
port: 27001
bindIp: 192.168.90.10
#operationProfiling:
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr
启动三台服务器的shard1 server
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard1.conf
numactl --interleave=all mongod --config /usr/local/mongodb/conf/shard1.conf
登陆任意一台服务器,初始化副本集
mongo 192.168.90.10:27001
#使用admin数据库
use admin
#定义副本集配置
config = {
_id : "shard1",
members : [
{_id : 0, host : "192.168.90.10:27001" },
{_id : 1, host : "192.168.90.11:27001" },
{_id : 2, host : "192.168.90.12:27001" }
]
}
初始化副本集配置
rs.initiate(config);
#查看分区状态
rs.status();
配置第二组个分片副本集
#在服务器11、12、13上面做以下配置
#配置文件
vi /usr/local/mongodb/conf/shard2.conf
#配置文件内容
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/shard2/log/shard2.log
# Where and how to store data.
storage:
dbPath: /data/shard2/data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 20
# how the process runs
processManagement:
fork: true
pidFilePath: /data/shard2/log/shard2.pid
# network interfaces
net:
port: 27002
bindIp: 192.168.90.11
#operationProfiling:
replication:
replSetName: shard2
sharding:
clusterRole: shardsvr
三台服务器的shard2 server
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard2.conf
numactl --interleave=all mongod --config /usr/local/mongodb/conf/shard2.conf
登陆任意一台服务器,初始化副本集
mongo 192.168.90.32:27002
#使用admin数据库
use admin
#定义副本集配置
config = {
... _id : "shard2",
... members : [
... {_id : 0, host : "192.168.90.11:27002" },
... {_id : 1, host : "192.168.90.12:27002" },
... {_id : 2, host : "192.168.90.13:27002" }
... ]
... }
初始化副本集配置
rs.initiate(config);
#查看分区状态
rs.status();
配置第三组分片副本集
#在服务器12、13、14上面做以下配置
#配置文件
vi /usr/local/mongodb/conf/shard3.conf
#配置文件
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/shard3/log/shard3.log
# Where and how to store data.
storage:
dbPath: /data/shard3/data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 20
# how the process runs
processManagement:
fork: true
pidFilePath: /data/shard3/log/shard3.pid
# network interfaces
net:
port: 27003
bindIp: 192.168.90.12
#operationProfiling:
replication:
replSetName: shard3
sharding:
clusterRole: shardsvr
启动三台服务器的shard3 server
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard3.conf
numactl --interleave=all mongod --config /usr/local/mongodb/conf/shard3.conf
登陆任意一台服务器,初始化副本集
mongo 192.168.90.13:27003
#使用admin数据库
use admin
#定义副本集配置
config = {
_id : "shard3",
members : [
{_id : 0, host : "192.168.90.12:27003" },
{_id : 1, host : "192.168.90.13:27003" },
{_id : 2, host : "192.168.90.14:27003" }
]
}
初始化副本集配置
rs.initiate(config);
#查看分区状态
rs.status();
配置第四个分片副本集
#在服务器10、13、14上面做以下配置
$配置文件
vi /usr/local/mongodb/conf/shard4.conf
#配置文件内容
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/shard4/log/shard4.log
# Where and how to store data.
storage:
dbPath: /data/shard4/data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 20
# how the process runs
processManagement:
fork: true
pidFilePath: /data/shard4/log/shard4.pid
# network interfaces
net:
port: 27004
bindIp: 192.168.90.10
#operationProfiling:
replication:
replSetName: shard4
sharding:
clusterRole: shardsvr
启动三台服务器的shard4 server
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard4.conf
numactl --interleave=all mongod --config /usr/local/mongodb/conf/shard4.conf
登陆任意一台服务器,初始化副本集
mongo 192.168.0.34:27004
#使用admin数据库
use admin
#定义副本集配置
config = {
... _id : "shard4",
... members : [
... {_id : 0, host : "192.168.90.10:27004" },
... {_id : 1, host : "192.168.90.13:27004" },
... {_id : 2, host : "192.168.00.14:27004" }
... ]
... }
初始化副本集配置
rs.initiate(config);
#查看分区状态
rs.status();
配置第五个分片副本集
#在服务器10、11、14上面做以下配置
#配置文件
vi /usr/local/mongodb/conf/shard5.conf
#配置文件内容
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/shard5/log/shard5.log
# Where and how to store data.
storage:
dbPath: /data/shard5/data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 20
# how the process runs
processManagement:
fork: true
pidFilePath: /data/shard5/log/shard5.pid
# network interfaces
net:
port: 27005
bindIp: 192.168.0.35
#operationProfiling:
replication:
replSetName: shard5
sharding:
clusterRole: shardsvr
启动三台服务器的shard5 server
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/shard5.conf
numactl --interleave=all mongod --config /usr/local/mongodb/conf/shard5.conf
登陆任意一台服务器,初始化副本集
mongo 192.168.0.10:27005
#使用admin数据库
use admin
#定义副本集配置
config = {
... _id : "shard5",
... members : [
... {_id : 0, host : "192.168.90.10:27005" },
... {_id : 1, host : "192.168.90.11:27005" },
... {_id : 2, host : "192.168.90.14:27005" }
... ]
... }
初始化副本集配置
rs.initiate(config);
#查看分区状态
rs.status();
至此,五个分片和副本集搭建完毕
4、配置路由服务器 mongos
以下配置在服务器10、11上执行
注意:先启动配置服务器和分片服务器,后启动路由实例
vi /usr/local/mongodb/conf/mongos.conf
#配置文件
systemLog:
destination: file
logAppend: true
path: /data/mongos/log/mongos.log
processManagement:
fork: true
# pidFilePath: /usr/local/mongodb/mongos.pid
# network interfaces
net:
port: 20000
bindIp: 192.168.90.10
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
sharding:
configDB: config/192.168.90.12:21000,192.168.90.13:21000,192.168.90.14:21000
启动二台服务器的 mongos server
#/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongos.conf
mongos --config /usr/local/mongodb/conf/mongos.conf
5、启用分片
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos 路由服务
mongo 192.168.0.10:20000
#使用admin数据库
use admin
#串联路由服务器与分配副本集
sh.addShard("shard1/192.168.90.10:27001,192.168.90.11:27001,192.168.90.12:27001")
sh.addShard("shard2/192.168.90.11:27002,192.168.90.12:27002,192.168.90.13:27002")
sh.addShard("shard3/192.168.90.12:27003,192.168.90.13:27003,192.168.90.14:27003")
sh.addShard("shard4/192.168.90.10:27004,192.168.90.13:27004,192.168.90.14:27004")
sh.addShard("shard5/192.168.90.10:27005,192.168.90.11:27005,192.168.90.14:27005")
#查看集群状态
sh.status()
mongodb的五台集群搭建就已经完成了;
配置用户
#进入mongodb shell
mongo 192.168.90.11:20000
# 切换admin
use admin
创建一个超级用户
db.createUser(
{
user: "root",
pwd: "xeon#388w3ww",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
验证用户
db.system.users.find()
# db.auth('admin','xeon#388w3ww') 不好用 ??
mongo 192.168.90.10:20000 -u "root" --authenticationDatabase "admin" -p
关闭服务
./mongod
> use admin
> db.shutdownServer()