记录这个纯属方便本身之后使用。。
linux
mongodb官方最新版本3.2.6,某些功能都加以改进而且性能提高很大,下面操做只是快速搭建mongodb复制集以及shard分片等
一共分为以下几步骤mongodb
启动某个节点主master进行设置单个节点帐号和密码数据库
配置mongodb复制集ubuntu
配置mongos-shard分片架构
设置mongos路由帐号和密码并启用验证ide
目录规划建立url
mkdir /data/{config,shard1,shard2,shard3,mongos,logs,configsvr,keyfile} -pv touch /data/keyfile/security touch /data/logs/shard{1..3}.log touch /data/logs/{configsvr,mongos}.log touch /data/config/shard{1..3}.conf touch /data/config/{configsvr,mongos}.conf
因为操做系统是Ubuntu14.04 64位的,因此mongodb软件也是Ubuntu的spa
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1404-3.2.6.tgz tar fxz mongodb-linux-x86_64-ubuntu1404-3.2.6.tgz -C /usr/local/ mv /usr/local/mongodb-linux-x86_64-ubuntu1404-3.2.6 /usr/local/mongodb
设置mongo环境变量操作系统
echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile source /etc/profile
第一个节点配置文件如shard一、shard二、shard三、configsvr、mongos配置文件
shard1.conf配置文件以下
shard2.conf配置文件以下
shard3配置文件以下
confisvr.conf配置文件以下
mongos.conf配置文件以下
注:以上配置文件分别拷贝到另外2台节点上
启动第一台节点主mongod
root@mongodb-01:/data/config# mongod -f /data/config/shard1.conf about to fork child process, waiting until server is ready for connections. forked process: 10686 child process started successfully, parent exiting
登录进去,建立帐号
root@mongodb-01:/data/config# mongo --port 20001 > use admin db.createUser( { user: "administrator", pwd: "123456", roles: [ { role: "root", db: "admin" } ] }); > db.auth("administrator","123456") 1
注:第二个节点和第三个节点设置单个mongod帐号同样,操做下吧,示例以下
启动第2台节点主mongod
root@mongodb-02:/data/config# mongod -f /data/config/shard2.conf about to fork child process, waiting until server is ready for connections. forked process: 10986 child process started successfully, parent exiting
登录进去,建立帐号
root@mongodb-02:/data/config# mongo --port 20002 > use admin db.createUser( { user: "administrator", pwd: "123456", roles: [ { role: "root", db: "admin" } ] }); > db.auth("administrator","123456") 1
启动第3台节点主mongod
root@mongodb-03:/data/config# mongod -f /data/config/shard3.conf about to fork child process, waiting until server is ready for connections. forked process: 11982 child process started successfully, parent exiting
登录进去,建立帐号
root@mongodb-03:/data/config# mongo --port 20003 > use admin db.createUser( { user: "administrator", pwd: "123456", roles: [ { role: "root", db: "admin" } ] }); > db.auth("administrator","123456") 1
生成keyfile文件,文件权限600
openssl rand -base64 741 > /data/keyfile/security、 chmod 600 /data/keyfile/security
注:生成security文件拷贝到其余节点上,注意文件权限600切记
关闭每一个节点上主mongod,并打开第一个节点的shard1.conf配置文件中security去掉注释,以及第二节点上shard2.conf和第三个节点shard3.conf配置文件去掉注释便可
关闭mongod命令
pkill mongod
再次启动mongod
第一台机器上执行命令以下 mongod -f /data/config/shard1.conf 第2台机器上执行命令以下 mongod -f /data/config/shard2.conf 第3台机器上执行命令以下 mongod -f /data/config/shard3.conf
登录每一个主节点上mongod,进行show或者其余命令的时候回提示没有认证,认证后就能够查看了,这里就不演示了
启动每一个节点上shard、confisvr以及mongos便可
命令以下
mongod -f /data/config/shard1.conf mongod -f /data/config/shard2.conf mongod -f /data/config/shard3.conf mongod -f /data/config/configsvr.conf mongos -f /data/config/mongos.conf
注:启动后使用netstat -ntpl或者ps -ef|grep mongo查看便可
第一台节点 mongodb-01机器配置复制集,mongo –port 20001登录操做
> use admin
switched to db admin
> config = { _id:"shard1",members:[{_id:0,host:"mongodb-01:20001"},{_id:1,host:"mongodb-02:20001"},{_id:2,host:"mongodb-03:20001",arbiterOnly:true}]}
第二台节点 mongodb-02机器配置复制集,mongo –port 20002
> use admin
switched to db admin
> config = { _id:"shard2",members:[{_id:0,host:"mongodb-02:20002"},{_id:1,host:"mongodb-03:20002"},{_id:2,host:"mongodb-01:20002",arbiterOnly:true}]}
第三台节点 mongodb-03机器配置复制集,登录mongo –port 20003
> use admin
switched to db admin
> config = { _id:"shard3",members:[{_id:0,host:"mongodb-03:20003"},{_id:1,host:"mongodb-01:20003"},{_id:2,host:"mongodb-02:20003",arbiterOnly:true}]}
注:以上就是每一个节点上配置rs复制集,可使用rs.status(),查看每一个节点上rs复制集相关状态信息等
######################################################################
登录任意节点上进行mongo路由配置,mongo --port 20000
mongos> use admin
switched to db admin
mongos> db.runCommand({addshard:”shard1/mongodb-01:20001,mongodb-02:20001,mongodb-03:20001”});
{ “shardAdded” : “shard1”, “ok” : 1 }
mongos> db.runCommand({addshard:”shard2/mongodb-01:20002,mongodb-02:20002,mongodb-03:20002”});
{ “shardAdded” : “shard2”, “ok” : 1 }
mongos> db.runCommand({addshard:”shard3/mongodb-01:20003,mongodb-02:20003,mongodb-03:20003”});
{ “shardAdded” : “shard3”, “ok” : 1 }
查看shard状态命令
mongos路由设置帐户来进行管理
快速执行命令建立帐号命令以下
db.createUser( { user: "admin", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
实际操做以下,建立userAdminAnyDatabase角色帐号
mongos> db.createUser( { ... user: "admin", ... pwd: "123456", ... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] ... }); Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } mongos> db.auth("admin","123456") 1
快速建立root角色帐号命令以下
db.createUser ( { user: "sa", pwd: "123456", roles: [ { role: "root", db: "admin" } ] });
实际操做以下,建立成功
mongos> db.createUser( { ... user: "sa", ... pwd: "123456", ... roles: [ { role: "root", db: "admin" } ] ... }); Successfully added user: { "user" : "sa", "roles" : [ { "role" : "root", "db" : "admin" } ] } mongos> db.auth("sa","123456") 1
注:userAdminAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的userAdmin权限,root:只在admin数据库中可用。超级帐号,超级权限,其实 建立一个userAdminAnyDatabase角色就能够,而后能够建立N个用户角色。
如何验证mongos帐号?
还记得以前使用openssl命令生成的security文件吗?
如今关闭mongod以及mongos命令以下,而且打开每一个节点上配置文件关于security选项注释去掉便可
netstat -ntpl|grep mongo|awk '{print $NF}'|awk -F'/' '{print $1}'|xargs kill
启动每一个节点上shard、confisvr以及mongos
mongod -f /data/config/shard1.conf mongod -f /data/config/shard2.conf mongod -f /data/config/shard3.conf mongod -f /data/config/configsvr.conf mongos -f /data/config/mongos.conf
登录任意节点上mongos进行认证便可,这里就不演示了,能够参考其余mongo3.2集群认证文章,其实也就是登录是否有权限进行查看以及其余操做,没认证会有提示信息。。。