一、环境准备
准备三台服务器
192.168.0.1
192.168.0.2
192.168.0.3
预计安装的服务及端口
mongos:20000
config:21000
shard1:27001
shard2:27001
shard3:27001
软件:mongodb-linux-x86_64-3.4.18.tgz
二、安装步骤
1、目录结构,三台都需要
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
tar -zxvf mongodb-linux-x86_64-3.4.18.tgz
cp mongodb-linux-x86_64-3.4.18 /data/server/mongodb -Rp
mkdir /data/server/mongodb
cd /data/server/mongodb
mkdir conf
mkdir mongos/log -p
mkdir config/{data,log} -p
mkdir shard1/{data,log} -p
mkdir shard2/{data,log} -p
mkdir shard3/{data,log} -p
2、环境变量,三台都需要
vim /etc/profile
export MONGODB_HOME=/data/server/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
source /etc/profile
注:请注意安装包中 bin 目录的大小写
3、配置文件修改,三台都需要
vim /data/server/mongodb/conf/config.conf
pidfilepath = /data/server/mongodb/config/log/configsrv.pid
dbpath = /data/server/mongodb/config/data
logpath = /data/server/mongodb/config/log/configsrv.log
logappend = true
bind_ip = 0.0.0.0
port = 21000
fork = true
configsvr = true
replSet = configs
maxConns = 20000
启动服务
mongod f /data/server/mongodb/conf/config.conf
登录服务,初始化配置副本集
mongo --port 21000
#config 变量
config = {
_id : "configs",
members : [
{_id : 0, host : "192.168.0.1:21000"},
{_id : 1, host : "192.168.0.2:21000"},
{_id : 2, host : "192.168.0.3:21000"}
]
}
#初始化副本集
rs.initiate(config)
3、配置分片副本集,三台都需要
第一个
vim /data/server/mongodb/conf/shard1.conf
pidfilepath = /data/server/mongodb/shard1/log/shard1.pid
dbpath = /data/server/mongodb/shard1/data
logpath = /data/server/mongodb/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0
port = 27001
fork = true
httpinterface = true
rest = true
replSet = shard1
shardsvr = true
maxConns = 20000
#启动3台的shard1 server
mongod -f /data/server/mongodb/conf/shard1.conf
登录第一台,进行初始化操作
mongo --port 27001
config = {
_id : "shard1",
members : [
{_id : 0, host : "192.168.0.1:27001"},
{_id : 1, host : "192.168.0.2:27001"},
{_id : 2, host : "192.168.0.3:27001", arbiterOnly:true}
]
}
#初始化副本集
rs.initiate(config)
##如下返回值,及成功
{ "ok" : 1 }
第二个
三台都需要配置文件
vim /data/server/mongodb/conf/shard2.conf
pidfilepath = /data/server/mongodb/shard2/log/shard2.pid
dbpath = /data/server/mongodb/shard2/data
logpath = /data/server/mongodb/shard2/log/shard2.log
logappend = true
bind_ip = 0.0.0.0
port = 27002
fork = true
httpinterface = true
rest = true
replSet = shard2
shardsvr = true
maxConns = 20000
#启动3台的shard2 server
mongod -f /data/server/mongodb/conf/shard2.conf
登录第一台,进行初始化操作
mongo --port 27002
config = {
_id : "shard2",
members : [
{_id : 0, host : "192.168.0.1:27002"},
{_id : 1, host : "192.168.0.2:27002", arbiterOnly:true},
{_id : 2, host : "192.168.0.3:27002"}
]
}
#初始化副本集
rs.initiate(config)
##如下返回值,及成功
{ "ok" : 1 }
第二个
三台都需要配置文件
vim /data/server/mongodb/conf/shard3.conf
pidfilepath = /data/server/mongodb/shard3/log/shard3.pid
dbpath = /data/server/mongodb/shard3/data
logpath = /data/server/mongodb/shard3/log/shard3.log
logappend = true
bind_ip = 0.0.0.0
port = 27003
fork = true
httpinterface = true
rest = true
replSet = shard3
shardsvr = true
maxConns = 20000
#启动3台的shard3 server
mongod -f /data/server/mongodb/conf/shard3.conf
登录第二台,进行初始化操作
mongo --port 27003
config = {
_id : "shard3",
members : [
{_id : 0, host : "192.168.0.1:27003", arbiterOnly:true},
{_id : 1, host : "192.168.0.2:27003"},
{_id : 2, host : "192.168.0.3:27003"}
]
}
#初始化副本集
rs.initiate(config)
##如下返回值,及成功
{ "ok" : 1 }
4、配置路由服务器mongos,三台都需要
vim /data/server/mongodb/conf/mongos.conf
pidfilepath = /data/server/mongodb/mongos/log/mongos.pid
logpath = /data/server/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 20000
fork = true
configdb = configs/192.168.0.1:21000,192.168.0.2:21000,192.168.0.3:21000
maxConns = 20000
###启动
mongos -f /data/server/mongodb/conf/mongos.conf
5、启用分片,任一台服务器操作
user admin
sh.addShard("shard1/192.168.0.1:27001,192.168.0.2:27001,192.168.0.3:27001")
####返回值如下,即成功
{"shardAdded": "ok":"1"}
sh.addShard("shard2/192.168.0.1:27002,192.168.0.2:27002,192.168.0.3:27002")
####返回值如下,即成功
{"shardAdded": "ok":"1"}
sh.addShard("shard3/192.168.0.1:27003,192.168.0.2:27003,192.168.0.3:27003")
####返回值如下,即成功
{"shardAdded": "ok":"1"}
sh.status()
####返回值如下,在3台上都可以执行看结果,ip那项,都必须包含除本机外的另2台ip
事例:
shards:
{ "_id":"shard1","host":"shard1/192.168.0.2:27001,192.168.0.3:27001","state":1}
{ "_id":"shard2","host":"shard2/192.168.0.1:27002,192.168.0.3:27001","state":1}
{ "_id":"shard3","host":"shard3/192.168.0.1:27003,192.168.0.2:27001","state":1}
三、备注
启动顺序
mongod -f /data/server/mongodb/conf/config.conf
mongod -f /data/server/mongodb/conf/shard1.conf
mongod -f /data/server/mongodb/conf/shard2.conf
mongod -f /data/server/mongodb/conf/shard3.conf
mongod -f /data/server/mongodb/conf/mongos.conf
安装过程中会有一些警告 如下 4条
1. WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
报这个错是因为我的虚拟环境使用的是EXT4文件系统,官方不建议,但不影响使用
在Linux上运行MongoDB时,官方建议使用Linux内核版本2.6.36或更高版本,使用XFS或EXT4文件系统。 如果可能,最好使用XFS,因为它通常与MongoDB表现更好。
使用WiredTiger存储引擎,强烈建议使用XFS,以避免在使用EXT4与WiredTiger时可能发生的性能问题。
使用MMAPv1存储引擎,MongoDB在使用它们之前预先分配其数据库文件,并经常创建大文件。 因此,官方建议使用XFS或EXT4文件系统。 如果可能,请使用XFS,因为它通常与MongoDB表现更好
2. WARNING: Access control is not enabled for the database.
报这个错是因为MongoDB需要有一个安全库来开启数据库访问控制
在MongoDB部署上启用访问控制会强制执行身份验证,要求用户识别自己。当访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作。
3. WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.
4. WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always’.
这两个问题是CentOS7特有的,因为从CentOS7版本开始会默认启用Transparent Huge Pages(THP)
Transparent Huge Pages(THP)本意是用来提升内存性能,但某些数据库厂商还是建议直接关闭THP(比如说Oracle、MariaDB、MongoDB等),否则可能会导致性能出现下降