Linux-Redis哨兵集群模式搭建详解(1主2从+3哨兵)

最近公司项目中单机的redis总是出现各种宕机的问题,导致系统部分瘫痪,为了解决这个问题,打算搭建一套主从+哨兵模式的Redis形式的集群,废话不多说,上干货!!!

目录:

一:Redis主从模式搭建过程

二:Redis主从模式搭建过程

三:Springboot整合集群相关配置



一:Redis主从模式搭建过程

1.下载最新且稳定的安装包


2.文件上传到对应服务器文件夹中

/usr/local/soft

3.解压安装

tar -zxvf redis-stable.tar.gz

4.进入解压目录并运行编译

cd redis-stable

make && make install

5.进入Redis默认安装路径

cd /usr/local/bin

6.新建Redis主从需要的文件以及文件夹

cd /usr/local

mkdir redis-7.0

cd redis-7.0

mkdir bin

mkdir conf

bin下面放启动文件 conf下面放配置文件

7.复制相关文件到以上两个文件夹中

由于编译安装后的 src 下文件非常多,我们可以将几个常用的命令和 conf 配置文件复制出来进行统一管理:

cd /usr/local/soft/redis-stable/src

cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis-7.0/bin

cd /usr/local/soft/redis-stable

cp redis.conf /usr/local/redis-7.0/conf

cp sentinel.conf /usr/local/redis-7.0/conf

8.修改配置文件

cd /usr/local/redis-7.0/conf

vi redis.conf

# 保护模式关闭

protected-mode no

# 端口号

port 6479

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。

daemonize yes

# 指定redis进程的PID文件存放位置

pidfile "/var/run/redis_6479.pid"

# log日志输出位置

logfile "./redis.log"

# 设置数据库数量

databases 16

# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

save 900 1

save 300 10

save 60 10000

# 指定本地数据库文件名

dbfilename "dump.rdb"

# 指定本地数据库存放目录(默认当前redis安装目录)

dir "/usr/local/redis-7.0/bin"

# 当master设置了密码保护时,slave服务连接master的密码

masterauth "123456"

# 是否只读

replica-read-only no

# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭

requirepass "123456"

##########其他配置默认即可,如有特殊需要自行查找修#############

9.配置从节点配置文件

cp redis.conf redis01.conf

cp redis.conf redis02.conf

vi redis01.conf

vi redis02.conf

redis01(6480) 和 redis02(6481)端口号不同,其它都一样即可

# 保护模式关闭

protected-mode no

# 端口号

port 6480

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。

daemonize yes

# 指定redis进程的PID文件存放位置

pidfile "/var/run/redis_6480.pid"

# log日志输出位置

logfile "./redis.log"

# 设置数据库数量

databases 16

# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

save 900 1

save 300 10

save 60 10000

# 指定本地数据库文件名

dbfilename "dump01.rdb"

# 指定本地数据库存放目录(默认当前redis安装目录)

dir "/usr/local/redis-7.0/bin"

# 当master设置了密码保护时,slave服务连接master的密码

masterauth "123456"

# 是否只读

replica-read-only yes

# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭

requirepass "123456"

# 设置主机的 ip+ 端口,来指明主机的redis

replicaof 192.x.x.x 6479

##########其他配置默认即可,如有特殊需要自行查找修改########



二:哨兵搭建过程

1.修改哨兵配置文件

cd /usr/local/conf

vi sentinel.conf

# 关闭保护模式可以外部访问

protected-mode no

# 端口号

port 26479

# 支持后台启动

daemonize yes

# 守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)

pidfile "/var/run/redis-sentinel_26479.pid"

# 日志文件存放地址

logfile "/usr/local/redis-7.0/bin/sentinel-work-26479/sentinel-26479.log"

# sentinel工作目录(默认/tmp)

dir "/usr/local/redis-7.0/bin/sentinel-work-26479"

# 指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换

sentinel monitor mymaster 192.*.*.* 6479 2

# 当在Redis实例中开启了requirepass,这里就需要提供密码

sentinel auth-pass mymaster 123456

