Redis集群部署---主从模式

EMQX 企业版技术支持发表于:2022年03月02日 09:52:56更新于:2022年03月17日 15:03:20

一、安装redis

可以到官网进行下载,这里我下载的是最新版的redis6.2.6版本

wget https://download.redis.io/releases/redis-6.2.6.tar.gz 
tar xvf redis-6.2.6.tar.gz 
cd redis-6.2.6 
make 
cd src 
make install

安装编译完成后,执行下面命令

cp redis.conf /etc/ 
vim /etc/redis.conf 
#搜索 daemonize no 这⾥把no 修改为yes,这样可以让redis后台运⾏ 
[root@ecs-3950 redis-6.2.6]# redis-server /etc/redis.conf 
[root@ecs-3950 redis-6.2.6]# redis-cli 
127.0.0.1:6379>

二、redis集群部署

  1. 集群环境

    系统版本:linux centerOS 7.6

    Redis版本:6.2.6

    Redis集群的⽅式:主从集群

    主节点服务器 地址 192.168.0.10

    从节点服务器 地址 192.168.0.11, 192.168.0.12

  2. 主从集群的特点

    redis集群有下⾯三种模式

    1.主从模式

    2.Sentinel模式

    3.Cluster模式

    主从集群有以下特点:

    主数据库可以进⾏读写操作,当读写操作导致数据变化时会⾃动将数据同步给从数据库

    从数据库⼀般都是只读的,并且接收主数据库同步过来的数据

    ⼀个master可以拥有多个slave,但是⼀个slave只能对应⼀个master

    slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来

    master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务

    master挂了以后,不会在slave节点中重新选⼀个master 

  3. 主从集群的部署

    主节点上⾯修改 /etc/redis.conf,修改下⾯这些参数

mkdir -p /data/redis 
vi /etc/redis.conf bind 192.168.0.10  #监听ip,多个ip⽤空格分隔 
daemonize yes  #允许后台启动 
logfile "/root/redis-6.2.6/redis.log"  #⽇志路径 
dir /data/redis  #数据库备份⽂件存放⽬录 
masterauth 123456  #slave连接master密码,master可省略 
requirepass 123456  #设置master连接密码,slave可省略 
appendonly yes  #在/data/redis/⽬录⽣成appendonly.aof⽂件,将每⼀次写操作请求 都追加到appendonly.aof ⽂件中

      从节点192.168.0.11上面修改配置文件

mkdir -p /data/redis 
vi /etc/redis.conf bind 192.168.0.11 #监听ip,多个ip⽤空格分隔 
daemonize yes #允许后台启动 
logfile "/root/redis-6.2.6/redis.log" #⽇志路径 
dir /data/redis #数据库备份⽂件存放⽬录 
replicaof 192.168.0.10 6379 masterauth 123456 #slave连接master密码,master可省略 requirepass 123456 #设置master连接密码,slave可省略 
appendonly yes

      从节点192.168.0.12上面修改配置文件

mkdir -p /data/redis 
vi /etc/redis.conf bind 192.168.0.12 #监听ip,多个ip⽤空格分隔 
daemonize yes #允许后台启动 
logfile "/root/redis-6.2.6/redis.log" #⽇志路径 
dir /data/redis #数据库备份⽂件存放⽬录 
replicaof 192.168.0.10 6379 masterauth 123456 #slave连接master密码,master可省略 requirepass 123456 #设置master连接密码,slave可省略 
appendonly yes

   4.主从集群的验证

(1)重启redis

killall redis-server

(2)集群状态查看

在主节点上查看

[root@ecs-f4f6-0001 redis]# redis-server /etc/redis.conf 
[root@ecs-f4f6-0001 redis]# redis-cli -h 192.168.0.10 -a 123456 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe 
192.168.0.10:6379> info replication 
# Replication 
role:master 
connected_slaves:2 
slave0:ip=192.168.0.11,port=6379,state=online,offset=210,lag=0 
slave1:ip=192.168.0.12,port=6379,state=online,offset=210,lag=0 
master_failover_state:no-failover 
master_replid:31893062e1e498918c10f5e0e97c0cf485cef75a 
master_replid2:0000000000000000000000000000000000000000 
master_repl_offset:210 second_repl_offset:-1 
repl_backlog_active:1 
repl_backlog_size:1048576 
repl_backlog_first_byte_offset:1 
repl_backlog_histlen:210

在从节点上查看

从节点192.168.0.11上数据显示

[root@ecs-f4f6-0002 ~]# cd redis-6.2.6 
[root@ecs-f4f6-0002 redis-6.2.6]# redis-server /etc/redis.conf 
[root@ecs-f4f6-0002 redis-6.2.6]# redis-cli -h 192.168.0.11 -a 123456 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 
192.168.0.11:6379> info replication 
# Replication 
role:slave master_host:192.168.0.10 
master_port:6379 
master_link_status:up 
master_last_io_seconds_ago:8 master_sync_in_progress:0 
slave_read_repl_offset:280 
slave_repl_offset:280 
slave_priority:100 
slave_read_only:1 
replica_announced:1 
connected_slaves:0
master_failover_state:no-failover 
master_replid:c4eb5428b1c29979ee40bd68ced4820339fc3faa 
master_replid2:0000000000000000000000000000000000000000 
master_repl_offset:280 second_repl_offset:-1 
repl_backlog_active:1 
repl_backlog_size:1048576 
repl_backlog_first_byte_offset:1 
repl_backlog_histlen:280

   (数据演示)

主节点上操作写⼊数据 
192.168.0.10:6379> keys * 
(empty array) 
192.168.0.10:6379> set key1 100 
OK 
192.168.0.10:6379> set key2 200 
OK 
192.168.0.10:6379> keys * 
1) "key2" 
2) "key1" 

从节点上操作数据显示 
192.168.0.11:6379> keys * 
1) "key1" 2) 
"key2" 
192.168.0.11:6379> get key1 
"100" 
192.168.0.11:6379> set key3 111 
(error) READONLY You can't write against a read only replica. 
192.168.0.12:6379> keys * 
1) "key1" 
2) "key2" 
192.168.0.12:6379> get key1 "100" 
192.168.0.12:6379> get key2 "200" 
192.168.0.12:6379> set key3 111 
(error) READONLY You can't write against a read only replica.

可以看到,在master节点写⼊的数据,很快就同步到slave节点上,⽽且在slave节点上⽆法写⼊数据。 ⾄此 redis的 主从集群就已经完成。

    您需要登录后才可以回复