메시징 서비스 설치 ( zaqar ) 2. 설치 및 구성
페이지 정보
작성자 jkchoi 작성일 21-10-28 09:52 조회 5,673 댓글 0본문
웹 서버 WEB0.EXAMPLE-MESSAGES.NET에 memcached, uWSGI 및 Messaging을 설치하고 구성합니다.
1. ID 서비스 토큰 및 카탈로그 매핑을 캐시하려면 웹 서버 WEB0.EXAMPLE-MESSAGES.NET에 memcached를 설치합니다.
# yum install memcached
1) memcached서비스 시작
# systemctl start memcached
2) memcached서비스를 재부팅 후 자동으로 시작
# systemctl enable memcached
2. 메시징 서비스 및 uWSGI 설치
# yum -y install python-pip
# git clone https://git.openstack.org/openstack/zaqar.git
# cd zaqar
# pip install . -r ./requirements.txt --upgrade --log /tmp/zaqar-pip.log
# pip install --upgrade pymongo gevent uwsgi
3. Zaqar RBAC 정책 샘플 파일을 etc/zaqar/ 디렉토리에 복사합니다.
# mkdir
# cp etc/policy.json.sample /etc/zaqar/policy.json
4. 로그 파일 생성
# touch /var/log/zaqar-server.log
# chown ZAQARUSER:ZAQARUSER /var/log/zaqar-server.log
# chmod 600 /var/log/zaqar-server.log
- ZAQARUSER를 메시징 서비스가 실행될 시스템의 사용자 이름으로 바꿉니다.
5. uWSGI 구성 파일을 저장할 /srv/zaqar 폴더를 만듭니다.
6. 다음 내용으로 /srv/zaqar/zaqar_uwsgi.py를 만듭니다.
from keystonemiddleware import auth_token
from zaqar.transport.wsgi import app
app = auth_token.AuthProtocol(app.app, {})
7. 백로그 수신 제한을 기본값(128)에서 늘리십시오.
# echo "net.core.somaxconn=2048" | sudo tee --append /etc/sysctl.conf
8. 다음 내용으로 /srv/zaqar/uwsgi.ini 파일을 만들고 필요에 따라 수정합니다.
[uwsgi]
https = WEB0.EXAMPLE-MESSAGES.NET:8888,PATH_TO_SERVER_CRT,PATH_TO_SERVER_PRIVATE_KEY
pidfile = /var/run/zaqar.pid
gevent = 2000
gevent-monkey-patch = true
listen = 1024
enable-threads = true
module = zaqar_uwsgi:app
workers = 4
harakiri = 60
add-header = Connection: close
- PATH_TO_SERVER_CRT를 서버의 인증서 경로(*.crt)로, PATH_TO_SERVER_PRIVATE_KEY를 서버의 개인 키(*.key) 경로로 바꿉니다.
- 위의 uWSGI 구성 옵션은 로드 밸런싱을 포함한 다양한 보안 및 성능 요구 사항에 맞게 수정할 수 있습니다. 공식 uWSGI 구성 참조를 참조하십시오.
9. 다음 내용으로 메시징 서비스의 구성 파일 /etc/zaqar.conf를 만듭니다.
[DEFAULT]
# Show debugging output in logs (sets DEBUG log level output)
#debug = False
# Pooling and admin mode configs
pooling = True
admin_mode = True
# Log to file
log_file = /var/log/zaqar-server.log
# This is taken care of in our custom app.py, so disable here
;auth_strategy = keystone
# Modify to make it work with your Identity service.
[keystone_authtoken]
project_domain_name = Default
user_domain_name = Default
project_domain_id = default
project_name = service
user_domain_id = default
# File path to a PEM encoded Certificate Authority to use when verifying
# HTTPs connections. Defaults to system CAs if commented.
cafile = PATH_TO_CA_FILE
# Messaging service user name in Identity service.
username = ZAQARIDENTITYUSER
# Messaging service password in Identity service.
password = ZAQARIDENTITYPASSWORD
# Complete public Identity API endpoint (HTTPS protocol is more preferable
# than HTTP).
auth_uri = HTTPS://IDENTITY.EXAMPLE-MESSAGES.NET:5000
# Complete admin Identity API endpoint (HTTPS protocol is more preferable
# than HTTP).
auth_url = HTTPS://IDENTITY.EXAMPLE-MESSAGES.NET:35357
# Token cache time in seconds.
token_cache_time = TOKEN_CACHE_TIME
memcached_servers = 127.0.0.1:11211
[cache]
# Dogpile.cache backend module. It is recommended that Memcache with
# pooling (oslo_cache.memcache_pool) or Redis (dogpile.cache.redis) be
# used in production deployments. Small workloads (single process)
# like devstack can use the dogpile.cache.memory backend. (string
# value)
backend = dogpile.cache.memory
memcache_servers = 127.0.0.1:11211
[drivers]
transport = wsgi
message_store = mongodb
management_store = mongodb
[drivers:management_store:mongodb]
# Mongodb Connection URI. If ssl connection enabled, then ssl_keyfile,
# ssl_certfile, ssl_cert_reqs, ssl_ca_certs options need to be set
# accordingly.
uri = mongodb://MYDB0.EXAMPLE-MESSAGES.NET,MYDB1.EXAMPLE-MESSAGES.NET,MYDB2.EXAMPLE-MESSAGES.NET:27017/?replicaSet=catalog&w=2&readPreference=secondaryPreferred
# Name for the database on mongodb server.
database = zaqarmanagementstore
# Number of databases across which to partition message data, in order
# to reduce writer lock %. DO NOT change this setting after initial
# deployment. It MUST remain static. Also, you should not need a large
# number of partitions to improve performance, esp. if deploying
# MongoDB on SSD storage. (integer value)
partitions = 8
# Uncomment any options below if needed.
# Maximum number of times to retry a failed operation. Currently
# only used for retrying a message post.
;max_attempts = 1000
# Maximum sleep interval between retries (actual sleep time
# increases linearly according to number of attempts performed).
;max_retry_sleep = 0.1
# Maximum jitter interval, to be added to the sleep interval, in
# order to decrease probability that parallel requests will retry
# at the same instant.
;max_retry_jitter = 0.005
# Frequency of message garbage collections, in seconds
;gc_interval = 5 * 60
# Threshold of number of expired messages to reach in a given
# queue, before performing the GC. Useful for reducing frequent
# locks on the DB for non-busy queues, or for worker queues
# which process jobs quickly enough to keep the number of in-
# flight messages low.
#
# Note: The higher this number, the larger the memory-mapped DB
# files will be.
;gc_threshold = 1000
[drivers:message_store:mongodb]
# This section has same set of available options as
# "[drivers:management_store:mongodb]" section.
#
# If pooling is enabled, all pools inherit values from options in these
# settings unless overridden in pool creation request. Also "uri" option
# value isn't used in case of pooling.
#
# If ssl connection enabled, then ssl_keyfile, ssl_certfile, ssl_cert_reqs,
# ssl_ca_certs options need to be set accordingly.
# Name for the database on MondoDB server.
database = zaqarmessagestore
[transport]
max_queues_per_page = 1000
max_queue_metadata = 262144
max_mesages_per_page = 10
max_messages_post_size = 262144
max_message_ttl = 1209600
max_claim_ttl = 43200
max_claim_grace = 43200
[signed_url]
# Secret key used to encrypt pre-signed URLs. (string value)
secret_key = SOMELONGSECRETKEY
- 필요에 따라 옵션, 특히 대문자 값이 있는 옵션을 편집하십시오.
10. 메시징 서비스 /etc/systemd/system/zaqaruwsgi.service에 대한 서비스 파일을 만듭니다.
[Unit]
Description=uWSGI Zaqar
After=syslog.target
[Service]
ExecStart=/usr/bin/uwsgi --ini /srv/zaqar/uwsgi.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
User=ZAQARUSER
Group=ZAQARUSER
[Install]
WantedBy=multi-user.target
- ZAQARUSER메시징 서비스가 실행될 시스템의 사용자 이름으로 바꿉니다 .
설치 완료
이제 웹 서버와 데이터베이스 서버가 기능하는 Messaging 서비스를 구성한 후 서비스를 시작하고 서비스가 시스템과 함께 자동으로 시작되도록 하고 생성된 MongoDB 복제본 집합을 Messaging의 풀로 정의해야 합니다.
1. 웹 서버에서 메시징 서비스 시작
# systemctl start zaqar.uwsgi.service
2. 웹 서버에서 재부팅 후 메시징 서비스가 자동으로 시작되도록 합니다.
# systemctl enable zaqar.uwsgi.service
3. 풀 구성
# curl -i -X PUT https://WEB0.EXAMPLE-MESSAGES.NET:8888/v2/pools/POOL1 \
-d '{"weight": 100, "uri": "mongodb://MYDB0.EXAMPLE-MESSAGES.NET,MYDB1.EXAMPLE-MESSAGES.NET,MYDB2.EXAMPLE-MESSAGES.NET:27017/?replicaSet=catalog&w=2&readPreference=secondaryPreferred", "options": {"partitions": 8}}' \
-H "Client-ID: CLIENT_ID" \
-H "X-Auth-Token: TOKEN" \
-H "Content-type: application/json" \
- POOL1변수를 원하는 풀 이름으로 바꿉니다.
- CLIENT_ID변수를 예를 들어 uuidgen 유틸리티에서 생성할 수 있는 UUID(Universally Unique Identifier)로 바꿉니다.
- TOKEN변수를 ID 서비스에서 검색된 인증 토큰으로 바꿉니다 . Keystone 인증을 활성화하지 않도록 선택하면 토큰을 전달할 필요가 없습니다.
1. ID 서비스 토큰 및 카탈로그 매핑을 캐시하려면 웹 서버 WEB0.EXAMPLE-MESSAGES.NET에 memcached를 설치합니다.
# yum install memcached
1) memcached서비스 시작
# systemctl start memcached
2) memcached서비스를 재부팅 후 자동으로 시작
# systemctl enable memcached
2. 메시징 서비스 및 uWSGI 설치
# yum -y install python-pip
# git clone https://git.openstack.org/openstack/zaqar.git
# cd zaqar
# pip install . -r ./requirements.txt --upgrade --log /tmp/zaqar-pip.log
# pip install --upgrade pymongo gevent uwsgi
3. Zaqar RBAC 정책 샘플 파일을 etc/zaqar/ 디렉토리에 복사합니다.
# mkdir
# cp etc/policy.json.sample /etc/zaqar/policy.json
4. 로그 파일 생성
# touch /var/log/zaqar-server.log
# chown ZAQARUSER:ZAQARUSER /var/log/zaqar-server.log
# chmod 600 /var/log/zaqar-server.log
- ZAQARUSER를 메시징 서비스가 실행될 시스템의 사용자 이름으로 바꿉니다.
5. uWSGI 구성 파일을 저장할 /srv/zaqar 폴더를 만듭니다.
6. 다음 내용으로 /srv/zaqar/zaqar_uwsgi.py를 만듭니다.
from keystonemiddleware import auth_token
from zaqar.transport.wsgi import app
app = auth_token.AuthProtocol(app.app, {})
7. 백로그 수신 제한을 기본값(128)에서 늘리십시오.
# echo "net.core.somaxconn=2048" | sudo tee --append /etc/sysctl.conf
8. 다음 내용으로 /srv/zaqar/uwsgi.ini 파일을 만들고 필요에 따라 수정합니다.
[uwsgi]
https = WEB0.EXAMPLE-MESSAGES.NET:8888,PATH_TO_SERVER_CRT,PATH_TO_SERVER_PRIVATE_KEY
pidfile = /var/run/zaqar.pid
gevent = 2000
gevent-monkey-patch = true
listen = 1024
enable-threads = true
module = zaqar_uwsgi:app
workers = 4
harakiri = 60
add-header = Connection: close
- PATH_TO_SERVER_CRT를 서버의 인증서 경로(*.crt)로, PATH_TO_SERVER_PRIVATE_KEY를 서버의 개인 키(*.key) 경로로 바꿉니다.
- 위의 uWSGI 구성 옵션은 로드 밸런싱을 포함한 다양한 보안 및 성능 요구 사항에 맞게 수정할 수 있습니다. 공식 uWSGI 구성 참조를 참조하십시오.
9. 다음 내용으로 메시징 서비스의 구성 파일 /etc/zaqar.conf를 만듭니다.
[DEFAULT]
# Show debugging output in logs (sets DEBUG log level output)
#debug = False
# Pooling and admin mode configs
pooling = True
admin_mode = True
# Log to file
log_file = /var/log/zaqar-server.log
# This is taken care of in our custom app.py, so disable here
;auth_strategy = keystone
# Modify to make it work with your Identity service.
[keystone_authtoken]
project_domain_name = Default
user_domain_name = Default
project_domain_id = default
project_name = service
user_domain_id = default
# File path to a PEM encoded Certificate Authority to use when verifying
# HTTPs connections. Defaults to system CAs if commented.
cafile = PATH_TO_CA_FILE
# Messaging service user name in Identity service.
username = ZAQARIDENTITYUSER
# Messaging service password in Identity service.
password = ZAQARIDENTITYPASSWORD
# Complete public Identity API endpoint (HTTPS protocol is more preferable
# than HTTP).
auth_uri = HTTPS://IDENTITY.EXAMPLE-MESSAGES.NET:5000
# Complete admin Identity API endpoint (HTTPS protocol is more preferable
# than HTTP).
auth_url = HTTPS://IDENTITY.EXAMPLE-MESSAGES.NET:35357
# Token cache time in seconds.
token_cache_time = TOKEN_CACHE_TIME
memcached_servers = 127.0.0.1:11211
[cache]
# Dogpile.cache backend module. It is recommended that Memcache with
# pooling (oslo_cache.memcache_pool) or Redis (dogpile.cache.redis) be
# used in production deployments. Small workloads (single process)
# like devstack can use the dogpile.cache.memory backend. (string
# value)
backend = dogpile.cache.memory
memcache_servers = 127.0.0.1:11211
[drivers]
transport = wsgi
message_store = mongodb
management_store = mongodb
[drivers:management_store:mongodb]
# Mongodb Connection URI. If ssl connection enabled, then ssl_keyfile,
# ssl_certfile, ssl_cert_reqs, ssl_ca_certs options need to be set
# accordingly.
uri = mongodb://MYDB0.EXAMPLE-MESSAGES.NET,MYDB1.EXAMPLE-MESSAGES.NET,MYDB2.EXAMPLE-MESSAGES.NET:27017/?replicaSet=catalog&w=2&readPreference=secondaryPreferred
# Name for the database on mongodb server.
database = zaqarmanagementstore
# Number of databases across which to partition message data, in order
# to reduce writer lock %. DO NOT change this setting after initial
# deployment. It MUST remain static. Also, you should not need a large
# number of partitions to improve performance, esp. if deploying
# MongoDB on SSD storage. (integer value)
partitions = 8
# Uncomment any options below if needed.
# Maximum number of times to retry a failed operation. Currently
# only used for retrying a message post.
;max_attempts = 1000
# Maximum sleep interval between retries (actual sleep time
# increases linearly according to number of attempts performed).
;max_retry_sleep = 0.1
# Maximum jitter interval, to be added to the sleep interval, in
# order to decrease probability that parallel requests will retry
# at the same instant.
;max_retry_jitter = 0.005
# Frequency of message garbage collections, in seconds
;gc_interval = 5 * 60
# Threshold of number of expired messages to reach in a given
# queue, before performing the GC. Useful for reducing frequent
# locks on the DB for non-busy queues, or for worker queues
# which process jobs quickly enough to keep the number of in-
# flight messages low.
#
# Note: The higher this number, the larger the memory-mapped DB
# files will be.
;gc_threshold = 1000
[drivers:message_store:mongodb]
# This section has same set of available options as
# "[drivers:management_store:mongodb]" section.
#
# If pooling is enabled, all pools inherit values from options in these
# settings unless overridden in pool creation request. Also "uri" option
# value isn't used in case of pooling.
#
# If ssl connection enabled, then ssl_keyfile, ssl_certfile, ssl_cert_reqs,
# ssl_ca_certs options need to be set accordingly.
# Name for the database on MondoDB server.
database = zaqarmessagestore
[transport]
max_queues_per_page = 1000
max_queue_metadata = 262144
max_mesages_per_page = 10
max_messages_post_size = 262144
max_message_ttl = 1209600
max_claim_ttl = 43200
max_claim_grace = 43200
[signed_url]
# Secret key used to encrypt pre-signed URLs. (string value)
secret_key = SOMELONGSECRETKEY
- 필요에 따라 옵션, 특히 대문자 값이 있는 옵션을 편집하십시오.
10. 메시징 서비스 /etc/systemd/system/zaqaruwsgi.service에 대한 서비스 파일을 만듭니다.
[Unit]
Description=uWSGI Zaqar
After=syslog.target
[Service]
ExecStart=/usr/bin/uwsgi --ini /srv/zaqar/uwsgi.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
User=ZAQARUSER
Group=ZAQARUSER
[Install]
WantedBy=multi-user.target
- ZAQARUSER메시징 서비스가 실행될 시스템의 사용자 이름으로 바꿉니다 .
설치 완료
이제 웹 서버와 데이터베이스 서버가 기능하는 Messaging 서비스를 구성한 후 서비스를 시작하고 서비스가 시스템과 함께 자동으로 시작되도록 하고 생성된 MongoDB 복제본 집합을 Messaging의 풀로 정의해야 합니다.
1. 웹 서버에서 메시징 서비스 시작
# systemctl start zaqar.uwsgi.service
2. 웹 서버에서 재부팅 후 메시징 서비스가 자동으로 시작되도록 합니다.
# systemctl enable zaqar.uwsgi.service
3. 풀 구성
# curl -i -X PUT https://WEB0.EXAMPLE-MESSAGES.NET:8888/v2/pools/POOL1 \
-d '{"weight": 100, "uri": "mongodb://MYDB0.EXAMPLE-MESSAGES.NET,MYDB1.EXAMPLE-MESSAGES.NET,MYDB2.EXAMPLE-MESSAGES.NET:27017/?replicaSet=catalog&w=2&readPreference=secondaryPreferred", "options": {"partitions": 8}}' \
-H "Client-ID: CLIENT_ID" \
-H "X-Auth-Token: TOKEN" \
-H "Content-type: application/json" \
- POOL1변수를 원하는 풀 이름으로 바꿉니다.
- CLIENT_ID변수를 예를 들어 uuidgen 유틸리티에서 생성할 수 있는 UUID(Universally Unique Identifier)로 바꿉니다.
- TOKEN변수를 ID 서비스에서 검색된 인증 토큰으로 바꿉니다 . Keystone 인증을 활성화하지 않도록 선택하면 토큰을 전달할 필요가 없습니다.
댓글목록 0
등록된 댓글이 없습니다.