LINUX.ORG.RU

19
Всего сообщений: 76

Мониторинг Redis кластера

Всем привет. Имеется редис кластер из нескольких серверов.

Проблема такая: периодически меняются местами мастер и слейв между двумя серваками. Заказчику нужно сделать мониторинг / counter общего кол-ва мастеров в кластере.

Сентинел разворачивать - гемор и костыли.

Есть мысли какие?

 

ramos ()

рассмотрю предложения: node, python, express, flask, mongo, redis, react, pwa etc

всем привет

инженер-разработчик, например, middle, возьмусь за ваши горящие задачи, помогу с беком, фронтом, архитектурой

монга-nosql, событийная архитектура, микросервисы, высокая нагрузка

pwa, одностраничные сайты-приложения, сложные интерфейсы

помогу разобраться, решу проблемы, готов на овертайм

интересуют конкретные задачи от непосредственных участников: хрюшей и всевозможных менеджеров а также носителей гениальных идей на перспективу попрошу не беспокоить

дорого, уверенно, будьте готовы оплачивать мое время, бесплатно не консультирую

пишите, пообщаемся: https://t.me/trashymichael

 , , , ,

trashymichael ()

Scala разработчик в международный стартап

Vivid Money - европейский финтех стартап. Основной продукт - мобильное приложение.

Запустились в Германии, Франции, Испании и Италии (основатели экс-топы из Тинькофф).

Ищем Scala-разработчиков c production опытом на Scala в офис в Москве или по России на удаленку.

Задачи: разработка бэкенда в сore-платформе и платежах.

FP cтек технологий: ZIO, scalates, cats, tofu, typed schema, tagless final, circe, fs2, droste etc. Другое: Redis, Consul, Postgresql, Kubernetes, Helm, DynamoDB, Kibana (ELK), Grafana, Prometheus, gRPC. Условия: зп от 200 тыс. на руки и выше (ориентируемся на уровень кандидата + учитываем итоги интервью), опционы, бенефиты с едой, спортом, англ.

Описание вакансии: https://jobs.vivid.money/jobs/Careers/33579000001439340/Backend-Developer-Sca...

Подробности в личке @Dante2707(телега)

 , ,

Kenjuy ()

как найти данные в редисе?

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": f"redis://REDIS_CONTAINER}_1/1",  # noqa
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

Захожу в контейнер REDIS_CONTAINER

root@68882bb464d0:/data# redis-cli

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
 1) "celery-task-meta-b9bc8b51-41c8-4e2f-97d1-9eb2031f7fc9"
 2) "celery-task-meta-5eaf84ff-d817-410e-81db-c99b4337c6f6"
 3) "celery-task-meta-7b3f9df7-43f0-43e0-8f71-52027ade723b"
 4) "celery-task-meta-43d26ae5-1133-463d-a1cb-6478ad31af6a"

127.0.0.1:6379[1]> keys *

1) "_kombu.binding.reply.celery.pidbox"
2) "_kombu.binding.celeryev"
3) "_kombu.binding.celery"
4) "_kombu.binding.celery.pidbox"

127.0.0.1:6379[1]> select 2

OK
127.0.0.1:6379[2]> keys *
(empty array)

Не наблюдаю ключей, которые я создаю с помощью cache.set() в django

