Redis主从复制和集群实验
来源:互联网 发布:js添加图片二维数组 编辑:程序博客网 时间:2024/06/05 01:53
什么是Redis(REmote DIctionary Server)
redis是内存高速缓存的数据库,redis内部有多个数据库(在redis-conf文件中有配置,用户可以通过select 下标来选择数据库),它保存的数据模型为key-value,支持String/List/Set/Sorted/Zset等类型。redis可将数据从内存持久化到硬盘,保证了数据安全,最重要的是使用缓存减轻了数据库的负载。
是典型的nosql 数据库服务器,采用KEY-VALUE存储结构,可以作为服务程序独立运行于自己的服务器主机,同时作为内存数据库,不用IO读取硬盘数据,能够快速响应请求。
特点:支持持久化,支持多种数据库结构,支持主从复制、免费
redis和memcache比较
1、redis不仅仅支持简单的key/value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;
2、redis支持master-slave(主-从)模式应用;
3、redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
4、redis单个vlaue的最大限制是1GB,memcached只能保存1MB的数据;
程序环境
安装:yum -y install redis
配置文件: /etc/redis.conf
主程序:/usr/bin/redis-server
端口: 6379/tcp
客户端:/usr/bin/redis-cli
数据目录:/var/lib/redis
redis-cli命令:
Usage: redis-cli [OPTIONS] [cmd [arg [arg …]]]
-h HOST
-p PORT
-a PASSWORD
-n DBID(0-15)
与Connection相关命令:
help @connection
AUTH <password>
ECHO <message>
PING
QUIT
SELECT dbid
清空数据库:
FLUSHDB:Remove all keys from the current database
清空当前数据库;
FLUSHALL:Remove all keys from all databases
清空所有数据库;
配置和使用Redis:
基本配置项
网络配置项
持久化相关配置
复制相关的配置
安全相关配置
Limit相关的配置
SlowLog相关的配置
INCLUDES
Advanced配置
通用配置项:
daemonize, supervised, loglevel, pidfile, logfile,
databases:设定数据库数量,默认为16个,每个数据库的名字均为整数,从0开始编号,默认操作的数据库为0;
切换数据库的方法:
SELECT <dbid>
网络配置项:
bind IP
port PORT
 protected-mode
