1.Replica Set(首选)【简称:副本集,集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据须要和主节点一致。】
2.Sharding【只有真的是大数据,Sharding才能显现威力,毕竟备节点同步数据是须要时间的;Sharding能够将多片数据集中到路由节点上进行一些对比,而后将数据返回给客户端,可是效率仍是比较低的说。】
3.Master-Slaver【最简单的集群搭建,不过准确说也不能算是集群,只能说是主备。而且官方已经不推荐这种方式】
1.Replica Set叫作副本集,集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据须要和主节点一致。
2.Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时链接主节点与备节点,不链接仲裁节点。
3.默认设置下,主节点提供全部增删查改服务,备节点不提供任何服务。可是能够经过设置使备节点提供查询服务,这样就能够减小主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫作Read Preference Modes,同时Java客户端提供了简单的配置方式,能够没必要直接对数据库进行操做。
4.仲裁节点是一种特殊的节点,它自己并不存储数据,主要的做用是决定哪个备节点在主节点挂掉以后提高为主节点,因此客户端不须要链接此节点。这里虽然只有一个备节点,可是仍然须要一个仲裁节点来提高备节点级别。
tar -xf mongodb-linux-x86_64-rhel70-4.2.9.tgz
/bin/mv mongodb-linux-x86_64-rhel70-4.2.9 /usr/local/mongodb
ln -svf /usr/local/mongodb/bin/* /usr/local/bin/
mkdir -p /data/mongodb_test/master/data
mkdir -p /data/mongodb_test/slaver/data
mkdir -p /data/mongodb_test/arbiter/data
#master.conf
dbpath=/data/mongodb_test/master/data
logpath=/data/mongodb_test/master/master.log
pidfilepath=/data/mongodb_test/master/master.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27517
oplogSize=10000
fork=true
#slaver.conf
dbpath=/data/mongodb_test/slaver/data
logpath=/data/mongodb_test/slaver/slaver.log
pidfilepath=/data/mongodb_test/slaver/slaver.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27617
oplogSize=10000
fork=true
#arbiter.conf
dbpath=/data/mongodb_test/arbiter/data
logpath=/data/mongodb_test/arbiter/arbiter.log
pidfilepath=/data/mongodb_test/arbiter/arbiter.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27577
oplogSize=10000
fork=true
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/master/master.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/arbiter/arbiter.conf
登陆master节点:mongo 127.0.0.1:27517
> use admin
> cfg={ _id:"testrs", members:[ {_id:0,host:'10.21.210.78:27517',priority:10}, {_id:1,host:'10.21.210.78:27617',priority:1},
{_id:2,host:'10.21.210.78:27717',arbiterOnly:true}] };
> rs.initiate(cfg) # 使cfg配置生效
# priority:优先级越大,则优先分配成主节点
# 对于仲裁节点,必需要有arbiterOnly:true,否则主备模式就不能生效
登陆从节点:mongo 127.0.0.1:27617
> db.getMongo().setSlaveOk() # 当要去从节点查询数据时,直接插会报错,须要设置从节点为只读.注意从节点的前缀如今是SECONDARY。
查看集群状态:> rs.status(),重点看这些字段linux
登陆master节点:mongo 127.0.0.1:27517
> use admin
> db.createUser({user: "admin",pwd: "123456",roles:[{role:"userAdminAnyDatabase",db:"admin"},"readWriteAnyDatabase"]});
> db.grantRolesToUser("admin", ["clusterAdmin"]) # 须要给admin赋予集群权限,不然在后面执行rs.status()会出现以下报错:
"errmsg" : "not authorized on admin to execute command { replSetGetStatus: 1.0,.....
> db.auth("admin", "123456") # 登陆数据库
> db.system.users.find() # 查看用户
mongo 127.0.0.1:27517 -u admin -p 123456 --authenticationDatabase admin # 使用命令验证登陆
openssl rand -base64 21 > /data/mongodb_test/mongodb_key
chmod 600 mongodb_key
cat mongodb_key
HnYdGbfazRVLdIl2xIuaDmasYXT0
# 注意:上面的数字 21,最好是 3 的倍数,不然生成的字符串可能含有非法字符,认证失败。
# 增长下面两行
......
auth=true
keyFile =/data/mongodb_test/mongodb_key
# 关闭
kill $(pgrep -f "/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf")
kill $(pgrep -f "/usr/local/mongodb/bin/mongod -f /data/mongodb_test/arbiter/arbiter.conf")
kill $(pgrep -f "/usr/local/mongodb/bin/mongod -f /data/mongodb_test/master/master.conf")
# 启动
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/master/master.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/arbiter/arbiter.conf
> rs.status() 查看主节点,27517为主节点,27617为从节点mongodb
"_id" : 1,
"name" : "10.21.210.78:27617",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"_id" : 1,
"name" : "10.21.210.78:27617",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
模拟故障,kill主节点数据库
登陆其中正常的节点查看状态:27517为非健康状态,27617成为新的主节点网络
"_id" : 0,
"name" : "10.21.210.78:27517",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"_id" : 1,
"name" : "10.21.210.78:27617",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2116,
恢复故障节点后,查看集群状态:27517成为主节点,27617为从节点app
/usr/local/mongodb/bin/mongod -f /data/mongodb_test/slaver/slaver.conf测试
"_id" : 0,
"name" : "10.21.210.78:27517",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 18,
"_id" : 1,
"name" : "10.21.210.78:27617",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 15,
mongodb://username:password@host1:port1,host2:port2[,...,hostN:portN]/database?options
# options是链接配置中的可选项,replicaSet是其中的一个子项。
示例能够写成:mongodb://admin:123456@10.21.210.78:27517,10.21.210.78:27617/DbName?replicaSet=testrs"
注意:由于仲裁节点没有数据副本,仲裁节点也不可能会被选举为主节点,因此链接字符串信息中不要包含仲裁节点的信息。大数据