Подробное руководство по изучению режима Redis Sentinel ✔ высокая доступность ✔ создание кластера ✔

Redis задняя часть база данных

Это 12-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

1. Загрузка и установка Redis

1. Адрес загрузки

День 3 files.Mac ports.org/Redis/Redis…

2. Разархивируйте установочный пакет Redis

#解压redis
[root@open-falcon mnt]# tar -zxvf redis-5.0.7.tar.gz

#解压得到包如下
[root@open-falcon mnt]# cd redis-5.0.7

#包内文件如下
[root@open-falcon redis-5.0.7]# ls
00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-moduleapi  sentinel.conf  tests
BUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  runtest-sentinel   src            utils
[root@open-falcon redis-5.0.7]# 

3. Компиляция и установка Redis

#进入解压包
[root@open-falcon redis-5.0.7]# cd redis-5.0.7

#编译&安装
[root@open-falcon redis-5.0.7]# make && make install

3. Построение и конфигурация кластера

1. Общая структура

В кластере высокой доступности Redis обычно выбираются три сервера: таким образом, после зависания одного главного узла два других могут выбрать один из них в качестве главного узла главного узла.

① Конфигурация подчиненного узла синхронизирует данные с главного узла.

② Механизм отработки отказа Sentinel: каждый узел redis создает контрольный узел, когда главный узел redis зависает: три дозорных узла выбирают подчиненный узел, чтобы он стал главным узлом.

#部署在同一台服务器上,使用3个端口对外提供服务

主节点master    
1台    
Redis服务    192.168.154.145 6379
sentinel哨兵 192.168.154.145 26379

从节点slave     
2台    
Redis服务    192.168.154.145 27001
sentinel哨兵 192.168.154.145 27002

2. Псевдокластер

Так как на сайте нет трех серверов, используем 3 порта на одном сервере, чтобы настроить для него «псевдокластер»:

Что такое «псевдокластер»?

Архитектура «псевдокластера» точно такая же, как у настоящего кластера, и доступны как отказоустойчивость, так и высокая доступность.

Он просто построен на сервере и использует 3 порта для предоставления внешних услуг.

В производственной среде кластерной среде по-прежнему необходимо использовать 3 разных сервера для обеспечения высокой доступности. Это просто для экономии ресурсов и облегчения строительства.

3. Конфигурация основного узла redis service 6379

Полная конфигурация и шаги следующие:

1、创建主节点工作目录 redis-6379
mkdir -p /usr/local/redis-6379

2、将配置文件拷贝到工作目录下
cp redis-5.0.7/redis.conf /usr/local/redis-6379

3、主节点 6379 端口配置
#打开主节点redis.conf
vim /usr/local/redis-6379/redis.conf

4、修改如下内容:左侧为修改的行数,方便大家查找
69 bind 0.0.0.0
92 port 6379
136 daemonize yes
158 pidfile /var/run/redis_6379.pid
171 logfile "/usr/local/redis-6379/redis-6379.log"
#默认配置不用修改
218 save 900 1
219 save 300 10
220 save 60 10000
#全量备份文件名
253 dbfilename redis-6379.rdb
#指定路径名
263 dir /usr/local/redis-6379
#设置redis密码
509  requirepass 123456
#开启增量备份
701 appendonly yes
705 appendfilename "appendonly-6379.aof"

4. Конфигурация службы подчиненных узлов Redis 7001/7002.

Обратите внимание, что разница между конфигурацией ведомого узла и ведущего узла в основном в двух местах.

① Настройте главный узел: реплика 192.168.154.145 6379.

②Настройте пароль для входа в главный узел masterauth 123456.

Полная конфигурация и шаги следующие:

1、创建从节点工作目录 redis-7001 和 redis-7002
mkdir -p /usr/local/redis-7001
mkdir -p /usr/local/redis-7002

2、将配置文件拷贝到工作目录下
cp redis-5.0.7/redis.conf /usr/local/redis-7001
cp redis-5.0.7/redis.conf /usr/local/redis-7002

3、从节点 7001 / 7002 端口配置

#分别打开从节点redis.conf

vim /usr/local/redis-7001/redis.conf
vim /usr/local/redis-7002/redis.conf

