mongo Shard部署

mongo副本集配置部署

副本集:

    1主2从2仲裁

mongo安装包:http://www.mongodb.org/downloads

机器:

    采用5台机器,host0,host1,host2,host3,host4

角色分布:

    1主:host0:8111

    2从:host1:8111,host2:8111

    2仲裁:host3:10000,host3:10000

replica set部署开始

1.准备

    将mongo安装包解压至家目录~,改名为mongo

    mkdir -p ~/mongo/data/mongo/

    mkdir -p ~/mongo/log/

    mkdir -p ~/mongo/conf/

2.配置

vi ~/mongo/conf/mongod.conf

#log
logpath = ./log/mongod.log
logappend = true
#listen port
port = 8111
#db path
dbpath  = ./data/mongo/
#independent dir per db
directoryperdb = true
#namespace disk size
nssize = 500
#max connection numbers
maxConns = 2048
#replica set name
replSet = shard0
#relication log size
oplogSize = 10240
#monitor
rest = true

echo "mongoSecretPassword" > ~/mongo/conf/secretKey

3.启动

nohup numactl --interleave=all ./bin/mongod -f ./conf/mongod.conf --fastsync --keyFile=./conf/secretKey >/dev/null 2>&1 &

注:

    1.不同的分片中,replSet配置不同

    2.numactl --interleave=all,numa:Non-Uniform Memory Access,内存交织分配,必须,否则导致频繁的内存交换,影响mongo性能

    3.--keyFile=./conf/secretKey,集群认证的私钥,secretKey权限不要太开放,chmod 400 ~/mongo/conf/secretKey

    4.--fastsync,使用已有的基准数据,而非完全重新同步数据

4.检查

    检查mongo进程,检查mongo日志~/mongo/log/mongod.log

    此时mongod.log会提示:[rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)

    这是由于副本集无法获取配置导致,完成下一步即可解决

5.设置replica set

随意进入一台mongod机器

cd ~/mongo
./bin/mongo 127.0.0.1:8111
connecting to: 127.0.0.1:8111/test
> config = {_id:'shard0',members:[{_id:0,host:'host0IP:8111'},{_id:1,host:'host1IP:8111'},{_id:2,host:'host2IP:8111'}]}
> rs.initiate(config)

6.设置secondary可读

登录secondary机器

cd ~/mongo/
./bin/mongo 127.0.0.1:8111
>rs.slaveOk()

7.检查分片状态

分别到各台机器检查

> rs.conf()
> rs.status()
> rs.isMaster()

8.用户名密码设定

到primary机器(rs.status可以查找到),进行如下操作

> use admin
> db.addUser("username","password")

9.arbiter:仲裁者的构建

9.1准备

    arbiter与mongod同进程,不同是arbiter无数据集,在选举时进行投票

    将mongo安装包解压至家目录~,改名为arbiter

    cd ~/arbiter/bin/ && cp mongod arbiter-10000        //arbiter耗费资源较少,集群分片的arbiter可全量搭建在两台机器,以arbiter-port命名

    mkdir -p ~/arbiter/conf/

    mkdir -p ~/arbiter/log/

    mkdir -p ~/arbiter/data/arbiter-10000/

9.2配置

    vi ~/arbiter/conf/arbiter-10000.conf        //统一命名规范,便于问题定位

#log
logpath = ./log/arbiter-10000.log
logappend = true
#listen port = 10000
port = 10000
#db path
dbpath  = ./data/arbiter-10000/
#max connection numbers
maxConns = 2048
#replica set name
replSet = shard0
#relication log size
oplogSize = 1024
#monitor
rest = true
# disable http
nohttpinterface = true

9.3启动

    类似副本集中mongod的启动命令

    arbiter启动:

        nohup numactl --interleave=all ./bin/arbiter-10000 -f ./conf/arbiter-10000.conf --keyFile=./conf/secretKey >/dev/null 2>&1 &

8.4将arbiter加入分片

primary节点执行:

    ./bin/mongo 127.0.0.1:8111/admin -u username -p password

shard0:PRIMARY> rs.addArb("host3IP:10000")
shard0:PRIMARY> rs.addArb("host4IP:10000")

8.5查询arbiter状态

    分片节点执行rs.status()查询arbiter状态

至此,1主2从2arbiter的分片构造完毕。

你可能感兴趣的:(mongo,primary,分片,mongod,secondary,副本集,arbiter)