MongoDB单机集群搭建

一、单机副本集部署方案:

单台物理机,一个主节点,一个副本节点,一个仲裁节点。

二、部署步骤

1、在mongodb目录下新建config目录(目录及位置可随意指定,在此按照config目录搭建),在config目录中新建主节点配置文件primary.conf (文件名可随意指定):

[root@Thor config]# cat primary.conf 
port = 51077			#主节点端口号
directoryperdb = true	#设置每个数据库将被保存在一个单独的目录
shardsvr = true			#声明这是一个集群的分片
bind_ip = 10.41.62.65	#绑定服务IP
dbpath = /home/ssd1/data_primary51077	#指定数据库存储路径
logpath = /home/ssd/log/mongodb/primary/mongodb51077.log #指定主节点日志路径
logappend = true		#使用追加的方式写日志
oplogSize = 20480		#设置oplog的大小(MB),mongodb采用的是根据oplog来从主节点同步数据。oplog不是无限大,默认如果不手动设置,那么oplogSize就是磁盘空间的5%。超过了5%,oplog会被覆盖。 
fork = true				#以守护进程的方式运行MongoDB,创建服务器进程
wiredTigerCacheSizeGB = 20 #指的就是Cache size,包括数据和索引。Mongod本身使用内存如连接池堆栈以及sorting buffer等都是额外的,不会被统计到这个数字里面。
#auth = true			启用验证
#keyFile =  /home/soft/mongodb/key51077/keyfile	#集群的私钥的完整路径
replSet = shard51/10.41.62.65:51078,10.41.62.65:51079	#设置副本集名称:name/ip:port...(只识别/以前)

2、在config目录中新建从节点配置文件secondary.conf

[root@Thor config]# cat secondary.conf 
port = 51078
directoryperdb = true
shardsvr = true
bind_ip = 10.41.62.65
dbpath = /home/ssd2/data_Second51077
logpath = /home/ssd/log/mongodb/secondary/mongodb51077.log
logappend = true
oplogSize = 20480
fork = true
wiredTigerCacheSizeGB = 20
#auth = true
#keyFile =  /home/soft/mongodb/key51077/keyfile
replSet = shard51/10.41.62.65:51077,10.41.62.65:51079

注意:
从节点的数据目录和主节点尽量放在两块盘上,容灾。

3、在config目录中新建仲裁节点配置文件arbiter.conf

[root@Thor config]# cat arbiter7.conf 
port = 51079
shardsvr = true
directoryperdb = true
bind_ip = 10.41.62.65
dbpath = /home/soft/mongodb/data_Arbiter51077
logpath = /home/ssd/log/mongodb/arbiter/mongodb51077.log
logappend = true
oplogSize = 4096
fork = true
wiredTigerCacheSizeGB = 2
#auth = true
#keyFile =  /home/soft/mongodb/key51077/keyfile
replSet = shard51/10.41.62.65:51077,10.41.62.65:51078

4、在config目录中新建配置节点配置文件configsvr.conf

[root@Thor config]# cat configsvr.conf 
dbpath = /home/soft/mongodb/configsvr51077
bind_ip = 10.41.62.65
directoryperdb = true
configsvr = true
port = 51075
logpath =/home/ssd/log/mongodb/configsvr/mongodb51077.log
logappend = true
#auth = true
#keyFile =  /home/soft/mongodb/key51077/keyfile 
fork = true
replSet =  configsvr65/10.41.62.65:51075	#配置节点副本集

5、在config目录中新建路由节点配置文件mongos.conf

mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。

configdb =  configsvr65/10.41.62.65:51075
bind_ip = 10.41.62.65
port = 51076
logpath = /home/ssd/log/mongodb/mongos/mongodb51077.log
fork = true
logappend = true
#keyFile =  /home/soft/mongodb/key51077/keyfile

6、新建以上配置文件中所需要的目录:

mkdir -p /home/ssd1/data_primary51077
mkdir -p /home/ssd/log/mongodb/primary/
cd /home/ssd/log/mongodb/primary/
touch  mongodb51077.log
mkdir -p /home/soft/mongodb/key51077/
mkdir -p /home/ssd2/data_Second51077
mkdir -p /home/ssd/log/mongodb/secondary/
cd /home/ssd/log/mongodb/secondary/
touch  mongodb51077.log
mkdir -p /home/soft/mongodb/data_Arbiter51077
mkdir -p /home/ssd/log/mongodb/arbiter/
cd /home/ssd/log/mongodb/arbiter/
touch  mongodb51077.log
mkdir -p /home/soft/mongodb/configsvr51077
mkdir -p /home/ssd/log/mongodb/configsvr/
cd /home/ssd/log/mongodb/configsvr/
touch  mongodb51077.log
mkdir -p /home/ssd/log/mongodb/mongos/
cd /home/ssd/log/mongodb/mongos/
touch  mongodb51077.log