4、7001 从节点配置,左侧为修改的行数,方便大家查找

69 bind 0.0.0.0
92 port 7001
136 daemonize yes
158 pidfile /var/run/redis_7001.pid
171 logfile "/usr/local/redis-7001/redis-7001.log"
#默认配置不用修改
218 save 900 1
219 save 300 10
220 save 60 10000
#全量备份文件名
253 dbfilename redis-7001.rdb
#指定路径名
263 dir /usr/local/redis-7001
#设置主节点 地址端口+主节点连接密码
286 replicaof 192.168.154.145 6379
293 masterauth 123456
#设置redis密码
509  requirepass 123456
#开启增量备份
701 appendonly yes
705 appendfilename "appendonly-7001.aof"

5、7002 从节点配置,左侧为修改的行数,方便大家查找

69 bind 0.0.0.0
92 port 7002 
136 daemonize yes
158 pidfile /var/run/redis_7002.pid
171 logfile "/usr/local/redis-7002/redis-7002.log"
#默认配置不用修改
218 save 900 1
219 save 300 10
220 save 60 10000
#全量备份文件名
253 dbfilename redis-7002.rdb
#指定路径名
263 dir /usr/local/redis-7002
#设置主节点 地址端口+主节点连接密码
286 replicaof 192.168.154.145 6379
293 masterauth 123456
#设置redis密码
509  requirepass 123456
#开启增量备份
701 appendonly yes
705 appendfilename "appendonly-7002.aof"

4. Конфигурация отказоустойчивости/высокой доступности (Sentinel Mode Sentinel)

1. Общая структура

主节点哨兵:

6379端口redis主服务,哨兵默认端口为26379

从节点哨兵:

7001端口redis服务,哨兵使用27001端口

7002端口redis服务,哨兵使用27002端口

2. Мастер главного узла настраивает дозорный дозорный

Для облегчения управления мы создаем рабочий каталог Sentinel в соответствующем рабочем каталоге Redis.

Уведомление:

① Настройте адрес и имя мастера (mymaster — это имя кластера): дозорный монитор mymaster 192.168.154.145 6379 2

②Настройте пароль для подключения к главному узлу Redis sentinel auth-pass mymaster 123456

③Каталог журнала должен быть создан, потому что есть проблема, легко найти причину. лог-файл "/usr/local/redis-6379/sentinel/redis-sentinel.log"

1、创建主节点 sentinel工作目录
mkdir -p /usr/local/redis-6379/sentinel/

2、将配置文件拷贝到sentinel工作目录下
cp redis-5.0.7/sentinel.conf /usr/local/redis-6379/sentinel/

3、修改配置文件 左侧为修改的行数,方便大家查找
vim /usr/local/redis-6379/sentinel/sentinel.conf 

#配置哨兵端口
21 port 26379
#配置进程id存储地址
32 pidfile "/usr/local/redis-6379/redis-sentinel-26379.pid"
#配置log路径    
37 logfile "/usr/local/redis-6379/sentinel/redis-sentinel.log"
#配置哨兵工作目录
64 dir "/usr/local/redis-6379/sentinel"
#配置监控的redis主节点
112 sentinel monitor mymaster 192.168.154.145 6379 2
#配置主节点登录密码
120 sentinel auth-pass mymaster 123456

3. Настройте часовой сервер с ведомого узла.

① Конфигурация подчиненного узла точно такая же, как у главного узла, за исключением другого рабочего каталога и порта.

1、创建从节点 sentinel工作目录
mkdir -p /usr/local/redis-7001/sentinel/
mkdir -p /usr/local/redis-7002/sentinel/

2、将配置文件拷贝到sentinel工作目录下
cp redis-5.0.7/sentinel.conf /usr/local/redis-7001/sentinel/
cp redis-5.0.7/sentinel.conf /usr/local/redis-7002/sentinel/

3、分别修改slave节点 哨兵配置文件
vim /usr/local/redis-7001/sentinel/sentinel.conf 
vim /usr/local/redis-7002/sentinel/sentinel.conf 

4、27001节点哨兵的配置 左侧为修改的行数,方便大家查找

