Linux Redis 主从复制,Redis slaveof replicaof主从复制,redis-sentinel哨兵
=======================
©Copyright 蕃薯耀 2020-12-1
http://fanshuyao.iteye.com/
基于redis-5.0.10.tar.gz
一、Redis主从复制配置,从机配置
进行redis配置文件的目录,在redis.conf加入下面的配置(replicaof <masterip> <masterport>)
vim redis.conf
replicaof 192.168.170.11 6379
从机只读模式默认是开启的:
replica-read-only yes
或者(不打开配置文件,直接加到文件中):
echo "replicaof 192.168.170.11 6379" >> redis.conf
说明一下,replicaof是新版本的命令,旧版本是slaveof命令
(旧版本)使用slaveof命令:
slaveof 192.168.170.11 6379 slave-read-only yes
或者直接追加到配置文件
echo "slaveof 192.168.170.11 6379" >> redis.conf echo "slave-read-only yes" >> redis.conf
二、查看redis主从配置
主机查看主从信息(先运行redis-cli)
127.0.0.1:6379> info replication
或者直接(不需要运行redis-cli):
/java/redis5/bin/redis-cli info replication
显示的内容是:
# Replication role:master connected_slaves:2 slave0:ip=192.168.170.129,port=6379,state=online,offset=1207,lag=0 slave1:ip=192.168.170.130,port=6379,state=online,offset=1207,lag=0 master_replid:498a75a7d0eeacef2b29664a4f1c848be4882460 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1207 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1207
role:master,表示是主机
从机查看主从信息(开启了redis-cli):
info replication
或者(不需要运行redis-cli)
/java/redis5/bin/redis-cli info replication
显示的内容:
127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.170.11 master_port:6379 master_link_status:up
role:slave,表示从机
测试从机有没有复制主机的值,建立主从关系后,从机自动会从主机复制所有数据:
/java/redis5/bin/redis-cli get b
显示内容
[root@host_132 ~]# /java/redis5/bin/redis-cli get b "456"
测试在从机增加数据:
从机是只读模式,是不能设置值的:
127.0.0.1:6379> set c 12345 (error) READONLY You can't write against a read only replica.
三、Redis sentinel哨兵模式
Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案。
sentinel哨兵模式已经被集成在redis2.4之后的版本中。
sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;
当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。
sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。
一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。其结构如下:
1、复制sentinel的配置文件sentinel.conf 到指定的目录
cp /java/redis5/sentinel.conf /java/redis5/bin/
2、去掉配置文件的注释和空行,生成新的配置文件
cd /java/redis5/bin/ cat sentinel.conf | grep -v "#" | grep -v "^$" > sentinel-26379.conf
3、修改配置文件sentinel-26379.conf
vim sentinel-26379.conf
修改内容:(这个文件夹要先建:/java/redis5/data/)
port 26379 daemonize yes pidfile /java/redis5/data/redis-sentinel-26379.pid logfile "redis-sentinel-26379.log" dir /java/redis5/data/
4、修改ip地址,将127.0.0.1修改成192.168.170.11,端口如果是默认的,不需要修改,后面那个2表示2个redis-sentinel检查到master出问题后进入换master的方案。
sentinel monitor mymaster 192.168.170.11 6379 2
5、启动sentinel
/java/redis5/bin/redis-sentinel /java/redis5/bin/sentinel-26379.conf
6、查看进程:
ps -ef | grep redis-sentinel
[root@host_132 bin]# ps -ef | grep redis-sentinel root 4303 1 0 09:32 ? 00:00:00 /java/redis5/bin/redis-sentinel *:26379 [sentinel] root 4311 1396 0 09:32 pts/0 00:00:00 grep --color=auto redis-sentinel
四、设置redis-sentinel开机启动
1、创建服务文件(此方式为centos7的方式),文件原来是没有的。
vi /etc/systemd/system/redis-sentinel.service
开机启动文件内容:
[Unit] #Description:描述服务 Description=RedisSentinel #After:描述服务类别 After=network.target #服务运行参数的设置 [Service] #Type=forking是后台运行的形式 Type=forking #ExecStart为服务的具体运行命令,路径必须是绝对路径 ExecStart=/java/redis5/bin/redis-sentinel /java/redis5/bin/sentinel-26379.conf #ExecReload为重启命令 ,路径必须是绝对路径 ExecReload=/java/redis5/bin/redis-sentinel -s reload #ExecStop为停止命令 ,路径必须是绝对路径 ExecStop=/java/redis5/bin/redis-sentinel -s stop #PrivateTmp=True表示给服务分配独立的临时空间 PrivateTmp=true #运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3 [Install] WantedBy=multi-user.target
2、重载系统服务:
systemctl daemon-reload
3、将服务加入开机自启 (注意redis-sentinel.service后面不能跟空格 )
systemctl enable redis-sentinel.service
成功后提示:
[root@host_132 bin]# systemctl enable redis-sentinel.service Created symlink from /etc/systemd/system/multi-user.target.wants/redis-sentinel.service to /etc/systemd/system/redis-sentinel.service.
4、测试开机启动是否成功,重启服务器
重启服务器
reboot -f
5、系统重启后,查看服务运行状态:
systemctl status redis-sentinel.service
或者查看进程
ps -ef | grep redis-sentinel
五、开放redis-sentinel的连接端口,默认是26379
过程略。
六、Jedis测试Redis哨兵模式切换master
1、准备3台虚拟机,分别安装了redis和redis-sentinel
过程略。
2、引入jedis依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
3、编写Java代码测试:
import java.util.HashSet; import java.util.Random; import java.util.Set; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisSentinelPool; public class RedisSentinel { private static Logger log = Logger.getLogger(RedisSentinel.class); public static void redisSentinel() { Set<String> sentinels = new HashSet<String>(); sentinels.add("192.168.170.128:26379");//192.168.170.11 sentinels.add("192.168.170.129:26379");//192.168.170.12 sentinels.add("192.168.170.130:26379");//192.168.170.13 JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("mymaster", sentinels); Jedis jedis = jedisSentinelPool.getResource(); String a = jedis.get("a"); String b = jedis.get("b"); System.out.println("a=" + a); System.out.println("b=" + b); jedis.close(); jedisSentinelPool.close(); } /** * 测试哨兵转移 */ public static void redisSentinelTransfer() { Set<String> sentinels = new HashSet<String>(); sentinels.add("192.168.170.11:26379"); sentinels.add("192.168.170.12:26379"); sentinels.add("192.168.170.13:26379"); @SuppressWarnings("resource") JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("mymaster", sentinels); Jedis jedis = null; while(true) { try { //不能放在while里面,这样连接池在8次后会被用完,不执行redis方法,也不报错。 //如果放在while,必须回收。 jedis = jedisSentinelPool.getResource(); int randInt = new Random().nextInt(10000); String key = "k_" + randInt; String value = "v_" + randInt; jedis.set(key, value); log.info(key + " = " + value); TimeUnit.SECONDS.sleep(2); } catch (Exception e) { log.info(e); } finally { if(jedis != null) { jedis.close(); } } } } public static void main(String[] args) { //redisSentinel(); redisSentinelTransfer(); } }
4、直接通过kill -9 xxx 关闭Redis(主)的redis服务,测试master是否切换。
注意:默认是要 30秒 后才会切换。
Centos7 Redis5安装及配置,Linux Centos7安装Redis5,Centos7 Redis自启动,见:
https://www.iteye.com/blog/fanshuyao-2518110
=======================
©Copyright 蕃薯耀 2020-12-18
http://fanshuyao.iteye.com/
相关推荐
Redis主从复制和集群配置说明
Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。
docker-compose 形式部署 redis 1主2从3哨兵 redis 多节点高可用 redis 主从哨兵 redis 集群高可用 redis 哨兵 redis 高可用
Redis集群-Redis安装、Redis主从复制、哨兵、Redis集群
Redis主从复制以及主从复制技术原理.docx
02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构...
实现了redis主从复制(读写分离)集群
描述redis主从复制的过程中的各种细节,包括各个阶段所使用的事件处理函数
基于北京尚硅谷周阳老师讲解的redis。个人学习总结: 包含redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用。
redis-sentinel 就像他的名字一样,他是一个哨兵,监控 master 状态,如果超过规定时间没有响应,则自动进行主从切换,期间会有一段时间(决定于具体的配置参数)redis集群无法提供服务 。原理类似 mysql 的 MHA。...
redis主从复制(csdn)————程序
Redis主从复制(一主两从)+哨兵配置手册 Redis主从复制(一主两从)+哨兵配置手册 Redis主从复制(一主两从)+哨兵配置手册
【中间件篇-Redis缓存数据库06】Redis主从复制/哨兵 高并发高可用
redis主从配置+sentinel哨兵模式 redis主从配置+sentinel哨兵模式
1、生成恶意.so文件,下载RedisModules-ExecuteCommand使用make编译即可生成 1、监听本地1234端口 2、将Redis服务器设置
windows下redis主从复制。一个master,两个slave。附带博客介绍https://blog.csdn.net/xixiyuguang/article/details/105121660
redis服务配置,配置redis主从复制,多个哨兵监控redis主服务,自动切换服务
1.使用 DICT 协议添加一条测试记录 2.设置保存路径 3.设置保存文件名 4.保存 1.连接远程主服务器 2.设置保存路径 3.设置保存文件名 4.保存
redis-2.8.19主从配置+sentinel主从切换+Java源码案例!下载下来可直接启动,已经配置好主从关系和sentinel,JAVA代码已经有相应的方法,并有部分自己的理解注释!
Redis哨兵主从模式+keepalived