1.Redis数据库服务架构搭建
1)redis高可用架构搭建(哨兵模式架构)
架构功能作用:
-- 在主节点故障后,自动选择从节点变为新的主节点
-- 在主节点故障后,可以实现主从架构重新构建
架构部署规划
主库 10.0.0.51
从库 10.0.0.52
从库 10.0.0.53
哨兵节点01 10.0.0.54 对主库监控 将主库角色转移到从节点 使主从架构重新构建
哨兵节点02 10.0.0.55 对主库监控 将主库角色转移到从节点 使主从架构重新构建
架构部署搭建:
步骤一:配置和启动哨兵服务节点
mkdir -p /data/26380
cd /data/26380
vim sentinel.conf
port 26380
dir /data/26380
daemonize yes
sentinel monitor mymaster 127.0.0.1 6380 1
-- 监控集群架构中主库服务状态(数值1表示发现主库异常的票数,当发现有1票提出主库宕机,就立刻切换)
sentinel down-after-milliseconds mymaster 5000
-- 当主库进行监控心跳检测时,如果5s内没有反馈,就认为主库服务已经宕机
sentinel auth-pass mymaster 123456
-- 设置连接主库服务的认证密码信息
redis-sentinel /data/26380/sentinel.conf &>//data/26380/sentinel.log
步骤二:进行故障转移切换测试
redis-cli -h 10.0.0.51 -p 6380 -a 123456 shutdown
redis-cli -h 10.0.0.51 -p 26380
SENTINEL masters
-- 检查哨兵服务监控的主节点信息是否发生转移
redis-cli -h 10.0.0.51 -p 6382 -a 123456 info replication
redis-cli -h 10.0.0.51 -p 6381 -a 123456 info replication
2)redis集群架构搭建应用(分布式存储架构)
集群架构搭建作用
-- 减少单个redis数据库实例缓存数据存储压力
-- 减少单个redis数据库实例并发处理访问压力
集群架构搭建规划
redis-01 10.0.0.51 主节点 缓存1-100
redis-02 10.0.0.52 主节点 缓存101-200
redis-03 10.0.0.53 主节点 缓存201-300
redis-01-01 10.0.0.54 从节点 缓存1-100
redis-02-01 10.0.0.55 从节点 缓存101-200
redis-03-01 10.0.0.56 从节点 缓存201-300
集群架构搭建过程
步骤一:构建集群节点实例
mkdir -p /data/{7001..7006}
cat >/data/7001/redis.conf <<EOF
port 7001
daemonize yes
pidfile /data/7001/redis.pid
loglevel notice
logfile "/data/7001/redis.log"
dbfilename dump.rdb
dir /data/7001
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >/data/7002/redis.conf <<EOF
port 7002
daemonize yes
pidfile /data/7002/redis.pid
loglevel notice
logfile "/data/7002/redis.log"
dbfilename dump.rdb
dir /data/7002
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >/data/7003/redis.conf <<EOF
port 7003
daemonize yes
pidfile /data/7003/redis.pid
loglevel notice
logfile "/data/7003/redis.log"
dbfilename dump.rdb
dir /data/7003
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >/data/7004/redis.conf <<EOF
port 7004
daemonize yes
pidfile /data/7004/redis.pid
loglevel notice
logfile "/data/7004/redis.log"
dbfilename dump.rdb
dir /data/7004
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >/data/7005/redis.conf <<EOF
port 7005
daemonize yes
pidfile /data/7005/redis.pid
loglevel notice
logfile "/data/7005/redis.log"
dbfilename dump.rdb
dir /data/7005
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >/data/7006/redis.conf <<EOF
port 7006
daemonize yes
pidfile /data/7006/redis.pid
loglevel notice
logfile "/data/7006/redis.log"
dbfilename dump.rdb
dir /data/7006
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
redis-server /data/7001/redis.conf
redis-server /data/7002/redis.conf
redis-server /data/7003/redis.conf
redis-server /data/7004/redis.conf
redis-server /data/7005/redis.conf
redis-server /data/7006/redis.conf
步骤二:搭建激活集群架构功能
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
redis-cli -h 10.0.0.51 -p 7001 cluster nodes|grep master
-- 可以查看集群主节点信息,以及获取每个主节点的槽位信息 slot信息(0-16383)
slot信息有什么用:
-- 可以控制每个集群节点存储数据数据量情况
-- 可以定位数据信息存储节点情况/存储数据和调取数据
redis-cli -h 10.0.0.51 -p 7001 cluster nodes|grep slave
-- 可以查看集群从节点信息,可以获知从节点和哪个主节点建立了主从关系
进行集群架构交付:将集群节点地址端口交付给开发人员
步骤三:集群架构扩容和缩容
mkdir -p /data/{7007,7008}
cat >/data/7007/redis.conf <<EOF
port 7007
daemonize yes
pidfile /data/7007/redis.pid
loglevel notice
logfile "/data/7007/redis.log"
dbfilename dump.rdb
dir /data/7007
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
cat >/data/7008/redis.conf <<EOF
port 7008
daemonize yes
pidfile /data/7008/redis.pid
loglevel notice
logfile "/data/7008/redis.log"
dbfilename dump.rdb
dir /data/7008
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
redis-server /data/7007/redis.conf
redis-server /data/7008/redis.conf
集群节点扩容操作:
redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
-- 扩容新的主节点
redis-cli --cluster reshard 127.0.0.1:7001
-- 集群槽位信息的重新分配
How many slots do you want to move (from 1 to 16384)?
-- 给新的扩容节点分配几个槽位
What is the receiving node ID?
-- 哪个节点接收分配后槽位
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
如果选择输入 all 表示将所有主节点中指定槽位都分配给新节点
可以指定主节点id信息,将指定主节点槽位分配给新节点
Type 'done' once you entered all the source nodes IDs.
输入 done 结束分配过程
Source node #1:
-- 确认从已有的哪个主节点中,将指定槽位进行分配
redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7001 --cluster-slave --cluster-master-id 520cebb0c0ae49f6851ec0afd60847253049ad4e
-- 表示进行从节点扩容操作
集群节点缩容过程:
redis-cli --cluster reshard 127.0.0.1:7001
-- 需要将缩容节点槽位数据信息迁移给其他主节点
redis-cli --cluster del-node 127.0.0.1:7007 520cebb0c0ae49f6851ec0afd60847253049ad4e
-- 将指定主节点进行删除清理
redis-cli --cluster del-node 127.0.0.1:7008 74ebd6dd4157e8fdda19ab978836c7bf8059810f
-- 将指定从节点进行删除清理
2.MongoDB数据库服务部署应用
1)MongoDB数据库功能作用
-- MongoDB数据库适合海量数据存储
-- MongoDB数据库架构应用更适合多种场景
-- MongoDB数据库进行管理应用更简单
-- MongoDB数据库存储结构和MySQL数据类似
PS:地址图导航平台 金融数据分析平台 游戏数据平台 电商业务平台
2)MongoDB数据库安装部署
步骤一:下载安装数据库程序
数据库下载链接:https://www.mongodb.com/
cd /usr/local
tar xf mongodb-linux-x86_64-rhel70-4.2.24.tgz
ln -s mongodb-linux-x86_64-rhel70-4.2.24 mongodb
vim /etc/profile
export PATH="$PATH:/usr/local/mysql/bin:/usr/local/mongodb/bin:/usr/local/redis/src/"
source /etc/profile
步骤二:编写配置文件启动数据库服务
关闭系统大页内存机制
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
sh /etc/rc.local
-- 执行脚本文件,使配置信息生效
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
-- 进行脚本执行完毕后检查确认
mkdir -p /mongodb/conf/
mkdir -p /mongodb/log/
mkdir -p /mongodb/data/
vim /mongodb/conf/mongo.conf
-- YAML 模式
-- Note:YAML does not support tab characters for indentation:use space instead
-- 系统日志有关配置
systemLog:
destination: file
path: "/mongodb/log/mongodb.log" -- 日志存储位置
logAppend: true -- 日志以追加模式记录
-- 数据存储有关配置
storage:
journal:
enabled: true
dbPath: "/mongodb/data" -- 数据路径的位置
-- 进程控制有关配置
processManagement:
fork: true -- 后台守护进程
pidFilePath: "/mongodb/data/mongodb.pid"
-- pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中
-- 网络信息有关配置
net:
port: 27017 -- 端口号,默认不配置端口号,是27017
bindIp: 192.168.30.101,127.0.0.1 -- 监听地址
-- 安全验证有关配置
security:
authorization: enabled -- 是否打开用户名密码验证
mongod -f /mongodb/conf/mongo.conf
mongo
-- 本地登录数据库中
3) mongodb数据库语句应用
库操作
use xiaoA
-- 切换并创建数据库
show databases/show dbs
-- 查看数据库信息
db.dropDatabase()
-- 切换到指定库中,可以删除数据库所有数据
表操作(集合 Collection)
db.createCollection("test01")
-- 创建集合信息
show tables
-- 查看集合信息
db.集合名称.drop()
-- 删除集合信息
db.test01.insert({name: "xiaoA"})
-- 在集合中插入数据,集合会自动创建
字段操作(文档 json Docement??)
db.test01.insert({name: "xiaoA"})
-- 在集合中插入数据
db.test01.find()
-- 查看集合中所有数据
for(i=0;i<10000;i++){db.test02.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()})}
-- 批量数据插入
DBQuery.shellBatchSize=50;
-- 指定每次显示多少行数据
db.test01.find({name: "xiaoA"})
-- 进行过滤查看数据信息
db.test03.find({name04: "xiaoE"}).pretty()
{
"_id" : ObjectId("69b11463722e489f41f04ea6"),
"id" : 1,
"name01" : "xiaoB",
"name02" : "xiaoC",
"name03" : "xiaoD",
"name04" : "xiaoE",
"name05" : "xiaoF"
}
-- 格式化处理,显示内容以标准json格式显示
db.集合名称.remove({})
-- 删除集合中数据信息
4) mongodb数据库基础管理
远程连接管理(安全设置管理)
mongo -uroot -proot123 10.0.0.51:27017/admin
net:
port: 27017
bindIp: 10.0.0.51,127.0.0.1
用户权限管理
security:
authorization: enabled
创建用户并设置权限语法信息
db.createUser
(
user: "<name>"
pwd: "<cleartext password>"
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
)
创建管理员
use admin -- 将切换库作为验证库使用(验证用户信息)
db.createUser(
{
user: "root",
pwd: "root123",
roles: [ { role: "root", db: "admin" } ]
}
)
mongo -uroot -proot123 admin
本地登录
mongo -uroot -proot123 10.0.0.51:27017/admin
远程登录
创建普通用户
use xiaoA
db.createUser(
{
user: "oldboy",
pwd: "oldboy123",
roles: [ { role: "readWrite", db: "xiaoA" } ]
}
)
用户信息查看:
use admin
db.system.users.find().pretty()
-- 查看数据库所有用户信息
删除用户信息:
use xiaoA
-- 切换到删除用户对应的验证库
db.dropUser("oldboy")
true
-- 删除指定用户
5)mongodb主从同步架构搭建
步骤一:创建主从同步数据库实例
mkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/log -- 主库
mkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/log -- 从库
mkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/log -- 从库
vim /mongodb/28017/conf/mongod.conf
systemLog:
destination: file
path: "/mongodb/28017/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/mongodb/28017/data"
directoryPerDB: true
#engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
net:
port: 28017
bindIp: 10.0.0.51,127.0.0.1
replication:
oplogSizeMB: 2048
replSetName: my_repl
cp /mongodb/28017/conf/mongod.conf /mongodb/28018/conf/mongod.conf
cp /mongodb/28017/conf/mongod.conf /mongodb/28019/conf/mongod.conf
sed -i 's#28017#28018#g' /mongodb/28018/conf/mongod.conf
sed -i 's#28017#28019#g' /mongodb/28019/conf/mongod.conf
mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf
步骤二:进行主从同步设置并激活主从同步功能
mongo --port 28017 admin
config = {_id: 'my_repl', members: [
{_id: 0, host: '10.0.0.51:28017'},
{_id: 1, host: '10.0.0.51:28018'},
{_id: 2, host: '10.0.0.51:28019'}]
}
rs.initiate(config)
-- rs(replication Set)表示多主从功能做设置
步骤三:查看确认主从同步是否建立
rs.status()
-- 查看整体复制集状态信息
rs.isMaster()
-- 查看主节点状态信息
rs.conf()
-- 查看复制集配置信息
"arbiterOnly" : false, -- 设置主从同步特殊角色 P-S-A(投票角色 只负责帮助主从架构选主 但不会同步数据)
"hidden" : false, -- 表示节点只负责同步数据信息,不会参与主角色竞选
"priority" : 1, -- 优先级越大越会优选选为主
"slaveDelay" : NumberLong(0), -- 可以实现从节点延迟同步数据
步骤四:节点扩容缩容(从节点)
mkdir -p /mongodb/28020/conf /mongodb/28020/data /mongodb/28020/log
cp /mongodb/28017/conf/mongod.conf /mongodb/28020/conf/mongod.conf
sed -i 's#28017#28020#g' /mongodb/28020/conf/mongod.conf
mongod -f /mongodb/28020/conf/mongod.conf
mongo --port 28018 admin
rs.add("10.0.0.51:28020")
-- 扩容从节点
rs.remove("10.0.0.51:28020")
-- 缩容从节点
主从架构扩展配置:
cfg=rs.config()
cfg.members[0].priority=10
cfg.members[2].hidden=true
cfg.members[1].slaveDelay=120
rs.reconfig(cfg)
rs.conf()
6)mongodb数据库备份和恢复操作
逻辑备份:
表示可以将数据库中数据信息单独保存到文件中 json csv
逻辑备份的数据可以用于数据迁移使用
- 相同数据库产品间迁移数据 同构数据
- 不同数据库产品间迁移数据 异构数据
备份数据信息
mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA -c test02 -o /backup/test02.json
mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA -c test02 --type=csv -f uid,name,age,date -o /backup/test02.csv
恢复数据信息
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA -c test04 /backup/test02.json
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA -c test02 --drop /backup/test02.json
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA -c test05 --type=csv --headerline --file /backup/test02.csv
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA -c test05 --type=csv -f uid,name,age,date --file /backup/test02.csv
物理备份:
表示可以将数据库中数据用于备份恢复数据使用
可以实现分库 分表备份
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /backup/27017/
-- 整个数据库全备
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA -o /backup/xiaoA/
-- 进行分库备份
mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA -c test01 -o /backup/xiaoA/
-- 进行分表备份
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin /backup/27017/
-- 全备恢复
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA --drop /backup/xiaoA/
-- 分库恢复
mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d xiaoA -c test01 /backup/xiaoA/test01.bson
-- 分表恢复