#配置哨兵端口
21 port 27001
#配置进程id存储地址
32 pidfile "/usr/local/redis-7001/redis-sentinel-27001.pid"
#配置log路径    
37 logfile "/usr/local/redis-7001/sentinel/redis-sentinel.log"
#配置哨兵工作目录
64 dir "/usr/local/redis-7001/sentinel"
#配置监控的redis主节点
112 sentinel monitor mymaster 192.168.154.145 6379 2
#配置主节点登录密码
120 sentinel auth-pass mymaster 123456

5、27002哨兵节点的配置 左侧为修改的行数,方便大家查找

#配置哨兵端口
21 port 27002
#配置进程id存储地址
32 pidfile "/usr/local/redis-7002/redis-sentinel-27002.pid"
#配置log路径    
37 logfile "/usr/local/redis-7002/sentinel/redis-sentinel.log"
#配置哨兵工作目录
64 dir "/usr/local/redis-7002/sentinel"
#配置监控的redis主节点
112 sentinel monitor mymaster 192.168.154.145 6379 2
#配置主节点登录密码
120 sentinel auth-pass mymaster 123456

На этом все настройки завершены.

5. Запустите кластер

1. Запустите все сервисные узлы Redis

#分别启动三个节点的redis服务
[root@mail ~]# redis-server /usr/local/redis-6379/redis.conf
[root@mail ~]# redis-server /usr/local/redis-7001/redis.conf 
[root@mail ~]# redis-server /usr/local/redis-7002/redis.conf 

2. Запустите все дозорные службы

#启动时,根据配置文件启动
[root@mail ~]# redis-sentinel /usr/local/redis-6379/sentinel/sentinel.conf 
[root@mail ~]# redis-sentinel /usr/local/redis-7001/sentinel/sentinel.conf 
[root@mail ~]# redis-sentinel /usr/local/redis-7002/sentinel/sentinel.conf 

3. Посмотреть процесс обслуживания

#如下图:三个redis服务+三个哨兵监控 全部启动成功
[root@mail ~]# ps aux|grep redis   
root      50845  0.0  0.1 158068  3904 ?        Ssl  07:50   0:42 redis-server 0.0.0.0:6379                               
root      50166  0.0  0.1 161652  3768 ?        Ssl  07:39   0:43 redis-server 0.0.0.0:7001                    
root      50173  0.1  0.2 161652  4884 ?        Ssl  07:40   0:53 redis-server 0.0.0.0:7002                    
root      50370  0.1  0.1 152436  3692 ?        Ssl  07:43   1:14 redis-sentinel *:26379 [sentinel]                          
root      50375  0.1  0.0 152436  1748 ?        Ssl  07:43   1:15 redis-sentinel *:27001 [sentinel]                          
root      50431  0.1  0.0 152436  1712 ?        Ssl  07:43   1:14 redis-sentinel *:27002 [sentinel]                          

6. Тест: синхронизация данных + разделение чтения-записи + отказоустойчивость

1. Проверка синхронизации данных

Цель теста: главный главный узел записывает/изменяет/удаляет данные, а подчиненный узел автоматически синхронизирует записи операций с данными главного.

① redis-cli связывает главный главный узел и записывает два данных о возрасте и имени

#链接redis,设置两个值,如下
[root@mail ~]# redis-cli -a 123456 -p 6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set age 25
OK
127.0.0.1:6379> set name lex
OK

② Войдите в ведомое устройство для просмотра с узла

#登录slave从节点
[root@mail ~]# redis-cli -a 123456 -p 7001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

#查看所有数据
127.0.0.1:7001> keys *
1) "age"
2) "name"

#查看age数据
127.0.0.1:7001> get age
"25"

#尝试修改数据
127.0.0.1:7001> set age 30
(error) READONLY You can't write against a read only replica.
#修改失败,slave从节点 数据只读

2. Просмотр главного/подчиненного узла

① Link Sentinel: просмотр распределения главных и подчиненных узлов.

② Команда ссылки: redis-cli -a 123456 -p 26379, также используйте redis-cli, просто свяжите порт дозорного

Просмотр адреса главного главного узла: служба порта 6379