7、启动主、备、仲裁三个节点:

./bin/mongod -f ./config/primary.conf
./bin/mongod -f ./config/secondary.conf
./bin/mongod -f ./config/arbiter.conf

8、单个副本集配置:

./bin/mongo 10.41.62.65:51077

在控制界面输入:

cfg = {
		_id:"shard51",
		members:[
			{_id:0,host:"10.41.62.65:51077",priority:10},
			{_id:1,host:"10.41.62.65:51078",priority:8},
			{_id:2,host:"10.41.62.65:51079",arbiterOnly:true}
		]
	}
# _id:"shard51":将分片的副本集名称命名为shard51
rs.initiate(cfg)
rs.status()

通过rs.status()命令查看集群是否配置成功。

9、配置单机配置节点:

./bin/mongod -f ./config/configsvr.conf
./bin/mongo 10.41.62.65:51075
cfg = {_id:"configsvr65",configsvr:true,members:[{_id:0,host:"10.41.62.65:51075",priority:10}]}
rs.initiate(cfg)
rs.status()

10、配置分片信息:

./bin/mongos -f ./config/mongos.conf
./bin/mongo 10.41.62.65:51076
use admin
db.runCommand({addshard:"shard51/10.41.62.65:51077,10.41.62.65:51078,10.41.62.65:51079"})

#如里shard是单台服务器,用 db.runCommand( { addshard : “[: ]” } )这样的命令加入
#如果shard是副本集,用db.runCommand( { addshard : “replicaSetName/[:port][,serverhostname2[:port],…]” });这样的格式表示 。
sh.startBalancer()	#开启数据均衡器,实现数据在分片副本集中数据均衡
sh.enableSharding("mydatabase") #对mydatabase数据库启用分片能力
#对表collection_a与collection_b设置片键
sh.shardCollection("mydatabase.collection_a",{"uuid":1,"t_id":1},true)
sh.shardCollection("mydatabase.collection_b",{"h_id":1,"l_id":1},true)

11、创建用户

MongoDB默认是没有用户权限验证的,所以我们需要手动去添加用户,以便可以更加安全的进行访问,在没添加用户验证之前,通过mongos进入数据库时会有警告

./bin/mongo 10.41.62.65:51077
use admin
db.createUser({user:'admin',pwd:'xiang12345',roles:[{role:'root',db:'admin'},"readWriteAnyDatabase"]})

./bin/mongo 10.41.62.65:51075
use admin
db.createUser({user:'admin',pwd:'xiang12345',roles:[{role:'root',db:'admin'},"readWriteAnyDatabase"]})

./bin/mongo 10.41.62.65:51076
use admin
db.createUser({user:'admin',pwd:'xiang12345',roles:[{role:'root',db:'admin'},"readWriteAnyDatabase"]})

这里就添加了一个useradmin这么一个用户,他可以进行所有数据库的用户管理。在添加这个用户后,我们连接mongodb时仍然不需要进行登录,这是因为我们未在配置中开启权限验证。

12、kill掉所有mongdb进程

killall mongod
killall mongos

13、增加安全认证机制KeyFile:

一个合理的keyFile应该满足下面的条件:

1.在分片集群环境中,副本集内成员之间需要用keyFile认证,mongos与配置服务器,副本集之间也要keyFile认证,集群所有mongod和mongos实例使用内容相同的keyFile文件。
2.进行初始化,修改副本集时,都从本地例外登录进行操作
3.由于启用了认证,需要建立一个管理员帐号,才能从远程登录。建立管理员帐户,利用管理员账户从远程登录后,需要建立一个可以操作某个数据库的用户,客户端就用这个用户访问数据库。
4.分片集群中的管理员帐号需要具备配置服务器中admin和config数据库的读写权限,才能进行分片相关操作
5.集群中每个分片有自己的admin数据库,存储了集群的各自的证书和访问权限。如果需要单独远程登录分片,也可以

#生成key
cd /home/soft/NodeServer/mongodb/key51077/
openssl rand -base64 753 > keyfile
chmod 600 keyfile	# 该key的权限必须是600

将该key放到集群中机器的每一台上,记住必须保持一致,权限设置成600;

14、对各配置文件中auth与keyFile 选项取消屏蔽;

15、启动mongodb:

./bin/mongod -f ./config/configsvr51077.conf
./bin/mongos -f ./config/mongos51077.conf
./bin/mongod -f ./config/primary51077.conf
./bin/mongod -f ./config/secondary51077.conf
./bin/mongod -f ./config/arbiter51077.conf

16、进入数据库

./bin/mongo 10.41.62.65:51076
use admin
db.auth("admin","xiang12345")
use mydatabase
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值