предисловие
Redis
это высокая производительностьkey-value
База данных, теперь все больше и больше предприятий и приложений используютRedis
как кеш-сервер. ВладелецJAVA
Back-end программисты также наполовину инженеры по эксплуатации и обслуживанию. существуетLinux
сборка на сервереRedis
, как же не быть? Следующий домовладелец возьмет всех, чтобы начать с 0 и построить их по очереди:Redis
Автономный сервер ->Redis
Мастер-ведомая репликация ->Redis-Sentinel高可用
. Шаг за шагом создайте сервер кэша Redis с высокой доступностью. Основные справочные статьи: короткая книга:Создайте систему высокой доступности Redis
Арендодатель относится к строительству шаг за шагом на основе этой статьи, поэтому содержание относительно похоже, спасибо автору оригинального текста и настоящим заявляю.
Эта статья одновременно опубликована в Цзяньшу: http://www.jianshu.com/p/d7bc873b8797.
Построить Redis
1. Скачайте и разархивируйте
Первый изRedis
Загрузка с официального сайтаRedis
И распаковать, версия используемая арендодателем 4.0.2. Выполните последовательно следующие команды:
cd /usr/local/
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar -zxvf redis-4.0.2.tar.gz
Если не установленgcc
Пакет зависимостей, установите соответствующий пакет зависимостей
yum install -y gcc-c++ tcl
2. Скомпилируйте и установите
После загрузки и распаковки скомпилируйте и установите исходный пакет.Redis
Путь установки/usr/local/redis
, учащиеся могут изменить предложение самостоятельно:make install PREFIX=你想要安装的路径
cd /usr/local/redis-4.0.2/
make install PREFIX=/usr/local/redis
копироватьRedis
соответствующие команды для/usr/sbin
каталог, поэтому вы можете выполнять эти команды напрямую, не указывая полный путь
cd /usr/local/redis/bin/
sudo cp redis-cli redis-server redis-sentinel /usr/sbin/
3. Создайте файл конфигурации Redis
После завершения установкиRedis
Скопируйте файл конфигурации в каталог конфигурации системы/etc/
Вниз,redis.conf
даRedis
файл конфигурации,redis.conf
существуетRedis
исходный каталог,port
По умолчанию 6379.
cp /usr/local/redis-4.0.2/redis.conf /etc/
Redis
Справочник по анализу основных параметров файла конфигурации
daemonize no #redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)
pidfile /var/run/redis.pid #指定redis进程的PID文件存放位置
port 6379 #redis进程的端口号
bind 127.0.0.1 #绑定的主机地址
timeout 300 #客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能
loglevel verbose #redis日志级别,可用的级别有debug.verbose.notice.warning
logfile stdout #log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了
databases 16 #设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
save <seconds> <changes> #指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件;
rdbcompression yes #指定存储至本地数据库时是否压缩文件,默认为yes即启用存储;
dbfilename dump.db #指定本地数据库文件名
dir ./ #指定本地数据问就按存放位置;
slaveof <masterip> <masterport> #指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步
masterauth <master-password> #当master设置了密码保护时,slave服务连接master的密码;
requirepass footbared #设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
maxclients 128 #设置同一时间最大客户连接数,默认无限制;redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
maxmemory<bytes> #指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
appendonly no #指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendfilename appendonly.aof #指定跟新日志文件名默认为appendonly.aof
appendfsync everysec #指定更新日志的条件,有三个可选参数no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
3.1 Настройте запуск бэкенда:
так какRedis
По умолчанию интерфейс запускается и должен оставаться в текущем окне.ctrl + c
выйти, тоRedis
Выйдет, не рекомендуется.
vi /etc/redis.conf
ИсправлятьRedis
конфигурационный файл поместите старое значениеdaemonize no
изменить на новое значениеdaemonize yes
3.2 Настройка доступа:
Redis
По умолчанию разрешен только локальный доступ, но иногда нам также требуется удаленный доступ к Redis.
vi /etc/redis.conf
Найдите конфигурацию линии привязки, по умолчанию:# bind 127.0.0.1
Удалить#
Закомментируйте и измените на:bind 0.0.0.0
Этот параметр становится Разрешить весь удаленный доступ. Если вы хотите указать ограниченный доступ, вы можете установить соответствующий IP.
3.3 Настройте ведение журнала Redis:
оказатьсяlogfile
Эта строка конфигурации по умолчанию:logfile ""
, изменился наlogfile /var/log/redis_6379.log
3.4 Установите пароль запроса Redis:
vi /etc/redis.conf
Найдите эту строку, которая по умолчанию закомментирована:# requirepass foobared
удалить комментарий, поставитьfoobared
Измените пароль, который вы хотите установить, например, я планирую установить его как:123456
, поэтому я изменил на:requirepass "123456"
Перезапустите службу после модификации
После того, как у вас есть пароль, чтобы войти в клиент, вы должны получить к нему доступ следующим образом:redis-cli -h 127.0.0.1 -p 6379 -a 123456
4. Общие операции Redis
4.1 Запуск
/usr/local/redis/bin/redis-server /etc/redis.conf
4.2 Закрыть
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
4.3 Проверьте, запускается ли он
ps -ef | grep redis
4.4 Вход в клиент
redis-cli
4.5 Закройте клиент
redis-cli shutdown
4.6 Настройка конфигурации автоматического запуска
echo "/usr/local/redis/bin/redis-server /etc/redis.conf" >> /etc/rc.local
4.7 Открытый порт брандмауэра
添加规则:iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT
保存规则:service iptables save
重启 iptables:service iptables restart
5. Зарегистрируйте Redis как системную службу
Добавьте сценарии запуска, приостановки и перезапуска службы Redis в каталог /etc/init.d:
vi /etc/init.d/redis
Содержание скрипта следующее:
#!/bin/sh
#
# redis - this script starts and stops the redis-server daemon
#
# chkconfig: - 85 15
# description: Redis is a persistent key-value database
# processname: redis-server
# config: /usr/local/redis/bin/redis-server
# config: /etc/redis.conf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
redis="/usr/local/redis/bin/redis-server"
prog=$(basename $redis)
REDIS_CONF_FILE="/etc/redis.conf"
[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
[ -x $redis ] || exit 5
[ -f $REDIS_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $redis $REDIS_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
echo -n $"Reloading $prog: "
killproc $redis -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart| reload|orce-reload}"
exit 2
esac
дать разрешение скрипту
chmod 755 /etc/init.d/redis
Запустить, остановить и перезапустить:
service redis start
service redis stop
service redis restart
Уже,Redis
Автономный сервер был построен, давайте посмотрим, как построить архитектуру Master-Plave.
Создайте архитектуру Redis master-slave
1. описание redis-сервера
172.16.2.185:6379 主
172.16.2.181:6379 从
2. Конфигурация архитектуры Redis master-slave
-
редактировать раб
Redis
В файле конфигурации найдите строку 210 (примерно), которая должна быть закомментирована по умолчанию:# slaveof <masterip> <masterport>
-
Нам нужно убрать этот комментарий и заполнить IP и порт собственного хоста, например:
slaveof 172.16.2.185 6379
Если хост устанавливает пароль, вам все равно нужно его найти.masterauth <master-password>
Эта линия, удалите комментарий, измените его наmasterauth 主机密码
. -
Перезапустите подчиненное устройство после завершения настройки.
Redis
Служить -
После перезагрузки введите имя хоста
redis-cli
в состоянииredis-cli -h 127.0.0.1 -p 6379 -a 123456
,входить:INFO replication
Текущий хост может быть запрошенRedis
В какой роли он находится и какие ведомые устройства подключены к хосту.
информация о хосте172.16.2.185
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.2.181,port=6379,state=online,offset=28,lag=1
master_replid:625ae9f362643da5337835beaeabfdca426198c7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28
Информация о рабах172.16.2.181
# Replication
role:slave
master_host:172.16.2.185
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:210
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:625ae9f362643da5337835beaeabfdca426198c7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:210
- На этом конфигурация master-slave завершена, и мы можем протестировать:
мы входим в хост
redis-cli
государство, тоset
значение, например:set myblog YouMeek.com
- Мы переключаемся на раба
redis-cli
В состоянии получите только что установленное значение, чтобы увидеть, существует ли оно:get myblog
, в этот момент мы можем обнаружить, что значение может быть получено.
3. Резюме архитектуры Redis master-slave
-
Следует отметить, что ведомая библиотека не имеет возможности записи данных, иначе будет сообщено об ошибке. Ведомая библиотека доступна только для чтения.
-
Преимущества архитектуры master-slave: Помимо уменьшения нагрузки на соединение с основной библиотекой, также можно отключить функцию сохранения в основной библиотеке и передать функцию сохранения в ведомую библиотеку для обработки.
-
Первая информация из конфигурации библиотеки подключена к основной библиотеке, второй источник из конфигурации библиотеки подключен к первому, начиная с библиотеки, если есть третий из библиотеки, мы можем поставить третий соединение из библиотеки, Подключите второй из библиотеки, так что нажмите.
Построение архитектуры высокой доступности Redis Sentinel
1. Автоматический переход на другой ресурс
- Хотя при использовании конфигурации «ведущий-ведомый»
Redis
Сделал бэкап, вроде все идеально. Но из-заRedis
В настоящее время поддерживается только репликация master-slave (репликация master-master не поддерживается).Redis
повесил трубку отRedis
Могут быть предоставлены только услуги чтения, а услуги записи не могут быть предоставлены. Итак, мы должны найти способ стать хозяиномRedis
Он повесил трубку, так что отRedis
обновить до мастераRedis
. - Это требует автоматического аварийного переключения,
Redis Sentinel
Благодаря этой функции, когда мастерRedis
Когда услуга не может быть оказана,Redis Sentinel
может быть преобразован изRedis
обновить в основномRedis
, и для другихRedis
настроить их для использования нового мастераRedis
Сделайте резервную копию копии.
Примечание: сборкаRedis Sentinel
Рекомендуется как минимум 3 сервера, но поскольку арендодатель ленив, в следующем варианте использования используются только 2 сервера.
Redis Sentinel
Основные функции следующие:
-
Мониторинг: постоянный контроль Sentinel
master
иslave
нормально ли работает. -
Уведомление: когда монитор находится под наблюдением
Redis
Когда возникает проблема с экземпляром, вы можетеAPI
Уведомление системных администраторов и других приложений. -
Автоматическое отключение: если
master
не работает должным образом, Sentinel может запустить процесс аварийного переключения, которыйslave
обновитесь доmaster
,другиеslave
перенастроен для использования новогоmaster
, и приложение используетRedis
Новый адрес, сообщенный сервером. -
поставщик конфигурации: дозорный как
Redis
Авторитетный источник для обнаружения клиента: клиент подключается к Sentinel, чтобы запросить текущую надежнуюmaster
адрес г. Если возникает неисправность, Sentinel сообщает, что новый адрес.
По умолчанию каждыйSentinel
Узел обновитRedis
узлы и другиеSentinel
узел отправляетPING
команду и определить, находится ли узел в сети или нет, по ответу узла.
если вdown-after-millisecondes
В течение миллисекунд, если действительный ответ не получен, узел будет определен как субъективно отключенный.
если узелmaster
, тоSentinel
узел пройдетsentinel is-master-down-by-addr
команду другимsentinel
Узел запрашивает решение узла, если больше, чем<quorum>
количество узловmaster
недосягаемый, т.sentinel
узел будетmaster
Суждение как объективное в автономном режиме.
В это время каждыйSentinel
проведут переговоры и выберут лидераSentinel
во главе сSentinel
правильноmaster
Узел выходит из строя при работе.
Аварийное переключение состоит из следующих трех операций:
-
в целом
slave
сервер, выбериslave
, и преобразовать его вmaster
. -
пусть другие
slave
Сервер, скопируйте новые измененныеmaster
. -
будет старым
master
установить как новыйmaster
изslave
, так что когда старыйmaster
Когда он вернется в сеть, это будет новыйmaster
изslave
.
2. Создайте архитектуру высокой доступности Redis Sentinel
Здесь используются два сервера, по одному на каждом сервереredis-server
иredis-sentinel
Служить.
описание redis-сервера
172.16.2.185:6379 主
172.16.2.181:6379 从
Описание redis-sentinel
172.16.2.185:26379
172.16.2.181:26379
2.1 Создайте файл конфигурации Redis
Если необходимо выполнить автоматическое аварийное переключение, рекомендуется, чтобы всеredis.conf
оба набораmasterauth
, потому что автоматический сбой только перезапишет отношения ведущий-ведомый, т.е.slaveof
, не будет записано автоматическиmasterauth
. еслиRedis
Если изначально пароль не установлен, его можно игнорировать.
Redis
Программа уже установлена, осталось добавитьredis-sentinel
Соответствующая конфигурация может быть,redis-sentinel
Скопируйте файл конфигурации в каталог конфигурации системы/etc/
Вниз,sentinel.conf
даredis-sentinel
файл конфигурации,sentinel.conf
существуетRedis
исходный каталог.
cp /usr/local/redis-4.0.2/sentinel.conf /etc/
Исправлятьsentinel.conf
Содержимое конфигурационного файла следующее:
vi /etc/sentinel.conf
protected-mode no
sentinel monitor mymaster 172.16.2.185 6379 2
# redis在搭建时设置了密码,所以要进行密码配置
sentinel auth-pass mymaster “123456“
#5秒内mymaster没有响应,就认为SDOWN
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
добавить в конце конфигурации
logfile /var/log/sentinel.log
pidfile /var/run/sentinel.pid
daemonize yes
Описание файла конфигурации:
1.port: порт, на котором запущена текущая служба Sentinel.
2.dir: временная папка, используемая службой Sentinel при работе.
3.sentinel monitor master001 192.168.110.10163792: Sentinel для мониторинга основного экземпляра redis с именем master001, IP-адрес основного экземпляра — это адрес хоста 192.168.110.101, номер порта 6379, а сбой основного экземпляра определяется, что в как минимум Sentinel согласился на два процесса, до тех пор, пока согласованное количество Sentinel не соответствует требованиям, автоматическое аварийное переключение не будет выполняться
4.Sntinel Down -After-Milliseconds Master001 30000: указывает, что Sentinel считает, что количество миллисекунд, необходимое для экземпляра Redis, было недопустимым. Когда пример превышает это время, он не возвращается или сразу возвращает ошибку, Sentinel помечает экземпляр как субъективно отключенный. Только один процесс Sentinel помечает экземпляр как субъективно отключенный и не обязательно вызывает автоматическую миграцию ошибки экземпляра: после того, как достаточное количество Sentinel пометит экземпляр как субъективно отключенный, экземпляр будет помечен как объективный отключенный, эта миграция будет выполняться только
5. Sentinel parallel-syncs master001 1: указывает, сколько подчиненных экземпляров Redis может синхронизировать новый главный экземпляр при выполнении аварийного переключения. В случае большего количества подчиненных экземпляров Redis, чем меньше число, тем дольше время синхронизации. требуется для завершения аварийного переключения
6. Sentinel failover-timeout master001 180000: если операция аварийного переключения не может быть завершена в течение этого времени (мс), считается, что аварийное переключение не удалось.
7.SEntinel Уведомление-сценарий: Указывает сценарий тревоги, вызываемый, когда Sentinel обнаруживает экземпляр зарегистрированного экземпляра Redis. Этот элемент конфигурации является необязательным, но очень часто используется
2.2 Открытые порты брандмауэра
添加规则:iptables -I INPUT -p tcp -m tcp --dport 26379 -j ACCEPT
保存规则:service iptables save
重启 iptables:service iptables restart
2.3 Запуск redis-sentinel
redis-sentinel /etc/sentinel.conf
Актуальную служебную информацию можно просмотреть на любой машине
redis-cli -h 127.0.0.1 -p 26379
INFO sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.16.2.185:6379,slaves=1,sentinels=2
3. Автоматический отказоустойчивый тест
3.1 Остановить основной Redis
redis-cli -h 172.16.2.185 -p 6379 -a 123456 shutdown
3.2 Просмотр состояния мониторинга redis-sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.16.2.181:6379,slaves=1,sentinels=2
Выяснилось, что рабская библиотека была повышена до главной библиотеки.
3.3 Примечания
-
если ты остановишься
master
Задний,Sentinel
показать достаточноsdown
после этого не появлялсяodown
илиtry-failover
, затем проверьте правильность пароля и других настроек -
если ты остановишься
master
Позже при попытке переключения обнаруживается, что появляется логfailover-abort-not-elected
, то ее можно решить в двух случаях:
- если
Redis
Экземпляр не настроен
protected-mode yes
bind 172.16.2.185
затем вSentinel
конфигурационный файл плюсprotected-mode no
Просто
- если
Redis
Экземпляр имеет конфигурацию
protected-mode yes
bind 172.16.2.185
затем вSentinel
конфигурационный файл плюс
protected-mode yes
bind 172.16.2.185
На данный момент решение высокой доступности Redis создано.
VIP предоставляет внешний виртуальный IP-адрес для обеспечения высокой доступности
1. Обзор текущей ситуации
Подключение клиентской программы (например, программы JAVA)Redis
при необходимостиip
иport
,ноredis-server
Во время аварийного переключения основнойRedis
является переменным, поэтомуip
Адрес тоже меняется. Как клиентская программа воспринимает текущий мастерRedis
изip
А адрес и порт?redis-sentinel
Предоставляет интерфейс для запроса любогоSentinel
,ОтправитьSENTINEL get-master-addr-by-name <master name>
Вы можете получить текущую первичнуюRedis
изip
иport
.
каждый раз, когда клиент подключаетсяRedis
прежде, чтобыsentinel
отправить запрос, получить мастерRedis
изip
иport
, а затем используйте возвращенныйip
иport
соединятьRedis
.
Недостаток этого метода очевиден, каждая операцияRedis
Необходимо отправить как минимум два запроса на подключение, первый запросSentinel
, второй запросRedis
.
Лучший способ - использоватьVIP
, конечно, это имеет определенные требования к настроенной среде, такие какRedis
Построен на облачном сервере Alibaba, может не поддерживатьVIP
.
VIP
План есть,Redis
Система всегда имеет один и тот же IP-адрес снаружи, когдаRedis
При сбое все, что вам нужно сделать, этоVIP
раньшеRedis
Теперь сервер переходит к новому мастеру.Redis
на сервере.
Например: текущийRedis
СистемаRedis
изip
адрес172.16.2.185
,ТакVIP(172.16.2.250)
направление172.16.2.185
, клиентская программа используетVIP(172.16.2.250)
адресная ссылкаRedis
На практике это текущий мастер.Redis
, что позволяет избежатьSentinel
послать запрос.
быть главнымRedis
время простоя, во время аварийного переключения,172.16.2.181
на этом сервереRedis
продвижение – это главноеVIP(172.16.2.250)
направление172.16.2.181
, чтобы клиентской программе не нужно было изменять какой-либо код, соединение172.16.2.181
этот мастерRedis
.
2. Переместите VIP для обеспечения отказоустойчивости Redis
Так что вопрос теперь в том, как поступитьRedis
Во время аварийного переключенияVIP
Дрейф к новому хозяинуRedis
на сервере.
можно использовать здесьRedis Sentinel
параметрclient-reconfig-script
, этот параметр настраивает сценарий выполнения,Sentinel
делаетfailover
Когда скрипт выполняется и передается 6 параметров<master-name>、 <role>、 <state>、 <from-ip>、 <from-port>、 <to-ip> 、<to-port>
,в<to-ip>
новый хозяинRedis
изIP
адрес, что можно сделать в этом скриптеVIP
Дрифтовая операция.
sentinel client-reconfig-script mymaster /opt/notify_mymaster.sh
Изменить два сервераredis-sentinel
конфигурационный файл/etc/sentinel.conf
,增加上面一行。 затем в/opt/
Создано в каталогеnotify_mymaster.sh
файл скрипта, этот скрипт делаетVIP
Операция дрейфа, как показано ниже:
vi /opt/notify_mymaster.sh
#!/bin/bash
echo "File Name: $0"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
MASTER_IP=${6} #第六个参数是新主redis的ip地址
LOCAL_IP='172.16.2.185' #当前服务器IP,主机172.16.2.185,从机172.16.2.181
VIP='172.16.2.250'
NETMASK='24'
INTERFACE='eth1'
if [ ${MASTER_IP} = ${LOCAL_IP} ]; then
sudo /sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE} #将VIP绑定到该服务器上
sudo /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
exit 0
else
sudo /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE} #将VIP从该服务器上删除
exit 0
fi
exit 1 #如果返回1,sentinel会一直执行这个脚本
дать разрешение скрипту
chmod 755 /opt/notify_mymaster.sh
текущая основнаяRedis
да172.16.2.185
, что требует ручной привязкиVIP
На сервер.
/sbin/ip addr add 172.16.2.250/24 dev eth1
/sbin/arping -q -c 3 -A 172.16.2.250 -I eth1
Поскольку VIP может быть привязан только к одной машине, рекомендуется изменить его наbind 0.0.0.0
добавить вredis.conf
середина
vi /etc/redis.conf
настраиватьbind 0.0.0.0
Поскольку VIP может быть привязан только к одной машине, рекомендуется изменить его наbind 0.0.0.0
добавить вsentinel.conf
середина
vi /etc/sentinel.conf
настраиватьbind 0.0.0.0
перезагружатьRedis
service redis restart`
перезагружатьSentinel
redis-sentinel /etc/sentinel.conf
Тогда мы на другой машине172.16.2.181
на, черезVIP
хост доступа
redis-cli -h 172.16.2.250 -p 6379 -a 123456 INFO replication
Связь может быть выполнена в обычном режиме, и информация выглядит следующим образом:
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.2.181,port=6379,state=online,offset=0,lag=0
master_replid:325b0bccab611d329d9c2cd2c35a1fe3c01ae196
master_replid2:c1f7a7d17d2c35575a34b00eb10c8abf32df2243
master_repl_offset:22246293
second_repl_offset:22241024
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:22237293
repl_backlog_histlen:9001
хост доступаSentinel
redis-cli -h 172.16.2.250 -p 26379 INFO sentinel
Связь может быть выполнена в обычном режиме, и информация выглядит следующим образом:
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.16.2.185:6379,slaves=1,sentinels=3
Выключите хост нижеRedis
service и посмотрите, не переместится ли VIP на другой сервер.
redis-cli -h 172.16.2.185 -p 6379 -a 123456 shutdown
Посмотрите, был ли сделан переход
redis-cli -h 172.16.2.250 -p 26379 INFO sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.16.2.181:6379,slaves=1,sentinels=3
по запросуSentinel
Раб найден172.16.2.181
Продвигайте главное.
посетивVIP
способ подключенияRedis
redis-cli -h 172.16.2.250 -p 6379 -a 123456 INFO replication
# Replication
role:master
connected_slaves:0
master_replid:cab30a4083f35652053ffcd099d70b9aaf7a80f3
master_replid2:3da856dd33cce4bedd54926df6797b410f1ab9e8
master_repl_offset:74657
second_repl_offset:36065
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:74657
Из приведенной выше информации видно, чтоVIP
Успешно дрифтовать. Поздравляю, удачи и удачи, ешь курицу на ночь.
Суммировать
Пока высокая доступностьRedis
Служба кеша была построена, и статья будет опубликована позже, чтобы научить вас пройтиJAVA
соединятьRedis
выполнять сопутствующие операции. Что касаетсяRedis Cluster
Кластерный план, подождите, пока у вас будет время его построить, а затем поделитесь им со всеми.
Справочная статья
Создайте систему высокой доступности Redis
Репликация Redis, Sentinel для создания и обоснования
Redis Quick Start (перевод официального сайта)
Механизм и использование Redis Sentinel (1)
Redis Sentinel — высокая доступность Redis
Понимание Redis и настройка кластера master-slave и развертывание высокой доступности
Как настроить jedis в среде Redis Sentinel
Решение Redis Sentinel для переключения ведущий-ведомый (отказоустойчивость), подробная конфигурация