#链接哨兵sentinel 同样使用redis-cli
[root@mail ~]# redis-cli -a 123456 -p 26379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
#查看mymaster(我们配置的集群名)  集群的master 是哪个
127.0.0.1:26379> sentinel master mymaster
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "192.168.154.145"
 5) "port"
 6) "6379"
 7) "runid"
 8) "105cc1c986fcda65ad4ddba69012e8e6e0073e1f"
 9) "flags"
10) "master"
...

③ Проверьте адрес подчиненного узла: два подчиненных узла имеют номера 7001 и 7002 соответственно, вы можете видеть, что главный узел, на который указывают два подчиненных узла, имеет номер 6379.

#命令如下:
127.0.0.1:26379> sentinel slaves mymaster
1)  1) "name"
    2) "192.168.154.145:7001"
    3) "ip"
    4) "192.168.154.145"
    5) "port"
    6) "7001"
    9) "flags"
   10) "slave"
   31) "master-link-status"
   32) "ok"
   33) "master-host"
   34) "192.168.154.145"
   35) "master-port"
   36) "6379"
...

2)  1) "name"
    2) "192.168.154.145:7002"
    3) "ip"
    4) "192.168.154.145"
    5) "port"
    6) "7002"
    9) "flags"
   10) "slave"
   31) "master-link-status"
   32) "ok"
   33) "master-host"
   34) "192.168.154.145"
   35) "master-port"
   36) "6379"
...

3. Проверка отработки (высокая доступность)

Цели тестирования: после зависания главного главного узла наш кластер Sentinel может переизбрать его в качестве нового главного узла в подчиненном узле с помощью избирательного механизма.

① Выключите главный узел 6379.

#链接主节点,shutdown关闭主节点
[root@mail ~]# redis-cli -a 123456 -p 6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> shutdown
not connected> 

② Просмотр главного узла в это время

Ссылка на дозорный и просмотр мастер-узла: в это время, после избрания трех дозорных, мастер-узел становится 7002

#链接到哨兵,查看主节点:主节点变为 7002
[root@mail ~]# redis-cli -a 123456 -p 26379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:26379> sentinel master mymaster
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "192.168.154.145"
 5) "port"
 6) "7002"
 7) "runid"
 8) "105cc1c986fcda65ad4ddba69012e8e6e0073e1f"
 9) "flags"
10) "master"
...
127.0.0.1:26379> 

③ В этот момент снова проверьте состояние ведомого узла.

Выяснено, что подчиненными узлами становятся: 6379 и 7001, а статус 6379 "s_down,slave,disconnected", потому что мы закрыли 6379

[root@mail ~]# redis-cli -a 123456 -p 26379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:26379> sentinel slaves mymaster
1)  1) "name"
    2) "192.168.154.145:6379"
    3) "ip"
    4) "192.168.154.145"
    5) "port"
    6) "6379"
    7) "runid"
    8) "e740b7285067b2dbb8c2640745196099460f4bb3"
    9) "flags"
   10) "s_down,slave,disconnected"

...
2)  1) "name"
    2) "192.168.154.145:7001"
    3) "ip"
    4) "192.168.154.145"
    5) "port"
    6) "7001"
    7) "runid"
    8) "19a7647509ba020adfd06b1eb40f1f35d06c549d"
    9) "flags"
   10) "slave"
...
127.0.0.1:26379> 

④ Таким образом, аварийное переключение прошло успешно.

4. Проверка разделения чтения и записи

① После включения кластера Redis разрешение ведомого узла по умолчанию доступно только для чтения; конечно, мы также можем включить разрешение на запись ведомого узла.

Итак, запись данных: ссылка на главный узел, чтение данных: ссылка на подчиненный узел.

Как показано ниже: подчиненный узел, без разрешения на запись

#登录slave从节点
[root@mail ~]# redis-cli -a 123456 -p 7001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

#查看所有数据
127.0.0.1:7001> keys *
1) "age"
2) "name"

#查看age数据
127.0.0.1:7001> get age
"25"

#尝试修改数据
127.0.0.1:7001> set age 30
(error) READONLY You can't write against a read only replica.
#修改失败,slave从节点 数据只读