mongodb分片


mongodb分片:

本次是用三台主机搭建3个集群(主、备、仲裁)作为三个分片,一个集群(主、备、备)做为config服务器,三个mongos单点做路由,每台5个,一共15个。

新建一个mongodb用户,作为mongo用户
useradd mongodb

新建文件夹及设置权限
mkdir -p /data/mongodb_data_sd1/data
mkdir -p /data/mongodb_data_sd1/log
mkdir -p /data/mongodb_data_sd2/data
mkdir -p /data/mongodb_data_sd2/log
mkdir -p /data/mongodb_data_sd3/data
mkdir -p /data/mongodb_data_sd3/log
mkdir -p /data/mongodb_data_conf/data
mkdir -p /data/mongodb_data_conf/log
mkdir -p /data/mongodb_data_os/log
chown mongodb -R /data/mongodb_data_sd1
chown mongodb -R /data/mongodb_data_sd2
chown mongodb -R /data/mongodb_data_sd3
chown mongodb -R /data/mongodb_data_conf
chown mongodb -R /data/mongodb_data_os

数据集群就是普通的mongodb集群,唯一注意的是:“shardsvr=true”,集群配置文件:配置文件的名字及集群名字和文件夹的名字一样,每台三个,集群端口是28021、28022、28023

cat > /usr/local/mongodb/conf/mongodb_data_sd3.conf <<'EOF'
dbpath=/data/mongodb_data_sd3/data/
logpath=/data/mongodb_data_sd3/log/mongod.log
logappend=true
bind_ip_all=true
port=28023
replSet=mongodb_data_sd3
fork=true
shardsvr=true
EOF

config,可以是一个或者三个单点,也可以是集群,推荐用集群。也是普通集群,唯一注意是的“configsvr=true”,然后不能有仲裁。

cat > /usr/local/mongodb/conf/mongodb_data_conf.conf <<'EOF'
dbpath=/data/mongodb_data_conf/data/
logpath=/data/mongodb_data_conf/log/mongod.log
logappend=true
bind_ip_all=true
port=28031
replSet=mongodb_data_conf
fork=true
configsvr=true
EOF

mongos,只有日志没有数据,只有单点,但是可以建三个,随便连那个都可以,也可以用keepalive和ha做vip。

cat > /usr/local/mongodb/conf/mongodb_data_os.conf <<'EOF'
logpath=/data/mongodb_data_os/log/mongos.log
logappend=true
bind_ip_all=true
port=28017
configdb=mongodb_data_conf/192.168.1.31:28031,192.168.1.32:28031,192.168.1.33:28031
fork=true
EOF

启动、启动、全部启动:分片集群创建好以后,如果重启的话一定要按照先启动config集群,然后数据集群和mongos集群,每个集群启动的时候最好是先主,然后是备和仲裁。
su mongodb -c "/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb_data_sd1.conf"
设置分片1的集群
rs.initiate({_id:'mongodb_data_sd1',members:[{_id:0,host:'192.168.1.31:28021',priority:10},{_id:1,host:'192.168.1.32:28021',priority:5},{_id:2,host:'192.168.1.33:28021',"arbiterOnly":true}]})

su mongodb -c "/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb_data_sd2.conf"
设置分片2的集群
rs.initiate({_id:'mongodb_data_sd2',members:[{_id:0,host:'192.168.1.31:28022',"arbiterOnly":true},{_id:1,host:'192.168.1.32:28022',priority:10},{_id:2,host:'192.168.1.33:28022',priority:5}]})

su mongodb -c "/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb_data_sd3.conf"
设置分片3的集群
rs.initiate({_id:'mongodb_data_sd3',members:[{_id:0,host:'192.168.1.31:28023',priority:5},{_id:1,host:'192.168.1.32:28023',"arbiterOnly":true},{_id:2,host:'192.168.1.33:28023',priority:10}]})

su mongodb -c "/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb_data_conf.conf"
设置config集群
rs.initiate({_id:'mongodb_data_conf',members:[{_id:0,host:'192.168.1.31:28031',priority:5},{_id:1,host:'192.168.1.32:28031',priority:3},{_id:2,host:'192.168.1.33:28031',priority:10}]})

su mongodb -c "/usr/local/mongodb/bin/mongos -f /usr/local/mongodb/conf/mongodb_data_os.conf"
添加分片
use admin
db.runCommand( { addshard : "mongodb_data_sd1/192.168.1.31:28021,192.168.1.32:28021,192.168.1.33:28021",name:"mongodb_data_sd1"} )
db.runCommand( { addshard : "mongodb_data_sd2/192.168.1.31:28022,192.168.1.32:28022,192.168.1.33:28022",name:"mongodb_data_sd2"} )
db.runCommand( { addshard : "mongodb_data_sd3/192.168.1.31:28023,192.168.1.32:28023,192.168.1.33:28023",name:"mongodb_data_sd3"} )


启用数据库分片:
use admin
sh.enableSharding("test")

然后对集合设置片键,每个集合都要设置,以后不能修改。

sh.shardCollection("test.vast",{"_id": 1})

插入数据测试分片:
use test
for(i=0;i<20000;i++){ db.vast1.insert({"id":i,"name":"clsn","age":70,"date":new Date()}); }

看是不是分片了,你可以用可视化工具登录mongos和各个数据集群上去看。用命令看起来没有那么直观,预计结果是每个分片都有数据库和部分数据。但是你可能会失望哦。在分片的策越中,如果片键的数据是连续的,比如日期,自增的数字等,
很有可能写在一个分片上,他是为了查询更快;即使你的片键的数据是随机的,也不一定会在每个分片都有,他会根据主机的性能来分配,如果你的主机够好,也可能在一个分片上。只要当前分片性能不够了才会写到其他分片。
你可以多建几个数据库,然后你会发现数据库是是会分配到不同的分片上的。

如果你确定要把数据尽可能的平均写到不同的分片,片键设置选择哈希片键。这样数据会在每个分片都有了。写是快了,存储也解决了,但是读会慢,他要去所有的分片中找数据,然后返回给你。所以要平衡具体的项目。

sh.shardCollection("test.vast",{"_id": "hashed"})

分片的其他操作:

 

posted on 2018-11-09 11:18  徐应钟  阅读(212)  评论(0编辑  收藏  举报

导航