Mongodb集群部署

目录

一.依赖和环境

centos7.2,4核cpu, 8G内存 100G硬盘
版本:3.4.7社区版本
mongo1:1.1.1.1
mongo2:1.1.1.2
mongo3:1.1.1.3

服务规划列表
Mongodb集群部署

端口规划列表
Mongodb集群部署

二.安装

1.下载
操作服务器(mongo1 mongo2 mongo3)

下载3.4.7版本
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.7.tgz?_ga=2.27332668.129100306.1533718841-1981701661.1533718841

改名并移动
mv mongodb-* mongodb.tgz
tar -xf mongodb.tgz
mv mongodb-linux-x86_64-rhel70-3.4.7 /usr/lcoal/mongodb

2.建立目录,路由程序,配置程序,节点程序
操作服务器(mongo1 mongo2 mongo3)

mkdir -p /ops/server/mongodb/conf
mkdir -p /ops/server/mongodb/mongos/log
mkdir -p /ops/server/mongodb/config/data
mkdir -p /ops/server/mongodb/config/log
mkdir -p /ops/server/mongodb/shard1/data
mkdir -p /ops/server/mongodb/shard1/log
mkdir -p /ops/server/mongodb/shard2/data
mkdir -p /ops/server/mongodb/shard2/log
mkdir -p /ops/server/mongodb/shard3/data
mkdir -p /ops/server/mongodb/shard3/log

3.环境变量
操作服务器(mongo1 mongo2 mongo3)

echo 'MONGODB_HOME=/usr/local/mongodb' >> /etc/proflie
echo 'PATH=$MONGODB_HOME/bin:$PATH' >> /etc/proflie
source /etc/profile

三.设置配置程序

1.配置
操作服务器(mongo1 mongo2 mongo3)

mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。
vim /usr/local/mongodb/conf/config.conf

#配置文件内容
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /usr/local/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true
bind_ip = 自己的ip
port = 21000
fork = true

#declare this is a config db of a cluster;
configsvr = true

#副本集名称
replSet=configs

#设置最大连接数
maxConns=20000

2.启动
操作服务器(mongo1 mongo2 mongo3)

启动配置程序,显示successfully才成功
mongod -f /usr/local/mongodb/conf/config.conf

3.初始化副本集
操作服务器(mongo1)

链接自己的21000端口,也就是配置服务的端口
mongo --host 1.1.1.1 --port 21000

先填写副本集的地址,再初始化,最后返回 ok:1 即可。
config = {_id : "configs",members : [{_id : 0, host : "1.1.1.1:21000" },{_id : 1, host : "1.1.1.2:21000" },{_id : 2, host : "1.1.1.3:21000" }]}

rs.initiate(config)

四.设置分片节点程序

1.shard1配置
操作服务器(mongo1 mongo2 mongo3)
vim /usr/local/mongodb/conf/shard1.conf

#配置文件内容
#三台服务器改对应的目录和IP
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /usr/local/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true

#更改服务器地址
bind_ip = 本机ip
port = 27001
fork = true

#打开web监控
httpinterface=true
rest=true

#副本集名称
replSet=shard1

#declare this is a shard db of a cluster;
shardsvr = true

#设置最大连接数
maxConns=20000

2.shard1启动
操作服务器(mongo1 mongo2 mongo3)
mongod -f /usr/local/mongodb/conf/shard1.conf

3.shard1初始化
操作服务器(mongo1)
链接
mongo --host 1.1.1.1 --port 27001

切换到admin数据库,填写shard3作为仲裁点,最后返回 ok:1 则正确。
use admin
config = {_id : "shard1",members : [{_id : 0, host : "1.1.1.1:27001" },{_id : 1, host : "1.1.1.2:27001" },{_id : 2, host : "1.1.1.3:27001" , arbiterOnly: true }]}
rs.initiate(config)

4.shard2配置
操作服务器(mongo1 mongo2 mongo3)
vim /usr/local/mongodb/conf/shard2.conf

#三台服务器改对应的目录和IP
pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid
dbpath = /usr/local/mongodb/shard2/data
logpath = /usr/local/mongodb/shard2/log/shard2.log
logappend = true

bind_ip = 本机ip
port = 27002
fork = true

httpinterface=true
rest=true

replSet=shard2

shardsvr = true

maxConns=20000

5.shard2启动
操作服务器(mongo1 mongo2 mongo3)
mongod -f /usr/local/mongodb/conf/shard2.conf

6.shard2初始化
操作服务器(mongo2)
因为这次要设置1节点为仲裁点,不能在1节点上初始化,所以到mongo2上。

链接
mongo --host 1.1.1.2 --port 27002

切换到admin数据库,填写shard1作为仲裁点,最后返回 ok:1 则正确。
use admin
config = {_id : "shard2",members : [{_id : 0, host : "1.1.1.1:27002" , arbiterOnly: true},{_id : 1, host : "1.1.1.2:27002" },{_id : 2, host : "1.1.1.3:27002" }]}
rs.initiate(config)

7.shard3配置
操作服务器(mongo1 mongo2 mongo3)
vim /usr/local/mongodb/conf/shard3.conf

#三台服务器改对应的目录和IP
pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid
dbpath =  /usr/local/mongodb/shard3/data
logpath =  /usr/local/mongodb/shard3/log/shard3.log
logappend = true

