成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

三臺服務器使用Docker搭建Redis一主二從三哨兵,概念-搭建-整合Springboot

數據庫 Redis
第一個就是我們本次的要搭建的,就是高可用的哨兵,主Redis掛掉,哨兵會進行投票進行故障轉移!第二個就是分片集群,哨兵的一個缺點就是只能存在一個Master節點,寫的效率太低。分片集群就是解決哨兵的問題,可以水平擴展,提高Redis的性能!

一、前言

redis在我們企業級開發中是很常見的,但是單個redis不能保證我們的穩定使用,所以我們要建立一個集群。
redis有兩種高可用的方案:

  • High availability with Redis Sentinel(哨兵)
  • Scaling with Redis Cluster(分片集群)

第一個就是我們本次的要搭建的,就是高可用的哨兵,主redis掛掉,哨兵會進行投票進行??故障轉移??!
第二個就是分片集群,哨兵的一個缺點就是只能存在一個master節點,寫的效率太低。分片集群就是解決哨兵的問題,可以水平擴展,提高redis的性能!

哨兵最低配是三哨兵,以奇數遞增。
分片集群最低配是三主三從。

二、準備

首先我們要準備:
三臺服務器(沒有的條件的搭三個虛擬機),巧了小編就是虛擬機哈!

三臺機器的ip和名稱在表格里整理一下!

ip

redis節點名稱

sentinel節點名稱

192.168.239.131

redis-master

redis-sentinel-1

192.168.239.130

redis-slave-1

redis-sentinel-2

192.168.239.128

redis-slave-2

redis-sentinel-3

三、Sentinel概念

Redis Sentinel 在不使用Redis Cluster時為 Redis 提供高可用性。

Sentinel功能的完整列表:

  • 監控:Sentinel 不斷檢查您的主實例和副本實例是否按預期工作。
  • 通知:Sentinel 可以通過 API 通知系統管理員或其他計算機程序,其中一個受監控的 Redis 實例出現問題。
  • 自動故障轉移:如果 master 沒有按預期工作,Sentinel 可以啟動一個故障轉移過程,其中一個副本被提升為 master,其他額外的副本被重新配置為使用新的 master,并且使用 Redis 服務器的應用程序被告知要使用的新地址連接時。
  • 自動更新配置:Sentinel 充當客戶端服務發現的權威來源:客戶端連接到 Sentinels 以詢問負責給定服務的當前 Redis master 的地址。如果發生故障轉移,Sentinels 將報告新地址。

官方哨兵搭建條件:

  • 您至少需要三個 Sentinel 實例才能進行可靠的部署。
  • 三個 Sentinel 實例應該放置在被認為以獨立方式發生故障的計算機或虛擬機中。因此,例如在不同可用區上執行的不同物理服務器或虛擬機。

詳細介紹和使用:請見官網 --->官網詳細文檔:https://redis.io/docs/management/sentinel/

四、一主二從搭建

話不多說,咱們直接開始搭建哈!

1、創建掛載目錄

三臺機器上新建目錄:
首先我們開啟三個xshell窗口,然后同時操作三個窗口創建。

圖片

然后再左下角選擇發送到全部窗口!

cd /
mkdir mydata
cd /mydata
mkdir redis
cd redis
mkdir data
mkdir conf
cd conf

2、在`192.168.239.131`機器上編輯文件

vim redis.conf

輸入以下內容:

# 任何都可以連接redis
bind 0.0.0.0
# 配置master密碼
requirepass 123456
# 宕機后成為從要連接master的密碼
masterauth 123456
# 開啟持久化
appendonly yes

圖片

3、在`192.168.239.130`機器上編輯文件

vim redis.conf

輸入以下內容:

# 配置master的ip和端口號
replicaof 192.168.239.131 6379
# 任何都可以連接redis
bind 0.0.0.0
# 成為master后的密碼
requirepass 123456
# 連接master密碼
masterauth 123456
# 開啟持久化
appendonly yes

