Redis集群
-
主从复制
为了避免单台机器故障导致的数据丢失,我们需要将数据复制多份部署到多台不同的服务器上,这样即使一台服务器出现故障,别的服务器依然能提供服务。 这也要求一台服务器数据更新以后,自动同步更新到其他服务器上。
-
如何实现
-
Redis 提供了复制(Replication)功能来实现多台 Redis 服务器的数据同步
-
通过部署多台 Redis 机器,并在配置文件中指定者几台 Redis 服务器之间的主从关系。主负责写入数据,同时将数据实时同步到从机器上。Redis默认Master用于写,Slave用于读。向 Slave 写数据会导致错误。
-
方式一: 修改配置文件,启动时,服务器读取配置文件,并自动成为指定服务器的从服务器,从而构成主从复制关系
启动
-
redis-sever /etc/redis6380.conf
//启动master -
redis-sever /etc/redis6381.conf
//启动slaver1 -
redis-sever /etc/redis6382.conf
//启动slaver2Redis Master配置
#导入原始配置文件 include /etc/redis/redis.conf #守护进程 daemonize yes #端口 port 6380 #进程文件 pidfile /var/run/redis/redis_6380.pid #日志文件 logfile redis-6380.log #RDB文件 dbfilename redis-dump-6380.rdb
Redis slave 配置
#导入原始配置文件 include /etc/redis/redis.conf #守护进程 daemonize yes #端口 port 6381 #进程文件 pidfile /var/run/redis/redis_6381.pid #日志文件 logfile redis-6381.log #RDB文件 dbfilename redis-dump-6381.rdb #配置目前的配置是那一台master的slave slaveof 127.0.0.1 6380
查看当前机器的角色
``` #master机器信息 root@aaron:/home/aaron# redis-cli -p 6380 127.0.0.1:6380> INFO replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6381,state=online,offset=476,lag=1 slave1:ip=127.0.0.1,port=6383,state=online,offset=476,lag=1 master_replid:aa778915d498ad1ea8a5c44cf7aa73e238a95956 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:476 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:476 ----------------------------------------------- #slaver信息 127.0.0.1:6383> info replication # Replication role:slave master_host:127.0.0.1 master_port:6380 master_link_status:up master_last_io_seconds_ago:9 master_sync_in_progress:0 slave_repl_offset:1246 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:aa778915d498ad1ea8a5c44cf7aa73e238a95956 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1246 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:253 repl_backlog_histlen:994 ```
-
方式二: redis-server --slaveof <master-ip> <master-port>, 在启动 Redis 时指定当前服务成为某个主Redis服务的从Slave
-
容灾处理
当 master 机器出现故障时(模拟时杀掉redis master服务进程),需要手动将Slave中的一个提升为Master, 剩下的slav配置到新的Master上(冷处理)
将6381端口的 Slave 提升 master
127.0.0.1:6381> SLAVEOF no one OK
将6382的master设置为6381
127.0.0.1:6382> SLAVEOF 127.0.0.1 6381 OK
-
高可用 Sentinel 哨兵
Sentinel 时官方提供的用于监控多个Redis服务实例运行情况的解决方案。
-
监控
-
Sentinel配置
#复制四份sentinel.conf文件
- sentinel26380.conf
- sentinel26381.conf
- sentinel26382.conf
- sentinel26383.conf
#修改sentinel2638*.conf中的两个配置项
port 26380 //sentinel26380.conf
port 26381 //sentinel26381.conf
port 26382 //sentinel26382.conf
port 26383 //sentinel26383.conf
#修改sentinel监视配置项
<!---->
# name masterIP masterPort 哨兵投票数
sentinel monitor mymaster 127.0.0.1 6381 2
#创建监视主服务器的Sentinel实例
redis-sentinel /etc/redis/sentinel26380.conf
redis-sentinel /etc/redis/sentinel26381.conf
redis-sentinel /etc/redis/sentinel26382.conf
redis-sentinel /etc/redis/sentinel26383.conf
安全
- 设置密码
redis.conf 文件中设置 requirepass yourPassword
- 绑定ip
#只允许本机登陆
bind 127.0.0.1
- 命令禁止或是重命名
#重命名flushall为asdfg
#注意:对于flushall命令,需要保证appendonly.aof文件没有flushall命令,否则服务器无法启动
rename-command flushall asdfg
#禁止使用flushdb命令
rename-command flushdb ""
#禁止使用config命令
rename-command config ""
网友评论