Redis各种配置


主从结构:当主服务器宕机后,需要手动把一台服务器切换为主服务器,这就需要人工干预,费时费力,还会造成一段时间内服务不可用,这时就会优先考虑哨兵模式

哨兵结构:主节点宕机,从节点随意选出master;主节点恢复,只能重新配置和连接,主节点为slave,从节点仍会是master

Redis主从配置(1台机器)

文件配置

#redis文件进行拷贝
cp /etc/redis.conf /etc/redis2.conf
#主配置文件redis.conf
vim /etc/redis.conf
bind 127.0.0.1
port 6379
daemonize yes
logfile "/var/log/redis.log"
dir /data/redis_data/
appendonly yes
------------------------------------------------------------------------------
#从配置文件redis2.conf
vim /etc/redis2.conf
bind 127.0.0.1
port 6380
dir /data/redis_data2/
pid_file /var/run/redis_6380.pid
logfile "/var/log/redis2.log"
daemonize yes
appendonly yes
#从文件需要操作
mkdir /data/redis_data2/
touch /var/log/redis2.log
touch /var/run/redis_6380.pid
#查看进程服务
ps -ef | grep redis
#如果有redis进程杀死进程
kill -9 PID

正常配置

#目前两个机器都是master
[root@localhost etc]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:01470f5957d4b593e42a8233bca0f7b8abf5cd6f
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

主从配置方法1

#设置主从
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
#配置验证
127.0.0.1:6379> info replication
127.0.0.1:6379> LPUSH list1 "aaa bbb"
(integer) 3
127.0.0.1:6379> LRANGE list1 0 -1
1) "aaa bbb"
127.0.0.1:6380> LRANGE list1 0 -1
1) "aaa bbb"

主从配置方法2

#从配置文件redis2.conf
vim /etc/redis2.conf
port 6380
dir /data/redis_data2/
pid_file /var/run/redis_6380.pid
logfile "/var/log/redis2.log"
daemonize yes
appendonly yes
slaveof masterIP PORT
redis-server /etc/redis2.conf
redis-cli
#配置验证即可成功
127.0.0.1:6379> info replication

Redis主从配置(3个机器)

和第一台机器是相似的,利用方法二

IP地址

IP地址

端口

master

192.168.108.162

6379

slave1

192.168.108.164

6379

slave2

192.168.108.145

6379

slave3

192.168.108.146

6379

文件配置

master
vim /etc/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
logfile "/var/log/redis.log"
dir /data/redis_data/
appendonly yes
slave1,slave2
vim /etc/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
logfile "/var/log/redis.log"
dir /data/redis_data/
appendonly yes
slaveof 192.168.108.162 6379

配置验证

master
ps -ef | grep redis
kill -9 PID
cd /usr/local/src/redis-4.0.1
redis-server /etc/redis.conf
redis-cli
slave1slave2
ps -ef | grep redis
kill -9 PID
cd /usr/local/src/redis-4.0.1
redis-server /etc/redis.conf
redis-cli
#master服务器配置内容,在slave服务器上可以进行查看
127.0.0.1:6379> info replication

Redis哨兵模式(3个机器)

​https://blog.csdn.net/a745233700/article/details/112451629​

Redis 主从复制有一个缺点,当 master 宕机以后,整个集群的写就会挂掉。因为 redis 本身是不会自动从 slave 中选举出新的 master 的。

我们理想的情况是:当 master 挂掉之后,可以有 slave 迅速补上,自动切换为 master,不影响整个服务。

基于此,引入了 Redis Sentinel(Redis 哨兵机制)。

哨兵集合监控redis主从是否正常运行。

  • 如果挂掉的是从节点,则哨兵集合会将这个从节点做下线标识;
  • 如果挂掉的是主节点,则哨兵集合不仅会对主节点做下线标识,而且还会所有哨兵进行"协商”,选举出新的主节点,来完成自动故障转移工作。原来的主节点恢复正常后,会变成新的主节点的从节点。

