centos 7 配置mongodb副本集
-
环境
- virtualbox下三台centos 7虚拟机,
- 网络地址分别为:192.168.56.101、192.168.56.102、192.168.56.103
- mongodb 版本4.02
- 101,102为PRIMARY、SECONDARY节点,103做为仲裁节点
-
安装与配置
-
安装virtualbox,设置virtualbox网络
-
创建一个网络,先“手动配置网卡”,设置Ipv4地址:192.168.56.1
3. 安装三台centos 7虚拟机,分别设置三台虚拟机的网络为
4. 分别配置三台虚拟机的网卡:
ADDRES,IPADDR为192.168.56.101、192.168.56.102、192.168.56.103
5. 三台虚拟机 /etc/hosts 加入
192.168.56.101 redis1 redis1
192.168.56.102 redis2 redis2
192.168.56.103 dis3 redis3
-
安装配置mongodb
-
安装mongodb
下载mongodb-linux-x86_64-amazon2-4.0.2.tar
2. 解压
tar -C /opt/ -xvf mongodb-linux-x86_64-amazon2-4.0.2.tar
3. 运行
- 为每个虚拟机的副本集里的每个成员创建数据目录
mkdir -p /data/db
- 分别启动三台虚拟机的mongodb
注:运行前需要安装glibc-2.18与openssl
cd /opt/mongodb-linux-x86_64-amazon2-4.0.2/bin
4. 配置mongodb副本集
./mongod --replSet myapp --bind_ip 0.0.0.0
在192.168.56.101上启动shell, 执行
./mongo
启动shell,连接到192.168.56.101的mongodb,运行initiate命令
通过rs.add()添加其他两个成员
运行db.isMaster()查看副本集的摘要信息
要看到每个节点的状态信息,可以用rs.status()方法
5. 验证正确性
101虚拟机shell中执行
>use test
switched to db test
> db.products.insert({itemId:"12345","name":"Cooler","price":"100.0"})
在192.168.56.102中启动mongodb的shell
mongo
myapp:SECONDARY>
因为SECONDARY是不允许读写的 ,所以要执行
myapp:SECONDARY> rs.slaveOk()
myapp:SECONDARY>use test
switched to db test
myapp:SECONDARY> db.products.find()
{ "_id" : ObjectId("5b9a317e6c50ff2af9abc057"), "itemId" : "12345", "name" : "Cooler", "price" : "100.0" }
验证自动故障转移,在192.168.56.101上杀掉主节点,ctrl-c或kill , 也可以连上主节点,在Shell里运行db.shutdownServer(),
启动192.168.56.102的shell(bin/ mongo)看到提示符已经变为
myapp:PRIMARY>
加入一条新的数据
myapp:PRIMARY> db.products.insert({itemId:"12346","name":"Apple","price":"200.0"}
myapp:PRIMARY> db.products.find()
{ "_id" : ObjectId("5b9a317e6c50ff2af9abc057"), "itemId" : "12345", "name" : "Cooler", "price" : "100.0" }
{ "_id" : ObjectId("5b9a347e07f6cbbb9244cb37"), "itemId" : "12346", "name" : "Apple", "price" : "200.0" }
启动192.168.56.101的mongdb
启动192.168.56.101的mongdb的shell,可以看到这101已经变成SECONDARY
myapp:SECONDARY>
shell里执行
myapp:SECONDARY> rs.slaveOk()
myapp:SECONDARY> use test
myapp:SECONDARY> db.products.find()
{ "_id" : ObjectId("5b9a317e6c50ff2af9abc057"), "itemId" : "12345", "name" : "Cooler", "price" : "100.0" }
{ "_id" : ObjectId("5b9a347e07f6cbbb9244cb37"), "itemId" : "12346", "name" : "Apple", "price" : "200.0" }
102上新加的数据已经可以在101上查到