1.获取redis资源
下载地址:http://download.redis.io/releases/
wget http://download.redis.io/releases/redis-6.0.0.tar.gz
2.解压
tar xzvf redis-6.0.0.tar.gz
3.安装
cd redis-6.0.0
make
cd src
make install PREFIX=/usr/local/redis
4.为了方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中
mkdir /usr/local/redis/etc
将redis-6.0.0目录下的 redis.conf 移动到 /usr/local/redis/目录下的etc文件夹下
复制3份分别:redis6380.conf(主)、redis6381.conf(从)、redis6382.conf(从)
5. redis6380.conf(主库配置)
保护模式修改为否,允许远程连接
protected-mode no#
设定密码
requirepass "123456"
设定主库密码与当前库密码同步,保证从库能够提升为主库
masterauth "123456"
打开AOF持久化支持
appendonly yes
redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes
6. redis6381.conf(从)、redis6382.conf(从)配置文件
除了端口号外,其他配置和主节点配置一样
另外从服务器,添加:replicaof 8.142.158.217 6380 或者 slaveof 8.142.158.217 6380
7. sentinel.conf(哨兵配置)
配置3个哨兵,每个哨兵的配置都是一样的(除端口号)。在Redis安装目录下有一个sentinel.conf文件,copy3份进行修改分别:sentinel26380.conf、sentinel26381.conf、sentinel26382.conf
# 1. 绑定的地址
bind 172.19.131.247
# 2. 保护模式修改为否,允许远程连接
protected-mode no
# 3. 设定sentinel myid 每个都不一样,使用yum安装的时候,直接就生成了
sentinel myid 04d9d3fef5508f60498ac014388571e719188527
# 4. 设定监控地址,为对应的主redis库的内网地址
sentinel monitor mymaster 172.16.48.129 6379 2
# 5. 设定5秒内没有响应,说明服务器挂了,需要将配置放在sentinel monitor master 127.0.0.1 6379 1下面
sentinel down-after-milliseconds mymaster 5000
# 6. 设定15秒内master没有活起来,就重新选举主
sentinel failover-timeout mymaster 15000
# 7. 表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,
显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。
最保定的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs mymaster 2
# 8. 主数据库密码,需要将配置放在sentinel monitor master 127.0.0.1 6379 1下面
sentinel auth-pass mymaster 123456
8. 注意启动的顺序。首先是主机的Redis服务进程,然后启动从机的服务进程,最后启动3个哨兵的服务进程。
启动redis
cd /usr/local/redis/bin 目录下(自己的安装目录下)启动redis
./redis-server /usr/local/redis/etc/redis6380.conf
./redis-server /usr/local/redis/etc/redis6381.conf
./redis-server /usr/local/redis/etc/redis6382.conf
启动sentinel
cd /usr/local/redis/bin 目录下(自己的安装目录下)启动sentinel
./redis-sentinel /usr/local/redis/etc/sentinel26380.conf
./redis-sentinel /usr/local/redis/etc/sentinel26381.conf
./redis-sentinel /usr/local/redis/etc/sentinel26382.conf
9.验证
1. 主从验证 127.0.0.1:6380> info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.43.243,port=6382,state=online,offset=178172,lag=1 slave1:ip=192.168.43.243,port=6381,state=online,offset=178172,lag=1 master_repl_offset:178315 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:178314 127.0.0.1:6381> info replication # Replication role:slave master_host:192.168.43.243 master_port:6380 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:181231 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6382> info replication # Replication role:slave master_host:192.168.43.243 master_port:6380 master_link_status:up master_last_io_seconds_ago:4 master_sync_in_progress:0 slave_repl_offset:407 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 2.读写分离验证 127.0.0.1:6381> set k1 v1 (error) READONLY You can't write against a read only slave. 127.0.0.1:6380> set k1 v1 (error) READONLY You can't write against a read only slave. 127.0.0.1:6379> set k2 v2 OK 3.验证备份 127.0.0.1:6380> get k2 "v2" 127.0.0.1:6381> get k2 "v2"
10.springboot整合redis
1.pom.xml
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
2.application.yml
spring: redis: password: 123456 timeout: 5000 sentinel: master: mymaster nodes: 127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382 # 哨兵的IP:Port列表 jedis: # 或lettuce pool: max-active: 8 max-wait: -1 max-idle: 8 min-idle: 0 server: port: 26379
3.创建RedisController
@Controller public class RedisController { @Autowired private StringRedisTemplate redisTemplate; @RequestMapping(value="/redis/save") public void add() { redisTemplate.opsForValue().set("testjq","test666"); } @RequestMapping(value="/redis/get") public void get() { String testjq = redisTemplate.opsForValue().get("testjq"); System.out.println(">>>>>>>> testjq -> "+testjq); } }
11.如上10中验证正常,停止主节点,再次验证,哨兵会重新选举新的主节点,如果还能保存进去说明ok!!现在6381变成了主节点
后台通过接口保存test22,能正常获取到了。