它能够在 master 挂掉之后,自动从 多台 slave 中选举出 新的 master,迅速开始工作,省去了人工切换的麻烦,实现了 redis 的高可用。

缺点:

  1. Redis不好在线扩容,集群容器一但到达上限,在线扩容十分麻烦
  2. 实现哨兵模式的配置其实是很麻烦的,里面有很多选择

Redis主从+哨兵+集群_vim

IP地址

IP地址

端口

master

192.168.108.162

6379

slave1

192.168.108.164

6379

slave2

192.168.108.145

6379

准备:文件配置

#准备工作:
Redis<>
masterslave1slave2
#pidfile配置文件位置
touch /var/run/redis-sentinel.pid
#dir 文件位置
mkdir -p /usr/local/redis/sentinel
# log日志保存位置
touch /usr/local/redis/sentinel/redis-sentinel.log

sentinel.conf 配置文件

masterslave1slave2
###普通配置
port 26379
# 保护模式关闭,这样其他服务起就可以访问此台redis
protected-mode no
# 哨兵模式是否后台启动,默认no,改为yes
daemonize yes
pidfile /var/run/redis-sentinel.pid
# log日志保存位置
logfile /usr/local/redis/sentinel/redis-sentinel.log
# 工作目录
dir /usr/local/redis/sentinel

###核心配置
# 核心配置。
# 第三个参数:哨兵名字,可自行修改。(若修改了,那后面涉及到的都得同步)
# 第四个参数:master主机ip地址
# 第五个参数:redis端口号
# 第六个参数:哨兵的数量。比如2表示,当至少有2个哨兵发现master的redis挂了,
# 那么就将此master标记为宕机节点。
# 这个时候就会进行故障的转移,将其中的一个从节点变为master
sentinel monitor mymaster 192.168.108.162 6379 2
# master中redis的密码
sentinel auth-pass mymaster 123456
# 哨兵从master节点宕机后,等待多少时间(毫秒),认定master不可用。
# 默认30s,这里为了测试,改成10s
sentinel down-after-milliseconds mymaster 10000
# 当替换主节点后,剩余从节点重新和新master做同步的并行数量,默认为 1
sentinel parallel-syncs mymaster 1
# 主备切换的时间,若在3分钟内没有切换成功,换另一个从节点切换
sentinel failover-timeout mymaster 180000
masterslave1slave2
#启动哨兵
redis-sentinel sentinel.conf
ps -ef | grep redis
kill -9 PID

监控阶段

用于同步各个界定啊的状态信息,通过ping指令获取各个sentinel(是否在线)

failover 故障转移 192.168.108162宕机后,master到slave2机器上

#后面的结果
tail -f /usr/local/redis/sentinel/redis-sentinel.log
8001:X 16 Mar 22:27:17.897 * +failover-state-wait-promotion slave 192.168.108.145:6379 192.168.108.145 6379 @ mymaster 192.168.108.162 6379 #发送了failover状态
8001:X 16 Mar 22:27:17.903 # +promoted-slave slave 192.168.108.145:6379 192.168.108.145 6379 @ mymaster 192.168.108.162 6379
8001:X 16 Mar 22:27:17.903 # +failover-state-reconf-slaves master mymaster 192.168.108.162 6379
8001:X 16 Mar 22:27:17.959 # +failover-end master mymaster 192.168.108.162 6379 #发起故障转移
8001:X 16 Mar 22:27:17.960 # +switch-master mymaster 192.168.108.162 6379 192.168.108.145 6379
8001:X 16 Mar 22:27:17.960 * +slave slave 192.168.108.164:6379 192.168.108.164 6379 @ mymaster 192.168.108.145 6379
8001:X 16 Mar 22:27:17.960 * +slave slave 192.168.108.162:6379 192.168.108.162 6379 @ mymaster 192.168.108.145 6379
8001:X 16 Mar 22:27:28.007 # +sdown slave 192.168.108.164:6379 192.168.108.164 6379 @ mymaster 192.168.108.145 6379

配置验证

主机正常运行

