准备工作
在CentOS 7 上安装MongoDB分片集群
6 Servers 代表:6台服务器上都要操作.
环境准备 On 6 Servers
给虚拟机设置静态IP
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
修改以下
#BOOTPROTO=“dhcp”
BOOTPROTO=“static”
IPADDR=“.xx.xx.xx.xx”
NETMASK=“255.255.255.0”
GATEWAY=“.xx.xx.xx.xx”
DNS1=“.xx.xx.xx.xx”
systemctl restart network
reboot
如果连不上外网,可以尝试断开虚拟机的网络,再重新连接
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.24
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.71
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.73
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.74
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.75
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.76
[root@mongo1 ~]# getenforce
Enforcing
[root@mongo1 ~]# sudo setenforce 0
[root@mongo1 lib]# vi /etc/selinux/config
SELINUX=disabled
systemctl stop firewalld
systemctl disable firewalld
sudo shutdown -r now
开始安装MongoDB On 6 Servers
[root@mongo1 ~]# sudo yum -y install libcurl openssl
[root@mongo1 ~]# curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.6.tgz
[root@mongo1 ~]# tar -zxvf mongodb-linux-*-4.2.6.tgz
[root@mongo1 ~]# adduser mongod
[root@mongo1 ~]# passwd mongod
为服务器设置域名 On 6 Servers
我们将使用域名来搭建分片集。使用域名也是搭建MongoDB集群的推荐方式,它在以后发生迁移时将带来很多便利。
vi /etc/hosts
xx.xx.xx.24 mongod1 member1.mongod.com
xx.xx.xx.71 mongod2 member2.mongod.com
xx.xx.xx.73 mongod3 member3.mongod.com
xx.xx.xx.74 mongod4 member4.mongod.com
xx.xx.xx.75 mongod5 member5.mongod.com
xx.xx.xx.76 mongod6 member6.mongod.com
服务器分工
在本例中,我们将使用:
member1
/member3
/member5
搭建shard1
和config
member2
/member4
/member6
搭建shard2
和mongos
member1 | member2 | member3 | member4 | member5 | member6 | |
---|---|---|---|---|---|---|
shard1 | ✓ | ✓ | ✓ | |||
shard2 | ✓ | ✓ | ✓ | |||
config | ✓ | ✓ | ✓ | |||
mongos | ✓ | ✓ | ✓ |
准备分片目录
在各服务器上创建数据目录,我们使用/data
,请按自己需要修改为其他目录:
-
在
member1
/member3
/member5
上执行以下命令:mkdir -p /var/lib/mongo/shard1/ mkdir -p /var/lib/mongo/config/
-
在
member2
/member4
/member6
上执行以下命令:mkdir -p /var/lib/mongo/shard2/ mkdir -p /var/lib/mongo/mongos/
sudo chown -R mongod:mongod /var/lib/mongo
Ensure the binaries are in a directory listed in your PATH
environment variable.
sudo cp /root/mongodb-linux-x86_64-rhel70-4.2.6/bin/* /usr/local/bin/
搭建分片
搭建shard1
在member1
/member3
/member5
上执行以下命令。注意以下参数:
shardsvr
: 表示这不是一个普通的复制集,而是分片集的一部分;wiredTigerCacheSizeGB
: 该参数表示MongoDB能够使用的缓存大小。默认值为(RAM - 1GB) / 2
。- 不建议配置超过默认值,有OOM的风险;
- 因为我们当前测试会在一台服务器上运行多个实例,因此配置了较小的值;
bind_ip
: 生产环境中强烈建议不要绑定外网IP,此处为了方便演示绑定了所有IP地址。类似的道理,生产环境中应开启认证--auth
,此处为演示方便并未使用;
mongod --bind_ip 0.0.0.0 --replSet shard1 --dbpath /var/lib/mongo/shard1 --logpath /var/lib/mongo/shard1/mongod.log --port 27010 --fork --shardsvr --wiredTigerCacheSizeGB 1
用这三个实例搭建shard1复制集:
-
任意连接到一个实例,例如我们连接到
member1.example.com
:mongo --host member1.mongod.com:27010
-
初始化
shard1
复制集。我们使用如下配置初始化复制集:rs.initiate({ _id: "shard1", "members" : [ { "_id": 0, "host" : "member1.mongod.com:27010" }, { "_id": 1, "host" : "member3.mongod.com:27010" }, { "_id": 2, "host" : "member5.mongod.com:27010" } ] });
-
查看初始化复制集状态:
rs.status()
搭建config
与shard1
类似的方式,我们可以搭建config
服务器。在member1
/member3
/member5
上执行以下命令:
-
运行
config
实例:mongod --bind_ip 0.0.0.0 --replSet config --dbpath /var/lib/mongo/config --logpath /var/lib/mongo/config/mongod.log --port 27019 --fork --configsvr --wiredTigerCacheSizeGB 1
-
连接到
member1
:mongo --host member1.mongod.com:27019
-
初始化
config
复制集:rs.initiate({ _id: "config", "members" : [ { "_id": 0,