Quantcast
Channel: CodeSection,代码区,数据库(综合) - CodeSec
Viewing all articles
Browse latest Browse all 6262

redis主/从配置及基于sentinel的故障转移

$
0
0
一、NoSQL基础概念:

ACID:原子性、一致性、隔离性、持久性;

特性:数据量大、数据变化非常大(数据增长化、流量分布变化、数据间耦合结构变化)、数据源很多;

CAP、BASE

CAP C:多个数据节点的的数据一致;

A:用户发出请求后的有限时间范围内返回结果;

P:network partition,网络发生分区后,服务是否依可用;

CAP理论:一个分布式系统不可能时满足C、A、P三个特性,最多可同时满足其中两者

对于分布式系统满足分区容错性几乎是必须的。

AP:放弃C,但并非全部放弃,是在一段时间不保证一致,但最终是一致的;

CP:放弃A,而提供高可用的服务器;

BASE:BA,S,E,基于CAP演化而来

BA:Basically Availabel,基本可用;

S:Soft state,软状态/柔性事务,即状态可以在一个时间窗口内是不同步的;

E:Eventually consisitency,最终的一致性;

NoSQL:Not Only SQL

k/v:Dynamo,redis

document:文档数据库,mongodb

BraphDB:图式数据库,Neo4j

二、Redis简介:

REmote DIctionary Server:数据结构服务器,k/v数据结构;

内存存储:in-memory 持久化 主从(sentinel) Cluster(shard)

数据结构服务器:

String,Lists,Hashs,Sets,Sorted Sets,Bitmaps,Hyperloglogs

PUB/SUB

单进程:CPU并非瓶颈;

持久化: snapshotting AOF

Replication: 主/从 主:rw 从:read-only

程序环境

配置文件:/etc/redis.conf

主程序:/usr/bin/rdis-server 监听端口 6379/tcp

客户端:/usr/bin/redis-cli

Unit File: /usr/lib/systemd/system/reids.service

数据目录: /var/lib/redis

redis: k/v

key:直接ASCII字符串;

value:strings,litst,hashes,sets,sotred sets,bitmaps,hyperloglogs

group:

@generice,@string,@list,@…

@string @list @set @sorted_se t @hash S E T L PU SH SADD ZAD D HSET GET RPUSH SPOP ZCARD H GE T EXISTS LPOR SREM ZCOUNT HMGET NCR I RPOP SRANDMEMBER ZRANK HKEYS DECR LINDEX SINTER HVALS LSET SUNION HDEL HGETALL

配置和使用redis:

/etc/redis.conf的配置项

基本配置项,网络配置项,持久化相关配置,复制相关的配置,安全相关的配置,Limit相关的配置

SlowLog相关的配置 INCLUDES Advanced配置

通用配置项:

daemonize,supervised,loglevel,pidfile,logfile

database,设定数据库数量,默认为16个,每个数据库的名字均为整数,从0开始编号,默认操作的数据库为0;

切换数据库的方法:SELECT<dbid>

网络配置项:bind IP 、 port PORT 、 protected-mode 、tcp-backlog 、 Unixsocket 、timeoute(连接空闲的超时时长)

安全配置:requirepass:<PASSWORD> rename-command:<COMMAND><NEW_CMND_NAME>在AOF或Replication环境中,不推荐使用;

Limits相关的配置:

maxclients maxmemory<bytes> maxmemory-policy noevication

淘汰策略:volatile-lru,allkeys-lru,volatile-random,allkeys-random,volatile-ttl,noeviction

maxmemory-sample 5 淘汰算法运行的采样样本数;

SlowLog相关的配置:

slowlog-log-slower-than 10000 单位是微秒;

slow-max-len 128

SlowLog记录的日志是最大条目;

ADVANCED配置;

hash-max-ziplist-entries 512

hash-max-ziplist-value 64 设置ziplist的键数量最大值,每个值的最大空间;

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

<hard-limit>

<soft-limit>

<soft-limit-seconds>

redis-cli命令:

Usage: redis-cli [OPTIONS] [cmd [arg [arg …]]]

-h HOST -p PORT -a PASSWORD -n DBID

与Connection相关的命令;

AUTH<password> ECHO<message> PING QUIT SELECT dbid

清空数据库命令(小心使用):

FLUSHD: Remove all keys from the current,database ;

FLUSHALL: Remove all keys from all databases;

Server相关的命令:

CLIENT GETNAME *CLIENT KILL *CLIENT LIST LIENT PAUSE CLIENT REPLY

CLIENT SETNAME:Set the current connection name

CONFIG GET CONFIG RESETSTAT CONFIG REWRITE CONFIG SET

INFO:服务器状态信息查看;分为多个session ;

INFO [section]

Redis的持久化;

RDB:snapshotting,二进制格式;按事先定制的策略,周期性地将数据从内存同步至磁盘;数据文件默认是dump,rdb;

客户端显示使用SAVA或BGSAVE命令来手动启动快照 保存机制 ;

SAVE:同步,即在主线程中保存快照 ,此时会阻塞所有客户端请求;

BGSAVE:异步;

AOF:Append Only FIle, fsync

记录每次写操作至指定的文件尾部实现的持久化,当redis重启时,可能过重新执行文件中的命令在内存中重建 出数据库;

BGREWRITEAOF:AOF文件重写;

不会读取正在使用AOF文件,而是通过将内存中的数据以命令的方式保存至临时文件中,完成之后替换原来的AOF文件;

RDB相关的配置:

*save <seconds> <changes>

save 900 1

save 300 10

save 60 10000

这段配置的内容表示:三个策略满足其中任意一个均会触发SNAPSHOTTING操作;900s内至少有一个key有变化

300s内至少有10个key有变化,60s内至少有1万个key发生变化;

stop-writes-on-bgsave-error yes dump操作出现错误时,是否禁止新写入操作请求;

rdbcompression yes rdbchecksum yes

dbfilename dump.rdb: 指定rdb文件名

*dir /var/lib/redis:rdb文件的存储路径

AOF相关的配置

*appendonly no

appendfilename “appendonly.aof”

*appendfsync

Redis supports three different modes;

no:redis不执行主动同步操作,而是OS进行;

everysec:每秒一次;

always:每语句一次;

no-appendfsync-on-rewrite no

是否在后台执行aof重写期间不调用fsync,默认no,表示调用;

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

上述两个条件同时满足时,会触发重写AOF;与上次aof文件大小相比,其增长量超过100%,且大小不少于64MB;

aof-load-truncated yes

注意:持久机制本身不能取代备份;应该制订备份策略;对redis库定期备份;

RDB与AOF同时启用;

(1)BGSAVE和BGREWRITEAOF不会同时进行;

(2)Redis服务器启动时用持久化的数据文件恢复数据,会优先使用AOF;

复制:

特点:一个Master可以有多个slave主机,支持链式复制;

Master以非阻塞方式同步数据至slave主机;

配置slave节点;

redis-cli> SLAVEOF <MASTER_IP> <MASTER_

Viewing all articles
Browse latest Browse all 6262

Trending Articles