>>> settings.CACHES
{'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://redis_1:6379/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}}}

 ,

serg002 ()

Зачем Redis?

Нуб вопрос. Зачем нужен Redis если можно просто создать внутренний кэш в приложении? В документации и всяких статьях, написано про большую гибкость и что-то там. Ладно, если это кэш для нескольких приложений одновременно, но для одного-то зачем? Особенно, с учетом того, что данные надо приводить к строкам, чтобы хранить в Редисе. Ну или еще как-то преобразовывать.

 , , ,

petrosha ()

«Правильные» коннекты к Redis из python

Пытаюсь писать много данных в redis из python. Отправляю например 10к сообщений в секунду. Проблема в том что первые 2-3к залетают норм, а потом начинает сыпать такую ошибку

redis.exceptions.ConnectionError: Error 10048 connecting to 192.168.1.201:6379. Only one usage of each socket address (protocol/network address/port) is normally permitted.

При этом периодически все равно до 1к пролазит раз в несколько секунд.

делаю так

r = redis.StrictRedis(host=host, port=port, db=db)
r.lpush(redis_key, data)
r.close()

вроде бы закрываю соединение каждый раз. Но из-за этого ли. Читал про пул коннектов, но не очень понимаю как сделать так что бы он висел в памяти при запуске flask и при каждом новом запросе к апи не пересоздавался заново.

 ,

OxFF ()

redis веб интерфейс

всем привет

Подскажите плиз

Бесплатный веб интерфейс для редиса?

 ,

carter ()

Как справляетесь со слишком большой задержкой между серверами?

Допустим, есть проект. Допустим, у него база данных любого вида висит отдельно, в локальной сети. Кроме обычной физики, есть ещё и TCP/IP, авторизация, и прочее, что добавляет неприличное количество времени ожидания.

Как с этим справляются с админ-стороны? Со стороны кода - понятно, меньше запросов и больше данных за запрос. Предположительно, кто-то мог написать что-то типа прокси, которые работают по своему протоколу поверх UDP, например, авторизуются один раз, держат связь с сервером и гоняют туда-сюда сжатые команды. Про несколько реализаций прокси знаю, но не наткнулся ни на одно обсуждение в плане снижения задержек вокруг них - их используют для многосерверности, стабильности, и.т.д.

 , ,

alexmaru ()

in-memory db: альтернативы для Redis, Memcached

Есть что-нибудь проще, чем Redis?

Требуется хранение набора констант и набора массивов числовых значений, чтобы они были доступны из нескольких воркеров бэкенда на python. Т.е., библиотека доступа к базе данных должна быть thread-safe.

База нужна only in-memory, без хранения в постоянной памяти. Инициализировать я её буду вручную, при старте приложения.

 , ,

Mirage1_ ()

All.me | Senior Golang разработчик от 180net (Нижний Новгород)

Открылась вакансия Senior Golang разработчик для работы над нашим инновационным проектом all.me.

Офис: НН, Деловая 24к1

Наш стек технологий: • Golang; • MongoDb; • Redis; • Git; • *nix

Обязанности: Разработка сервисов на Golang; Написание unit-тестов; Создание качественного, легко поддерживаемого кода; Разработка новых и доработка существующих сервисов в backend.

Подробности: +7 (996) 009-06-82 (Telegram, WhatsApp, Viber) Oleg.Oltybaev@all.me

 , , , ,

Oleg_Oltybaev ()

redis haproxy - Error: Server closed the connection

всем привет

настроил redis через haproxy

конфиг haproxy

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     40000
    user        haproxy
    group       haproxy
    daemon
    log         127.0.0.1 local2

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

defaults
mode tcp
maxconn 10000
timeout connect 5s
timeout client 100s
timeout server 100s


listen redis
    bind 192.168.123.14:8190
    mode tcp
    option tcplog
    option tcp-check
    tcp-check send AUTH\ PASSWD\r\n
    tcp-check expect string +OK
    tcp-check send PING\r\n
    tcp-check expect string +PONG
    tcp-check send info\ replication\r\n
    tcp-check expect string role:master
    tcp-check send QUIT\r\n
    tcp-check expect string +OK
    server redis01 redis01:8190 maxconn 10000 check inter 10s fall 3
    server redis02 redis02:8190 maxconn 10000 check inter 10s fall 3


далее запускаю команду

redis-cli -h 192.168.123.14 -p 8190 -a passwd ping
PONG
redis-cli -h 192.168.123.14 -p 8190 -a passwd ping
PONG
redis-cli -h 192.168.123.14 -p 8190 -a passwd ping
PONG
redis-cli -h 192.168.123.14 -p 8190 -a passwd ping
redis-cli -h 192.168.123.14 -p 8190 -a passwd ping

сначала через haproxy на редис коннект есть, далее пропадает.
перезапускаю haproxy, опять сначала коннект есть, через секунд 10 пропадает. при этом до этого несколько месяцев все работало нормально.

в логах ошибок не увидел. напрямую редис работает без проблем

 

carter ()

Очереди задач, потоки, мультипроцессы.

В общем. Есть такая проблема. Нужно сделать систему для распределенного выполнения задач. Причем, задачи эти крутятся долго - могут день, два. И могут добавлятся, так и удалятся.

И вопрос, каким образом лучше сделать такую систему? Характер задач - много общение с БД, сторонними REST API + обработка входящих данных от REST API - проверка по условиям приходящих данных. Те в большей мере IO, но и CPU также есть.

Сейчас есть с горем пополам работающее решение (писало чудо-юдо до меня). Решение состоит в том, чтобы на каждую задачу плодить thread… Сейчас среднее количество таких задач подошло к 150 и решение это работает… Откровенно х$%@#.. В общем, надо переделывать.

P.S Сам пока думаю о asyncio, или redis + multiprocessing + asyncio. Второе не особо нравится из-за нежелания бороться с пересозданием connection и т.п проблем. В идеале бы 1000 таких задач без проблем держать. Сейчас в одном интерпретаторе через потоки 150 и все стало очень медленно. По ресурсам CPU решение не критично. Есть сервер на 32 ядра. Можно грузить хоть все.

 , ,

crarkie ()

можно ли использовать только redis?

обычно redis используется как кеш к основной БД(реляционной). скажите, является ли хорошей практикой использовать только redis? то есть хранить в ней и критически важные данные, и не критически важные?

ведь есть же в redis команда bgsave, её можно пинать после каждой отправки данных

кроме того можно настроить конфиг redis так чтобы он периодически сохранял данные оперативной памяти на диск

разве этого всего недостаточно чтобы отказаться от «настоящей» БД типа postgres?

 

prozaik ()

как redis хранит данные всех пользователей?

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

1. redis это БД типа ключ-значение, которая живёт в оперативной памяти сервера. 
2. в ней хранятся некритично важные данные
3. например на сервере1 есть админка, написанная на питоне. на сервере2 есть postgres database. на сервере3 есть redis
4. хеш пароля и логины хранятся в postgres
5. всякие визуальные настройки и номера открытых пользователями админки вкладок хранятся в redis
6. для postgres и redis код админки отправляет разные типы запросов. то есть не бывает так, что через какой-нибудь прокси отправлятеся sql-запрос, а прокси уже сам решает отправить его как sql-запрос в postgres или как nosql-запрос в redis.

мне непонятна ситуация когда redis-сервер существует один и соответственно оперативная память у него одна. и при этом пользователей админки, скажем, миллион. как они будут делить оперативную память единственного сервера? ведь если каждому пользователю нужен гигабайт, то сервер не может предоставить миллион гигабайт оперативной памяти

 

prozaik ()

Вопрос о flask, воркерах и асинхронности

Доброго времени суток. Есть приложение на flask у которого есть задачи (6 парсингов). Каждый пользователь может самостоятельно загрузить нужные ему данные которые обрабатываются при помощи rq (база redis). Всё отлично работает, но меня беспокоит, что когда будет одновременно 30 запросов (учитывая что на один парсинг уходит от 10 секунд до 60) пользователи могут не дождаться ответов и просто уйти. Подскажите как поступать в таком случае, возможно очереди не удачный выбор или нужно добавить больше воркеров?

 , , , ,

q13 ()

redis sentinel, несколько баз в одном конфиге

всем привет

можно ли в одном конфиге redis sentinel прописать несколько редисов?

 

carter ()

redis sentinel, чем мониторить мастера?

всем привет

подскажите плиз

redis sentinel, чем мониторить мастера? имеется ввиду переправлять траффик в случае сбоя.

haproxy? без него никак?

 

carter ()

redis timeout

всем привет

начались таймауты в редисе.

System.TimeoutException: Exceeded timeout of 00:00:01

при этом никакой нагрузки особой на сервере нет.
может в конфиге нужно сделать какой то тюнинг?

daemonize yes
dbfilename "master.rdb"
tcp-keepalive 60
loglevel notice
databases 10
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
slave-priority 100
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# Server
redis_version:4.0.6
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:de351cef197756ea
redis_mode:standalone
os:Linux 3.10.0-957.10.1.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:sync-builtin
gcc_version:4.4.7
process_id:5493
run_id:1e3ea875fbf2a5f20c9fd69efc30b412bf922c43
tcp_port:6379
uptime_in_seconds:58976
uptime_in_days:0
hz:10
lru_clock:5588529


# Clients
connected_clients:1415
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:7269027528
used_memory_human:6.77G
used_memory_rss:8172883968
used_memory_rss_human:7.61G
used_memory_peak:7707650912
used_memory_peak_human:7.18G
used_memory_peak_perc:94.31%
used_memory_overhead:81843077
used_memory_startup:758488
used_memory_dataset:7187184451
used_memory_dataset_perc:98.88%
total_system_memory:32695848960
total_system_memory_human:30.45G
used_memory_lua:29565952
used_memory_lua_human:28.20M
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.12
mem_allocator:jemalloc-3.6.0
active_defrag_running:0
lazyfree_pending_objects:0

# Persistence
loading:0
rdb_changes_since_last_save:150487
rdb_bgsave_in_progress:1
rdb_last_save_time:1565869553
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:31
rdb_current_bgsave_time_sec:3
rdb_last_cow_size:217522176
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0

# Stats
total_connections_received:43037
total_commands_processed:420134670
instantaneous_ops_per_sec:14067
total_net_input_bytes:65070656068
total_net_output_bytes:154927754819
instantaneous_input_kbps:2480.40
instantaneous_output_kbps:5512.33
rejected_connections:21942
sync_full:2
sync_partial_ok:0
sync_partial_err:2
expired_keys:1683934
evicted_keys:0
keyspace_hits:203679687
keyspace_misses:24100895
pubsub_channels:1
pubsub_patterns:0
latest_fork_usec:258819
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0

# Replication
role:master
connected_slaves:2
master_repl_offset:33669018449
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:33667969874
repl_backlog_histlen:1048576

# CPU
used_cpu_sys:5721.91
used_cpu_user:10380.10
used_cpu_sys_children:1989.55
used_cpu_user_children:12584.15

# Cluster
cluster_enabled:0


 ,

carter ()

ingress проброс порта

Добрый день, Подскажите как через ингресс пробросить порт

rules:
  - host: site.ru
    http:
      paths:
      - path: /
        backend:
          serviceName: site
          servicePort: 80
      - path: /
        backend:
          serviceName: redis
          servicePort: 6379      
Нужно пробросить наружу порт redis, но проброс не работает. Попадает все равно на 80 порт

 , ,

letema88 ()

redis как очистить кэш?

всем привет

только начала работать с redis/

нужно почистить кэш. боюсь удалить данные)

как правильно сделать?

 ,

carter ()