***************************************************************
第一部分:系统配置
***************************************************************
---0.配置yum源
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.old
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
yum makecache
检查可更新的rpm包
#yum check-update
更新所有的rpm包
#yum update
---1.安全加固
1.1 SELinux
/usr/sbin/sestatus -v | grep "SELinux status"
vi /etc/selinux/config
SELINUX=disabled
1.2 限制哪些账户能切换到root
1) #vi /etc/pam.d/su
auth required /lib/security/pam_wheel.so group=dba
groupadd dba
useradd -g dba sysadmin
或将用户修改组:
#usermod -Gdba sysadmin 将sysadmin用户加入到dba组
passwd sysadmin
1.3 修改ssh端口、禁止root账户远程登录
#vi /etc/ssh/sshd_config
Port 16335
PermitRootLogin no
PermitEmptyPasswords no
# /etc/init.d/sshd restart
1.4 允许普通用户执行sudo
vi /etc/sudoers
98 root ALL=(ALL) ALL
99 sysadmin ALL=(ALL) ALL
109 sysadmin ALL=(ALL) NOPASSWD: ALL #不需输入密码,直接切换即可
$ sudo su -
-----设置别名让普通用户快速切换到root
echo "alias sudor=\"sudo su -\"" >> ~/.bash_profile
source ~/.bash_profile
1.5 rz
yum install lrzsz -y
---2.在proc中关闭NUMA
rpm -qa | grep numactl
yum install -y numactl
# echo 0 > /proc/sys/vm/zone_reclaim_mode
# sysctl -w vm.zone_reclaim_mode=0
---3.修改最大连接数
#vi /etc/security/limits.conf
* soft nofile 25000
* hard nofile 25000
---4.关闭防火墙
chkconfig --level 123456 iptables off
service iptables stop
---5.修改hosts
vi /etc/hosts
192.168.50.110 mg01 mg01.atalas.com
192.168.50.120 mg02 mg02.atalas.com
192.168.50.130 mg03 mg03.atalas.com
***************************************************************
第二部分:mongodb安装
***************************************************************
---1.安装mongodb
--1.1 安装openssl
yum install -y openssl-devel openssl
--1.2 安装mongodb
mkdir /soft && cd /soft && ls && rz
tar xvzf mongodb-linux-x86_64-rhel62-3.0.5.gz
mkdir -p /data/mongodb
mkdir -p /data/mongodb/db
mkdir -p /data/mongodb/logs
mkdir -p /data/mongodb/apps
mkdir -p /data/mongodb/{db,logs,apps}
touch /data/mongodb/logs/mongodb.log
chmod -R 777 /data/mongodb/logs/mongodb.log
mv mongodb-linux-x86_64-rhel62-3.0.5 /data/mongodb/apps/mongodb
cd /data/mongodb/apps/mongodb/bin
vi /data/mongodb/apps/mongodb/bin/mongodb.conf
#mg01
port=27017 #端口
dbpath= /data/mongodb/db #数据文件存放目录
logpath= /data/mongodb/logs/mongodb.log #日志文件存放目录
logappend=true #使用追加的方式写日志
fork=true #以守护程序的方式启用,即在后台运行
maxConns=5000 #最大同时连接数 默认2000
bind_ip=127.0.0.1,192.168.50.110 #只允许通过局域网IP192.168.50.110及本机访问
noauth=true #不启用验证
nohttpinterface=true
rest=false
syncdelay=60
#mg02
port=27017 #端口
dbpath= /data/mongodb/db #数据文件存放目录
logpath= /data/mongodb/logs/mongodb.log #日志文件存放目录
logappend=true #使用追加的方式写日志
fork=true #以守护程序的方式启用,即在后台运行
maxConns=5000 #最大同时连接数 默认2000
bind_ip=127.0.0.1,192.168.50.120 #只允许通过局域网IP192.168.50.120及本机访问
noauth=true #不启用验证
nohttpinterface=true
rest=false
syncdelay=60
#mg03
port=27017 #端口
dbpath= /data/mongodb/db #数据文件存放目录
logpath= /data/mongodb/logs/mongodb.log #日志文件存放目录
logappend=true #使用追加的方式写日志
fork=true #以守护程序的方式启用,即在后台运行
maxConns=5000 #最大同时连接数 默认2000
bind_ip=127.0.0.1,192.168.50.130 #只允许通过局域网IP192.168.50.130及本机访问
noauth=true #不启用验证
nohttpinterface=true
rest=false
syncdelay=60
--1.3禁用hugepage
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
--1.4 启动mongodb
所有节点:
#numactl --interleave=all /data/mongodb/apps/mongodb/bin/mongod \
--config /data/mongodb/apps/mongodb/bin/mongodb.conf --replSet wind
about to fork child process, waiting until server is ready for connections.
forked process: 3765
child process started successfully, parent exiting
---1.5mongodb连接
# /data/mongodb/apps/mongodb/bin/mongo
MongoDB shell version: 3.0.5
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2015-08-03T12:39:33.996+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2015-08-03T12:39:33.996+0800 I CONTROL [initandlisten]
2015-08-03T12:39:33.996+0800 I CONTROL [initandlisten]
2015-08-03T12:39:33.996+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-08-03T12:39:33.996+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-08-03T12:39:33.996+0800 I CONTROL [initandlisten]
2015-08-03T12:39:33.996+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-08-03T12:39:33.996+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-08-03T12:39:33.996+0800 I CONTROL [initandlisten]
>
/******************解决办法
不重启服务器的情况下解决办法,在Linux下执行:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
服务器重启后立即生效办法:
# vi /etc/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
********************/
----1.6正常停止方法:
# ps aux | grep mongod
root 3765 1.9 0.1 500832 58224 ? Sl 12:38 0:02 /data/mongodb/apps/mongodb/bin/mongod --config /data/mongodb/apps/mongodb/bin/mongodb.conf
# kill -2 3765
或
# /data/mongodb/apps/mongodb/bin/mongo -port 27107
> use admin;
> db.shutdownServer();
----1.7 开机自动启动mongodb
# vi /etc/rc.d/rc.local
#启动mongodb
rm -rf /data/mongodb/db/mongod.lock
numactl --interleave=all /data/mongodb/apps/mongodb/bin/mongod --config /data/mongodb/apps/mongodb/bin/mongodb.conf --replSet wind
#hugepage
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
说明:启动时必须加numactl --interleave=all
***************************************************************
第三部分:副本集的配置
***************************************************************
0.变量
echo "alias date='date \"+%Y-%m-%d %H:%M:%S\" ' ">>~/.bash_profile && source ~/.bash_profile
echo "export PATH=/data/mongodb/apps/mongodb/bin:$PATH" >>/etc/profile && source /etc/profile
1.等到三台机器都启动完了之后。使用mongo客户端登录其中一台mongod服务器
mongo --port 27017
use admin;
config = {_id:"wind",members:[
... {_id:0,host:"192.168.50.110:27017"},
... {_id:1,host:"192.168.50.120:27017"},
... {_id:2,host:"192.168.50.130:27017"}]
};
#输出结果:
{
"_id" : "wind",
"members" : [
{
"_id" : 0,
"host" : "192.168.50.110:27017"
},
{
"_id" : 1,
"host" : "192.168.50.120:27017"
},
{
"_id" : 2,
"host" : "192.168.50.130:27017"
}
]
}
#初始化副本集配置
rs.initiate(config);
#输出结果:
{ "ok" : 1 }
#查看集群节点的状态
rs.status();
{
"set" : "wind",
"date" : ISODate("2015-08-04T06:08:38.151Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.50.110:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1604,
"optime" : Timestamp(1438668391, 1),
"optimeDate" : ISODate("2015-08-04T06:06:31Z"),
"electionTime" : Timestamp(1438668395, 1),
"electionDate" : ISODate("2015-08-04T06:06:35Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "192.168.50.120:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 126,
"optime" : Timestamp(1438668391, 1),
"optimeDate" : ISODate("2015-08-04T06:06:31Z"),
"lastHeartbeat" : ISODate("2015-08-04T06:08:36.784Z"),
"lastHeartbeatRecv" : ISODate("2015-08-04T06:08:37.012Z"),
"pingMs" : 6,
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.50.130:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 126,
"optime" : Timestamp(1438668391, 1),
"optimeDate" : ISODate("2015-08-04T06:06:31Z"),
"lastHeartbeat" : ISODate("2015-08-04T06:08:37.010Z"),
"lastHeartbeatRecv" : ISODate("2015-08-04T06:08:37.006Z"),
"pingMs" : 3,
"configVersion" : 1
}
],
"ok" : 1
}
***************************************************************
第四部分:副本集的验证测试
***************************************************************
-------1.测试副本集数据复制功能
---1.1 主节点192.168.50.110:
mongo --host 127.0.0.1 --port 27017
#建立test 数据库。
use test;
#tblorders表插入数据
db.tblorders.insert( { orderno: "A2014089901", pname: "tblorders", scity:"beijing",price : 670 } );
db.tblorders.insert( { orderno: "A2014089902", pname: "snow", scity:"成都" ,price : 1270} );
db.tblorders.insert( { orderno: "A2014089903", pname: "kiki", scity:"重庆",price : 9780 } );
wind:PRIMARY> db.tblorders.find().forEach(printjson);
{
"_id" : ObjectId("55c05976985cda7c357bccd0"),
"orderno" : "A2014089901",
"pname" : "tblorders",
"scity" : "beijing",
"price" : 670
}
{
"_id" : ObjectId("55c05976985cda7c357bccd1"),
"orderno" : "A2014089902",
"pname" : "snow",
"scity" : "成都",
"price" : 1270
}
{
"_id" : ObjectId("55c05976985cda7c357bccd2"),
"orderno" : "A2014089903",
"pname" : "kiki",
"scity" : "重庆",
"price" : 9780
}
--1.2 副本节点192.168.5.120
mongo 192.168.50.120:27017
mongo --host 127.0.0.1 --port 27017
#使用jinri数据库。
wind:SECONDARY> use jinri;
switched to db jinri
wind:SECONDARY> show tables;
2015-08-04T14:22:48.436+0800 E QUERY Error: listCollections failed: { "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }
at Error (<anonymous>)
at DB._getCollectionInfosCommand (src/mongo/shell/db.js:646:15)
at DB.getCollectionInfos (src/mongo/shell/db.js:658:20)
at DB.getCollectionNames (src/mongo/shell/db.js:669:17)
at shellHelper.show (src/mongo/shell/utils.js:625:12)
at shellHelper (src/mongo/shell/utils.js:524:36)
at (shellhelp2):1:1 at src/mongo/shell/db.js:646
#mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。
wind:SECONDARY> db.getMongo().setSlaveOk();
wind:SECONDARY> show tables;
system.indexes
tblorders
wind:SECONDARY> db.tblorders.find().forEach(printjson)
{
"_id" : ObjectId("55c05976985cda7c357bccd0"),
"orderno" : "A2014089901",
"pname" : "tblorders",
"scity" : "beijing",
"price" : 670
}
{
"_id" : ObjectId("55c05976985cda7c357bccd1"),
"orderno" : "A2014089902",
"pname" : "snow",
"scity" : "成都",
"price" : 1270
}
{
"_id" : ObjectId("55c05976985cda7c357bccd2"),
"orderno" : "A2014089903",
"pname" : "kiki",
"scity" : "重庆",
"price" : 9780
}
--1.3 副本节点192.168.5.130
mongo 192.168.50.130:27017
mongo --host 127.0.0.1 --port 27017
wind:SECONDARY> use jinri;
switched to db jinri
wind:SECONDARY> show tables;
2015-08-04T14:37:56.222+0800 E QUERY Error: listCollections failed: { "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }
at Error (<anonymous>)
at DB._getCollectionInfosCommand (src/mongo/shell/db.js:646:15)
at DB.getCollectionInfos (src/mongo/shell/db.js:658:20)
at DB.getCollectionNames (src/mongo/shell/db.js:669:17)
at shellHelper.show (src/mongo/shell/utils.js:625:12)
at shellHelper (src/mongo/shell/utils.js:524:36)
at (shellhelp2):1:1 at src/mongo/shell/db.js:646
wind:SECONDARY> db.getMongo().setSlaveOk();
wind:SECONDARY> show tables;
system.indexes
tblorders
wind:SECONDARY> db.tblorders.find().forEach(printjson)
{
"_id" : ObjectId("55c05976985cda7c357bccd0"),
"orderno" : "A2014089901",
"pname" : "tblorders",
"scity" : "beijing",
"price" : 670
}
{
"_id" : ObjectId("55c05976985cda7c357bccd1"),
"orderno" : "A2014089902",
"pname" : "snow",
"scity" : "成都",
"price" : 1270
}
{
"_id" : ObjectId("55c05976985cda7c357bccd2"),
"orderno" : "A2014089903",
"pname" : "kiki",
"scity" : "重庆",
"price" : 9780
}
--------2.测试副本集故障转移功能
2.1 关闭110节点
mongo 192.168.50.110:27017
use admin;
db.shutdownServer();
2.2自动选举一个节点为主节点130
2015-08-04T14:52:43.014+0800 I NETWORK [ReplExecNetThread-4] Socket recv() timeout 192.168.50.110:27017
2015-08-04T14:52:43.014+0800 I NETWORK [ReplExecNetThread-4] SocketException: remote: 192.168.50.110:27017 error: 9001 socket exception [RECV_TIMEOUT] server [192.168.50.110:27017]
2015-08-04T14:52:43.014+0800 I NETWORK [ReplExecNetThread-4] DBClientCursor::init call() failed
2015-08-04T14:52:43.062+0800 I REPL [ReplicationExecutor] Error in heartbeat request to 192.168.50.110:27017; Location10276 DBClientBase::findN: transport error: 192.168.50.110:27017 ns: admin.$cmd query: { replSetHeartbeat: "wind", pv: 1, v: 1, from: "192.168.50.130:27017", fromId: 2, checkEmpty: false }
2015-08-04T14:52:43.062+0800 I REPL [ReplicationExecutor] Standing for election
2015-08-04T14:52:43.064+0800 I REPL [ReplicationExecutor] replSet possible election tie; sleeping 90ms until 2015-08-04T14:52:43.154+0800
2015-08-04T14:52:43.154+0800 I REPL [ReplicationExecutor] Standing for election
2015-08-04T14:52:43.163+0800 I REPL [ReplicationExecutor] replSet info electSelf
2015-08-04T14:52:43.165+0800 I REPL [ReplicationExecutor] received vote: 1 votes from 192.168.50.120:27017
2015-08-04T14:52:43.165+0800 I REPL [ReplicationExecutor] replSet election succeeded, assuming primary role
2015-08-04T14:52:43.165+0800 I REPL [ReplicationExecutor] transition to PRIMARY
2015-08-04T14:52:44.387+0800 I NETWORK [conn167] end connection 192.168.50.120:51506 (2 connections now open)
2015-08-04T14:52:44.388+0800 I NETWORK [initandlisten] connection accepted from 192.168.50.120:51507 #169 (3 connections now open)
2015-08-04T14:52:50.112+0800 W NETWORK [ReplExecNetThread-5] Failed to connect to 192.168.50.110:27017 after 5000 milliseconds, giving up.
2.3 新的主节点130插入数据
db.tblorders.insert( { orderno: "110", pname: "jyl", scity:"重庆",price : 2780 } );
2.4 检查120节点数据是否同步
mongo 192.168.50.120:27017
db.getMongo().setSlaveOk();
wind:SECONDARY> db.tblorders.find().forEach(printjson)
{
"_id" : ObjectId("55c05976985cda7c357bccd0"),
"orderno" : "A2014089901",
"pname" : "tblorders",
"scity" : "beijing",
"price" : 670
}
{
"_id" : ObjectId("55c05976985cda7c357bccd1"),
"orderno" : "A2014089902",
"pname" : "snow",
"scity" : "成都",
"price" : 1270
}
{
"_id" : ObjectId("55c05976985cda7c357bccd2"),
"orderno" : "A2014089903",
"pname" : "kiki",
"scity" : "重庆",
"price" : 9780
}
{
"_id" : ObjectId("55c05e3a985cda7c357bccd3"),
"orderno" : "A2014089904",
"pname" : "atalas",
"scity" : "乌鲁木齐",
"sdate" : "2015-08-08"
}
{
"_id" : ObjectId("55c062ad929d01d23682d297"),
"orderno" : "110",
"pname" : "jyl",
"scity" : "重庆",
"price" : 2780
}
wind:SECONDARY>
2.5 重新启动110节点
#建议将下面的内容设置为自动启动
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
#启动节点
numactl --interleave=all /data/mongodb/apps/mongodb/bin/mongod --config /data/mongodb/apps/mongodb/bin/mongodb.conf --replSet wind
mongo 192.168.50.110:27017
db.getMongo().setSlaveOk();
db.tblorders.find().forEach(printjson)
--------3.副本节点删除
wind:PRIMARY> rs.status();
{
"set" : "wind",
"date" : ISODate("2015-08-04T07:24:17.085Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.50.110:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 414,
"optime" : Timestamp(1438671533, 1),
"optimeDate" : ISODate("2015-08-04T06:58:53Z"),
"lastHeartbeat" : ISODate("2015-08-04T07:24:15.313Z"),
"lastHeartbeatRecv" : ISODate("2015-08-04T07:24:15.113Z"),
"pingMs" : 9,
"configVersion" : 1
},
{
"_id" : 1,
"name" : "192.168.50.120:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1062,
"optime" : Timestamp(1438671533, 1),
"optimeDate" : ISODate("2015-08-04T06:58:53Z"),
"lastHeartbeat" : ISODate("2015-08-04T07:24:15.766Z"),
"lastHeartbeatRecv" : ISODate("2015-08-04T07:24:15.111Z"),
"pingMs" : 1,
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.50.130:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 4753,
"optime" : Timestamp(1438671533, 1),
"optimeDate" : ISODate("2015-08-04T06:58:53Z"),
"electionTime" : Timestamp(1438671994, 1),
"electionDate" : ISODate("2015-08-04T07:06:34Z"),
"configVersion" : 1,
"self" : true
}
],
"ok" : 1
}
#删除节点110
rs.remove("192.168.50.110:27017");
wind:PRIMARY> rs.status();
{
"set" : "wind",
"date" : ISODate("2015-08-04T07:25:11.988Z"),
"myState" : 1,
"members" : [
{
"_id" : 1,
"name" : "192.168.50.120:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1117,
"optime" : Timestamp(1438671533, 1),
"optimeDate" : ISODate("2015-08-04T06:58:53Z"),
"lastHeartbeat" : ISODate("2015-08-04T07:25:10.003Z"),
"lastHeartbeatRecv" : ISODate("2015-08-04T07:25:11.545Z"),
"pingMs" : 12,
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.50.130:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 4807,
"optime" : Timestamp(1438673110, 1),
"optimeDate" : ISODate("2015-08-04T07:25:10Z"),
"electionTime" : Timestamp(1438671994, 1),
"electionDate" : ISODate("2015-08-04T07:06:34Z"),
"configVersion" : 2,
"self" : true
}
],
"ok" : 1
}
#测试130主节点加入数据是否同步到120
use wind;
db.tblorders.insert( { orderno: "1001", pname: "jinri", scity:"pek",price : 1650 } );
mongo 192.168.50.120:27017
db.getMongo().setSlaveOk();
wind:SECONDARY> db.tblorders.find().forEach(printjson)
{
"_id" : ObjectId("55c0693a0bef81df34afc6d2"),
"orderno" : "1001",
"pname" : "jinri",
"scity" : "pek",
"price" : 1650
}
--------4.副本节点添加
wind:PRIMARY> rs.status();
{
"set" : "wind",
"date" : ISODate("2015-08-04T07:34:01.731Z"),
"myState" : 1,
"members" : [
{
"_id" : 1,
"name" : "192.168.50.120:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1647,
"optime" : Timestamp(1438673359, 2),
"optimeDate" : ISODate("2015-08-04T07:29:19Z"),
"lastHeartbeat" : ISODate("2015-08-04T07:34:01.589Z"),
"lastHeartbeatRecv" : ISODate("2015-08-04T07:34:01.338Z"),
"pingMs" : 1,
"syncingTo" : "192.168.50.130:27017",
"configVersion" : 2
},
{
"_id" : 2,
"name" : "192.168.50.130:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 5337,
"optime" : Timestamp(1438673359, 2),
"optimeDate" : ISODate("2015-08-04T07:29:19Z"),
"electionTime" : Timestamp(1438671994, 1),
"electionDate" : ISODate("2015-08-04T07:06:34Z"),
"configVersion" : 2,
"self" : true
}
],
"ok" : 1
}
#增加节点
rs.add("192.168.50.110:27017");
wind:PRIMARY> rs.status();
{
"set" : "wind",
"date" : ISODate("2015-08-04T07:34:39.529Z"),
"myState" : 1,
"members" : [
{
"_id" : 1,
"name" : "192.168.50.120:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1685,
"optime" : Timestamp(1438673676, 1),
"optimeDate" : ISODate("2015-08-04T07:34:36Z"),
"lastHeartbeat" : ISODate("2015-08-04T07:34:38.789Z"),
"lastHeartbeatRecv" : ISODate("2015-08-04T07:34:39.514Z"),
"pingMs" : 6,
"configVersion" : 3
},
{
"_id" : 2,
"name" : "192.168.50.130:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 5375,
"optime" : Timestamp(1438673676, 1),
"optimeDate" : ISODate("2015-08-04T07:34:36Z"),
"electionTime" : Timestamp(1438671994, 1),
"electionDate" : ISODate("2015-08-04T07:06:34Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 3,
"name" : "192.168.50.110:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 0,
"optime" : Timestamp(1438673676, 1),
"optimeDate" : ISODate("2015-08-04T07:34:36Z"),
"lastHeartbeat" : ISODate("2015-08-04T07:34:38.791Z"),
"lastHeartbeatRecv" : ISODate("2015-08-04T07:34:38.790Z"),
"pingMs" : 6,
"syncingTo" : "192.168.50.130:27017",
"configVersion" : 3
}
],
"ok" : 1
}
#130插入数据验证
use wind;
db.tblorders.insert( { orderno: "1002", pname: "jinri", scity:"pvg",price : 1750 } );
wind:PRIMARY> db.tblorders.find().forEach(printjson);
{
"_id" : ObjectId("55c069cf0bef81df34afc6d3"),
"orderno" : "1001",
"pname" : "jinri",
"scity" : "pek",
"price" : 1650
}
{
"_id" : ObjectId("55c06dcd1449f1bbe0a56e9b"),
"orderno" : "1002",
"pname" : "jinri",
"scity" : "pvg",
"price" : 1750
}
#110和120验证
mongo 192.168.50.110:27017
wind:SECONDARY> rs.slaveOk();
wind:SECONDARY> use wind;
switched to db wind
wind:SECONDARY> db.tblorders.find().forEach(printjson);
{
"_id" : ObjectId("55c069cf0bef81df34afc6d3"),
"orderno" : "1001",
"pname" : "jinri",
"scity" : "pek",
"price" : 1650
}
{
"_id" : ObjectId("55c06dcd1449f1bbe0a56e9b"),
"orderno" : "1002",
"pname" : "jinri",
"scity" : "pvg",
"price" : 1750
}
wind:SECONDARY> rs.slaveOk();
wind:SECONDARY> use wind;
switched to db wind
wind:SECONDARY> db.tblorders.find().forEach(printjson);
{
"_id" : ObjectId("55c069cf0bef81df34afc6d3"),
"orderno" : "1001",
"pname" : "jinri",
"scity" : "pek",
"price" : 1650
}
{
"_id" : ObjectId("55c06dcd1449f1bbe0a56e9b"),
"orderno" : "1002",
"pname" : "jinri",
"scity" : "pvg",
"price" : 1750
}
mongodb高可用Replica Set
最新推荐文章于 2022-12-19 16:07:20 发布