圖片

4、在`192.168.239.128`機器上編輯文件

vim redis.conf

輸入以下內容:

# 配置master的ip和端口號
replicaof 192.168.239.131 6379
# 任何都可以連接redis
bind 0.0.0.0
# 成為master后的密碼
requirepass 123456
# 連接master密碼
masterauth 123456
# 開啟持久化
appendonly yes

5、`192.168.239.131`啟動redis

docker run -p 6379:6379 --name redis-master \
-v /mydata/redis/data:/usr/local/etc/redis/data \
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis redis-server /usr/local/etc/redis/redis.conf

查看啟動日志:

docker logs -f redis-master

圖片

6、`192.168.239.130`啟動redis

docker run -p 6379:6379 --name redis-slave-1 \
-v /mydata/redis/data:/usr/local/etc/redis/data \
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis redis-server /usr/local/etc/redis/redis.conf

可以看到已經連接到master節點了!

圖片

7、`192.168.239.128`啟動redis

docker run -p 6379:6379 --name redis-slave-2 \
-v /mydata/redis/data:/usr/local/etc/redis/data \
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis redis-server /usr/local/etc/redis/redis.conf

圖片

8、進入`192.168.239.130`容器查看

我們查看master日志,可以看到兩個從節點已經加入進來了!

圖片

我們進入容器進行在次查看:

docker exec -it redis-master /bin/bash

連接redis:

redis-cli

登錄redis:

auth 123456

圖片

查看從節點:

info

也是可以看到有兩個從節點!

圖片

五、搭建三哨兵sentinel

1、創建掛載目錄

還是三個虛擬機一起創建。

mkdir sentinel
cd sentinel
vim sentinel.conf

輸入下面內容:

port 26379
sentinel monitor redis-master 192.168.239.131 6379 2
sentinel auth-pass redis-master 123456
sentinel down-after-milliseconds redis-master 6000
sentinel parallel-syncs redis-master 1
sentinel failover-timeout redis-master 6000

第二行:Redis 監控一個名為redis-master的redis集群,我們可以隨意寫;后面就是ip,我們宿主機的ip即可,端口為主redis的端口;2為哨兵投票的票數,當主redis宕機,三個哨兵必須兩個哨兵都投票的redis才會變為主?。?br>第三行:配置master的密碼
第四行:Sentinel判斷實例進入主觀下線所需的時間,毫秒單位。
第五行:限制在一次故障轉移之后,每次向新的主節點同時發起復制操作節點個數,越大效率越慢。
第六行:在指定的時間內未能完成failover故障轉移,則任務故障轉移失敗。

圖片

2、運行`192.168.239.131`哨兵

docker run -p 26379:26379 --name redis-sentinel-1 \
-v /mydata/redis/sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-d redis redis-sentinel /usr/local/etc/redis/sentinel.conf

3、運行`192.168.239.130`哨兵

docker run -p 26379:26379 --name redis-sentinel-2 \
-v /mydata/redis/sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-d redis redis-sentinel /usr/local/etc/redis/sentinel.conf

4、運行`192.168.239.128`哨兵

docker run -p 26379:26379 --name redis-sentinel-3 \
-v /mydata/redis/sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-d redis redis-sentinel /usr/local/etc/redis/sentinel.conf

5、待解決問題

這里創建三個哨兵,查看卻是有四個,不知道什么問題,換了虛擬機還是不行!有大佬懂的可以分享一下哈!!

圖片

六、測試主從和故障轉移

1、測試主從復制

master節點創建一個鍵值對:

set a b

圖片

從查看key是否存在:

get a

圖片

主從沒有問題哈!

2、測試故障轉移

我們把master停掉,查看一個哨兵的日志:

docker stop redis-master
docker logs -f redis-sentinel-1

我們看到192.168.239.130成為master!

圖片

重新啟動原來的master:

docker restart redis-master 

圖片

