- 五大数据类型—开发必会的技能
- 安全启动与配置文件
- 数据持久化[RDB & AOF]
- 高可用—哨兵
- redis-cluster配置 - py鱼 - 博客园 (cnblogs.com)]">集群[redis-cluster配置 - py鱼 - 博客园 (cnblogs.com)]
五大数据类型—开发必会的技能
string字符串类型hash哈希类型,如同python的dict类型Set无序集合Zset有序集合List, 双向队列,向左插入数据,向右插入数据,向左右读取数据
reference redis学习 - py鱼 - 博客园 (cnblogs.com)
安全启动与配置文件
common sense
1. Linux如何安装redis呢?1. rpm包安装2. yum 自动化安装, 在阿里云yum仓库中,存有redis软件包3. 源代码编译安装2. outer knowledge1. 内存型数据库,断电,进程重启--->数据丢失2. 配置数据持久化防止数据丢失3. 支持数据备份,也就是matser-slave主从模式4. 读写分离,防止单点故障,数据丢失3. example of appication1. 新浪微博,微信红包,淘宝轮播图;
installation-1
yum -y install redis
installation-2
1. 下载redis源码wget http://download.redis.io/releases/redis-4.0.10.tar.gz2. 解压缩tar -zxf redis-4.0.10.tar.gz3. 切换redis源码目录cd redis-4.0.10.tar.gz4. 编译源文件make5. 编译好后,src/目录下有编译好的redis指令6. make install 安装到指定目录,默认在/usr/local/bin
configuration of function
remote connection

modify default port
# Accept connections on the specified port, default is 6379 (IANA #815344).# If port 0 is specified Redis will not listen on a TCP socket.port 6500
set password
# Warning: since Redis is pretty fast an outside user can try up to# 150k passwords per second against a good box. This means that you should# use a very strong password otherwise it will be very easy to break.## requirepass redis1114
start security mode
# By default protected mode is enabled. You should disable it only if# you are sure you want clients from other hosts to connect to Redis# even if no authentication is configured, nor a specific set of interfaces# are explicitly listed using the "bind" directive.protected-mode yes
run by daemonization
# By default Redis does not run as a daemon. Use 'yes' if you need it.# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.daemonize yes
usage
[root@vvkt7whznuckhiz2-0723575 bin]# pwd/opt/redis/bin[root@vvkt7whznuckhiz2-0723575 bin]# redis-server /etc/redis.conf[root@vvkt7whznuckhiz2-0723575 bin]# redis-cli -p 6500 -h 192.168.1.9192.168.1.9:6500> auth redis1114OK192.168.1.9:6500> pingPONG
usual command
# 列出所有的的keykeys *
数据持久化[RDB & AOF]
introduction
一主一从比较简单,但可用性不高,最好是一主多从
test1 —[Why cofigurate data persistence]
先向数据库写入信息,然后重启进程,看是否丢失数据?[显而易见-absolutely]设计实验:1. 关闭redis所有进程 pkill -9 redfis2. 进入 / 目录,创建 mkdir s25redis3. 创建配置文件 vim redis_no_pr.confconetent : bind 127.0.0.1 daemonize yes
command
[root@vvkt7whznuckhiz2-0723575 /]# mkdir s25redis[root@vvkt7whznuckhiz2-0723575 /]# cd s25redis[root@vvkt7whznuckhiz2-0723575 s25redis]# ls[root@vvkt7whznuckhiz2-0723575 s25redis]# vim redis_no_per.conf[root@vvkt7whznuckhiz2-0723575 s25redis]# /opt/redis/bin/redis-server /s25redis/redis_no_per.conf*** FATAL CONFIG FILE ERROR (Redis 6.2.6) ***Reading the configuration file, at line 2>>> 'damonize yes'Bad directive or wrong number of arguments[root@vvkt7whznuckhiz2-0723575 s25redis]# vim redis_no_per.conf[root@vvkt7whznuckhiz2-0723575 s25redis]# cat redis_no_per.confbind 127.0.0.1daemonize yes[root@vvkt7whznuckhiz2-0723575 s25redis]# /opt/redis/bin/redis-server /s25redis/redis_no_per.conf[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli127.0.0.1:6379> set name alexOK127.0.0.1:6379> set name1 csOK127.0.0.1:6379> keys *1) "name1"2) "name"127.0.0.1:6379> quit[root@vvkt7whznuckhiz2-0723575 s25redis]# pkill -9 redis[root@vvkt7whznuckhiz2-0723575 s25redis]# /opt/redis/bin/redis-server /s25redis/redis_no_per.conf[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli127.0.0.1:6379> keys *(empty array)127.0.0.1:6379>
reference
1. difference between rdb and aofhttps://blog.csdn.net/ljheee/article/details/76284082
RDB[data persistence]
1. 配置RDB机制数据持久化,数据文件为二进制文件,且配置触发机制cd /s25redis 写入[vim s25rdb.conf]如下配置:daemonize yesport 6379logfile /data/6379/redis.log #指定redis的运行日志存储位置dir /data/6379 # 指定redis的数据文件的存放路径dbfilename S25dbmp.rdb # 指定数据持久化的文件名字bind 10.0.0.10 127.0.0.1# redis触发save命令的频率save 900 1 # 900秒内一个修改动作,如set mset delsave 300 10 # 300秒内10个save 60 10000 # 60秒内10000个操作2. 创建redis数据文件夹mkdir -p /s25redis/data/63793. check and stop processps -ef |grep redispkill -9 redis4. restart process/opt/redis/bin/redis-server s25redis/s25rdb.conf5. 存储数据set name sqset bilibili ossave6. 新开窗口,查看/data/6379下的文件
effort

