MongoDB部署Word格式.docx
《MongoDB部署Word格式.docx》由会员分享,可在线阅读,更多相关《MongoDB部署Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
-v(virtualmemory):
-n(openfiles):
64000
-m(maxmemorysize):
-u(maxuserprocesses):
一般需要需要(-n:
openfiles)和(-u:
maxuserprocesses)设置。
一般(-u:
maxuserprocesses)设置为(-n:
openfiles)的一半。
永久修改如下:
#vi/etc/security/limits.conf
在文件最后加入:
*softnofile64000
*hardnofile64000
*softnproc64000
*hardnproc64000
只修改当前用户(退出登录后失效):
#ulimit-n64000
#ulimit-u32000
4、修改HostName,在安装MongoDB时可以通过主机名互访。
(可选)
#vi/etc/hosts
172.16.16.100zzk01
5、关闭Linux的内存透明大页面管理(root用户登录)
(1)将disable-transparent-hugepages文件拷贝到/etc/init.d/目录下。
(2)运行以下命令以确保可以使用init脚本:
#chmod755/etc/init.d/disable-transparent-hugepages
(3)在不同的Linux版本上使用适当的命令配置新的init脚本,以下为CentOS7.1的命令:
#chkconfig--adddisable-transparent-hugepages
(4)重新启动服务器
#reboot
(5)检查THP支持的状态:
#cat/sys/kernel/mm/transparent_hugepage/enabled
输出类似于:
alwaysmadvise[never]
#cat/sys/kernel/mm/transparent_hugepage/defrag
6、安装numactl包(root用户登录)
将numactl的安装包(如:
numactl-2.0.9-4.el7.x86_64.rpm)拷贝到/home下,执行命令:
#rpm-ivh/home/numactl-2.0.9-4.el7.x86_64.rpm
7、创建mongodb用户
#useraddmongodb
#passwdmongodb
8、修改mongodb用户为允许执行sudo命令
#visudo
在#%wheelALL=(ALL)NOPASSWD:
ALL后仿照添加
mongodbALL=(ALL)NOPASSWD:
ALL
9、修改mongodb用户的文件打开限制
#vi/etc/security/limits.d/20-nproc.conf
三、下载MongoDB安装文件
官网下载地址:
http:
//www.mongodb.org/downloads
四、安装MongoDB(每台服务器逐一重复)
1、安装MongoDB运行文件
(1)使用mongodb用户登录,或者从root用户切换到mongodb用户。
将下载的文件包拷贝到home/mongodb目录下,解压文件如下:
#sumongodb
#tar-zxvfmongodb-linux-x86_64-rhel70-3.4.0.tgz
(2)删除mongodb安装包,移动解压后文件夹内容到mongodb目录下
#rmmongodb-linux-x86_64-rhel70-3.4.0.tgz
#cdmongodb-linux-x86_64-rhel70-3.4.0
#mv./*/home/mongodb
#cd..
#rm-rfmongodb-linux-x86_64-rhel70-3.4.0/
(3)修改每台服务器的环境变量
编辑文件:
#sudovi/etc/profile
在文件中加入:
PATH=$PATH:
/home/mongodb/bin
使修改立即生效:
#source/etc/profile
注:
在每台服务器上重复上述步骤,分别安装mongodb。
五、配置单节点MongoDB数据库服务器
1、创建存放MongoDB数据的文件夹
#mkdir-p/home/mongodb/data
2、使用root用户将修改后的MongoDB配置文件拷贝/etc目录下,然后修改文件权限
#sudochownmongodb/etc/mongod.conf
3、修改MongoDB(mongod.conf)配置文件
重点修改以下内容:
dbpath=/home/mongodb/data
logpath=/var/log/mongodb.log
bind_ip=127.0.0.1
port=27017
fork=true
replSet=replset
4、手动创建/var/log/mongod.log文件
#sudovi/var/log/mongod.log
不修改文件直接保存
5、修改/var/log/mongod.log文件的权限
#sudochownmongodb/var/log/mongod.log
6、运行MongoDB实例
#numactl--interleave=allmongod-config/etc/mongod.conf
7、查看启动日志
#cat/var/log/mongod.log
六、使用配置文件配置副本集
在三台机器上任意一台机器登陆mongodb
mongo137.20.17.23:
27017
#使用admin数据库
>
useadmin
#定义副本集配置变量,这里的_id:
”repset”和上面命令参数“–replSetrepset”要保持一样
1、配置三个节点的副本集
config={_id:
"
repset"
members:
[
......{_id:
0,host:
137.20.17.23:
27017"
},
1,host:
137.20.17.24:
2,host:
137.20.17.25:
}]
......}
#输出如下
{
"
_id"
:
members"
[
{
"
0,
host"
137.20.17.26:
},
1,
137.20.17.27:
2,
137.20.17.28:
}
]
}
#初始化副本集配置
rs.initiate(config);
{"
ok"
1}
#成功启动副本集
2、配置带有仲裁节点的副本集配置如下(生产环境建议配置):
config={_id:
shard2"
{_id:
10.1.39.187:
10.1.39.188:
10.1.39.193:
arbiterOnly:
true}
};
rs.initiate(config);
其中的仲裁节点(arbiterOnly)不存储数据,只是负责故障转移的群体投票。
其实不只是主节点、副本节点、仲裁节点,还有Secondary-Only、Hidden、Delayed、Non-Voting。
Secondary-Only:
不能成为primary节点,只能作为secondary副本节点,防止一些性能不高的节点成为主节点。
Hidden:
这类节点是不能够被客户端制定IP引用,也不能被设置为主节点,但是可以投票,一般用于备份数据。
Delayed:
可以指定一个时间延迟从primary节点同步数据。
主要用于备份数据,如果实时同步,误删除数据马上同步到从节点,恢复又恢复不了。
Non-Voting:
没有选举权的secondary节点,纯粹的备份数据节点。
3、副本集的增加及删除
rs.remove("
137.20.17.101:
20001"
);
--删除节点登录副本集的主服务器执行
rs.add("
--增加节点登录副本集的主服务器执行
常见问题:
如果显示错误内容:
errmsg"
replSetInitiatequorumcheckfailedbecausenotallproposedsetmembe
rsrespondedaffirmatively:
137.20.17.25:
27017failedwithNoroutetohost"
"
code"
74,
codeName"
NodeNotFound"
则可能是137.20.17.25的防火墙阻止了该服务器的访问,可以关掉防火墙重试。
初始化服务器长期处于SECONDARY状态,而其他服务器长期处于STARTUP状态,如下图所示。
则初始化服务器的防火墙未关闭,可以关掉防火墙重试。
查看启动日志:
#cat/var/log/mongodb.log
启动日志显示如下:
#查看集群节点的状态
repset:
PRIMARY>
rs.status();
//执行此命令后,结果显示如下:
set"
date"
ISODate("
2016-12-12T05:
47:
08.656Z"
),
myState"
term"
NumberLong
(1),
heartbeatIntervalMillis"
NumberLong(2000),
optimes"
{
"
lastCommittedOpTime"
ts"
Timestamp(1481521626,1),
t"
NumberLong
(1)
appliedOpTime"
durableOpTime"
},
name"
health"
state"
stateStr"
PRIMARY"
uptime"
7461,
optime"
"
},
optimeDate"
06Z"
electionTime"
Timestamp(1481514256,1),
electionDate"
2016-12-12T03:
44:
16Z"
configVersion"
self"
true
SECONDARY"
7382,
Timestamp(1481521616,1),
optimeDurable"
46:
56Z"
optimeDurableDate"
lastHeartbeat"
06.694Z"
lastHeartbeatRecv"
07.507Z"
pingMs"
NumberLong(0),
syncingTo"
1
06.746Z"
07.666Z"
],
从以上显示结果中可以看出137.20.17.26为主节点PRIMARY,137.20.17.26.27、137.20.17.26.28为副本节点SECONDARY。
七、测试副本集
1、测试副本集数据复制功能
#在主节点137.20.17.26上连接到终端:
mongo137.20.17.26:
#建立test数据库。
usetest;
#往testdb表插入数据。
db.testdb.insert({"
test1"
:
testval1"
})
#查询数据
PRIMARY>
db.testdb.findOne();
//返回结果如下
ObjectId("
584e3c88dcdc3d56c20ff6f2"
),"
}
#在副本节点137.20.17.27、137.20.17.28上连接到mongodb查看数据是否复制过来。
mongo137.20.17.27:
#使用test数据库。
SECONDARY>
usetest;
showtables;
#输出错误结果如下:
2016-12-12T14:
02:
07.479+0800EQUERY[main]Error:
listCollectionsfailed:
notmasterandslaveOk=false"
13435,
NotMasterNoSlaveOk"
#mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。
db.getMongo().setSlaveOk();
#执行如下命令可以查看副本上的数据了
db.testdb.find();
#输出结果如下,数据已经从主节点复制到副本节点了
查看其它副本节点的数据操作同上。
2、测试副本集故障转移功能
先停掉主节点mongodb26,查看27、28的日志可以看到经过一系列的投票选择操作,27当选主节点,28从27同步数据过来。
查看整个集群的状态,可以看到26为状态不可达。
2016-12-12T06:
27:
23.037Z"
NumberLong
(2),
Timestamp(1481524041,1),
NumberLong
(2)
8,
(notreachable/healthy)"
Timestamp(0,0),
NumberLong(-1)
1970-01-01T00:
00:
00Z"
21.288Z"
24:
39.928Z"
lastHeartbeatMessage"
Connectionrefused"
-1
9997,
21Z"
Timestamp(1481523997,2),
26:
37Z"