故障轉移成功!!

七、整合springboot

1、導入依賴

小編的springboot版本為:2.7.4。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、yml配置

password密碼和sentinel同級,不然找不到密碼,驗證失敗。

server:
port: 8087

spring:
redis:
# 密碼和sentinel同級,不然找不到密碼,驗證失敗
password: 123456
sentinel:
# sentinel.conf里的集群名稱
master: my-master
# 我們只需要連哨兵即可,哨兵內部會幫我們找到redis
nodes:
- 192.168.239.131:26379
- 192.168.239.130:26379
- 192.168.239.128:26379

3、json序列化配置

/**
* @author wangzhenjun
* @date 2022/11/24 10:37
*/
@Configuration
public class RedisConfig {

@Bean
@SuppressWarnings(value = { "unchecked", "rawtypes" })
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
{
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

// 使用StringRedisSerializer來序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(serializer);

// Hash的key也采用StringRedisSerializer的序列化方式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);

template.afterPropertiesSet();
return template;
}
}

4、新建controller測試

/**
* @author wangzhenjun
* @date 2022/11/24 10:37
*/
@RestController
public class TestController {

@Autowired
private RedisTemplate redisTemplate;

@GetMapping("/redis")
public void saveRedis(){
redisTemplate.opsForValue().set("test","看到我就成功了");
}
}

5、測試

http://localhost:8087/test/redis

圖片

6、查看redis

圖片

八、總結

經過一天的搭建,終于完成了,雖然不是完美的,但是大體功能是沒有問題的!但是不影響故障轉移和主從復制!

唯一的遺憾:三個哨兵,查看就是四個!從第三個哨兵加入后變為4個!

責任編輯:姜華 來源: 小王博客基地
相關推薦

2023-04-11 08:30:52

2016-10-11 12:45:50

PythonWeb服務器

2025-02-20 08:24:41

2021-03-31 05:57:40

集群搭建哨兵集群Redis

2010-09-14 13:47:44

tftp服務器搭建

2009-10-15 15:33:53

服務器集群

2014-09-18 10:15:54

2023-09-05 09:32:07

服務器Redis

2010-09-10 18:31:42

搭建tftp服務器

2016-07-12 10:40:35

服務器

2016-08-22 20:37:10

PythonWeb服務器

2017-01-09 08:59:17

Ubuntu郵件服務器

2023-09-05 09:41:22

服務器Redis

2016-08-16 15:21:19

服務器

2021-09-07 17:47:06

服務器開發數據

2023-04-07 08:28:14

2016-08-10 16:28:00

WebURLHTTP

2022-02-11 08:41:19

WindowsRedis集群

2023-04-09 19:54:52

2020-04-14 21:12:42

Redis集群Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费同性女女aaa免费网站 | www.久久.com | 谁有毛片 | 三级在线观看 | 国产资源在线播放 | 亚洲欧美国产一区二区三区 | 成人午夜激情 | 台湾佬成人网 | 一区二区成人 | 一区在线视频 | 日韩精品一区二区三区视频播放 | 欧美日日 | 久草精品视频 | 伊人久久大香线 | 国产精品亚洲精品 | 国产亚洲精品美女久久久久久久久久 | 亚洲精品性视频 | 国产一区二区久久久 | 国户精品久久久久久久久久久不卡 | 欧美久久久久久久 | 一级毛片免费 | 色综合99 | 婷婷久久网 | 日日夜精品视频 | 日本精品视频一区二区 | 久久精品在线免费视频 | 久久久久亚洲 | 在线日韩视频 | 国产三级精品三级在线观看四季网 | 欧美日韩亚洲一区 | 亚洲高清在线观看 | 亚洲国产成人精品女人久久久 | 免费在线成人网 | 免费观看色 | 97天天干 | 欧美成人aaa级毛片在线视频 | 久久99久久 | 一区二区三区av | 成人在线免费观看视频 | 观看av | 黄篇网址|