MongoDB

介绍


MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

主要特点:

  • 面向文档存储
  • 设置任何属性的索引实现更快的排序
  • 通过本地或者网络创建数据镜像,有更强的扩展性
  • 支持丰富的查询表达式
  • Map和Reduce
  • 支持多种编程语言
  • 安装简单

系统环境

[root@demo ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core)

[root@demo ~]# ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether fc:aa:14:5e:fb:76 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.200/24 brd 192.168.20.255 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::3066:3250:54e6:825f/64 scope link 
       valid_lft forever preferred_lft forever

MongoDB 官网

单机部署

cd /usr/local/src
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.6.tgz

mv mongodb-linux-x86_64-rhel70-3.4.6 /usr/local/mongodb

# 添加环境变量
echo 'export PATH=/usr/local/mongodb/bin:$PATH' >> /etc/profile

# mongodb默认的数据存储位置是/data/db,先创建目录
mkdir -p /data/db

# 启动服务
mongod &

# 登录后台shell
mongo

主从部署

具备了容错,故障恢复等性能。主节点要声明"master",从节点们要声明"slave"和"--source"。

主从

tar xf mongodb-linux-x86_64-rhel70-3.4.6.tgz 
mv mongodb-linux-x86_64-rhel70-3.4.6 /usr/local/
cd /usr/local/

# 主从节点
mv mongodb-linux-x86_64-rhel70-3.4.6 mongodb_master
cp -r mongodb_master mongodb_slave
mkdir -p /data/{master,slave}

# 指定存储路径,不同端口启动(1台服务器)
/usr/local/mongodb_master/bin/mongod --dbpath /data/master --port 10001 --master
/usr/local/mongodb_slave/bin/mongod --dbpath /data/slave --port 10002 --slave --source 192.168.20.200:10001

互相都能成为“主节点”,叫做Replica Set。在Replica Set里会有一个活跃节点和若干个备份节点。配置的时候,整个Replica Set要设置名字

主从集群

tar xf mongodb-linux-x86_64-rhel70-3.4.6.tgz 
mv mongodb-linux-x86_64-rhel70-3.4.6 /usr/local/
cd /usr/local/

# 3个节点
mv mongodb-linux-x86_64-rhel70-3.4.6 mongodb_node1
cp -r mongodb_node1 mongodb_node2
cp -r mongodb_node1 mongodb_node3
mkdir -p /data/{node1,node2,node3}

# 指定存储路径,不同端口启动(1台服务器),后面要设置名称,指定同步的是哪1台或者哪几台机器。
/usr/local/mongodb_node1/bin/mongod --dbpath /data/node1 --port 10001 --replSet mongodb/192.168.20.200:10002 &
/usr/local/mongodb_node2/bin/mongod --dbpath /data/node2 --port 10002 --replSet mongodb/192.168.20.200:10001 &
/usr/local/mongodb_node3/bin/mongod --dbpath /data/node3 --port 10003 --replSet mongodb/192.168.20.200:10001 &

# 连接
/usr/local/mongodb_node1/bin/mongo 192.168.20.200:10001

谁成为活跃节点取决于优先级,优先级默认是1,可以在启动时设置,这是内部选举机制决定。

分片部署

MongDB分布式集群能够对数据进行备份,提高数据安全性,以及提高读写服务的能力和数据存储能力。主要通过副本集(replica)对数据进行备份,通过分片(sharding)对大的数据进行分割,分布式存储在不同节点上。

  • 副本集(replica)
    副本集由若干台服务器组成,分为三种角色:主服务器、副服务器、仲裁服务器。根据集群搭建的需求,仲裁服务器不是必需的。主服务器提供主要的对外读写的功能,副服务器作为备份。当主服务器不可用时,其余服务器根据投票选出一个新的主服务器,提供读写功能。因此,副本集可以提高集群的可用性。
  • 分片(sharding)
    分片主要是为减小高数据量和高吞吐量的数据库应用对单机性能造成的压力。将大的数据分片存储在不同节点上,外部读写只操作相应的一个或一小部分节点,一次减少每个分片节点村春的数据量和处理的请求数 。

PS:在生产环境中,配置服务器务必使用三个,而不是一个;每个分片节点都部署成副本集,而不是一个单独的Mongo服务器。

  1. 每一个启动的mongod都是实际存放数据的地方,都能作为别人的sharding
  2. 分片部署需要一个mongos,起路由分发的作用;需要一个配置服务器和若干个分片服务器(都是mongod)
  3. 单机的时候,应用连接的是mongod;分布式的时候,应用连接的是mongos。

最简单的分片部署是单个的配置服务器,一个config(即mongod),一个mongos,几个sharding(即mongod):

tar xf mongodb-linux-x86_64-rhel70-3.4.6.tgz 
mv mongodb-linux-x86_64-rhel70-3.4.6 /usr/local/
cd /usr/local/

# 3个节点
mv mongodb-linux-x86_64-rhel70-3.4.6 mongodb_config
cp -r mongodb_node1 mongodb_mongos
cp -r mongodb_node1 mongodb_shard1
cp -r mongodb_node1 mongodb_shard2
mkdir -p /data/{config,shard1,shard2}

/usr/local/mongod_config/mongod --dbpath ~/db/config --port 20000
/usr/local/mongod_mongos/mongos --configdb 192.168.20.200:20000 --port 30000
/usr/local/mongod_shard1/mongod --dbpath ~/db/shard1 --port 10001
/usr/local/mongod_shard2/mongod --dbpath ~/db/shard2 --port 10002

参考

http://www.cnblogs.com/xiaoying1245970347/p/5342595.html
http://www.runoob.com/mongodb/mongodb-create-database.html
https://yq.aliyun.com/articles/61516

你可能感兴趣的:(MongoDB)