搜索
您的当前位置:首页正文

day07-Redis主从及安全

来源:二三娱乐

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 //启动slaver2

      Redis 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 ""

Top