# 故障转移的超时时间,这里设置为三分钟

sentinel failover-timeout mymaster 180000

# 主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1

sentinel parallel-syncs mymaster 1

# 这里设置了主机多少秒无响应,则认为挂了

sentinel down-after-milliseconds mymaster 3000

2.剩余两个哨兵修改端口号以及日志文件名称,工作目录即可

cd /usr/local/redis-7.0/conf

cp sentinel.conf sentinel01.conf 

----端口26480(配置文件的26479全部替换为26480即可)

cp sentinel.conf sentinel02.conf

----端口26481(配置文件的26479全部替换为26481即可)




三:开放端口

1.开启防火墙

systemctl start firewalld

2.开放端口

firewall-cmd --zone=public --add-port=6479/tcp --permanent

firewall-cmd --zone=public --add-port=6480/tcp --permanent

firewall-cmd --zone=public --add-port=6481/tcp --permanent、

rewall-cmd --zone=public --add-port=26479/tcp --permanent

firewall-cmd --zone=public --add-port=26480/tcp --permanent

firewall-cmd --zone=public --add-port=26481/tcp --permanent、

3.重启防火墙

firewall-cmd --reload



四:启动redis服务以及哨兵

1.启动哨兵

cd /usr/local/redis-7.0/bin

./redis-sentinel /usr/local/redis-7.0/conf/sentinel.conf

./redis-sentinel /usr/local/redis-7.0/conf/sentinel01.conf

./redis-sentinel /usr/local/redis-7.0/conf/sentinel02.conf

2.查看哨兵信息

cd /usr/local/redis-7.0/bin

./redis-cli -p 26479

info sentinel

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_tilt_since_seconds:-1

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

sentinel_simulate_failure_flags:0

master0:name=mymaster,status=ok,address=192.*.*.*:6479,slaves=2,sentinels=3

从上面可以看到主节点为6479,这个时候就要优先启动节点为6479的redis服务,保证主节点优先启动,遵从哨兵的选举

3.启动redis主节点服务

cd /usr/local/redis-7.0/bin

./redis-server /usr/local/redis-7.0/conf/redis.conf

4.启动从节点

cd /usr/local/redis-7.0/bin

./redis-server /usr/local/redis-7.0/conf/redis01.conf

./redis-server /usr/local/redis-7.0/conf/redis02.conf

5.查看各个节点信息

cd /usr/local/redis-7.0/bin

./redis-cli -p 6479

127.0.0.1:6479> auth "123456"

OK

127.0.0.1:6479> info replication

# Replication

role:master

connected_slaves:2

slave0:ip=192.*.*.*,port=6480,state=online,offset=85926153,lag=1

slave1:ip=192.*.*.*,port=6481,state=online,offset=85926292,lag=0

master_failover_state:no-failover

master_replid:f67c98e3e0250987d0843002f016b45595939524

master_replid2:d1a1ee80c29746668605b2df22e8cddf1e7f007f

master_repl_offset:85926292

second_repl_offset:32549101

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:84875501

repl_backlog_histlen:1050792

以上信息可以看出redis服务已正常启动,之后可以自行测试,kill掉端口为6479的redis服务,哨兵将会在其它两个redis节点中重新选举一个为新的主节点。



五:Spring配置文件-yml

spring:

redis:

    #----------redis 一主二从哨兵模式 start--------------#

    sentinel:

      master: mymaster

      #哨兵ip地址和端口

      nodes: 192.*.*.*:26479,192.*.*.*:26480,192.*.*.*:26481

      #哨兵密码

      password: 123456

    #redis认证密码

    password: 123456

    #连接超时时间ms

    timeout: 6000

    #数据库分片

    database: 1

    lettuce:

      pool:

        max-active: 10 # 连接池最大连接数(使用负值表示没有限制),如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)

        max-idle: 8  # 连接池中的最大空闲连接 ,默认值也是8

        max-wait: 100 # # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException

        min-idle: 2    # 连接池中的最小空闲连接 ,默认值也是0

      shutdown-timeout: 100ms

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容