阿里云环境迁移记录 - Mongo ReplicationSet搭建

mongo集群的搭建,至少须要3个节点,2两个数据节点和1个仲裁节点,因此这里使用三台机器搭建一个包含3节点的replicationSet。linux

1. 下载解压安装:mongodb

mkdir -P /opt/install
cd /opt/install/
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.3.tgz

#从远程服务器copy到本地安装目录
rsync -avzh root@192.168.72.104:/data/install/mongodb-linux-x86_64-rhel70-4.0.3.tgz /data/install/数据库

#解压copyvim

tar -xvf xxx
mv mongodb-linux-x86_64-rhel70 /usr/local/mongodb

#添加到环境变量bash

echo 'export PATH=/usr/local/mongodb/bin:$PATH' >> /etc/profile 
source /etc/profile
#测试
mongo --version

2. 配置文件修改服务器

#建立数据、配置文件及日志目录ssh

mkdir -p /data/mongodb/data
mkdir -p /data/mongodb/logs
mkdir -p /data/mongodb/conf

vim /data/mongodb/conf/mongod.conf
建立集群时,先以关闭认证,后面再打开。tcp

systemLog:
    destination: file
    path: "/data/mongodb/logs/mongod.log"
    logAppend: true
storage:
    dbPath: "/data/mongodb/data"
    journal:
        enabled: true
processManagement:
    fork: true
    pidFilePath: "/usr/local/mongodb/mongod.pid"
net:
    bindIp: 127.0.0.1,172.26.27.70
    port: 20467
#security:
#keyFile: "/data/mongodb/conf/access.key"
#authorization: enabled
##setParameter:
##authenticationMechanisms: SCRAM-SHA-1**
replication:
    oplogSizeMB: 500
    replSetName: rs_mongo_88

#添加防火墙端口ide

firewall-cmd --zone=public --permanent --add-port=20467/tcp
systemctl restart firewalld.service

3. 启动并建立集群测试

#分别启动三台实例

ln -s /data/mongodb/conf/mongod.conf /etc/mongod.conf
mongod -f /etc/mongod.conf

#进入任意一台实例,初始化集群

mongo 127.0.0.01:20467
> cfg={_id: 'rs_mongo_88', members:[{_id: 1, host: '172.26.27.70:20467'},
{_id: 2, host: '172.26.27.71:20467'},{_id: 3, host: '172.26.27.72:20467'}]}

##添加单个节点

> cfg.members.push({_id: 1, host: '172.26.27.70:20467'}) 
> cfg.members.push({_id: 2, host: '172.26.27.71:20467'})
> cfg.members.push({_id: 3, host: '172.26.27.72:20467'}, arbiterOnly: true)
> rs.initiate(cfg) 
> rs.isMaster()
> rs.status()

#永久设置slaveOk

vim /root/.mongorc.js
rs.slaveOk();

4. 建立用户

use admin

#建立数据库管理员

> db.createUser(
{
    "user":"root",
    "pwd":"PWD",
    "roles":[
        {
            "role":"readWriteAnyDatabase",
            "db":"admin"
        },
        {
            "role":"dbAdminAnyDatabase",
            "db":"admin"
        },
        {
            "role":"userAdminAnyDatabase",
            "db":"admin"
        }
    ]
}  )

#管理员登陆,可进行数据库操做
mongo admin -uroot -p --port 20467

#建立集群管理员

db.createUser(            
{
    "user":"suroot",
    "pwd":"PWD",
    "roles":[
        {
            "role":"clusterAdmin",
            "db":"admin"
        },
        {
            "role":"clusterManager",
            "db":"admin"
        },
        {
            "role":"clusterMonitor",
            "db":"admin"
        }
    ]
})

#集群管理员登陆,可进行集群状态查看和操做
mongo admin -usuroot -p --port 20467

#建立特定库的特定用户

user testdb
db.createUser(             
{
    "user":"test",
    "pwd":"testpwd",
    "roles":[
        {
            "role":"readWrite",
            "db":"testdb"
        },
        {
            "role":"dbAdmin",
            "db":"testdb"
        },
        {
            "role":"userAdmin",
            "db":"testdb"
        }
    ]
})

#查看建立的用户

use admin
> db.system.users.find()

5. 开启认证

mongodb有2个认证环节:客户端与mongod或者mongos之间,以及集群环境中每一个mongod之间。用户添加完成后须要关闭全部节点(先关闭仲裁和从节点, 再关闭主节点, 避免主节点切换):

#shutdown两种方式
#登陆前关闭
mongod -f conf/mongod.conf --shutdown
#登陆后关闭服务:
db.shutdownServer()

#生成keyFile(keyFile的用途是做为全部mongod后台进程容许加入集群的凭证, 全部集群中的节点共用一个keyFile, 避免其余mongod非法加入集群):
#生成keyFile, keyFile的长度必须在6-1024个字符之间
openssl rand -base64 756 > /data/mongodb/conf/access.key
#key只读
chmod 600 /data/mongodb/conf/access.key
#copy到另外两台服务器conf目录
scp access.key root@192.168.72.105:/data/mongodb/conf/
scp access.key root@192.168.72.106:/data/mongodb/conf/

#更换SSH默认端口(22 -> 20462)后的同步方式
rsync -azvh -e 'ssh -p 20462' access.key root@172.26.27.72:/data/mongodb/conf/

#取消三个节点mongod.conf文件中security部分的注释,并重启实例

use admin
db.auth('root','PWD')

6. 中止mongod,建立mongodb用户替代root

useradd mongo -s /sbin/nologin
passwd mongo
mongopwd

登陆权限也可添加后修改:

usermod -s /sbin/nologin mongo
usermod -s /bin/bash mongo

chown -R mongo:mongo /data/mongodb/
chown -R mongo:mongo /usr/local/mongodb/
chown mongo:mongo /etc/mongod.conf

su mongo
mongod -f /data/mongod.conf

##跳板机设置(阿里云内网环境访问,经过跳板机容许网外访问)
#ssh -CfNg -L 20462:127.0.0.1:20467 mongo@192.16872.101
#ssh -CfNg -R 20467:127.0.0.1:20462 mongo@192.16872.101

##启动中止服务

关闭:mongod -f conf/mongod.conf --shutdown
启动: mongod -f conf/mongod.conf

##管理员登陆
mongo admin -uroot -pPWD --port 20467

##集群管理员登陆
mongo admin -usuroot -pPWD --port 20467

##集群状态监控

mongostat --uri=mongodb://suroot:PWD@172.36.27.70:20467/admin 5
mongostat --uri=mongodb://suroot:PWD@172.36.27.71:20467/admin 5
mongostat --uri=mongodb://suroot:PWD@172.36.27.72:20467/admin 5

##集群统计
mongotop --host 172.36.27.71 --port 20467 -usuroot -pPWD --authenticationDatabase=admin 5

##查看每一个数据库的锁的使用
mongotop --host 172.26.27.71 --port 20467 -usuroot -pPWD --authenticationDatabase=admin --locks 5

相关文章
相关标签/搜索