bind_ip = 本机ip
port = 27003
fork = true

httpinterface=true
rest=true

replSet=shard3

shardsvr = true

maxConns=20000

8.shard3启动
操作服务器(mongo1 mongo2 mongo3)
mongod -f /usr/local/mongodb/conf/shard3.conf

9.shard3初始化
操作服务器(mongo1)

链接
mongo --host 1.1.1.1 --port 27003

切换到admin数据库,填写shard2作为仲裁点,最后返回 ok:1 则正确。
use admin
config = {_id : "shard3",members : [{_id : 0, host : "1.1.1.1:27003" },{_id : 1, host : "1.1.1.2:27003" , arbiterOnly: true},{_id : 2, host : "1.1.1.3:27003" }]}
rs.initiate(config)

五.设置路由程序

先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(mongo1,mongo2,mongo3)

1.配置
操作服务器:(mongo1,mongo2,mongo3)
vim /usr/local/mongodb/conf/mongos.conf

pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log
logappend = true

#配置其他俩台的时候注意更改监听IP
bind_ip = 本机ip
port = 20000
fork = true

#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/1.1.1.1:21000,1.1.1.2:21000,1.1.1.3:21000

#设置最大连接
maxConns=20000

2.启动
操作服务器:(mongo1,mongo2,mongo3)

mongos -f /usr/local/mongodb/conf/mongos.conf

3.初始化
操作服务器:(mongo1)

链接
mongo --host 1.1.1.1 --port 20000

进入admin数据库,将分片程序地址声明
use admin
sh.addShard("shard1/1.1.1.1:27001,1.1.1.2:27001,1.1.1.3:27001")
sh.addShard("shard1/1.1.1.1:27002,1.1.1.2:27002,1.1.1.3:27002")
sh.addShard("shard1/1.1.1.1:27003,1.1.1.2:27003,1.1.1.3:27003")

查看集群状态
sh.status()

六.添加权限

集群中配置权限,需要先创建一个admin用户,拥有root权限,然后再停止整个集群,开启权限验证后再启动集群。

1.创建用户
操作服务器:(mongo1)

登陆当前的路由程序,也就是数据库
mongo 1.1.1.1:20000

切换到admin库,创建一个admin账户,密码123456,属于root组,可以管理admin库
use admin db.createUser({user:'admin',pwd:'123456',roles:[{ role : "root", "db" : "admin" }]});``

返回1证明成功
db.auth('admin','123456')

2.创建KeyFile
操作服务器:(mongo1)

在分片集群环境中,副本集内成员之间需要用keyFile认证,mongos与配置服务器,副本集之间也要keyFile认证,集群所有mongod和mongos实例使用内容相同的keyFile文件。

创建keyFile
openssl rand -base64 753

3.复制KeyFile
操作服务器:(mongo1 mongo2 mongo3)

将显示的内容复制到KeyFile.key
mkdir -p /usr/local/mongodb/key
vim /usr/local/mongodb/key/KeyFile.key
chmod 700 /usr/local/mongodb/key/KeyFile.key

4.开启认证
操作服务器:(mongo1 mongo2 mongo3)

修改每个节点的/usr/local/mongodb/conf/
config.conf 和 shard1.conf 和 shard2.conf 和 shard3.conf

添加如下

#开启权限验证
auth=true
keyFile=/usr/local/mongodb/key/KeyFile.key

修改每个节点的mongos文件
vim /usr/local/mongodb/conf/mongos.conf

添加如下

keyFile=/ops/servers/mongodb/key/KeyFile.key

5.重启
操作服务器:(mongo1 mongo2 mongo3)

先停止服务,如果killall没有,则先yum安装psmisc
killall mongod
killall mongos

每个节点挨个启动配置服务
mongod -f /usr/local/mongodb/conf/config.conf

每个节点挨个启动分片服务
mongod -f /usr/local/mongodb/conf/shard1.conf
mongod -f /usr/local/mongodb/conf/shard2.conf
mongod -f /usr/local/mongodb/conf/shard3.conf

每个节点挨个启动路由服务
mongos -f /usr/local/mongodb/conf/mongos.conf

6.验证
操作服务器:(mongo1)

连接admin库或者其他库,去查询当前有的数据库或者其它操作,将会报错如下

链接
mongo 1.1.1.1:20000/admin

查看当前有哪些数据库
show dbs

会报错
Mongodb集群部署

使用账号密码登陆则正常使用
mongo 1.1.1.1:20000/admin -u admin -p 123456
show dbs

正常使用了
Mongodb集群部署

七.集群维护

1.启动monggo集群
mongodb的启动顺序是,先启动配置服务器,在启动分片,最后启动mongos.

在集群每个节点启动一遍
mongod -f /ops/server/mongodb/conf/config.conf

在集群每个节点启动一遍
mongod -f /ops/server/mongodb/conf/shard1.conf
mongod -f /ops/server/mongodb/conf/shard2.conf
mongod -f /ops/server/mongodb/conf/shard3.conf

在集群每个节点启动一遍
mongod -f /ops/server/mongodb/conf/mongos.conf

2.关闭mongo集群,直接killall杀掉所有进程
killall mongod
killall mongos

上一篇:springboot elastic-job报错


下一篇:第一部分 基础篇 第三章 MongoDB体系结构