tcp-backlog
unixsocket
timeout:连接的空闲超时时长;
安全配置:
requirepass <PASSWORD>
设置redis访问密码
密码连接方式 1: redis-cli -a 不推荐使用;
2: redis-cli 输入后 AUTH
Limits相关的配置:
maxclients
maxmemory <bytes>
maxmemory-policy noeviction
淘汰策略:volatile-lru, allkeys-lru, volatile-random, allkeys-random, volatile-ttl, noeviction
maxmemory-samples 5
淘汰算法运行时的采样样本数;
SlowLog相关的配置:
slowlog-log-slower-than 10000 单位是微秒;
slowlog-max-len 128 SlowLog记录的日志最大条目;
ADVANCED配置:
hash-max-ziplist-entries 512hash-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
Redis 主从复制实验
主节点
node2 192.168.243.8
从节点
node3 192.168.243.9
node4 192.168.243.10
三台主机时间同步 都安装redis
在node3上修改主配置文件
[root@node3 ~]#vim /etc/redis.conf 配置完后保存重启服务61 #bind 127.0.0.162 bind 0.0.0.0 打开监听Ip265 # slaveof <masterip> <masterport>266 slaveof 192.168.243.8 6379 272 # masterauth <master-password>273 masterauth CENTOS 如果主节点密码认证(密码为CENTOS),需要在从节点开启此项
我们在主节点node2上可以查看到 从节点的连接
127.0.0.1:6379> SELECT 15127.0.0.1:6379[15]> CLIENT LIST127.0.0.1:6379[15]> info replication 或者在node3上查看 192.168.243.9:6379[15]> info
在node4上修改主配置文件
用另外一种方法配置从节点
192.168.243.10:6379> SLAVEOF 192.168.243.8 6379192.168.243.10:6379> CONFIG SET masterauth CENTOS192.168.243.10:6379> INFO REPLICATION 查看状态
验证:
我们在主节点建个key
127.0.0.1:6379[15]> select 0127.0.0.1:6379> set testkey "hi redis"
在任意从节点查看
192.168.243.9:6379> get testkey"hi redis"
sentinel:
主要完成三个功能:监控、通知、自动故障转移
选举:流言协议、投票协议
/etc/redis-sentinel.conf 主配置选项
sentinel monitor <master-name> <ip> <redis-port> <quorum>`<quorum>`表示sentinel集群的quorum机制,即至少有quorum个sentinel节点同时判定主节点故障时,才认为其真的故障;53 sentinel monitor mymaster 192.168.243.8 6379 2
sentinel auth-pass <master-name> <password>73 sentinel auth-pass mymaster CENTOS
sentinel down-after-milliseconds <master-name> <milliseconds>监控到指定的集群的主节点异常状态持续多久方才将标记为“故障”;83 sentinel down-after-milliseconds mymaster 5000 5秒 默认为30秒
sentinel parallel-syncs <master-name> <numslaves>指在failover过程中,能够被sentinel并行配置的从节点的数量;91 sentinel parallel-syncs mymaster 3
sentinel failover-timeout <master-name> <milliseconds>sentinel必须在此指定的时长内完成故障转移操作,否则,将视为故障转移操作失败;116 sentinel failover-timeout mymaster 180000 默认为3min
sentinel notification-script <master-name> <script-path>通知脚本,此脚本被自动传递多个参数;
我们在任意一个node节点按照以上步骤简单配置,然后scp 到其他节点上
[root@node2 ~]#scp /etc/redis-sentinel.conf node3:/etc/systemctl restart redis-sentinel.service
验证:
连接方式 [root@node2 ~]#redis-cli -h 192.168.243.8 -p 26379
redis-cli -h SENTINEL_HOST -p SENTINEL_PORT redis-cli> SENTINEL masters SENTINEL slaves <MASTER_NAME> SENTINEL failover <MASTER_NAME> SENTINEL get-master-addr-by-name <MASTER_NAME>
测试;
模拟把主节点宕了
[root@node2 ~]#systemctl stop redis.service [root@node2 ~]#redis-cli -h 192.168.243.8 -p 26379
192.168.243.8:26379> SENTINEL masters 查看主节点查看到node2 从节点变为主节点了
192.168.243.8:26379> SENTINEL slaves mymaster 查看从节点
如何修复宕机的原来的主节点node2?
[root@node2 ~]#vim /etc/redis.conf 265 # slaveof <masterip> <masterport> 266 slaveof 192.168.243.9 6379 指向新的主节点IP(这里新的主节点ip 是node3 192.168.243.9) 273 # masterauth <master-password> 274 masterauth CENTOS[root@node2 ~]#systemctl restart redis.service
CLuster:
为不受以上实验影响,先在node2、node3、node4这三个节点关闭
systemctl stop redis-sentinel.service
以及注释或者删除 273 #masterauth “CENTOS” 之后 restart redis.service
然后登陆检查各个节点 info,中replication 是否为master
[root@node3 ~]#redis-cli -a CENTOS127.0.0.1:6379> info127.0.0.1:6379> flushall
集群相关的配置:
cluster-enabled 是否开启集群配置
724 cluster-enabled yes
- cluster-config-file 集群节点集群信息配置文件,每个节点都有一个,由redis生成和更新,配置时避免名称冲突
去掉注释 - cluster-node-timeout 集群节点互连超时的阈值,单位毫秒
去掉注释 - cluster-slave-validity-factor 进行故障转移时,salve会申请成为master。有时slave会和master失联很久导致数据较旧,这样的slave不应该成为master。这个配置用来判断slave是否和master失联时间过长。
[root@node2 ~]#vim /etc/redis.conf 按照以上配置设置,然后在node3和node4节点相同配置[root@node2 ~]#scp /etc/redis.conf node3:/etc/[root@node2 ~]#scp /etc/redis.conf node4:/etc/然后再这三个节点 systemctl restart redis.service
配置过程:
(1) 设置配置文件,启用集群功能;
cluster-enabled yes
(2) 启动redis后为每个节点分配slots;
CLUSTER ADDSLOTS
注意:每个slot要独立创建;可用范围是0-16383,共16384个;
redis-cli -c -h 192.168.1.100 -p 7000 cluster addslots {0..5000}
[root@node2 ~]#redis-cli -a CENTOS cluster addslots {0..5000}[root@node2 ~]#redis-cli -a CENTOS cluster INFO 查看[root@node2 ~]#redis-cli -a CENTOS -h 192.168.243.9 cluster addslots {5001..10923}[root@node2 ~]#redis-cli -a CENTOS -h 192.168.243.10 cluster addslots {10924..16383}
(3) 设定集群成员关系;
CLUSTE MEET
127.0.0.1:6379> CLUSTER MEET 192.168.243.9 6379127.0.0.1:6379> CLUSTER MEET 192.168.243.10 6379
验证;
当我们在node2 执行127.0.0.1:6379> set testkey1 hiOK127.0.0.1:6379> set testkey2 hello (error) MOVED 14758 192.168.243.10:6379 根据提示,我们需要在node4(192.168.243.10)执行才行
- Redis主从复制和集群实验
- Redis集群主从复制
- Redis主从复制和集群配置
- redis主从复制和集群实现原理
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- redis主从复制和集群实现原理
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- Redis主从复制和集群配置
- redis主从复制和集群实现原理
- Redis主从复制和集群配置
- [Spring]AOP基础
- 黄金分割点问题
- 一个简单的投票
- MySQL数据库优化的八种方式(经典必看)
- 数据结构专题训练及总结
- Redis主从复制和集群实验
- TextView设置跑马灯效果
- css 图片自使用界面变化
- 总结
- Python Flask之处理客户端通过POST方法传送的数据(json文本,文件)
- 深入浅出 Git --读完本文后,如果你希望更深入的了解 Git,可以阅读我关于 Git 的 JavaScript 实现
- PhotoShop CC 2017软件工具面板使用---裁剪工具
- Java中Unsafe类详解
- 第四章 排序:智能收件箱