记录这个纯属方便自己以后使用。。
mongodb官方最新版本3.2.6,某些功能都加以改进并且性能提升很大,下面操作只是快速搭建mongodb复制集以及shard分片等
一共分为如下几步骤
- 启动某个节点主master进行设置单个节点账号和密码
- 配置mongodb复制集
- 配置mongos-shard分片
- 设置mongos路由账号和密码并启用验证
架构图如下
目录规划创建
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的
wget tar fxz mongodb-linux-x86_64-ubuntu1404-3.2.6.tgz -C /usr/local/ mv mongodb-linux-x86_64-ubuntu1404-3.2.6 mongodb
设置mongo环境变量
echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile source /etc/profile
第一个节点配置文件如shard1、shard2、shard3、configsvr、mongos配置文件
shard1.conf配置文件如下
shard2.conf配置文件如下
shard3配置文件如下
confisvr.conf配置文件如下
mongos.conf配置文件如下
注:以上配置文件分别拷贝到另外2台节点上
启动第一台节点主mongod
[email protected]:/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
登陆进去,创建账号
[email protected]:/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
[email protected]:/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
登陆进去,创建账号
[email protected]:/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
[email protected]:/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
登陆进去,创建账号
[email protected]:/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或者其他命令的时候回提示没有认证,认证后就可以查看了,这里就不演示了
如果以上操作成功后,关闭mongod,之前去掉security选项注释现在打开注释即可,并且去掉shard配置文件中复制集注释选项去掉即可,避免影响下面复制集操作
启动每个节点上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:"shard2",members:[{_id:0,host:"mongodb-02:20002"},{_id:1,host:"mongodb-03:20002"},{_id:2,host:"mongodb-01:20002",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集群认证文章,其实也就是登陆是否有权限进行查看以及其他操作,没认证会有提示信息。。。