centos7.2,4核cpu, 8G内存 100G硬盘
版本:3.4.7社区版本
mongo1:1.1.1.1
mongo2:1.1.1.2
mongo3:1.1.1.3
服务规划列表
端口规划列表
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
会报错
使用账号密码登陆则正常使用
mongo 1.1.1.1:20000/admin -u admin -p 123456
show dbs
正常使用了
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