安装MongoDB 单击版、复制集、密码认证、安装MongoDB分片shard - smile0821/learngit GitHub Wiki
1、安装MongoDB单机版 下载安装文件,解压后即可。在安装目录下执行如下命令即可启动:
(在前台启动,按ctrl c即停止服务,退出进程):
./bin/mongod --dbpath ./data/
(在后台启动,按ctrl c或用户退出系统后不会退出进程,不会停止服务:
nohup ./bin/mongod --auth --dbpath ./data/ > mongod.out 2>&1 &
2、密码认证 通过命令行客户端连接Mongodb服务器,并创建用户:
./bin/mongo
> use admin
> db.createUser(
{
user: "xxxAdmin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
> db.createUser(
{
user: "userXXX",
pwd: "123456",
roles: [
{ role: "read", db: "local" },
{ role: "readWrite", db: "xxx" }
]
}
)
将原来的Mongodb进程kill,然后带『--auth』参数启动Mongodb。
nohup ./bin/mongod --auth --dbpath ./data/ > mongod.out 2>&1 &
或
./bin/mongod --dbpath=./data/ --auth --fork --logpath=./mongod.log
启动后,访问相关的数据库需要认证:
./bin/mongo -u userXXX -p 123456 xxx
3、安装Mongodb副本集 以下是MongoDB复制集安装说明,供以后参考。
复制集中的每个节点和其他节点都会保持长连接,因此复制集大小官方说法是不能大于50个。
复制集中的每个节点没2秒向其他节点发送一次心跳,如果10秒内仍没有收到回复,则认为该节点已失效。
主节点失效后,多数节点(从节点)进行一次选举。
确认主节点失效需要10 ~ 30秒;选举过程10 ~ 30秒;因此,如果发生此类故障,会有1分钟左右的时间写操作不可用。
选举的时候,高优先级的节点最先发起选举;有最新数据的节点最有可能成为新的主节点。
一个3节点的副本集,如果挂了一个节点,则剩余俩节点会选举出一个主来,副本集仍然可用;如果挂了两个节点,则剩余的只有一个节点,且该节点不是主节点,不占副本集中节点个数(3)的多数,无法进行选举,因此副本集将不可用。
通过增加arbitrary可以增大允许故障的节点数,例如,3个普通的节点 + 2个arbitrary节点,可以允许有2个节点挂掉,仍可以正常使用。
1、分别下载mongo的安装文件到至少3台机器,解压到文件夹。如:/mnt/mongodb-linux-x86_64-3.0.6。
在安装目录下加文件目录replicaSet1_data、replicaSet1_log,用作存储数据和日志。也可以使用别的目录。
在安装目录下新增配置文件replicaSet1.conf,输入如下内容:
dbpath=/mnt/mongodb-linux-x86_64-3.0.6/replicaSet1_data
logpath=/mnt/mongodb-linux-x86_64-3.0.6/replicaSet1_log/mongod.log
pidfilepath=/mnt/mongodb-linux-x86_64-3.0.6/replicaSet1_log/mongod.pid
fork=true
directoryperdb=true
port=28001
注意:
在3.0及以上版本中,默认的存储引擎是mmapv1,该存储引擎是collection表级锁(2.6版本及以下是mmap存储引擎,是database库级锁)
如果在配置文件中增加参数“storageEngine=wiredTiger”,则存储引擎为wiredTiger,是document行级锁。
2、启动其中一台。
./bin/mongod --config replicaSet1.conf
3、创建两个用户,一个具有userAdminAnyDatabase角色,能创建新用户;另一个具有root角色,能做任何事情。
./bin/mongo --port 28001
use admin
db.createUser( {
user: "siteUserAdmin",
pwd: "111111",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
});
db.createUser( {
user: "siteRootAdmin",
pwd: "111111",
roles: [ { role: "root", db: "admin" } ]
});
注意:
如果在安装完成后要在MongoVUE中访问,则需要在admin这个db下执行如下命令。否则只能通过命令行或者java程序等访问。这是因为Mongodb的3.0以后的版本修改了默认的认证方式。
use admin
var schema = db.system.version.findOne({"_id" : "authSchema"})
schema.currentVersion = 3
db.system.version.save(schema)
4、停止MongoDB
cat /mnt/mongodb-linux-x86_64-3.0.6/replicaSet1_log/mongod.pid | xargs kill -9
5、创建一个key文件,用于复制集的成员间认证。
openssl rand -base64 741 -out replicaSet1.key 741是要产生的伪随机字节数,必须是741个字节
chmod 600 replicaSet1.key 除了当前用户,其他用户不能读取该文件
key文件复制到其他机器上
scp replicaSet1.key xxx@host2/mnt/mongodb-linux-x86_64-3.0.6
scp replicaSet1.key xxx@host3/mnt/mongodb-linux-x86_64-3.0.6
6、启动MongoDB
在配置文件replicaSet1.conf中加入如下内容
replSet=replicaSet1
keyFile=/mnt/mongodb-linux-x86_64-3.0.6/replicaSet1.key
启动所有的几台机器
./bin/mongod --config replicaSet1.conf
7、初始化复制集配置
./bin/mongo --port 28001
use admin
db.auth("siteRootAdmin", "111111");
rs.initiate()
执行以上命令后,可随时使用“rs.conf()”命令来查看复制集的配置,用“rs.status()”来查看状态。
通过以下命令加入其它的复制集成员。rs.add是增加普通的成员,这些成员可以参加选举成为leader,rs.addArb是增加裁判,该角色的成员永远都不会成为leader。
rs.add("promise2:28001")
rs.add("promise3:28001")
通过rs.conf()命令可以看到总共有3个成员,priority的值都是1. 如果其中一个机器是在不同的数据中心,则需要修改其优先级为0,将其只用于数据备份,不会作为leader。
cfg = rs.conf()
cfg.members[2].priority = 0
rs.reconfig(cfg)
8、为其他DB创建用户。如下示例为名为test的db创建一个用户test,密码为111111。
./bin/mongo --port 28001
use admin
db.auth("siteUserAdmin", "111111");
use test
db.createUser(
{
user: "test",
pwd: "111111",
roles:
[
{
role: "dbOwner",
db: "test"
}
]
}
)
4、安装shard 安装完成副本集后,可将副本集加入一个分片集群。
步骤一:部署configsvr配置服务器 配置服务器部署比较简单,命令:./bin/mongod --configsvr --dbpath /data/configData --fork --port 27019 其中,“--configsvr”参数说明是配置服务器,“--dbpath”说明数据存放路径,“--fork”说明是fork出子进程后台运行。 配置服务器可以是一个,也可以是多个,也可以是副本集。如果是副本集则安装方式和普通的副本集相同,但启动各个节点的时候mongod需要带“--configsvr”参数。
步骤二:部署mongos路由服务器(可以配置多个) 命令:mongos --configdb 副本集名称/副本集中的ip:port(逗号分隔) --dbpath /data/mongosData --fork --port 27017 如果配置服务器不是副本集,则该命令中的副本集名称及随后的斜杠不写即可。
步骤三:将分片加入集群 命令:sh.addShard( "replicaSet1/10.255.xxx.xx:27001,10.255.xxx.xx2:27001,10.255.xxx.xx3:27001") 如果将要加入集群的分片是副本集,则该命令即可将该副本集加入集群,作为其中的一个分片;如果要加入集群的分片不是副本集,则该命令中的副本集名称及随后的斜杠不写即可。
步骤四:启用shard分片(在test数据库上的test_collection集合上启用分片,并根据number字段分片) mongo 10.255.xxx.xx:27017/admin sh.enableSharding( "test" )
use test db.test_collection.createIndex( { number : 1 } ) sh.shardCollection( "test.test_collection", { "number" : 1 } )
db.stats() 查看分片集群状态 db.printShardingStatus() 查看分片状态(包括哪些db、collection分片了)
注意:在安装配置过程中如果涉及到使用主机名,而不是直接使用ip的地方,可能由于主机名解析问题导致集群安装出现问题。
作者:小树叶子 来源:CSDN 原文:https://blog.csdn.net/xxgwo/article/details/51235475 版权声明:本文为博主原创文章,转载请附上博文链接!