首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于DOCKER安装Redis Sentinel 集群以及springboot连接Redis哨兵集群demo

基于DOCKER安装Redis Sentinel 集群以及springboot连接Redis哨兵集群demo

作者头像
yingzi_code
发布2019-09-02 15:53:20
9630
发布2019-09-02 15:53:20
举报

基于DOCKER安装Redis Sentinel 集群

  1. 配置规划 首先创建redis网络:docker network create --subnet=192.168.100.0/24 redisnet host ip port remark redis-6001 192.168.100.11 6001:6379 初始主节点 redis-6002 192.168.100.12 6002:6379 初始从节点 redis-6003 192.168.100.13 6003:6379 初始从节点
  2. 安装Redis 第一步,使用docker运行3个redis实例 docker run --name redis-6001 -p 6001:6379 --hostname=redis-6001 --net=redisnet --ip=192.168.100.11 -v /home/redis/6001:/home/redis/6001 -d redis:4.0.11 --requirepass 123456 docker run --name redis-6002 -p 6002:6379 --hostname=redis-6002 --net=redisnet --ip=192.168.100.12 -v /home/redis/6002:/home/redis/6002 -d redis:4.0.11 --requirepass 123456 docker run --name redis-6003 -p 6003:6379 --hostname=redis-6003 --net=redisnet --ip=192.168.100.13 -v /home/redis/6003:/home/redis/6003 -d redis:4.0.11 --requirepass 123456 第二步,配置主节点 进入redis-6001 容器内部 [root@izwz90o0w65t1ogj9cpmiqz 6001]# docker exec -it redis-6001 bash 登陆redis root@8901264ee28f:/data# redis-cli -a 123456 设置主认证密码 127.0.0.1:6379> config set masterauth 123456 127.0.0.1:6379> info replication #Replication role:master connected_slaves:0 master_replid:96a0f831a4042335e5e8b291cbeffa61a21c13b0 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 [root@izwz90o0w65t1ogj9cpmiqz 6001]# docker exec -it redis-6002 bash root@0a468d860576:/data# redis-cli -a 123456 127.0.0.1:6379> slaveof 192.168.100.11 6379 127.0.0.1:6379> config set masterauth 123456 127.0.0.1:6379> info replication Replication role:slave master_host:192.168.100.11 master_port:6379 master_link_status:up master_last_io_seconds_ago:5 master_sync_in_progress:0 slave_repl_offset:14 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:16f389a9af7388e6a687dccb7c4d8372c7daf4ce master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14 第四步,配置从节点2 [root@izwz90o0w65t1ogj9cpmiqz 6001]# docker exec -it redis-6003 bash root@0a468d860576:/data# redis-cli -a 123456 127.0.0.1:6379> slaveof 192.168.100.11 6379 127.0.0.1:6379> config set masterauth 123456 第五步,测试 在redis-6001存入键值对 127.0.0.1:6379> SET test aaa 在redis-6002和redis-6003查询 127.0.0.1:6379> get test “aaa” 在redis-6002或者redis-6003存入 127.0.0.1:6379> set test bbb (error) READONLY You can’t write against a read only slave. 也可以通过配置文件来配置 master的配置文件 # 指定Redis监听端口,默认端口为6379 # 如果指定0端口,表示Redis不监听TCP连接 port 6001 # Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 # 启用守护进程后,Redis会把pid写到一个pidfile中,在/var/run/redis.pid # redis开启守护进程会导致docker容器启动失败 daemonize no # 当master服务设置了密码保护时,slav服务连接master的密码 # 下文的“requirepass”配置项可以指定密码 masterauth 123456 # 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。 # 因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no appendonly no # 指定更新日志条件,共有3个可选值: # no:表示等操作系统进行数据缓存同步到磁盘(快) # always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) # everysec:表示每秒同步一次(折衷,默认值) appendfsync everysec slave的配置文件,其他和master一样,只是多了下面这一个 # 设置当本机为slav服务时,设置master服务的ip地址及端口,在Redis启动时,它会自动从master进行数据同步 slaveof 192.168.100.11 6379 docker的启动命令 docker run --name redis6001 -p 6001:6001 --hostname=redis6001 --net=redisnet --ip=192.168.100.11 -v /home/redis/6001:/home/redis/6001 -d redis:4.0.11 redis-server /home/redis/6001/redis.conf docker run --name redis6002 -p 6002:6002 --hostname=redis6002 --net=redisnet --ip=192.168.100.12 -v /home/redis/6002:/home/redis/6002 -d redis:4.0.11 redis-server /home/redis/6002/redis.conf docker run --name redis6003 -p 6003:6003 --hostname=redis6003 --net=redisnet --ip=192.168.100.13 -v /home/redis/6003:/home/redis/6003 -d redis:4.0.11 redis-server /home/redis/6003/redis.conf
  3. 安装Redis Sentinel 哨兵可以直接在redis里面运行,也可以单独运行,但是为了环境隔离,不让redis影响哨兵集群,单独用docker运行哨兵集群 第一步,配置哨兵的配置文件 # redisgroup:自定义集群名,如果需要监控多个redis集群,只需要配置多次并定义不同的<master-name> <master-redis-ip>:主库ip <master-redis-port>:主库port <quorum>:最小投票数,由于有三台redis-sentinel实例,所以可以设置成2 sentinel monitor redisgroup 192.168.100.11 6379 2 # 注:redis主从库搭建的时候,要么都不配置密码(这样下面这句也不需要配置),不然都需要设置成一样的密码 sentinel auth-pass redisgroup 123456 # 添加后台运行 daemonize yes 第二步,启动哨兵集群 docker run -it --name sentinel-1 --net=redisnet --ip=192.168.100.21 -v /home/redis/6001/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d redis:4.0.11 /bin/bash docker run -it --name sentinel-2 --net=redisnet --ip=192.168.100.22 -v /home/redis/6002/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d redis:4.0.11 /bin/bash docker run -it --name sentinel-3 --net=redisnet --ip=192.168.100.23 -v /home/redis/6003/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d redis:4.0.11 /bin/bash 第三步,分别进去三个容器启动哨兵 redis-sentinel /usr/local/etc/redis/sentinel.conf 第四步,进入哨兵查看状态,哨兵默认端口是26379 127.0.0.1:26379> sentinel master redisgroup 1) "name" 2) "redisgroup" 3) "ip" 4) "192.168.100.11" 5) "port" 6) "6379" 7) "runid" 8) "42d53c0f9f270f5c36d5043cb280e3860c634df9" 9) "flags" 10) "master" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "325" 19) "last-ping-reply" 20) "325" 21) "down-after-milliseconds" 22) "30000" 23) "info-refresh" 24) "3697" 25) "role-reported" 26) "master" 27) "role-reported-time" 28) "134157" 29) "config-epoch" 30) "0" 31) "num-slaves" 32) "2" 33) "num-other-sentinels" 34) "2" 35) "quorum" 36) "2" 37) "failover-timeout" 38) "180000" 39) "parallel-syncs" 40) "1" 127.0.0.1:26379> sentinel slaves redisgroup 1) 1) "name" 2) "192.168.100.13:6379" 3) "ip" 4) "192.168.100.13" 5) "port" 6) "6379" 7) "runid" 8) "437b3c24e6429ed2f27f6eac2acacbbe4df3e049" 9) "flags" 10) "slave" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "685" 19) "last-ping-reply" 20) "685" 21) "down-after-milliseconds" 22) "30000" 23) "info-refresh" 24) "1545" 25) "role-reported" 26) "slave" 27) "role-reported-time" 28) "152062" 29) "master-link-down-time" 30) "0" 31) "master-link-status" 32) "ok" 33) "master-host" 34) "192.168.100.11" 35) "master-port" 36) "6379" 37) "slave-priority" 38) "100" 39) "slave-repl-offset" 40) "50620" 2) 1) "name" 2) "192.168.100.12:6379" 3) "ip" 4) "192.168.100.12" 5) "port" 6) "6379" 7) "runid" 8) "20f0b9d44d91010ecde12d6e5ee98cf92f5b02c9" 9) "flags" 10) "slave" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "685" 19) "last-ping-reply" 20) "685" 21) "down-after-milliseconds" 22) "30000" 23) "info-refresh" 24) "1545" 25) "role-reported" 26) "slave" 27) "role-reported-time" 28) "152060" 29) "master-link-down-time" 30) "0" 31) "master-link-status" 32) "ok" 33) "master-host" 34) "192.168.100.11" 35) "master-port" 36) "6379" 37) "slave-priority" 38) "100" 39) "slave-repl-offset" 40) "50620" 退出查看配置文件,集群信息自动写入 # 添加后台运行 daemonize yes # Generated by CONFIG REWRITE port 26379 dir "/data" sentinel monitor redisgroup 192.168.100.11 6379 2 sentinel auth-pass redisgroup 123456 sentinel config-epoch redisgroup 0 sentinel leader-epoch redisgroup 0 sentinel known-slave redisgroup 192.168.100.12 6379 sentinel known-slave redisgroup 192.168.100.13 6379 sentinel known-sentinel redisgroup 192.168.100.23 26379 b9e1cfe422175372d4b51ed6ca8b026eeeee1a59 sentinel known-sentinel redisgroup 192.168.100.22 26379 9b1f7c2ea39b1337501d2abe187bd742420c5230 sentinel current-epoch 0 第五步,下线master节点,查看信息,默认超时时间是30s,之后查看配置文件 # redisgroup:自定义集群名,如果需要监控多个redis集群,只需要配置多次并定义不同的<master-name> <master-redis-ip>:主库ip <master-redis-port>:主库port <quorum>:最小投票数,由于有三台redis-sentinel实例,所以可以设置成2 sentinel myid 3273c4b5cc35df7052156ab162d673b09bed3d61 # 注:redis主从库搭建的时候,要么都不配置密码(这样下面这句也不需要配置),不然都需要设置成一样的密码 sentinel deny-scripts-reconfig yes # 添加后台运行 daemonize yes # Generated by CONFIG REWRITE port 26379 dir "/data" sentinel monitor redisgroup 192.168.100.12 6379 2 sentinel auth-pass redisgroup 123456 sentinel config-epoch redisgroup 1 sentinel leader-epoch redisgroup 1 sentinel known-slave redisgroup 192.168.100.11 6379 sentinel known-slave redisgroup 192.168.100.13 6379 sentinel known-sentinel redisgroup 192.168.100.23 26379 b9e1cfe422175372d4b51ed6ca8b026eeeee1a59 sentinel known-sentinel redisgroup 192.168.100.22 26379 9b1f7c2ea39b1337501d2abe187bd742420c5230 sentinel current-epoch 1 同样sentinel也可以用配置文件启动 配置文件改为 port 7001 sentinel announce-ip 3xx.1xx.1xx.1xx # redisgroup:自定义集群名,如果需要监控多个redis集群,只需要配置多次并定义不同的<master-name> <master-redis-ip>:主库ip <master-redis-port>:主库port <quorum>:最小投票数,由于有三台redis-sentinel实例,所以可以设置成2 sentinel monitor redisgroup 192.168.100.11 6379 2 # 注:redis主从库搭建的时候,要么都不配置密码(这样下面这句也不需要配置),不然都需要设置成一样的密码 sentinel auth-pass redisgroup 123456 sentinel down-after-milliseconds mymaster 1000 sentinel failover-timeout mymaster 60000 # 添加后台运行 daemonize no docker 容器的启动命令改为 docker run -it --name sentinel-1 -p 7001:7001 --net=redisnet --ip=192.168.100.21 -v /home/redis/6001/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d redis:4.0.11 redis-sentinel /usr/local/etc/redis/sentinel.conf docker run -it --name sentinel-2 -p 7002:7002 --net=redisnet --ip=192.168.100.22 -v /home/redis/6002/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d redis:4.0.11 redis-sentinel /usr/local/etc/redis/sentinel.conf docker run -it --name sentinel-3 -p 7003:7003 --net=redisnet --ip=192.168.100.23 -v /home/redis/6003/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d redis:4.0.11 redis-sentinel /usr/local/etc/redis/sentinel.conf
  4. 基于springboot的配置和使用 在spring下面使用很简单,只需要将配置文件中redis配置哨兵集群的地址即可 spring: application: name: redis-demo redis: lettuce: pool: max-active: 8 max-wait: -1 max-idle: 8 min-idle: 0 timeout: 10000 database: 0 sentinel: master: redisgroup nodes: 192.168.100.21:7001,192.168.100.21:7002,192.168.100.21:7003 password: 123456 server: port: 10001
  5. 这里有一个小小的问题没有解决 因为我是在服务器使用docker部署的,但是本地远程的时候,sentinel集群返回的地址是docker内部配置的地址,如何指定返回对外的ip,sentinel announce-ip ip 这个配置是用来做什么的。?我一开始以为这个ip是用来指定返回的redis的ip,结果并不是

这个问题已解决

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年10月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档