系列文章目录
第一章 搭建es集群
前言
该系列主要是以开源组件es、mongodb、graylog为主,搭建一套生产环境日志平台,与常见的elk日志平台相对比,该日志平台部署简易、且占用服务器资源较少,整体不是很重,适用于TOB、TOG项目使用。反观elk平台更适用于TOC项目,且维护成本较高,依赖组件较多。因此,本系列主要从es集群搭建、mongodb搭建、graylog搭建、页面配置、微服务日志接入、graylog日志报警接入展开。
一、es集群部署
详细部署过程见上述第一章
博客内容即可,在此不进行过多叙述。
二、mongodb部署
1.mongodb介绍
mongodb是一款开源组件、高性能、无模式的非关系文档型数据库,记录的是文档,它是由字段和值组成的数据结构。
特点:
高性能 对嵌入式数据模型的支持减少了数据库系统上的I/O活动、索引支持更快的查询
高可用性 有副本集,可提供自动故障转移和数据冗余
高扩展性
丰富的查询条件支持
应用场景:
三高要求(对数据库高并发的读写需求、对海量数据的高效率存储和访问需求、对数据库的高可扩展性和更高级可用性的需求)、最小存储单位是文档对象,及文档对象对应于关系型数据库的行。以二进制json文档格式存储在磁盘上。
2.mongodb副本集介绍
副本集即一主一从一仲裁模式,是一组维护相同数据集的mongodb服务。副本集提供冗余和高可用性,类似于有自动故障恢复功能的主从集群。且副本集包含多个数据承载点和可选的一个仲裁节点,在数据承载节点中,一个且仅一个成员被视为主节点,其余的都被是为从节点,
主节点提供增删改查所有服务,为了缓解主节点的压力,设置从节点提供查询服务
仲裁节点本身不存储数据,主要的作用是决定从节点在主节点宕机后,提升从节点为主节点,为从节点提升级别。
主从复制和副本集的区别
主从集群和副本集最大的区别就是副本集没有固定的“主节点”;整个集群会选出一个“主节点”,当其挂
掉后,又在剩下的从节点中选中其他节点为“主节点”,副本集总有一个活跃点(主、primary)和一个或多
个备份节点(从、secondary)。
3.mongodb副本集部署
1)、基本配置
0、机器分布
|192.168.56.130|主节点 |
|192.168.56.131|从节点 |
|192.168.56.132|仲裁节点 |
1、下载官网包
https://www.mongodb.com/download-center/community/releases
2、上传并解压 三台机器都操作
tar xf mongodb-3.2.22.tar.gz -C /export/servers/app/
cd /export/servers/app
mv mongodb-linux-x86_64-rhel70-3.2.22/ mongodb-3.2.22
设置快捷指令
vim /etc/profile
export MONGO_HOME=/export/servers/app/mongodb-3.2.22
export PATH=\$MONGO_HOME/bin:\$PATH
source /etc/profile
3、创建用户及数据目录
useradd mongo
mkdir -p /export/servers/data/mongodb_27000/mongod_27017/{db,log,run}
touch /export/servers/data/mongodb_27000/mongod_27017/mongod.conf
4、授权
chown -R mongo:mongo /export/servers/app/mongodb-3.2.22
chown -R mongo:mongo /export/servers/data/mongodb_27000
2)、节点配置文件修改
systemLog:
destination: file
path: "/export/servers/data/mongodb_27000/mongod_27017/log/mongod.log" #mongo日志存放位置
logAppend: true #启动或重启后是否追加写入
storage:
indexBuildRetry: true
journal:
enabled: true
dbPath: "/export/servers/data/mongodb_27000/mongod_27017/db" #mongodb数据存放位置
directoryPerDB: true #当为true时,mongodb使用单独的目录存储每个数据库,每个目录名称对应于数据库名称
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 10
directoryForIndexes: true
journalCompressor: snappy
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true
net:
maxIncomingConnections: 5000
port: 27017
processManagement:
fork: true #允许程序在后台运行
pidFilePath: "/export/servers/data/mongodb_27000/mongod_27017/run/mongod.pid" #mongodb启动后pid存放位置
#sharding:
# clusterRole: shardsvr
# autoSplit: true
replication:
replSetName: rs1 #副本名称
oplogSizeMB: 102400
#security:
# keyFile: "/export/servers/data/mongodb_27000/mongod_27017/run/keyfile"
# authorization: enabled
#security相关配置项为注释状态,第一次启动使用时,不加载security相关配置,需要机器配置完毕后再配置开启(因为具体的认证配置文件均未生成)
3)、做成系统服务
在/usr/lib/systemd/system 下创建一个mongod.service 文件
[Unit]
Description=mongodb service
Documentation=https://docs.mongodb.com/manual/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/export/servers/data/mongodb_27000/mongod_27017/run/mongod.pid
ExecStart=/export/servers/app/mongodb-3.2.22/bin/mongod -f /export/servers/data/mongodb_27000/mongod_27017/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/export/servers/app/mongodb-3.2.22/bin/mongod --shutdown --config /export/servers/data/mongodb_27000/mongod_27017/mongo.conf
PrivateTmp=true
User=mongo
Group=mongo
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
-----
启动服务
systemctl start mongod.service
停止服务
systemctl stop mongod.service
重启服务
systemctl restart mongod.service
开机自启
systemctl enable mongodb.service
4)、其余两台机器拷贝相关配置文件
scp -r /export/servers/app/ 192.168.56.131:/export/servers/app/mongodb-3.2.22
scp -r /export/servers/data 192.168.56.131:/export/servers/data
scp /usr/lib/systemd/system/mongod.service 192.168.56.131:/usr/lib/systemd/system/mongod.service
scp -r /export/servers/app/ 192.168.56.132:/export/servers/app/mongodb-3.2.22
scp -r /export/servers/data 192.168.56.132:/export/servers/data
scp /usr/lib/systemd/system/mongod.service 192.168.56.132:/usr/lib/systemd/system/mongod.service
5)、启动mongo服务后登陆任意一台节点、进行初始化副本集
[root@python-vm1 root]$ mongo shell #因为上述配置了mongo的快捷命令
> use admin #
> config = {
_id : "rs1", #要与配置文件中定义的一致
members : [
{_id:0, host:"192.168.56.130:27017"},
{ _id: 1, host: "192.168.56.131:27017"},
{ _id: 2, host: "192.168.56.132:27017", arbiterOnly: true}
]
}
> rs.initiate(config)
{ "ok" : 1 }
`如果返回 { “ok” : 0 }, 则说明初始化失败`
> rs.status() #查看集群状态
6)、创建超管用户和普通用户
登录mongo
mongo shell
#创建超管用户
> use admin
switched to db admin
> db.createUser({
user: 'admin', #用户名
pwd: '123456xxeeffg', #密码
roles:[{
role: 'root', #角色
db: 'admin' #库
}]
})
#创建成功返回以下结果
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
#创建普通用户
use graylog
db.createUser(
{
user: "graylog",
pwd: "0mYMrYR1NGr5oE3o2qGs8gvK",
roles: [ { role: "readWrite" , db: "graylog" } ] #给予graylog用户读写权限
})
7)、创建认证文件并开启认证
创建认证文件 其中一台创建后 `scp -p` 到其他两台机器
openssl rand -base64 20 >/export/servers/data/mongodb_27000/mongod_27017/run/keyfile
chmod 400 keyfile
chown mongo:mongo keyfile #否则启动时会报权限错误
开启认证
vim /export/servers/data/mongodb_27000/mongod_27017/mongo.conf
去掉这三行注释,三台机器必须全部去掉
security:
keyFile: "/export/servers/data/mongodb_27000/mongod_27017/run/keyfile"
authorization: enabled
8)、重启mongo集群并验证用户登录是否成功、及验证graylog是否已存在
三台机器都重启
systemctl restart mongod
其中一台节点执行登录操作
mongo -u admin -p 123456xxeeffg --host 192.168.56.130 --port 27017 --authenticationDatabase=admin
登录成功与验证如下图所示
4.验证副本状态
总结
本篇内容主要对mondb副本集的搭建做出了整理,切记,一定要确保目录、文件的权限要一致,属主属组也要一致,否则容易导致mongo服务启动报错。