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
【slave1】【slave2】
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 的高可用。
缺点:
- Redis不好在线扩容,集群容器一但到达上限,在线扩容十分麻烦
- 实现哨兵模式的配置其实是很麻烦的,里面有很多选择
IP地址 | IP地址 | 端口 |
master | 192.168.108.162 | 6379 |
slave1 | 192.168.108.164 | 6379 |
slave2 | 192.168.108.145 | 6379 |
准备:文件配置
#准备工作:
Redis主从配置<上方操作>
【master】【slave1】【slave2】
#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 配置文件
【master】【slave1】【slave2】
###普通配置
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
【master】【slave1】【slave2】
#启动哨兵
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
如果主机此时回来,只能归并到新的主机下,当作从机
【master】redis-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 修改3个内容,port,daemonize,appendonly,cluster-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