redis-cli    ---->info  replication
master 162
role:master
connected_slaves:2
slave0:ip=192.168.108.145,port=6379,state=online,offset=2198,lag=1
slave1:ip=192.168.108.164,port=6379,state=online,offset=2198,lag=1
slave1 164
role:slave
master_host:192.168.108.162
master_port:6379
slave2 145
role:slave
master_host:192.168.108.162
master_port:6379

主机宕机

如果master节点断掉了,这个时候会从从机中随机选择slave机器为master

如果主机此时回来,只能归并到新的主机下,当作从机

masterredis-cil
shutdown
#slave2机器成为新的master
master 162
role:slave
master_host:192.168.108.145
master_port:6379
slave1 164
127.0.0.1:6379> info replication
role:slave
master_host:192.168.108.162
master_port:6379
slave2 145
127.0.0.1:6379> info replication
role:master
connected_slaves:1
slave0:ip=192.168.108.162,port=6379,state=online,offset=394018,lag=1

Redis集群配置(1台机器)

redis 集群的前提: 1、每个node节点采用相同的硬件配置、相同的密码、相同的redis版本 2、每个节点必须开启的参数cluster-enabled yes #必须开启集群状态,开启后redis 进程会有cluster显示cluster-config-file nodes-6380.conf #此文件有redis cluster集群自动创建和维护,不需要任何手动操作 3、先启动为单机redis且没有任何数据

需要使用到集群管理工具redis-trib.rb,这个工具是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单、便捷、实用的操作工具,redis-trib.rb是redis作者用ruby开发完成的,centos 系统yum安装的ruby存在版本较低问题,信息如下:

文件配置

yum
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all ; yum makecache
yum install redis -y
systemctl start redis
#redis下载,安装,加入环境变量
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz
tar -zxvf ruby-2.5.5.tar.gz;cd ruby-2.5.5
./configure --prefix=/usr/local/ruby --enable-shared
make -j 4 ;make install

vim /etc/profile #加入以下变量
export RUBY_HOME=/usr/local/ruby
export PATH=$RUBY_HOME/bin:$RUBY_HOME/lib:$PATH
source /etc/profile #生效变量
ruby -v
gem -v
------- ruby-zlib ------------------
yum install zlib-devel openssl-devel -y
cd /usr/local/src/ruby-2.5.5/ext/zlib
ruby extconf.rb
vim Makefile #修改第一行为第二行
_______________________________________
|#zlib.o: $(top_srcdir)/include/ruby.h |
|zlib.o: ../../include/ruby.h |
|______________________________________|
make -j 4;make install
------- ruby-openssl ------------------
cd /usr/local/src/ruby-2.5.5/ext/openssl
ruby extconf.rb
vim Makefile
top_srcdir = ../..
make -j 4;make install

gem install redis
#文件相关部署
mkdir /usr/local/cluster
cp -r /usr/local/redis/bin/ /usr/local/cluster/redis7000
cp /root/redis-4.0.6/redis.conf /usr/local/cluster/redis7000/
vim /usr/local/cluster/redis7000/redis.conf 3portdaemonizeappendonlycluster-enabled yes
cp -r /usr/local/cluster/redis7000/ /usr/local/cluster/redis7001-7005

配置验证

#ps查看进程,如果有redis的进程进行kill
ps -ef | grep redis
cd redis7000 #其他开启的方式一样
./redis-server redis.conf
#创建集群
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
redis7000/redis-cli -p 7000 -c -c
127.0.0.1:7002> set key2 3
-> Redirected to slot [4998] located at 127.0.0.1:7000
OK
127.0.0.1:7002> cluster nodes
127.0.0.1:7002> cluster info

Redis集群配置(2个机器)

​https://blog.51cto.com/u_13578154/2165855​

sed  -i 's/7000/7004/g'  redis7004.conf
sed -i 's/7000/7002/g' redis7002.conf
mkdir /data/redis_data{7000,7002,7004}/
touch /var/log/redis{7001,7003,7005}.log
touch /var/log/redis{7000,7002,7004}.log