error
*** FATAL CONFIG FILE ERROR (Redis 6.2.6) ***Reading the configuration file, at line 3>>> 'logfile "" #指定redis的运行日志存储位置'Bad directive or wrong number of arguments
effort
1. 在/data/6379下创建redis.log文件2. 进入 /opt/redis/bin/下使用./redis-server启动3. 查看权限 ls -ll 该文件具有属主的读写权限4. 使用 /sur/local/bin/redis-server启动,仍然错误5. 修改配置文件为 logfile "/data/6379/redis.log"6. 测试方案 ---> 物理机redis跑一次代码就用默认的redis 3.2.1
feedback
版本差异,该配置在redis3.2.12下并无问题
feedback2—maybe syntax error

AOF
feature
1. AOF(append-only log file)记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。优点:最大程序保证数据不丢缺点:日志记录非常大2. 比较rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog
operation
1. 创建一个文件,写入如下配置vim redisaof.confdaemonize yesbind 192.168.1.9port 6379logfile /data/6379/redis.logdir /data/6379aof/appendonly yesappendfsync everysec2. 创建数据文件夹mkdir -p /data/6379aof/3. 检查redis进程是否启动ps -ef | grep redispkill -9 redis4. 指定配置文件启动redis/opt/redis/bin/redis-server /s25redis/redisaof.confredis-cli -p 6379 -h 192.168.1.95. 写入数据set name wangsicset tecent bye6. 实时刷新和查看append文件cd /data/6379aoftail -f appendonly.aof7. 关闭进程查看数据是否存在>exitpkill -9 redis/opt/redis/bin/redis-server /s25redis/redisaof.confredis-cli -p 6379 -h 192.168.1.9> keys *8. 删除appendonly.aof重启redisrm -rf /data/6379aof/appendonly.aof/opt/redis/bin/redis-server /s25redis/redisaof.confredis-cli -p 6379 -h 192.168.1.9> keys *
数据主从同步以及故障
Introduction
在一台机器上运行两个及以上的Redis数据库,是redis支持的多实例功能,基于端口号的不同,就能运行多个相互独立的redis数据库什么是多实例?就是机器上运行了多个redis独立的进程,互不干涉的独立的redis数据库;叫做
operation
1. 切换工作目录 创建多个配置文件分别配置端口号,IP地址以及后台启动cd /s25redisvim redish1.confvim redish2.confbind 0.0.0.0port 6379daemonize yesbind 0.0.0.0port 6399daemonize yes2. 分别进入两个数据库写入键值对redisaof.conf redish1.conf redish2.conf redis_no_per.conf s25rdb.conf[root@vvkt7whznuckhiz2-0723575 s25redis]# /opt/redis/bin/redis-server /s25redis/redish1.conf[root@vvkt7whznuckhiz2-0723575 s25redis]# /opt/redis/bin/redis-server /s25redis/redish2.conf[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6379127.0.0.1:6379> keys *(empty array)127.0.0.1:6379> set name haiyousheiOK127.0.0.1:6379> exit[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6399127.0.0.1:6399> keys *(empty array)127.0.0.1:6399> set nickname lichoushaOK127.0.0.1:6399> exit[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6399 get nickname"lichousha"[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6379 get name"haiyoushei"[root@vvkt7whznuckhiz2-0723575 s25redis]#3.
operation2 master-slave
1. 准备两个配置文件,分别写入如下内容pwd /s25redisvim master_redis.confport 6379daemonize yespidfile /s25/6379/redis.pidloglevel noticelogfile "/data/6379/redis.log"dbfilename dump.rdbdir /s25/6379protected-mode no2. 准备第二个配置文件pwd /s25redisvim slave_redis.confport 6389daemonize yespidfile /s25/6389/redis.pidloglevel noticelogfile "/data/6389/redis.log"dbfilename dump.rdbdir /s25/6389protected-mode no3. 分别创建两个文件夹存储数据mkdir -p /s25/{6379,6389}4. 分别通过配置文件启动redis/opt/redis/bin/redis-server /s25redis/master_redis.conf/opt/redis/bin/redis-server /s25redis/slave_redis.conf5. 检查主从关系[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6379 info replication# Replicationrole:masterconnected_slaves:0master_failover_state:no-failovermaster_replid:25d1bb4b918f0b05b93e93815199b624c43e49e1master_replid2:0000000000000000000000000000000000000000master_repl_offset:0second_repl_offset:-1repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6389 info replication# Replicationrole:masterconnected_slaves:0master_failover_state:no-failovermaster_replid:a28d09fae5aaee018b1266ada36f8fc80e074883master_replid2:0000000000000000000000000000000000000000master_repl_offset:0second_repl_offset:-1repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:06. 从数据库绑定主数据库,并且查看从数据库的信息[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6389 slaveof 127.0.0.1 6379OK[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6389 info replication# Replicationrole:slavemaster_host:127.0.0.1master_port:6379master_link_status:upmaster_last_io_seconds_ago:1master_sync_in_progress:0slave_read_repl_offset:28slave_repl_offset:28slave_priority:100slave_read_only:1replica_announced:1connected_slaves:0master_failover_state:no-failovermaster_replid:672933a58085330846bea78a8b284c6958942037master_replid2:0000000000000000000000000000000000000000master_repl_offset:28second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:28
7 检查两数据库内是否存有数据
[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6379127.0.0.1:6379> keys *(empty array)127.0.0.1:6379> exit[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6389127.0.0.1:6389> keys *(empty array)127.0.0.1:6389> exit
8 在主数据库写入数据,在从数据库读取数据[从数据库不能写入]
[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6379127.0.0.1:6379> set name alexOK127.0.0.1:6379> keys *1) "name"127.0.0.1:6379> get name"alex"127.0.0.1:6379> exit[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6389127.0.0.1:6389> keys *1) "name"127.0.0.1:6389> set name1 wupeiqi(error) READONLY You can't write against a read only replica.127.0.0.1:6389> exit[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6379127.0.0.1:6379> set name2 wupeiqiOK127.0.0.1:6379> exit[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6389127.0.0.1:6389> keys *1) "name2"2) "name"127.0.0.1:6389> exit
一主多从以及主从故障切换
设置一主多从
1. 创建6399端口的数据库,设置从属关系cd /s25redisvim slave_redis2.confport 6399daemonize yespidfile /s25/6399/redis.pidloglevel noticelogfile "/data/6399/redis.log"dbfilename dump.rdbdir /s25/6389protected-mode noslaveof 127.0.0.1 63792. 创建数据文件夹mkdir -p /s25/63993. 分别启动数据库,从6389设置从属于6379[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6389 slaveof 127.0.0.1 6379OK[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6379127.0.0.1:6379> set addr 188OK127.0.0.1:6379> exit[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6389127.0.0.1:6389> keys *1) "name"2) "age"3) "addr"127.0.0.1:6389> exit[root@vvkt7whznuckhiz2-0723575 s25redis]# redis-cli -p 6399127.0.0.1:6399> keys *1) "age"2) "name"3) "addr"127.0.0.1:6399>
设置故障切换
情景模拟
1. 从库故障,新建一个从库,再加入从属关系2. 主库故障,问题大了咋办?1. 数据同步了三份,主,从1,从2. 主库还有数据;2. 解决办法:某一个从库切换为主库,从库2重新分配从属关系 6389 主 9399 从3. 主库恢复,重新加入主从关系,b从库
1start three databases and check relationship
[root@vvkt7whznuckhiz2-0723575 ~]# /opt/redis/bin/redis-server /s25redis/master_redis.conf[root@vvkt7whznuckhiz2-0723575 ~]# /opt/redis/bin/redis-server /s25redis/slave_redis.conf[root@vvkt7whznuckhiz2-0723575 ~]# /opt/redis/bin/redis-server /s25redis/slave_redis2.conf[root@vvkt7whznuckhiz2-0723575 ~]# ps -ef | grep redisroot 15551 1 0 00:39 ? 00:00:00 /opt/redis/bin/redis-server *:6379root 15565 1 0 00:39 ? 00:00:00 /opt/redis/bin/redis-server *:6389root 15575 1 0 00:39 ? 00:00:00 /opt/redis/bin/redis-server *:6399root 15590 15288 0 00:39 pts/0 00:00:00 grep --color=auto redis[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6379 info replication# Replicationrole:masterconnected_slaves:1slave0:ip=127.0.0.1,port=6399,state=online,offset=56,lag=1master_failover_state:no-failovermaster_replid:05e16bfb67f7d5b60b5cb2a2814412f63c603ff5master_replid2:0000000000000000000000000000000000000000master_repl_offset:56second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:56[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6389 info replication# Replicationrole:masterconnected_slaves:0master_failover_state:no-failovermaster_replid:166b3019798f2218fd3eca3ecfaf648d84b424c8master_replid2:0000000000000000000000000000000000000000master_repl_offset:0second_repl_offset:-1repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6399 info replication# Replicationrole:slavemaster_host:127.0.0.1master_port:6379master_link_status:upmaster_last_io_seconds_ago:3master_sync_in_progress:0slave_read_repl_offset:84slave_repl_offset:84slave_priority:100slave_read_only:1replica_announced:1connected_slaves:0master_failover_state:no-failovermaster_replid:05e16bfb67f7d5b60b5cb2a2814412f63c603ff5master_replid2:0000000000000000000000000000000000000000master_repl_offset:84second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:84[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6389 slaveof 127.0.0.1 6379OK[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6389 info replication# Replicationrole:slavemaster_host:127.0.0.1master_port:6379master_link_status:upmaster_last_io_seconds_ago:2master_sync_in_progress:0slave_read_repl_offset:308slave_repl_offset:308slave_priority:100slave_read_only:1replica_announced:1connected_slaves:0master_failover_state:no-failovermaster_replid:05e16bfb67f7d5b60b5cb2a2814412f63c603ff5master_replid2:0000000000000000000000000000000000000000master_repl_offset:308second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:281repl_backlog_histlen:28
2 kill PID of master redis db ; enter slave db ; storage data
[root@vvkt7whznuckhiz2-0723575 ~]# ps -ef | grep redisroot 15551 1 0 00:39 ? 00:00:00 /opt/redis/bin/redis-server *:6379root 15565 1 0 00:39 ? 00:00:00 /opt/redis/bin/redis-server *:6389root 15575 1 0 00:39 ? 00:00:00 /opt/redis/bin/redis-server *:6399root 15950 15288 0 00:46 pts/0 00:00:00 grep --color=auto redis[root@vvkt7whznuckhiz2-0723575 ~]# kill -9 15551[root@vvkt7whznuckhiz2-0723575 ~]# ps -ef | grep redisroot 15565 1 0 00:39 ? 00:00:00 /opt/redis/bin/redis-server *:6389root 15575 1 0 00:39 ? 00:00:00 /opt/redis/bin/redis-server *:6399root 15967 15288 0 00:46 pts/0 00:00:00 grep --color=auto redis[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6389127.0.0.1:6389> set dizhi changping(error) READONLY You can't write against a read only replica.127.0.0.1:6389> exit[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6399127.0.0.1:6399> set kpp wqe(error) READONLY You can't write against a read only replica.127.0.0.1:6399> exit
3relieve slave relationship with 6379 db and check relationship info
[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6399 slaveof no oneOK[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6399 info replication# Replicationrole:masterconnected_slaves:0master_failover_state:no-failovermaster_replid:ca156586055e5ff7666613b1e18aa9f2adcf39cdmaster_replid2:05e16bfb67f7d5b60b5cb2a2814412f63c603ff5master_repl_offset:616second_repl_offset:617repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:616
4 bind slave db 6389 with master db 6399 and check relationship info
[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6389 slaveof 127.0.0.1 6399OK[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6399 info replication# Replicationrole:masterconnected_slaves:1slave0:ip=127.0.0.1,port=6389,state=online,offset=714,lag=1master_failover_state:no-failovermaster_replid:ca156586055e5ff7666613b1e18aa9f2adcf39cdmaster_replid2:05e16bfb67f7d5b60b5cb2a2814412f63c603ff5master_repl_offset:714second_repl_offset:617repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:714[root@vvkt7whznuckhiz2-0723575 ~]#
5check data in two db
[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6399127.0.0.1:6399> set slogan "I am back in future"OK127.0.0.1:6399> exit[root@vvkt7whznuckhiz2-0723575 ~]# redis-cli -p 6389127.0.0.1:6389> keys *1) "addr"2) "age"3) "name"4) "slogan"127.0.0.1:6389> get slogan"I am back in future"127.0.0.1:6389> exit
高可用—哨兵
introduction
配置好Redis的哨兵[保安]进程,一般为三个哨兵的作用是盯着主库,不断询问它是否存活,如果超过30S(设置的时间阈值)都没有回应三个哨兵就会判断主库宕机,谈话进行投票[三巨头会晤],自动选择从库为新的主库,每个哨兵的意见可能都不一样因此引出投票规则,少数服从多数当多个哨兵达成一致,选择某个从库,自动修改配置文件,切换新的主库
redis-sentinel
1. 准备3个redis节点,1master + 3slave 集群
redis支持多实例,基于多个配置文件,运行多个相互独立的redis进程redis6379.confredis6380.confredis6381.conf并且写入该内容:============================================================redis6379.confport 6379daemonize yeslogfile "6379.log"dbfilename "dump-6379.rdb"dir "/var/redis/data/"============================================================redis6380.confport 6380daemonize yeslogfile "6380.log"dbfilename "dump-6380.rdb"dir "/var/redis/data/"slaveof 127.0.0.1 6379============================================================redis6381.confport 6381daemonize yeslogfile "6381.log"dbfilename "dump-6381.rdb"dir "/var/redis/data/"slaveof 127.0.0.1 6379
2分别启动三个数据库确认主从关系
[root@vvkt7whznuckhiz2-0723575 sentinel]# /opt/redis/bin/redis-server /s25/sentinel/redis6379.conf[root@vvkt7whznuckhiz2-0723575 sentinel]# /opt/redis/bin/redis-server /s25/sentinel/redis6380.conf[root@vvkt7whznuckhiz2-0723575 sentinel]# /opt/redis/bin/redis-server /s25/sentinel/redis6381.conf[root@vvkt7whznuckhiz2-0723575 sentinel]# redis-cli -p 6379 info replication# Replicationrole:masterconnected_slaves:2slave0:ip=127.0.0.1,port=6380,state=online,offset=140,lag=0slave1:ip=127.0.0.1,port=6381,state=online,offset=140,lag=0master_failover_state:no-failovermaster_replid:63ad06a34215b522282347cc7bf3e9581c44defamaster_replid2:0000000000000000000000000000000000000000master_repl_offset:140second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:140[root@vvkt7whznuckhiz2-0723575 sentinel]# redis-cli -p 6379 info CPU# CPUused_cpu_sys:0.146287used_cpu_user:0.202460used_cpu_sys_children:0.002344used_cpu_user_children:0.000799used_cpu_sys_main_thread:0.139133used_cpu_user_main_thread:0.196296
3准备三个哨兵的配置文件
=========================================================================================================sentinel26380.confport 26380dir /var/redis/data/logfile "26380.log"sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 30000sentinel parallel-syncs mymaster 1sentinel failover-timeout mymaster 180000daemonize yessentinel26381.confport 26381dir /var/redis/data/logfile "26381.log"sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 30000sentinel parallel-syncs mymaster 1sentinel failover-timeout mymaster 180000daemonize yessentinel26382.confport 26382dir /var/redis/data/logfile "26382.log"sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 30000sentinel parallel-syncs mymaster 1sentinel failover-timeout mymaster 180000daemonize yes分别启动以上三个哨兵[root@vvkt7whznuckhiz2-0723575 sentinel]# /opt/redis/bin/redis-sentinel /s25/sentinel/sentinel26380.conf[root@vvkt7whznuckhiz2-0723575 sentinel]# /opt/redis/bin/redis-sentinel /s25/sentinel/sentinel26381.conf[root@vvkt7whznuckhiz2-0723575 sentinel]# /opt/redis/bin/redis-sentinel /s25/sentinel/sentinel26382.conf
4 检查哨兵配置和主从关系
[root@vvkt7whznuckhiz2-0723575 sentinel]# redis-cli -p 26380 info sentinel# Sentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3[root@vvkt7whznuckhiz2-0723575 sentinel]# redis-cli -p 6379 info replication# Replicationrole:masterconnected_slaves:2slave0:ip=127.0.0.1,port=6380,state=online,offset=149039,lag=1slave1:ip=127.0.0.1,port=6381,state=online,offset=149039,lag=1master_failover_state:no-failovermaster_replid:63ad06a34215b522282347cc7bf3e9581c44defamaster_replid2:0000000000000000000000000000000000000000master_repl_offset:149172second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:149172
5 干掉端口号为6379的数据库,查看其他数据库的主从关系
[root@vvkt7whznuckhiz2-0723575 sentinel]# redis-cli -p 6380 info replication# Replicationrole:slavemaster_host:127.0.0.1master_port:6379master_link_status:downmaster_last_io_seconds_ago:-1master_sync_in_progress:0slave_read_repl_offset:177179slave_repl_offset:177179master_link_down_since_seconds:17slave_priority:100slave_read_only:1replica_announced:1connected_slaves:0master_failover_state:no-failovermaster_replid:63ad06a34215b522282347cc7bf3e9581c44defamaster_replid2:0000000000000000000000000000000000000000master_repl_offset:177179second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:177179[root@vvkt7whznuckhiz2-0723575 sentinel]# redis-cli -p 6381 info replication# Replicationrole:slavemaster_host:127.0.0.1master_port:6379master_link_status:downmaster_last_io_seconds_ago:-1master_sync_in_progress:0slave_read_repl_offset:177179slave_repl_offset:177179master_link_down_since_seconds:29slave_priority:100slave_read_only:1replica_announced:1connected_slaves:0master_failover_state:no-failovermaster_replid:63ad06a34215b522282347cc7bf3e9581c44defamaster_replid2:0000000000000000000000000000000000000000master_repl_offset:177179second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:15repl_backlog_histlen:177165[root@vvkt7whznuckhiz2-0723575 sentinel]# redis-cli -p 6380 info replication# Replicationrole:masterconnected_slaves:1slave0:ip=127.0.0.1,port=6381,state=online,offset=180821,lag=1master_failover_state:no-failovermaster_replid:a7c231b0baeb9a7873036931b778be5be689ae84master_replid2:63ad06a34215b522282347cc7bf3e9581c44defamaster_repl_offset:180821second_repl_offset:177180repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:180821
6 重启端口号为6379的数据库—多次读取数据库,查看关系变更
vim pureredis6379.confport 6379daemonize yeslogfile "pure6379.log"dbfilename "dump-pure6379.rdb"dir "/var/redis/data"/opt/redis/bin/redis-server /s25/sentinel/pureredis6379.confredis-cli -p 6379 info replication# Replicationrole:slavemaster_host:127.0.0.1master_port:6380master_link_status:upmaster_last_io_seconds_ago:1master_sync_in_progress:0slave_read_repl_offset:405999slave_repl_offset:405999slave_priority:100slave_read_only:1replica_announced:1connected_slaves:0master_failover_state:no-failovermaster_replid:a7c231b0baeb9a7873036931b778be5be689ae84master_replid2:0000000000000000000000000000000000000000master_repl_offset:405999second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:405312repl_backlog_histlen:688# 查看配置文件的更新cat pureredis6379.confport 6379daemonize yeslogfile "pure6379.log"dbfilename "dump-pure6379.rdb"dir "/var/redis/data"# Generated by CONFIG REWRITEpidfile "/var/run/redis.pid"save 3600 1save 300 100save 60 10000user default on nopass ~* &* +@allreplicaof 127.0.0.1 6380
集群[redis-cluster配置 - py鱼 - 博客园 (cnblogs.com)]
准备六匹马儿亦六个节点,也就是六个配置文件
vim rediscl7000.confport 7000daemonize yesdir "/var/redis/data"logfile "7000.log"dbfilename "dump-7000.rdb"cluster-enabled yescluster-config-file nodes-7000.confcluster-require-full-coverage novim rediscl7001.confport 7001daemonize yesdir "/var/redis/data"logfile "7001.log"dbfilename "dump-7001.rdb"cluster-enabled yescluster-config-file nodes-7001.confcluster-require-full-coverage novim rediscl7002.confport 7002daemonize yesdir "/var/redis/data"logfile "7002.log"dbfilename "dump-7002.rdb"cluster-enabled yescluster-config-file nodes-7002.confcluster-require-full-coverage novim rediscl7003.confport 7003daemonize yesdir "/var/redis/data"logfile "7003.log"dbfilename "dump-7003.rdb"cluster-enabled yescluster-config-file nodes-7003.confcluster-require-full-coverage novim rediscl7004.confport 7004daemonize yesdir "/var/redis/data"logfile "7004.log"dbfilename "dump-7004.rdb"cluster-enabled yescluster-config-file nodes-7004.confcluster-require-full-coverage novim rediscl7005.confport 7005daemonize yesdir "/var/redis/data"logfile "7005.log"dbfilename "dump-7005.rdb"cluster-enabled yescluster-config-file nodes-7005.confcluster-require-full-coverage no
复制并且修改编号,并且逐个启动,尝试向集群中的节点写入数据
vim /rediscluster/rediscl7000.confvim /rediscluster/rediscl7001.confvim /rediscluster/rediscl7002.confvim /rediscluster/rediscl7003.confvim /rediscluster/rediscl7004.confvim /rediscluster/rediscl7005.conf# 启动多个配置文件/opt/redis/bin/redis-server /rediscluster/rediscl7000.conf/opt/redis/bin/redis-server /rediscluster/rediscl7001.conf/opt/redis/bin/redis-server /rediscluster/rediscl7002.conf/opt/redis/bin/redis-server /rediscluster/rediscl7003.conf/opt/redis/bin/redis-server /rediscluster/rediscl7004.conf/opt/redis/bin/redis-server /rediscluster/rediscl7005.conf# 测试单个数据库的文件写入========================================================================================此时写入数据会报错redis-cli -p 7000127.0.0.1:7000> keys *(empty array)127.0.0.1:7000> set name cj(error) CLUSTERDOWN Hash slot not served127.0.0.1:7000>
安装额外配置
1 安装rubyyum -y install ruby2 查看rub 以及 gem 版本ruby -vruby 2.0.0p648 (2015-12-16) [x86_64-linux]gem -v2.0.14.13 使用gem包管理下载redis插件gem install redis -v 3.3.04 搜索用于创建redis集群的脚本 redis-trib.rbwhich 用于搜索环境变量find 才是搜索文件的find -name "redis-trib.rb"5. 批量创建集群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>>> Performing hash slots allocation on 5 nodes...Master[0] -> Slots 0 - 3276Master[1] -> Slots 3277 - 6553Master[2] -> Slots 6554 - 9829Master[3] -> Slots 9830 - 13106Master[4] -> Slots 13107 - 16383M: 0f1ed10559d2484e0ed79f56dd08bd00c0f927f5 127.0.0.1:7001slots:[0-3276] (3277 slots) masterM: 0a6cbdde7741b2cdb155dc876906e67e02e1c365 127.0.0.1:7002slots:[3277-6553] (3277 slots) masterM: 6b390a5a1b1821d2b3701a5398ec2065705933d0 127.0.0.1:7003slots:[6554-9829] (3276 slots) masterM: b2d844c1bb2a4c3b4073236a5e629bd94b74969c 127.0.0.1:7004slots:[9830-13106] (3277 slots) masterM: 9e01cee325efff465d41431d3d078f239f3a3aad 127.0.0.1:7005slots:[13107-16383] (3277 slots) masterCan I set the above configuration? (type 'yes' to accept): yes>>> Nodes configuration updated>>> Assign a different config epoch to each node>>> Sending CLUSTER MEET messages to join the clusterWaiting for the cluster to join.>>> Performing Cluster Check (using node 127.0.0.1:7001)M: 0f1ed10559d2484e0ed79f56dd08bd00c0f927f5 127.0.0.1:7001slots:[0-3276] (3277 slots) masterM: 0a6cbdde7741b2cdb155dc876906e67e02e1c365 127.0.0.1:7002slots:[3277-6553] (3277 slots) masterM: 9e01cee325efff465d41431d3d078f239f3a3aad 127.0.0.1:7005slots:[13107-16383] (3277 slots) masterM: 6b390a5a1b1821d2b3701a5398ec2065705933d0 127.0.0.1:7003slots:[6554-9829] (3276 slots) masterM: b2d844c1bb2a4c3b4073236a5e629bd94b74969c 127.0.0.1:7004slots:[9830-13106] (3277 slots) master[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.
查看主从关系
[root@vvkt7whznuckhiz2-0723575 rediscluster]# redis-cli -p 7001 -c127.0.0.1:7001> cluster nodesb2d844c1bb2a4c3b4073236a5e629bd94b74969c 127.0.0.1:7004@17004 master - 0 1637067122000 4 connected 9830-131060a6cbdde7741b2cdb155dc876906e67e02e1c365 127.0.0.1:7002@17002 master - 0 1637067123111 2 connected 3277-65539e01cee325efff465d41431d3d078f239f3a3aad 127.0.0.1:7005@17005 master - 0 1637067124114 5 connected 13107-163836b390a5a1b1821d2b3701a5398ec2065705933d0 127.0.0.1:7003@17003 master - 0 1637067122000 3 connected 6554-98290f1ed10559d2484e0ed79f56dd08bd00c0f927f5 127.0.0.1:7001@17001 myself,master - 0 1637067124000 1 connected 0-3276127.0.0.1:7001>
