Redis Note22:Redis伪集群环境搭建

Redis Note22:Redis伪集群环境搭建

1. Redis主从复制

数据的复制是单向的,只能从主节点复制到从节点。Master以写为主,Slave以写为主。
主从复制,读写分离。80%的情况都是在进行读操作,减少服务器的压力。
三台Redis的内存不应超过20GB,使用集群。
 

2. 主从复制的作用

  1. 数据冗余
  1. 故障恢复
  1. 负载均衡
  1. 高可用

3. 环境配置

只配置从库,不用配置主库。
127.0.0.1:6379> info replication # 查看当前库的信息 # Replication role:master # 角色 connected_slaves:0 # 没有从机 master_replid:b8d5a8efc1776693d8bb37ca5caaacf44e55958d master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0

4. 伪集群搭建

一台机器以不同配置文件开三个redis端口服务

4.1 复制文件

/etc/redis/redis.conf 复制3份
root@redis:~# cd /etc/redis root@redis:/etc/redis# ls redis.conf root@redis:/etc/redis# cp redis.conf redis79.conf root@redis:/etc/redis# cp redis.conf redis80.conf root@redis:/etc/redis# cp redis.conf redis81.conf root@redis:/etc/redis# ls redis79.conf redis80.conf redis81.conf redis.conf

4.2 修改文件

4.2.1 修改redis79.conf

  • 端口号
  • pid名字
  • log文件名字
  • dump.rdb文件名字
logfile /var/log/redis/redis-server6379.log
notion image
dbfilename dump6379.rdb
notion image

4.2.2 修改redis80.conf

notion image
notion image
notion image
notion image
 

4.2.3 修改redis81.conf

notion image
notion image
notion image
notion image
 

4.3 启动

4.3.1 第一个窗口启动

root@redis:/etc/redis# redis-server /etc/redis/redis79.conf # 查看,生成redis-server6379.log,成功启动 root@redis:/var/log/redis# ls redis-server6379.log redis-server.log

4.3.2 在第二个窗口启动

root@redis:~# redis-server /etc/redis/redis80.conf root@redis:~#

4.3.3 在第三个窗口启动

root@redis:~# redis-server /etc/redis/redis81.conf root@redis:~#

4.3.4 查看,

启动了三个redis端口
notion image
l连接测试
notion image
notion image
notion image
 

4.4 一主二从

默认情况下,每台Redis服务器都是主节点。一般情况下只用配置从机。
  • 主机:79
  • 从机1:80
  • 从机2:81
 

4.4.1 窗口80上执行

# 认主机 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 OK 127.0.0.1:6380> info replication # Replication role:slave # 当前角色是从机 master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:7 master_sync_in_progress:0 slave_repl_offset:14 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:450c0c51bfee7b76e5a12002d50efbe7872604cb master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14
notion image

4.4.2 窗口79上执行

127.0.0.1:6379> info replication # Replication role:master connected_slaves:1 # 现在多了一个从机的配置 slave0:ip=127.0.0.1,port=6380,state=online,offset=56,lag=0 master_replid:450c0c51bfee7b76e5a12002d50efbe7872604cb master_replid2:0000000000000000000000000000000000000000 master_repl_offset:56 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:56

4.4.2 窗口81上执行

127.0.0.1:6381> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:224 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:450c0c51bfee7b76e5a12002d50efbe7872604cb master_replid2:0000000000000000000000000000000000000000 master_repl_offset:224 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:225 repl_backlog_histlen:0

4.4.4 窗口79上执行

127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6380,state=online,offset=322,lag=0 slave1:ip=127.0.0.1,port=6381,state=online,offset=322,lag=0 master_replid:450c0c51bfee7b76e5a12002d50efbe7872604cb master_replid2:0000000000000000000000000000000000000000 master_repl_offset:322 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:322
 
真实的主从配置是在配置文件/etc/redis/redis.conf 中配置,这样的话是永久的,这里使用命令,是暂时的。
notion image
 

5. 使用伪集群

主机可以写,从机只能读。
# 主机79设置值 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> keys * 1) "k1 # 从机80 127.0.0.1:6380> keys * 1) "k1" # 从机81 127.0.0.1:6381> keys * 1) "k1" 127.0.0.1:6381> set k2 v2 (error) READONLY You can't write against a read only replica. # 从机不可以写
 
主机宕机,从机可以保存数据。
主机宕机,从机还是从机。
当主机重新连接,从机依旧可以获取主机的值。
如果用命令行设置从机,断开重新连接,就会自动变为主机。只要变为从机,会从主机中获取值。
 
 

6. 从机变为主节点

notion image
notion image
127.0.0.1:6381> SLAVEOF no one OK 127.0.0.1:6381> info replication # Replication role:master connected_slaves:0 master_replid:b858b373fa252b395b08f1dc55947ac2cb064de9 master_replid2:450c0c51bfee7b76e5a12002d50efbe7872604cb master_repl_offset:2015 second_repl_offset:2016 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:225 repl_backlog_histlen:1791