redis主从架构搭建

110 阅读6分钟

备注:部署在单机上,只是用端口进行区分

  • 127.0.0.1 6379
  • 127.0.0.1 6380
  • 127.0.0.1 6381

安装redis

自行百度安装

设置redis-server和redis-cli软链接 让redis-cli redis-server指令可以在任意目录下直接使用

ln -s /usr/local/redis-5.0.9/src/redis-cli /usr/bin/redis-cli

ln -s /usr/local/redis-5.0.9/src/redis-server /usr/bin/redis-server

创建配置文件

mkdir /home/redis-cluster

将redis安装目录下的redis.conf配置拷贝到自己的目录,并修改

cp redis.conf /home/redis-cluster/

修改redis.conf下的appendonly属性为no

appendonly no

创建各自节点的配置文件

cd /home/redis-cluster/

vim redis_6379.conf

include /home/redis-cluster/redis.conf
pidfile /home/redis-cluster/redis_6379.pid
port 6379
dbfilename dump6379.rdb
bind 127.0.0.1

vim redis_6380.conf

include /home/redis-cluster/redis.conf
pidfile /home/redis-cluster/redis_6380.pid
port 6380
dbfilename dump6380.rdb
slaveof 127.0.0.1 6379  #主节点地址和端口
masterauth 主节点秘密

vim redis_6381.conf

include /home/redis-cluster/redis.conf
pidfile /home/redis-cluster/redis_6381.pid
port 6381
dbfilename dump6381.rdb
slaveof 127.0.0.1 6379  #主节点地址和端口
masterauth 主节点秘密

启动服务

cd /home/redis-cluster/

redis-server redis_6379.conf

redis-server redis_6380.conf

redis-server redis_6381.conf

查看信息

[root@VM-20-7-centos redis-cluster]# redis-cli -p 6379
127.0.0.1:6379> AUTH  redis密码
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=2475,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=2475,lag=0
master_replid:ac014dc6c8ef442d1bff58537d091d26573823a9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2475
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2475

image.png

image.png

测试同步

在主节点中添加一个key

127.0.0.1:6379> set  address    0000001
OK

在从节点查看 ``

127.0.0.1:6380> keys *
1) "age"
2) "address"
3) "name"
127.0.0.1:6380> 

特点

  • 当某个从节点宕机之后,需要重新手动启动,并将其加入到主节点中。加入之后数据会再次镜像全量同步
  • 当主节点宕机之后,从节点并不会升级为主节点,主节点重启之后依然是主节点
  • 如果主节点宕机了,想要谁让从节点变为主节点可以输入以下命令

slaveof no one #将从机变为主机

缺点

如果服务器节点挂掉之后,需要人工介入操作,无法自动进去切换

哨兵模式

能够后台监控主机是否故障,若发生故障根据投票数自动将从库切换为主库

配置哨兵

进入配置文件目录

mkdir /home/redis-cluster
vim sentinel.conf

sentinel monitor mymaster 127.0.0.1 6379 1 sentinel auth-pass mymaster 主节点密码 其中mymaster为监控对象起的服务名,1为至少有多少个哨兵同意切换

启动哨兵

ln -s /usr/local/redis-5.0.9/src/redis-sentinel /usr/bin/redis-sentinel

[root@VM-20-7-centos redis-cluster]# redis-sentinel    sentinel.conf 
2464193:X 12 Dec 2024 23:14:21.043 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2464193:X 12 Dec 2024 23:14:21.043 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=2464193, just started
2464193:X 12 Dec 2024 23:14:21.043 # Configuration loaded
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 2464193
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

2464193:X 12 Dec 2024 23:14:21.045 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2464193:X 12 Dec 2024 23:14:21.045 # Sentinel ID is a66d742bdda83b0d55dc2e044aa2f2b8fcced90e
2464193:X 12 Dec 2024 23:14:21.045 # +monitor master mymaster 127.0.0.1 6379 quorum 1
2464193:X 12 Dec 2024 23:14:21.045 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
2464193:X 12 Dec 2024 23:14:21.048 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379


image.png

测试哨兵

1、将主节点宕掉,并观察情况

2464193:X 12 Dec 2024 23:16:56.410 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6379
2464193:X 12 Dec 2024 23:16:56.484 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
2464193:X 12 Dec 2024 23:16:57.423 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
2464193:X 12 Dec 2024 23:16:57.423 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
2464193:X 12 Dec 2024 23:16:57.484 # +failover-end master mymaster 127.0.0.1 6379
2464193:X 12 Dec 2024 23:16:57.484 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6381
2464193:X 12 Dec 2024 23:16:57.484 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
2464193:X 12 Dec 2024 23:16:57.484 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
2464193:X 12 Dec 2024 23:17:27.526 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381

image.png

查看是否自动切换,主节点的变化,确实切换到了6381为主节点

127.0.0.1:6380> info  replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:19996
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2ffc714e0a615da39e4d46d69b0eb49a12cc06e5
master_replid2:78367fb10a9bb8a6e4308207d8e77177329bc19b
master_repl_offset:19996
second_repl_offset:8963
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:19996

重新启动原先主节点,可以观察到6379变为从节点了

127.0.0.1:6379> info  replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1734016926
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:dc131bf69a61911c9b28f1f908547611f5d048ed
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