【在多台机器上执行下面的命令
在所有创建一个xiaoniu普通用户:
useradd xiaoniu
为xiaoniu用户添加密码:
echo 123456 | passwd --stdin xiaoniu
将xiaoniu添加到sudoers
echo "xiaoniu ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/xiaoniu chmod 0440 /etc/sudoers.d/xiaoniu
解决sudo: sorry, you must have a tty to run sudo问题,在/etc/sudoer注释掉 Default requiretty 一行
sudo sed -i 's/Defaults requiretty/Defaults:xiaoniu !requiretty/' /etc/sudoers
创建一个mongo目录
mkdir /mongo
给相应的目录添加权限
chown -R xiaoniu:xiaoniu /mongo
配置mongo的yum源
cat >> /etc/yum.repos.d/mongodb-org-3.4.repo << EOF [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc EOF
关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
重新启动
reboot
分别在多台机器上使用xiaoniu用户登录
sudo yum install -y mongodb-org
继续角色信息
node-1 node-2 node-3
mongos mongos mongos 路由服务器,寻址
config config config 配置服务器,保存配置
shard1(主) shard2(主) shard3(主) 分片:保存数据
shard2 shard3 shard1 副本集:备份数据,可以配置读写分离(主负责写,从负责同步数据和读)
shard3 shard1 shard2
分别在多台机器上创建mongo config server对应的目录
mkdir -p /mongo/config/{log,data,run}
分别在多台机器上修改config server的配置文件
cat >> /mongo/config/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/config/log/mongod.log storage: dbPath: /mongo/config/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/config/run/mongod.pid net: port: 27100 replication: replSetName: config sharding: clusterRole: configsvr EOF
clusterRole: configsvr这个配置是固定的
【重要】启动所有的mongo config server服务
mongod --config /mongo/config/mongod.conf
登录任意一台配置服务器,初始化配置副本集
mongo --port 27100
创建配置
config = { _id : "config", members : [ {_id : 0, host : "192.168.52.203:27100" }, {_id : 1, host : "192.168.52.204:27100" }, {_id : 2, host : "192.168.52.205:27100" } ] }
初始化副本集配置
rs.initiate(config)
查看分区状态
rs.status()
注意:其中,"_id" : "config"对应配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的ip和port
配置第一个分片和副本集
修改mongo shard1 server的配置文件
mkdir -p /mongo/shard1/{log,data,run}
分别在多台机器上修改shard1 server的配置文件
cat >> /mongo/shard1/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/shard1/log/mongod.log storage: dbPath: /mongo/shard1/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/shard1/run/mongod.pid net: port: 27001 replication: replSetName: shard1 sharding: clusterRole: shardsvr EOF
启动所有的shard1 server
mongod --config /mongo/shard1/mongod.conf
登陆任意一台shard1服务器(希望哪一台机器是主,就登录到那一台机器上),初始化副本集
mongo --port 27001
使用admin数据库
use admin
定义副本集配置
config = { _id : "shard1", members : [ {_id : 0, host : "192.168.52.203:27001" }, {_id : 1, host : "192.168.52.204:27001" }, {_id : 2, host : "192.168.52.205:27001" } ] }
初始化副本集配置
rs.initiate(config);
查看分区状态
rs.status()
配置第二个分片和副本集
修改mongo shard2 server的配置文件
mkdir -p /mongo/shard2/{log,data,run}
分别在多台机器上修改shard2 server的配置文件
cat >> /mongo/shard2/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/shard2/log/mongod.log storage: dbPath: /mongo/shard2/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/shard2/run/mongod.pid net: port: 27002 replication: replSetName: shard2 sharding: clusterRole: shardsvr EOF
启动所有的shard2 server
mongod --config /mongo/shard2/mongod.conf
登陆(node2)的shard2服务器,初始化副本集
mongo --port 27002
使用admin数据库
use admin
定义副本集配置
config = { _id : "shard2", members : [ {_id : 0, host : "192.168.52.203:27002" }, {_id : 1, host : "192.168.52.204:27002" }, {_id : 2, host : "192.168.52.205:27002" } ] }
rs.initiate(config)
查看分区状态
rs.status()
配置第三个分片和副本集
修改mongo shard3 server的配置文件
mkdir -p /mongo/shard3/{log,data,run}
分别在多台机器上修改shard3 server的配置文件
cat >> /mongo/shard3/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/shard3/log/mongod.log storage: dbPath: /mongo/shard3/data journal: enabled: true processManagement: fork: true pidFilePath: /mongo/shard3/run/mongod.pid net: port: 27003 replication: replSetName: shard3 sharding: clusterRole: shardsvr EOF
启动所有的shard3 server
mongod --config /mongo/shard3/mongod.conf
登陆node-3上的shard3服务器,初始化副本集
mongo --port 27003
使用admin数据库
use admin
定义副本集配置
config = { _id : "shard3", members : [ {_id : 0, host : "192.168.52.203:27003" }, {_id : 1, host : "192.168.52.204:27003" }, {_id : 2, host : "192.168.52.205:27003" } ] }
初始化副本集配置
rs.initiate(config)
查看分区状态
rs.status()
注意:启动mongos是守候进程是因为/mongo/mongos/mongod.conf缺少了fork: true这个配置
mkdir -p /mongo/mongos/{log,data,run}
添加mongs的配置文件
cat >> /mongo/mongos/mongod.conf << EOF systemLog: destination: file logAppend: true path: /mongo/mongos/log/mongod.log processManagement: fork: true pidFilePath: /mongo/mongos/run/mongod.pid net: port: 27200 sharding: configDB: config/192.168.52.203:27100,192.168.52.204:27100,192.168.52.205:27100 EOF
注意,这里configDB后面的config要与配置服务器的_id保持一致
启动路由服务器
mongos --config /mongo/mongos/mongod.conf
登录其中的一台路由节点,手动启用分片
mongo --port 27200
添加分片到mongos
sh.addShard("shard1/192.168.52.203:27001,192.168.52.204:27001,192.168.52.205:27001") sh.addShard("shard2/192.168.52.204:27002,192.168.52.205:27002,192.168.52.203:27002") sh.addShard("shard3/192.168.52.205:27003,192.168.52.203:27003,192.168.52.204:27003")
设置slave可读(在命令行中生效一次),如果配置从接到可读,那么是连接客户端指定的
rs.slaveOk()
####没有分片是因为没有开启分片规则####################
创建mobike数据库
创建mobike数据库
use mobike
use admin
对bikes这个数据库开启分片功能
db.runCommand({"enablesharding":"mobike"})
创建bikes集合
db.createCollection("bikes")
对bike数据库下的users集合按id的hash进行分片
db.runCommand({"shardcollection":"mobike.bikes","key":{_id:'hashed'}}) use mobike db.bikes.insert({"bikeNo":100001}) db.bikes.insert({"bikeNo":100002}) db.bikes.insert({"bikeNo":100003}) db.bikes.insert({"bikeNo":100004}) db.bikes.insert({"bikeNo":100005}) db.bikes.insert({"bikeNo":100006})
启动所有的config server
mongod --config /mongo/config/mongod.conf
启动所有的shard1
mongod --config /mongo/shard1/mongod.conf
启动所有的shard2
mongod --config /mongo/shard2/mongod.conf
启动所有的shard3
mongod --config /mongo/shard3/mongod.conf
启动所有的mongos
mongos --config /mongo/mongos/mongod.conf
脸上客户端:mongo --port 27200
mongos>
db.bikes.find()
db.bikes.drop()
关闭服务
mongod --shutdown --dbpath /mongo/shard3/data
mongod --shutdown --dbpath /mongo/shard2/data
mongod --shutdown --dbpath /mongo/shard1/data
mongod --shutdown --dbpath /mongo/config/data