一.依赖和环境
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文件。
创建keyFileopenssl rand -base64 753
3.复制KeyFile
操作服务器:(mongo1 mongo2 mongo3)
将显示的内容复制到KeyFile.keymkdir -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安装psmisckillall 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