λ΄κ° μΌμ μμνλ©΄ error: [Errno 104] Connection reset by peer
λͺ¨μ κ²μ
λλ€.
gevent νμ μ¬μ©νλ©΄ μμ
μκ° μμλ ν 3 λΆμ μ€λ₯κ° λ°μν©λλ€.
ν리 ν¬ν¬ νμ μ¬μ©νλ©΄ μμ μκ° μμλ ν 15 λΆμ μ€λ₯κ° λ°μν©λλ€.
Celery 4.2.0μμλ λμΌν λ¬Έμ κ° λ°μν©λλ€. Celery 4.1.1μλ μμ΅λλ€. μ§μμ μΌλ‘, νμ κ·Έλ° κ²μ μλμ§λ§ μμ£Ό Errno 104λ₯Ό μ»μ΅λλ€. νΈλλΉμ€ λΉλμμλ 4.2.0μμ λ μ§μμ μΌλ‘ μ€ν¨νλ κ² κ°μ΅λλ€ (4.1.1μμ μ±κ³΅). @axiaoxinμ΄ λ³΄κ³ νλ μκ° μμ‘΄μ±μ μμ 차리μ§
λ€μ λͺ λ Ήμ μΆλ ₯μ μ κ³΅ν΄ μ£Όμκ² μ΅λκΉ?
$ celery -A proj report
μλ νμΈμ @georgepsarakis μ΄κ²μ μ λ³΄κ³ μμ λλ€
software -> celery:4.2.0 (windowlicker) kombu:4.2.1 py:2.7.5
billiard:3.5.0.3 py-amqp:2.3.2
platform -> system:Linux arch:64bit, ELF imp:CPython
loader -> celery.loaders.app.AppLoader
settings -> transport:amqp
results:sentinel://:**@10.18.7.1:26379/1;sentinel://:[email protected]:26379/1;sentinel://:[email protected]:26379/1
JSON_AS_ASCII: False
CACHED_OVER_EXEC_MILLISECONDS: 800
LOG_PEEWEE_SQL: False
SESSION_REFRESH_EACH_REQUEST: True
APP_ROOT_PATH: '/data/srv/zns/app'
REDIS_URL: 'redis://:[email protected]:6379/2'
PROJECT_ROOT_PATH: '/data/srv/zns'
FLATPAGES_ROOT: '/data/srv/zns/app/docs'
SESSION_COOKIE_SAMESITE: None
PROPAGATE_EXCEPTIONS: None
CELERYD_SEND_EVENTS: True
REDIS_LOCK_TIMEOUT: 1800
FAKE_HANDLE_TASK: False
SECRET_KEY: u'********'
BROKER_URL: u'amqp://notifer:********@zns.com:5672/notifer_celery_broker'
ENTRY_RATE_LIMIT: 0
SENTRY_DSN: 'http://6a0ce3f93804422da7321f45353c69d7:[email protected]/10'
SWAGGER: {
'description': '<a href="/docs" target="_blank">\xe5\x85\xb6\xe4\xbb\x96\xe6\x96\x87\xe6\xa1\xa3</a>',
'doc_expansion': 'list',
'footer_text': u'\u6709\u4efb\u4f55\u7591\u95ee\u8bf7\u54a8\u8be2 ashinchen',
'hide_top_bar': True,
'specs': [{ 'endpoint': 'apispec', 'route': '/apispec.json'}],
'termsOfService': None,
'title': 'zns API',
'uiversion': 3,
'version': '0.0.1'}
LOG_LEVEL: 'info'
APPLICATION_ROOT: '/'
SERVER_NAME: None
LOG_PATH: '/data/srv/zns/logs'
SERVICE_NAME: 'zns'
CELERYD_MAX_TASKS_PER_CHILD: 10000
TESTING: False
MYSQL_URL: 'mysql+pool://user:[email protected]:3306/zns?max_connections=40&stale_timeout=300'
TEMPLATES_AUTO_RELOAD: None
CELERY_RESULT_PERSISTENT: True
JSONIFY_MIMETYPE: 'application/json'
TOF_APP_KEY: u'********'
TOF_SYS_ID: 1
JSON_KEYCASE: u'********'
TOF_URL: 'http://tof.com/api/v1'
FLATPAGES_EXTENSION: ['.md', '.html', '.htm', '.txt']
SESSION_COOKIE_HTTPONLY: True
USE_X_SENDFILE: False
REQUESTS_POOL_SIZE: 10
API_BIND: u'********'
SESSION_COOKIE_SECURE: False
CACHED_EXPIRE_SECONDS: 60
REDIS_SENTINEL: {
'db': 0,
'master_name': 'redis-master',
'nodes': [ ('10.18.7.1', 26379),
('10.16.19.22', 26379),
('10.16.19.21', 26379)],
'password': u'********'}
SESSION_COOKIE_DOMAIN: None
SESSION_COOKIE_NAME: 'session'
EXCEPTION_RETRY_COUNT: 2
CELERY_TASK_RESULT_EXPIRES: 604800
MAX_COOKIE_SIZE: 4093
ENTRY_RATE_PER: 0
TOF_WEIXIN_SENDER: 'x-ashin'
ENV: 'production'
CELERYD_TASK_SOFT_TIME_LIMIT: 30
DEBUG: False
PREFERRED_URL_SCHEME: 'http'
EXPLAIN_TEMPLATE_LOADING: False
CELERY_RESULT_BACKEND:u'sentinel://:********@10.18.7.1:26379/1;sentinel://:pwd@'10.16.19.22:26379/1;sentinel://:[email protected]:26379/1'
CACHED_CALL: False
FLATPAGES_AUTO_RELOAD: False
MAX_CONTENT_LENGTH: None
REQUEST_ID_KEY: u'********'
NOTIFY_MODULE: 'tof'
JSONIFY_PRETTYPRINT_REGULAR: False
LOG_FUNC_CALL: True
PERMANENT_SESSION_LIFETIME: datetime.timedelta(31)
TOF_EMAIL_SENDER: '[email protected]'
REDIS_CLUSTER: {
}
TRAP_BAD_REQUEST_ERRORS: None
JSON_SORT_KEYS: u'********'
TRAP_HTTP_EXCEPTIONS: False
SESSION_COOKIE_PATH: None
SEND_FILE_MAX_AGE_DEFAULT: datetime.timedelta(0, 43200)
SPLIT_LOGFILE_BY_LEVEL: False
PRESERVE_CONTEXT_ON_EXCEPTION: None
CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS: {
'master_name': 'redis-master'}
LOG_IN_FILE: False
μ΄ λ³΄κ³ μμμ μΌλΆ λΉλ°λ²νΈλ *λ‘ λ체λμ§ μμ΅λλ€.
κ·Έλ§ν κ°μΉλ rabbitmqμ ν¨κ» geventλ₯Ό μ¬μ©νλ κΉ¨λν νλ‘μ νΈμμλ μ΄κ²μλ³΄κ³ μμ΅λλ€. λͺ λΆ λμ μ λ¬λ¦¬ μ컀λ₯Ό μμνλ©΄ μ°κ²° μ¬μ€μ μ μμ νκ³ κ·Έ μ΄νλ‘λ μμ μ΄ μλΉλμ§ μμ΅λλ€.
μ§κΈκΉμ§ λμΌν λ¬Έμ κ° μμ΅λλ€. (μ λ¬λ¦¬ 4.2) μ λ¬λ¦¬ λ²μ μ 4.1λ‘ λ€μ΄ κ·Έλ μ΄λνμ¬ ν΄κ²°λμμ§λ§μ΄ μ€λ₯κ° λ°μν μ΄μ λ₯Ό λͺ¨λ¦ λλ€.
λ§μ€ν°μ λͺ¨λ μ’ μμ±κ³Ό ν¨κ» λ§μ€ν° λΈλμΉμμ μ λ¬λ¦¬λ₯Ό μ€μΉνκ³ λ¬΄μ¨ μΌμ΄ μΌμ΄λλμ§ λ³Ό μ μμ΅λκΉ?
Celery 4.2.2μμ μ¬μ νμ΄ μ€λ₯κ° λ°μν©λλ€.
@auvipy κ°μ¬ν©λλ€, μλν©λλ€!
@ yuda110 μμ‘΄μ± λ³κ²½μΌλ‘ λ¬Έμ κ° ν΄κ²°λμλμ§ μκ³ μμ΅λκΉ?
μ΄ ConnectionReset λ¬Έμ κ° λ°μνλ©° μ λ¬λ¦¬ μꡬ μ¬νκ³Ό νΈνλλ λ€μ λ²μ μ΄ κ³ μ λ μ λ¬λ¦¬ 4.2.1μ μ¬μ©νκ³ μμ΅λλ€.
billiard==3.5.0.4 # Celery needs billiard. There's a bug in 3.5.0.5
kombu==4.2.2-post1 # Celery needs kombu >= 4.2.0, < 5.0
redis==2.10.6
μλ
νμΈμ.
μ, κ·Έ λ΅μ μ§μ°λ κ±Έ μμ λ€μ βΉοΈβΉοΈ λ²μ μ
κ·Έλ μ΄λ (4.2.1) ν λ¬Έμ κ° ν΄κ²° λ κ² κ°μλλ° λ μ μμλ λ¬Έμ μ μ§λ©΄νμ΅λλ€. κ²°κ΅ 4.0 λ²μ μΌλ‘ λ€μ΄ κ·Έλ μ΄λν΄μΌνμ΅λλ€.
4.1λ‘ λ€μ΄ κ·Έλ μ΄λνκ³ μ€λ₯λ₯Ό μμ νμ΅λλ€. κ·Έλλ 4.3μ μμ§ μλνμ§ μμμ΅λλ€.
μ΄ μ€λ₯λ μ°λ¦¬μκ² κ±°μ λ°μνμ§ μμΌλ©° redis ν΄λΌμ΄μΈνΈμ ConnectionReset
μ€λ₯λ‘ μμνλ μ²΄μΈ μμΈλ‘ λ°νμ‘μ΅λλ€. Celery ChangeLogμ μ¬μλ κ°λ₯ν μ€λ₯κ° μμμ λν λ΄κΈ° λλ¬Έμ kombu.exceptions.OperationalError
κ° λ°μνμ λ μ¬ μλλ₯Ό νμ±ννκ² μ΅λλ€.
RabbitMQλ₯Ό μ¬μ©ν λ 4.3.0μμ μ¬μ ν λ¬Έμ κ° μ§μλλ€κ³ λ§νκ³ μΆμμ΅λλ€. μ΄λ»κ² λ Redisλ‘ μ΄λνμ¬ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
kombu.exceptions.OperationalError
κ° λ°μν λλ§λ€ μ§μ λ°±μ€ νλ‘ μ¬ μλνμ¬μ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€. λ¬Έμμ λ°λ₯΄λ©΄ κ·Έκ²λ€μ μ¬ μλ λ μμ μ
λλ€. μ΄ λ¬Έμ λ μ°λ¦¬μκ² κ±°μ λ°μνμ§ μμΌλ―λ‘ μ¬ μλλ μ’μ ν΄κ²°μ±
μ
λλ€. μ°λ¦¬λ 4.2.1μ μμ΅λλ€.
μλ νμΈμ,
λλ rabbitmqλ₯Ό λΈλ‘컀μ λ°±μλλ‘ μ¬μ©νκ³ μμΌλ©° κ°μ λ¬Έμ κ° μμ΅λλ€.
λꡬλ μ§ ν΄κ²°μ± μ΄ μμ΅λκΉ?
미리 κ°μ¬λ립λλ€.
μ¬κΈ°μλ κ°μ λ¬Έμ κ° μμ΅λλ€. μ΄κ²μ 100 % μ¬ν κ°λ₯ν©λλ€. μ΄λ€ μ΄μ λ‘ λΈλ‘컀μ λν μμΌμ ννΈ λΉνΈ κ°κ²©μΌλ‘ 보μ΄λ μκ° νμ μ£½μ΅λλ€.
λ³΄κ³ μ:
software -> celery:4.3.0 (rhubarb) kombu:4.5.0 py:3.6.7
billiard:3.6.0.0 py-amqp:2.4.2
platform -> system:Linux arch:64bit, ELF
kernel version:4.18.0-20-generic imp:CPython
loader -> celery.loaders.app.AppLoader
settings -> transport:amqp results:rpc:///
broker_url: 'amqp://guest:********<strong i="7">@localhost</strong>:5672//'
result_backend: 'rpc:///'
result_persistent: False
task_default_queue: 'something something'
result_expires: 3600
task_ignore_result: False
task_serializer: 'json'
result_serializer: 'json'
accept_content: ['json']
timezone: 'Europe/Berlin'
enable_utc: True
Erlang 22.0μΌλ‘ μ κ·Έλ μ΄λνμ λ λ¬Έμ κ° μμλμλ€κ³ λ§ν΄μΌν©λλ€. κ·Έλ¬λ κ·Έκ²μ μ°μ° μΌ μλ μμ΅λλ€.
μμ μ¬νμ μ μ ν΄ μ£Όμκ² μ΅λκΉ? κ°λ₯νλ€λ©΄ 4.4.0rc2μ ν¬ν¨λ κ²μ λλ€.
4.3.0μμλ gevent μμ μλ₯Ό μ¬μ©νμ¬μ΄ λμμ νμΈν μ μμ΅λλ€. geventμμ preforkλ‘ μ ννλ©΄ ν΄κ²°λλ κ² κ°μ΅λλ€. 4.1.1λ‘ λ€μ΄ κ·Έλ μ΄λλ₯Ό μλνμ§λ§ Python 3.7μμ μ»΄νμΌλμ§ μλ μ΄μ λ²μ μ gevent (1.2.2)κ° νμνκΈ° λλ¬Έμ Python 3.7μμ μλνμ§ μλ κ² κ°μ΅λλ€. λ¬Έμ κ° μμλλ©΄ rabbitmq λ‘κ·Έμ λ€μ λ©μμ§κ° νμλ©λλ€.
missed heartbeats from client, timeout: 60s
ν₯λ―Έλ‘κ²λ ννΈ λΉνΈκ° μ€ν¨ νμμλ λΆκ΅¬νκ³ μμ
μλ μ¬μ ν μμ
μ μ ννκ³ μ μ²λ¦¬ν©λλ€. μμ
μκ° λ€μ μμλ λκΉμ§ celery inspect
λͺ
λ Ήμ΄ λͺ¨λ μκ° μ΄κ³Όλ©λλ€. flower
μ¬μ ν μμ
μμ λμ 보λμ μ 보λ₯Ό νμνμ§λ§ μμ
μ μ체λ₯Ό ν΄λ¦νλ©΄ 404 Not Found μ€λ₯κ° λ°μνκ³ κ½μ celery inspect λͺ
λ Ήκ³Ό κ΄λ ¨λ μ€λ₯λ₯Ό κΈ°λ‘ν©λλ€.
monitor_1 | 2019-08-27 17:39:05.483286 [warning ] 404 GET /worker/celery<strong i="11">@38245f8fef62</strong> (172.20.0.1): Unknown worker 'celery<strong i="12">@38245f8fef62</strong>' [tornado.general]
monitor_1 | 2019-08-27 17:39:24.608962 [warning ] 'stats' inspect method failed [flower.api.control]
monitor_1 | 2019-08-27 17:39:24.609429 [warning ] 'active_queues' inspect method failed [flower.api.control]
monitor_1 | 2019-08-27 17:39:24.609847 [warning ] 'registered' inspect method failed [flower.api.control]
monitor_1 | 2019-08-27 17:39:24.610221 [warning ] 'scheduled' inspect method failed [flower.api.control]
monitor_1 | 2019-08-27 17:39:24.610905 [warning ] 'active' inspect method failed [flower.api.control]
monitor_1 | 2019-08-27 17:39:24.611369 [warning ] 'reserved' inspect method failed [flower.api.control]
monitor_1 | 2019-08-27 17:39:24.611890 [warning ] 'revoked' inspect method failed [flower.api.control]
monitor_1 | 2019-08-27 17:39:24.612512 [warning ] 'conf' inspect method failed [flower.api.control]
μ λ¬λ¦¬ 4.4.0rc3 + kombu 4.6.3μμμ΄λ₯Ό νμΈν μ¬λμ΄ νμνμλκΉ?
ν κ²μ λλ€. μ°Έκ³ λ‘ μ λ¬λ¦¬ 4.4.0rc3μλ λ€μλ§ 4.6.4κ° νμν©λλ€.
celery 4.4.0rc3 has requirement kombu<5.0,>=4.6.4, but you'll have kombu 4.6.3 which is incompatible.
μ’μ΅λλ€. 4.4.0rc3μ΄μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ κ²μΌλ‘ 보μ λλ€. gevent μμ μλ₯Ό μ¬μ©νμ¬ ννΈ λΉνΈ μ€λ₯μμ΄ 5 λΆ μ΄μ κ·Έλλ‘ λμμ΅λλ€.
kombu 4.6.3λ νΈνλ©λλ€.
μ΄ κ²½μ° μ λ¬λ¦¬ νλ‘μ νΈμ μꡬ μ¬ν νμΌμ μ λ°μ΄νΈ ν μ μμ΅λλ€.
κ·Έλ¬λ μ°λ¦¬λ 무μμ λ°κΏ¨μ΅λκΉ?
λλ λν μ΄κ²μ΄ λ«νλ μμΈμ΄ λ λ³κ²½ μ¬νμ λν ν΅μ°°λ ₯μ΄λ PR / μ½λ / λ±μ λν λ§ν¬λ₯Ό μ’μν©λλ€. μ°λ¦¬λ μν₯μ λ°μμΌλ©° μ°¨μ μ± μΈ ννΈ λΉνΈλ₯Ό λΉνμ±ννμ¬μ΄λ₯Ό μνν©λλ€ (prefork, rabbitmq, celery 4.3).
@auvipy ν?
μ’μ΅λλ€. 4.4.0rc3μ΄μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ κ²μΌλ‘ 보μ λλ€. gevent μμ μλ₯Ό μ¬μ©νμ¬ ννΈ λΉνΈ μ€λ₯μμ΄ 5 λΆ μ΄μ κ·Έλλ‘ λμμ΅λλ€.
μ΄ νΌλλ°±μ λ°λΌ λ¬Έμ κ° μ’ κ²°λμμ΅λλ€.
@auvipy μ μ¬ν μ€λ₯λ‘ μ΄μ΄μ§λ μ¬λ¬ λ¬Έμ κ°μλ κ² κ°μ΅λλ€. λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μ μ μΌλΆ μ΄μ Celery λ²μ μ μ¬μ©νμ¬ λ‘컬μμ λ²κ·Έλ₯Ό μ¬ννλ €κ³ μλνλ€λ©΄ μ’μ κ²μ λλ€.
λΉμ μ λ§μ€ν° λΈλμΉλ₯Ό μλνλ κ²μ΄ μ’μ΅λλ€.
μ΄μ λ²μ (μ : 4.1, 4.2, 4.3) μ€ νλλ‘ λ²κ·Έλ₯Ό μ¬ννκ³ 4.4λ‘ μ κ·Έλ μ΄λνλ κ²λ§μΌλ‘ λ¬Έμ κ° ν΄κ²°λμλμ§ νμΈνλ κ²μ΄ μ’μ΅λλ€. ν μ¬λμ νΌλλ°±μ κΈ°λ°μΌλ‘ μμ μ νμΈμμ΄ λ²κ·Έλ₯Ό λ«λ κ²μ μ½κ° μ±κΈνκ² λ³΄μ λλ€.
λ¬Έμ μ μ§λ©΄ νμΌλ―λ‘ μ μνλλ‘ κ°μ₯ λ¨Όμ νμΈν΄μΌν©λλ€. ν
μ μνλλ‘ κ°μ₯ λ¨Όμ νμΈν΄μΌν©λλ€.
_ "Should"? _;) νλ‘μ νΈμ νμ§μ κ΄μ¬μ _ν΄μΌνλ _ λκ΅°κ°κ° μλ€λ©΄, κ·Έκ²μ 곡μ κ΄λ¦¬μμ λλ€. μννΈμ¨μ΄λ₯Ό 무λ£λ‘ μ 곡νλ κ²μ κ°μ¬νμ§λ§ λͺ¨λ μ¬μ©μκ° νλ‘μ νΈμ κΈ°μ¬ν κ²μ΄λΌκ³ νμ€μ μΌλ‘ κΈ°λν μλ μμ΅λλ€.
μ΄μ¨λ λ¬Έμ λ₯Ό μΌμΌν¨ ꡬμ±μ λ μ΄μ μμ§λ§ μμ μ΄ μ μλμ§ μμ λΉ λκΈ°μ΄μ κ²½μ°μλ λ¬Έμ κ° μ§μλλ κ² κ°μ μ¬ννκΈ° μ¬μΈ μ μμ΅λλ€. μ°λ¦¬ νμ΄ λΉμ κΈ°μ μ μ½κ² λ³κ²½ν μ μμκΈ° λλ¬Έμ Redisλ‘ λ§μ΄κ·Έλ μ΄μ νμ¬ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€. κ·Έλ¦¬κ³ μμ§ν λ§ν΄μ Celeryμ κ΄λ ¨λ λ€λ₯Έ λ¬Έμ λ‘ μΈν΄ RQ λ‘μ μ΄μ μ κ³ λ €νκ³ μμ΅λλ€.
4.4.0rc4λμ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ κ²μΌλ‘ 보μ λλ€.
κ·Έκ²μ νμΈν μμλ λ€λ₯Έ μ¬λμ celery == 4.4.0rc4λ‘ μμ λμμ΅λλ€.
@auvipy λλ κ°λ Connection reset
μ ν¨κ» 4.3.0μμμμ΅λλ€. 4.4.0rc4μμ λ μ΄μ λ¬Έμ κ° μμ΅λλ€.
κ·Έκ²μ νμΈν μμλ λ€λ₯Έ μ¬λμ celery == 4.4.0rc4λ‘ μμ λμμ΅λλ€.
4.3.0μμ λ¬Έμ κ° μμ£Ό λ°μν©λλ€. 4.4.0rc4μμλ λ¬Έμ κ° ν¨μ¬ λ λ°μνμ§λ§ λλλ‘ μ¬μ ν λ°μν©λλ€.
redis-server 5.0.6 λ° python redis Client 3.3.11μ ~ 14 κ°μ μ£ΌκΈ°μ μμ
(30 μ΄λ§λ€)κ³Ό ν¨κ» μ¬μ©νκ³ μμ΅λλ€.
κ·Έλμ λλ λΉμ μκ² λ¬Έμ λ₯Ό λ€μ μ΄ κ²μ μμ²ν©λλ€.
κ°μ¬!
4.3.0μμ λ¬Έμ κ° μμ£Ό λ°μν©λλ€. 4.4.0rc4μμλ λ¬Έμ κ° ν¨μ¬ λ λ°μνμ§λ§ λλλ‘ μ¬μ ν λ°μν©λλ€.
redis-server 5.0.6 λ° python redis Client 3.3.11μ ~ 14 κ°μ μ£ΌκΈ°μ μμ (30 μ΄λ§λ€)κ³Ό ν¨κ» μ¬μ©νκ³ μμ΅λλ€.
κ·Έλμ λλ λΉμ μκ² λ¬Έμ λ₯Ό λ€μ μ΄ κ²μ μμ²ν©λλ€.
κ°μ¬
μ€μ λ‘μ΄ λ¬Έμ λ κΈ°λ³Έ μ€μ μΌλ‘ μ¬μ ν λ°μν©λλ€. κ·Έλ¬λ λ€λ₯Έ μ€λ λμμ μΈκΈνλ―μ΄ broker_heartbeat = 0
μμ celeryconfig.py
broker_heartbeat = 0
λ₯Ό μ€μ νλ©΄ λμμ΄λλ κ² κ°μ΅λλ€.
celery 4.4.0rc4
μ
κ·Έλ μ΄λνκ³ celery.pyμ CELERY_BROKER_HEARTBEAT = 0
μ μΆκ° ν νμλ λ³λ€λ₯Έ λ³νκ°μλ κ²μ²λΌ 보μ΄μ§λ§ μ¬μ ν μ€λ₯κ° λ°μν©λλ€.
μ λ¬λ¦¬ 4.2.0μμ 4.10μΌλ‘ λ€μ΄ κ·Έλ μ΄λ ν νμλ λ¬Έμ κ° ν΄κ²°λμ§ μμμ΅λλ€.
Follwoing λ²μ μ μ°λ¦¬ νλ‘μ νΈμμ usinfμ
λλ€.
λΉκ΅¬ == 3.5.0.2, λ€μλ§ == 4.1.0, μ
λ¬λ¦¬ == 4.1.0, amqp == 2.4.2
μ μ ν΄μ£ΌμΈμ
μ°λ¦¬λ μ΄κ²μ 보거λμ΄ λ¬Έμ μ λ§€μ° μ μ¬ν κ²μ보기 μμνμ΅λλ€.
μννΈμ¨μ΄-> μ
λ¬λ¦¬ : 4.3.0 (rhubarb) kombu : 4.5.0 py : 2.7.12
λΉκ΅¬ : 3.6.0.0 redis : 3.2.1
κ·Έκ²μ μ€μ μ μΈ λ³νμμ΄ ν루μ λͺ λ² λ°μνκΈ° μμνμ΅λλ€.
λ€μ 릴리μ€μμλ μ΅μ λ²μ μΈ celery 4.4.0, redis λ±μΌλ‘ μ
κ·Έλ μ΄λνκ³ λ³΄κ³ ν κ²μ
λλ€.
(concurrency = 1000 (gevent) & redis as broker)μ ν¨κ» λ°μν©λλ€.
μ
λ¬λ¦¬ == 4.4.0 (μ λ²½)
kombu == 4.6.7
λΉκ΅¬ == 3.6.2.0
(py-) redis == 3.4.1
Redis μλ² λ²μ = 5.0.7
νμ΄μ¬ 3.7.3
https://sentry.io/share/issue/85f87e60a7c441198c082b9ebf051693/
νκ·Έ
νκ²½
μ΄κ²μ asyncioμ open_connectionμ μ¬μ©νμ¬ TCP μλ²μ μ°κ²°ν λ λ°μν©λλ€. VPN λ΄μμ μ격 μλ²μ μ°κ²°νκ³ 15 λΆ νμ μ°κ²°μ΄ λμ΄μ§λλ€. μ°κ²°μ΄ μ ν΄ μνμ΄κΈ° λλ¬Έμ΄λΌκ³ μκ°ν©λλ€. μ격 μλ² λ΄μμ μ°κ²°ν λλ κ°μ μΌμ΄ λ°μνμ§ μμ΅λλ€. λ€νΈμν¬μ κ΄λ ¨λ κ² κ°μ΅λλ€.
λ΄ μ¬κ±΄μ ν΄κ²° νμ΄! μ΄.
μ λ¬λ¦¬ λ¬Έμ κ° μλ μμ΅λλ€. 4. [234] .0μ ν¬ν¨νμ¬ λͺ κ°μ§ λ²μ μ μ¬μ©ν΄ 보μκ³ , redisμ λͺ κ°μ§ λ²μ μ νμ΄μ¬ μΈν°νμ΄μ€λ₯Ό μλνμ΅λλ€. κ·Έλ¦¬κ³ μ λ νμ λμΌν μ€ν¨μ¨ (μμ² 50 λ§ κ±΄μ κ²½μ° μ½ 2 β°)μ λ μ μμ΅λλ€.
ν΄κ²°μ± μ redis μλ² μ¬κ΅¬μ±, μ¦ λͺ¨λ ν΄λμ€μ λν΄ ν΄λΌμ΄μΈνΈ μΆλ ₯ λ²νΌ μ νμ λΉνμ±ννλ κ²μ λλ€. redis λ¬Έμ μ λ°λ₯΄λ©΄ :
νλ νκ³μ λλ¬νκ±°λ μννΈ νκ³μ λλ¬νκ³ μ§μ λ μκ° (μ°μ) λμ λλ¬ ν μνλ‘ μ μ§λλ©΄ ν΄λΌμ΄μΈνΈλ μ¦μ μ°κ²°μ΄ λμ΄μ§λλ€.
β¦
νλ λλ μννΈ μ νμ λͺ¨λ 0μΌλ‘ μ€μ νμ¬ λΉνμ±ν ν μ μμ΅λλ€.
μ¬λ¬λΆ λͺ¨λμκ² λμμ΄λκΈ°λ₯Ό λ°λλλ€. μλλ©΄ λ΄ μ루μ μ κ°μ ν μλ μμ΅λλ€.
λ΄ μ¬κ±΄μ ν΄κ²° νμ΄! μ΄.
μ λ¬λ¦¬ λ¬Έμ κ° μλ μμ΅λλ€. 4. [234] .0μ ν¬ν¨νμ¬ λͺ κ°μ§ λ²μ μ μ¬μ©ν΄ 보μκ³ , redisμ λͺ κ°μ§ λ²μ μ νμ΄μ¬ μΈν°νμ΄μ€λ₯Ό μλνμ΅λλ€. κ·Έλ¦¬κ³ μ λ νμ λμΌν μ€ν¨μ¨ (μμ² 50 λ§ κ±΄μ κ²½μ° μ½ 2 β°)μ λ μ μμ΅λλ€.
ν΄κ²°μ± μ redis μλ² μ¬κ΅¬μ±, μ¦ λͺ¨λ ν΄λμ€μ λν΄ ν΄λΌμ΄μΈνΈ μΆλ ₯ λ²νΌ μ νμ λΉνμ±ννλ κ²μ λλ€. redis λ¬Έμ μ λ°λ₯΄λ©΄ :
νλ νκ³μ λλ¬νκ±°λ μννΈ νκ³μ λλ¬νκ³ μ§μ λ μκ° (μ°μ) λμ λλ¬ ν μνλ‘ μ μ§λλ©΄ ν΄λΌμ΄μΈνΈλ μ¦μ μ°κ²°μ΄ λμ΄μ§λλ€.
β¦
νλ λλ μννΈ μ νμ λͺ¨λ 0μΌλ‘ μ€μ νμ¬ λΉνμ±ν ν μ μμ΅λλ€.μ¬λ¬λΆ λͺ¨λμκ² λμμ΄λκΈ°λ₯Ό λ°λλλ€. μλλ©΄ λ΄ μ루μ μ κ°μ ν μλ μμ΅λλ€.
μ΄κ²μ λ€λ₯Έ μ μμ΄ μμλ μ μκ²λ ν¨κ³Όμ μ΄μμ΅λλ€. κ°μ¬ν©λλ€!
μ€μ λ¬Έμ κ° ν΄κ²°λμμμ νμΈν μλ μμ΅λλ€. @rganowskiμ μκ°μ ν¬μ ν΄ μ£Όμ μ κ°μ¬ν©λλ€!
μ΄ λ°©λ²μΌλ‘ λ¬Έμ κ° ν΄κ²°λλ€λ©΄ μ’μ§λ§ κ΅¬μ± νμΌμμ κΈ°λ³Έκ°μ μ κ±°νκΈ° μ μ ν΄λΉ μ€μ μ΄ λ¬΄μμνλμ§, μ κΈ°λ³Έ ꡬμ±μ μΌλΆμΈμ§ μλ κ²μ΄ μ’μ κ² κ°μ΅λλ€.
@Moulde κ΅¬μ± νμΌμμ κΈ°λ³Έκ°μ μμ νλ κ²μ λν΄ λ§νλ κ²μ΄ 무μμ μλ―Ένλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. μ΄λ€ κ΅¬μ± νμΌμ λκΉ? λ΄κ° μ§μ ν κΈ°λ³Έ Redis μλ² μ€μ μ λ³κ²½νλ κ²μ μλ―Έν©λκΉ?
λν κ·Έλ¬ν κΈ°λ³Έκ°μ΄ μ‘΄μ¬νλ μ΄μ λ₯Ό μκ³ μΆμ΅λλ€. μμμ΄ μμλμ? λ§μ½ κ·Έλ λ€λ©΄ κ·Έλ€μ ν¬κΈ°ν μνμ 무μμ λκΉ? νμ§λ§ μμ§ν λ§μ λλ¦¬μ§ μκ² μ΅λλ€. 10MD μμ μ΄ μμλλ° 3MDλ₯Ό 무λ£λ‘ μΆκ°ν΄μΌνμ΅λλ€.
μ무λ κ·Έκ²μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ€κ³ λ§νμ§ μμμ΅λλ€. λλ λ΄ μ¬κ±΄μ λν ν΄κ²°μ± μ μ°Ύμλ€ κ³ λ§νλ€. λ€λ₯Έ λ λͺ μ μΉκ΅¬λ€λ κ·Έλ€μκ²λ ν¨κ³Όκ° μλ€κ³ λ§νμ΅λλ€. λλ κ·Έκ²μ κΈ°μκ² μ½μμ΅λλ€. νμ§λ§ λ΄κ° μ½μ λΉμ μ λ§μ "μ¦λͺ "μ λλ€. λ΄κ° μλͺ»?
μμ© νλ‘κ·Έλ¨μμ ν μ€νΈνκ³ ν¨κ³Όκ° μλμ§ μλ €μ£Όμμμ€. λ€λ₯Έ μμ¬μ ν΄κ²°νλ€λ©΄ λ€λ₯Έ μ¬λλ€κ³Ό 곡μ νλ κ²μ μμ§ λ§μμμ€.
@rganowski μ°λ¦¬κ° λμνλ κ² κ°μ΅λλ€. λ€, μ λ§μ΄ μλ―Ένλ λ°λ₯Ό μ μ μμ΅λλ€. κ·Έλ° μλ―Έλ μλμ§λ§ μμ€ν
κΈ°λ³Έκ°μ μμ νκΈ° μ μ μ½κ°μ 건μ ν νμλ‘ μ μΆκ°νκ³ λ¬Έμμ λν μ½κ°μ λΉνμ μΆκ°ν΄μΌν©λλ€. -ν΄λΉ μ€μ μ΄ νμν μ΄μ μ λν μ λ³΄κ° νμΌμμλ "무μμ μννλμ§"μμμλ κ²μ΄ μ’μ΅λλ€. :)
μκ°μ λ΄ μ£Όμ
μ κ°μ¬ν©λλ€. μ μ€μ€λ‘ μμ λ΄μ§ λͺ»νμ κ²μ
λλ€.
Celery μ½λμ μ€λ₯κ° μμκΈ° λλ¬Έμ λ¬Έμ κ° μ’ κ²°λμμ§λ§ λ¬Έμ μ΄λ©΄μ λ¬Έμ λ ν΄κ²°λμ§ μμμ΅λλ€. redis λ°±μλ μ€μ λ¬Έμμ μ μ ν κ²½κ³ κ° μΆκ°λμ΄μΌνλ€κ³ μκ°ν©λλ€.
'client-output-buffer-limit'μ λν μΈν°λ· κ²μμ λ§μ ν₯λ―Έλ‘μ΄ κΈ°μ¬λ₯Ό μ°Ύμ μ μμ΅λλ€. μ΄λ―Έ 6 λ μ΄ λ ν μ¬λμ μ λ§ μλ¦λ€μ΄ μ λͺ© μΈ The Replication Buffer-How to avoid Devops Headachesλ₯Ό μ»μμ΅λλ€ . μ¬κΈ°μμ μ½μ μ μμ΅λλ€.
볡μ λ²νΌμ ν¬κΈ°λ₯Ό λ리기 μ μ μ»΄ν¨ν°μ μΆ©λΆν λ©λͺ¨λ¦¬κ° μλμ§ νμΈν΄μΌν©λλ€.
λ€λ₯Έ κΈ°μ¬μμ ν΄λΌμ΄μΈνΈ λ²νΌ-νλ‘λμ μμ Redisλ₯Ό μ¬μ©νκΈ° μ μ μ΄κ²μ νμΈνμμμ€! μ μλ λ§νλ€ :
κΈ°λ³Έμ μΌλ‘ μΌλ° ν΄λΌμ΄μΈνΈ (μΌλ° μ€ν λͺ λ Ή)λ μμ²μμ΄ (νΈμ λ°©μμΌλ‘) λ°μ΄ν°λ₯Ό μμ νμ§ μκΈ° λλ¬Έμ μ νλμ§ μκ³ μμ² μ§νμ λΉλκΈ° ν΄λΌμ΄μΈνΈ λ§ λ°μ΄ν°κ° κ°λ₯ν κ²λ³΄λ€ λΉ λ₯΄κ² μμ²λλ μλ리μ€λ₯Ό μμ± ν μ μμ΅λλ€. μ½λ€.
κ·Έκ² μ°λ¦¬ μ¬κ±΄ μλκ°μ?
λμκ² μ μ΄λ μ§κΈκΉμ§λ μ¬κ΅¬μ±μ΄ ꡬμμΌλ‘ λ°νμ‘μ΅λλ€. μ λ§ λ¬΄κ²κ³ μ¦κ°μ μΈ λΆνμμ μλ‘μ΄ '104'μ€λ₯κ° μμ΅λλ€.
νΈμ λ΄μ κ°κΈ°
μλ , λλ λ§€μ° μμ§νκ² λ€λ¦΄ μ μμ§λ§ λͺ¨λ ν΄λμ€μ λν΄ client-output-buffer-limitλ₯Ό λΉνμ±ννκΈ° μν΄ νμν μμ μ ν μμλ κ³³μ μλ €μ£Όμμμ€. λλ λν κ°μ μ€λ₯κ° λ°μνμ§λ§ μ΄λ»κ² λ κ·νμ λλ΅μ ν΄μ ν μ μμ΅λλ€. νμν λ³κ²½μ ν μ μλλ‘ λ΅λ³μ μμΈν μ€λͺ ν΄ μ£Όμκ² μ΅λκΉ? κ°μ¬ν©λλ€!
Celery μ½λμ μ€λ₯κ° μμκΈ° λλ¬Έμ λ¬Έμ κ° μ’ κ²°λμμ§λ§ λ¬Έμ μ΄λ©΄μ λ¬Έμ λ ν΄κ²°λμ§ μμμ΅λλ€. redis λ°±μλ μ€μ λ¬Έμμ μ μ ν κ²½κ³ κ° μΆκ°λμ΄μΌνλ€κ³ μκ°ν©λλ€.
'client-output-buffer-limit'μ λν μΈν°λ· κ²μμ λ§μ ν₯λ―Έλ‘μ΄ κΈ°μ¬λ₯Ό μ°Ύμ μ μμ΅λλ€. μ΄λ―Έ 6 λ μ΄ λ ν μ¬λμ μ λ§ μλ¦λ€μ΄ μ λͺ© μΈ The Replication Buffer-How to avoid Devops Headachesλ₯Ό μ»μμ΅λλ€ . μ¬κΈ°μμ μ½μ μ μμ΅λλ€.
볡μ λ²νΌμ ν¬κΈ°λ₯Ό λ리기 μ μ μ»΄ν¨ν°μ μΆ©λΆν λ©λͺ¨λ¦¬κ° μλμ§ νμΈν΄μΌν©λλ€.
λ€λ₯Έ κΈ°μ¬μμ ν΄λΌμ΄μΈνΈ λ²νΌ-νλ‘λμ μμ Redisλ₯Ό μ¬μ©νκΈ° μ μ μ΄κ²μ νμΈνμμμ€! μ μλ λ§νλ€ :
κΈ°λ³Έμ μΌλ‘ μΌλ° ν΄λΌμ΄μΈνΈ (μΌλ° μ€ν λͺ λ Ή)λ μμ²μμ΄ (νΈμ λ°©μμΌλ‘) λ°μ΄ν°λ₯Ό μμ νμ§ μκΈ° λλ¬Έμ μ νλμ§ μκ³ μμ² μ§νμ λΉλκΈ° ν΄λΌμ΄μΈνΈ λ§ λ°μ΄ν°κ° κ°λ₯ν κ²λ³΄λ€ λΉ λ₯΄κ² μμ²λλ μλ리μ€λ₯Ό μμ± ν μ μμ΅λλ€. μ½λ€.
κ·Έκ² μ°λ¦¬ μ¬κ±΄ μλκ°μ?
λμκ² μ μ΄λ μ§κΈκΉμ§λ μ¬κ΅¬μ±μ΄ ꡬμμΌλ‘ λ°νμ‘μ΅λλ€. μ λ§ λ¬΄κ²κ³ μ¦κ°μ μΈ λΆνμμ μλ‘μ΄ '104'μ€λ₯κ° μμ΅λλ€.
λ¬Έμ κ°μ PRμ κ°μ¬λ립λλ€.
@ girijesh97 @auvipy
redis.confμμ
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 0 0 0
client-output-buffer-limit pubsub 0 0 0
@rganowski Sir λ€μ λλ λ§€μ° μμ§νκ² λ€λ¦΄ μ μμ§λ§ μ λ¬λ¦¬ (λ²μ 4.4.2)λ₯Ό μ¬μ©νκ³ μ°κ²° μ€λ₯ λ¬Έμ μ μ§λ©΄ ν Django μμ© νλ‘κ·Έλ¨μ΄ μμ΅λλ€. μ΄ redis.conf νμΌμ μ°Ύκ±°λ μμ±νλ λ° λμμ μ£Όμκ² μ΅λκΉ? μ΄ νμΌμ λ΄ μμ© νλ‘κ·Έλ¨μμ λ§λ€μ΄μΌν©λκΉ μλλ©΄ μΌλΆ ν¨ν€μ§μμ μ¬μ©ν μ μμ΅λκΉ?
κ·νμ κ²½μ°κ° λμΌνλ€λ©΄ μ λ¬λ¦¬κ° redis μλ² κ²°κ³Ό λ°±μλλ₯Ό μ¬μ©νκ³ μμ΅λλ€. λ΄κ° μΈκΈ ν νμΌμ νμ€ redis μλ² κ΅¬μ± νμΌμ λλ€. μ΄κ²μ΄ μ¬μ€ μ λ¬λ¦¬ λ¬Έμ κ° μλλΌ λΆμμ© μΈ μ΄μ μ λλ€.
@auvipy λμΌν λ¬Έμ μ λν λΈλ‘컀 λ° κ²°κ³Ό λ°±μλλ‘ RabbitMQμ λν μμ μ¬νμ΄ μμ΅λκΉ? μ₯κΈ° μ€ν μμ μμλ 4.4μμμ΄λ₯Ό νμΈν μ μμ΅λλ€. μμ μμ μ¬νμ redis λ°±μλ μ μ©μ λλ€.
λνμ΄ λ¬Έμ λ RabbitMQ λ° celery 4.2.0μμ κ°νμ μΌλ‘ λ°μν©λλ€. ν¨ν€μ§ μ¬μ©μμκ² κ°μ νλ κ²μ΄ μλλΌ μ¬μλ μ²λ¦¬ κΈ°λ₯μ΄ λ΄μ₯ λ κ²½μ°μλ λ§μ°¬κ°μ§μ λλ€.
λλ λν κ·Έκ²μ κ²½ννκ³ μμ΅λλ€. μ λ Celery 4.3.0 λ° RabbitMQ 3.3.5λ₯Ό μ¬μ©νκ³ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
Celery 4.2.2μμ μ¬μ νμ΄ μ€λ₯κ° λ°μν©λλ€.