diff --git a/.gitmodules b/.gitmodules index eaa7772f5c..cd300b8328 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,18 @@ [submodule "modules/tntcxx"] path = modules/tntcxx url = https://github.com/tarantool/tntcxx.git +[submodule "modules/task"] + path = modules/task + url = https://github.com/tarantool/task.git +[submodule "modules/odbc"] + path = modules/odbc + url = https://github.com/tarantool/odbc.git +[submodule "modules/ldap"] + path = modules/ldap + url = https://github.com/tarantool/ldap.git +[submodule "modules/oracle"] + path = modules/oracle + url = https://github.com/tarantool/oracle.git +[submodule "modules/space-explorer"] + path = modules/space-explorer + url = https://github.com/tarantool/space-explorer.git diff --git a/conf.py b/conf.py index 88b6c74521..e9e9c6fd14 100644 --- a/conf.py +++ b/conf.py @@ -40,6 +40,7 @@ extlinks = { 'tarantool-issue': ('https://github.com/tarantool/tarantool/issues/%s', 'gh-'), + 'tarantool-ee-issue': ('https://github.com/tarantool/tarantool-ee/issues/%s', 'gh-'), 'tarantool-release': ('https://github.com/tarantool/tarantool/releases/%s', 'v. '), 'tt-release': ('https://github.com/tarantool/tt/releases/v%s', 'v. '), 'doc-issue': ('https://github.com/tarantool/doc/issues/%s', 'doc-'), diff --git a/doc/book/admin/access_control.rst b/doc/book/admin/access_control.rst index e1e32e1b15..18f5d82219 100644 --- a/doc/book/admin/access_control.rst +++ b/doc/book/admin/access_control.rst @@ -78,7 +78,7 @@ Tarantool supports two protocols for authenticating users: In this case, password hashes are stored in the ``_user`` space `unsalted `_. If an attacker gains access to the database, they may crack a password using, for example, a `rainbow table `_. -* `PAP `_ with ``SHA256`` hashing (Tarantool Enterprise) +* `PAP `_ with ``SHA256`` hashing (Enterprise Edition) For PAP, a password is salted with a user-unique salt before saving it in the ``_user`` space. This keeps the database protected from cracking using a rainbow table. @@ -90,7 +90,7 @@ There are two functions for managing passwords in Tarantool: * :doc:`/reference/reference_lua/box_schema/user_password` returns a hash of a user's password. -Tarantool Enterprise also allows you to improve database security by enforcing the use of strong passwords, setting up a maximum password age, and so on. Learn more from the `Access control `__ section. +Tarantool Enterprise Edition also allows you to improve database security by enforcing the use of strong passwords, setting up a maximum password age, and so on. Learn more from the :ref:`Access control ` section. diff --git a/doc/book/connectors/python.rst b/doc/book/connectors/python.rst index 35f87f903f..3fd7e1d381 100644 --- a/doc/book/connectors/python.rst +++ b/doc/book/connectors/python.rst @@ -188,6 +188,6 @@ Last update: September 2023 - No - `Yes `__ - * - `Encrypted connection (Tarantool Enterprise) `__ + * - :ref:`Encrypted connection (Enterprise Edition) ` - No (`issue #22 `__) - Yes diff --git a/doc/concepts/data_model/migrations.rst b/doc/concepts/data_model/migrations.rst index 9e4d09cf3f..8237be789e 100644 --- a/doc/concepts/data_model/migrations.rst +++ b/doc/concepts/data_model/migrations.rst @@ -15,8 +15,8 @@ that do not require data migration: .. note:: - Check the `Upgrading space schema `__ - section in the Enterprise version. With the help of ``space:upgrade()`` feature, + Check the :ref:`Upgrading space schema ` section. + With the help of ``space:upgrade()``, you can enable compression and migrate, including already created tuples. diff --git a/doc/concepts/replication/repl_architecture.rst b/doc/concepts/replication/repl_architecture.rst index 2f4b961385..ed8850816e 100644 --- a/doc/concepts/replication/repl_architecture.rst +++ b/doc/concepts/replication/repl_architecture.rst @@ -29,7 +29,7 @@ the update operations to save space. .. NOTE:: - `WAL extensions `_ available in Tarantool Enterprise enable you to add auxiliary information to each write-ahead log record. + :ref:`WAL extensions ` available in Tarantool Enterprise Edition enable you to add auxiliary information to each write-ahead log record. This information might be helpful for implementing a CDC (Change Data Capture) utility that transforms a data replication stream. The following are specifics of adding different types of information to the WAL: diff --git a/doc/contributing/docs/localization/locstate.rst b/doc/contributing/docs/localization/locstate.rst index 637e36a45d..80c38d5255 100644 --- a/doc/contributing/docs/localization/locstate.rst +++ b/doc/contributing/docs/localization/locstate.rst @@ -11,7 +11,7 @@ State of localization - State - Volume, words - * - Tarantool Community + * - Tarantool Community Edition - |doc| - 352 000 @@ -27,7 +27,7 @@ State of localization - |cartridge-cli| - 6 500 - * - Tarantool Enterprise + * - Tarantool Enterprise Edition - |tarantool-enterprise| - 6 000 diff --git a/doc/enterprise/admin.rst b/doc/enterprise/admin.rst new file mode 100644 index 0000000000..8f9d19b1bf --- /dev/null +++ b/doc/enterprise/admin.rst @@ -0,0 +1,119 @@ +.. _enterprise-admin: + +=============================================================================== +Cluster administrator's guide +=============================================================================== + +This guide focuses on Enterprise-specific administration features available +on top of Tarantool Community Edition with Tarantool Cartridge framework: + +* :ref:`space explorer ` +* :ref:`upgrade of environment-independent applications in production ` + +Otherwise, consult the following documentation for: + +* basic information on + :doc:`deploying and managing a Tarantool cluster ` +* more information on + :doc:`managing Tarantool instances ` + +.. _space_explorer: + +------------------------------------------------------------------------------- +Exploring spaces +------------------------------------------------------------------------------- + +The web interface lets you connect (in the browser) to any instance in the cluster +and see what spaces it stores (if any) and their contents. + +To explore spaces: + +#. Open the **Space Explorer** tab in the menu on the left: + + .. image:: images/space_explr_tab.png + :align: center + :scale: 80% + +#. Click **connect** next to an instance that stores data. The basic sanity-check + (``test.py``) of the example application puts sample data to one replica + set (shard), so its master and replica store the data in their spaces: + + .. image:: images/spaces_with_data.png + :align: center + :scale: 80% + + When connected to a instance, the space explorer shows a table with basic + information on its spaces. For more information, see the + :doc:`box.space reference `. + + To see hidden spaces, tick the corresponding checkbox: + + .. image:: images/hidden_spaces.png + :align: center + :scale: 80% + +#. Click the space's name to see its format and contents: + + .. image:: images/space_contents.png + :align: center + :scale: 70% + + To search the data, select an index and, optionally, its iteration type from + the drop-down lists, and enter the index value: + + .. image:: images/space_search.png + :align: center + :scale: 80% + +.. _enterprise-production-upgrade: + +------------------------------------------------------------------------------- +Upgrading in production +------------------------------------------------------------------------------- + +To upgrade either a single instance or a cluster, you need a new version of the +packaged (archived) application. + +A single instance upgrade is simple: + +#. Upload the package (archive) to the server. +#. Stop the current instance. +#. Deploy the new one as described in :ref:`deploying packaged applications ` + (or :ref:`archived ones `). + +.. _enterprise-cluster-upgrade: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Cluster upgrade +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To upgrade a cluster, choose one of the following scenarios: + +* **Cluster shutdown**. Recommended for backward-incompatible updates, requires + downtime. + +* **Instance by instance**. Recommended for backward-compatible updates, does + not require downtime. + +To upgrade the cluster, do the following: + +#. Schedule a downtime or plan for the instance-by-instance upgrade. + +#. Upload a new application package (archive) to all servers. + +Next, execute the chosen scenario: + +* **Cluster shutdown**: + + #. Stop all instances on all servers. + #. Deploy the new package (archive) on every server. + +* **Instance by instance**. Do the following in every replica set in succession: + + #. Stop a replica on any server. + #. Deploy the new package (archive) in place of the old replica. + #. Promote the new replica to a master (see + :ref:`Switching the replica set's master ` + section in the Tarantool manual). + #. Redeploy the old master and the rest of the instances in the replica set. + #. Be prepared to resolve possible logic conflicts. diff --git a/doc/enterprise/audit.rst b/doc/enterprise/audit.rst new file mode 100644 index 0000000000..15d26a16da --- /dev/null +++ b/doc/enterprise/audit.rst @@ -0,0 +1,185 @@ +Security audit +============== + +This document will help you audit the security of a Tarantool cluster. +It explains certain security aspects, their rationale, and the ways to check them. +For details on how to configure Tarantool Enterprise Edition and its infrastructure for each aspect, +refer to the :doc:`security hardening guide `. + +Encryption of external iproto traffic +------------------------------------- + +Tarantool uses the +:doc:`iproto binary protocol ` +for replicating data between instances and also in the connector libraries. + +Since version 2.10.0, the Enterprise Edition has the built-in support for using SSL to encrypt the client-server communications over binary connections. +For details on enabling SSL encryption, see the :ref:`enterprise-iproto-encryption` section of this document. + +In case the built-in encryption is not enabled, we recommend using VPN to secure data exchange between data centers. + +Closed iproto ports +------------------- + +When a Tarantool cluster does not use iproto for external requests, +connections to the iproto ports should be allowed only between Tarantool instances. + +For more details on configuring ports for iproto, +see the ``advertise_uri`` section in the Cartridge documentation. + + +HTTPS connection termination +---------------------------- + +A Tarantool instance can accept HTTP connections from external services +or access the administrative web UI. +All such connections must go through an HTTPS-providing web server, +running on the same host, such as nginx. +This requirement is for both virtual and physical hosts. +Running HTTP traffic through a few separate hosts with HTTPS termination +is not sufficiently secure. + + +Closed HTTP ports +----------------- + +Tarantool accepts HTTP connections on a specific port, configured with +``http_port: `` value +(see :ref:`configuring Cartridge instances `). +It must be only available on the same host for nginx to connect to it. + +Check that the configured HTTP port is closed +and that the HTTPS port (``443`` by default) is open. + +Restricted access to the administrative console +----------------------------------------------- + +The :doc:`console ` module provides +a way to connect to a running instance and run custom Lua code. +This can be useful for development and administration. +The following code examples open connections on a TCP port and on a UNIX socket. + +.. code-block:: lua + + console.listen() + console.listen('/var/lib/tarantool/socket_name.sock') + +Opening an administrative console through a TCP port is always unsafe. +Check that there are no calls like ``console.listen()`` +in the code. + +Connecting through a socket requires having the write permission on the +``/var/lib/tarantool`` directory. +Check that write permission to this directory is limited to the ``tarantool`` user. + +Limiting the guest user +----------------------- + +Connecting to the instance with ``tt connect`` or ``tarantoolctl connect`` without +user credentials (under the ``guest`` user) must be disabled. + +There are two ways to check this vulnerability: + +* Check that the source code doesn't grant access to the ``guest`` user. + The corresponding code can look like this: + + .. code-block:: lua + + box.schema.user.grant('guest', + 'read,write', + 'universe', + nil, { if_not_exists = true } + ) + + Besides searching for the whole code pattern, + search for any entries of ``'universe'``. + +* Try connecting with ``tt connect`` to each Tarantool node. + +For more details, refer to the documentation on +:ref:`access control `. + +Authorization in the web UI +--------------------------- + +Using the web interface must require logging in with a username and password. +See more details in the documentation on +:ref:`configuring web interface authorization `. + +Running under the tarantool user +-------------------------------- + +All Tarantool instances should be running under the ``tarantool`` user. + +Limiting access to the tarantool user +------------------------------------- + +The ``tarantool`` user must be a non-privileged user without the ``sudo`` permission. +Also, it must not have a password set to prevent logging in via SSH or ``su``. + + +Keeping two or more snapshots +----------------------------- + +In order to have a reliable backup, a Tarantool instance must keep +two or more latest snapshots. +This should be checked on each Tarantool instance. + +The :ref:`snapshot_count ` value +determines the number of kept snapshots. +Configuration values are primarily set in the configuration files +but :doc:`can be overridden ` +with environment variables and command-line arguments. +So, it's best to check both the values in the configuration files and the actual values +using the console: + +.. code-block:: tarantoolsession + + tarantool> box.cfg.checkpoint_count + --- + - 2 + + +Enabled write-ahead logging (WAL) +--------------------------------- + +Tarantool records all incoming data in the write-ahead log (WAL). +The WAL must be enabled to ensure that data will be recovered in case of +a possible instance restart. + +Secure values of ``wal_mode`` are ``write`` and ``fsync``: + +.. code-block:: tarantoolsession + + tarantool> box.cfg.wal_mode + --- + - write + +An exclusion from this requirement is when the instance is processing data, +which can be freely rejected. +For example, when Tarantool is used for caching. +Then WAL can be disabled to reduce i/o load. + +For more details, see the +:ref:`wal_mode reference `. + +The logging level is INFO or higher +----------------------------------- + +The logging level should be set to 5 (``INFO``), 6 (``VERBOSE``), or 7 (``DEBUG``). +Application logs will then have enough information to research a possible security breach. + +.. code-block:: tarantoolsession + + tarantool> box.cfg.log_level + --- + - 5 + +For a full list of logging levels, see the +:ref:`log_level reference `. + + +Logging with journald +--------------------- + +Tarantool should use ``journald`` for logging. diff --git a/doc/enterprise/audit_log.rst b/doc/enterprise/audit_log.rst new file mode 100644 index 0000000000..9c3a2d814b --- /dev/null +++ b/doc/enterprise/audit_log.rst @@ -0,0 +1,668 @@ +.. _enterprise_audit_module: + +Audit module +============ + +The audit module available in Tarantool Enterprise Edition writes messages that record Tarantool events in plain text, CSV, or JSON format. + +It provides detailed reports of security-related activities and helps you find and +fix breaches to protect your business. For example, you can see who created a new user +and when: + +.. code-block:: json + + { + "time": "2022-04-07T13:39:36.046+0300", + "remote": "", + "session_type": "background", + "module": "tarantool", + "user": "admin", + "type": "user_create", + "tag": "", + "description": "Create user alice" + } + +It is up to each company to decide exactly what activities to audit and what actions to take. +System administrators, security engineers, and people in charge of the company may want to +audit different events for different reasons. Tarantool provides such an option for each of them. + +.. _audit-log-events: + +Audit log events +---------------- + +The Tarantool audit log module can record various events that you can monitor and +decide whether you need to take actions: + +* Admin activity -- events related to actions performed by the administrator. + For example, such logs record the creation of a user. + +* Access events -- events related to authorization and authentication of users. + For example, such logs record failed attempts to access secure data. + +* Data access and modification -- events of data manipulation in the storage. + +* System events -- events related to modification or configuration of resources. + For example, such logs record the replacement of a space. + +* :ref:`User-defined events `-- any events added manually using + the audit module API. + +The full list of available audit log events is provided in the table below: + +.. container:: table + + .. list-table:: + :widths: 30 35 35 + :header-rows: 1 + + * - Event + - Type of event written to the audit log + - Example of an event description + * - Audit log enabled for events + - ``audit_enable`` + - + * - :ref:`User-defined events ` + - ``custom`` + - + * - User authorized successfully + - ``auth_ok`` + - ``Authenticate user `` + * - User authorization failed + - ``auth_fail`` + - ``Failed to authenticate user `` + * - User logged out or quit the session + - ``disconnect`` + - ``Close connection`` + * - User created + - ``user_create`` + - ``Create user `` + * - User dropped + - ``user_drop`` + - ``Drop user `` + * - Role created + - ``role_create`` + - ``Create role `` + * - Role dropped + - ``role_drop`` + - ``Drop role `` + * - User disabled + - ``user_disable`` + - ``Disable user `` + * - User enabled + - ``user_enable`` + - ``Enable user `` + * - User granted rights + - ``user_grant_rights`` + - ``Grant rights for to user `` + * - User revoked rights + - ``user_revoke_rights`` + - ``Revoke rights for from user `` + * - Role granted rights + - ``role_grant_rights`` + - ``Grant rights for to role `` + * - Role revoked rights + - ``role_revoke_rights`` + - ``Revoke rights for from role `` + * - User password changed + - ``password_change`` + - ``Change password for user `` + * - Failed attempt to access secure data (personal records, details, geolocation, etc.) + - ``access_denied`` + - `` denied to `` + * - Expressions with arguments evaluated in a string + - ``eval`` + - ``Evaluate expression `` + * - Function called with arguments + - ``call`` + - ``Call function with arguments `` + * - Iterator key selected from ``space.index`` + - ``space_select`` + - ``Select from .`` + * - Space created + - ``space_create`` + - ``Create space `` + * - Space altered + - ``space_alter`` + - ``Alter space `` + * - Space dropped + - ``space_drop`` + - ``Drop space `` + * - Tuple inserted into space + - ``space_insert`` + - ``Insert tuple into space `` + * - Tuple replaced in space + - ``space_replace`` + - ``Replace tuple with in space `` + * - Tuple deleted from space + - ``space_delete`` + - ``Delete tuple from space `` + + + .. note:: + + The ``eval`` event displays data from the ``console`` module + and the ``eval`` function of the ``net.box`` module. + For more on how they work, see :ref:`Module console ` + and :ref:`Module net.box -- eval `. + To separate the data, specify ``console`` or ``binary`` in the session field. + +.. _audit-log-event-groups: + +Event groups +------------ + +You can simplify working with audit log events by using built-in event groups. +For example, you can set to record only events related to the enabling of the audit log, +or only events related to a space. + +Tarantool provides the following event groups: + +* ``all`` -- all :ref:`events `. + + .. note:: + + Events ``call`` and ``eval`` are included only into the ``all`` group. + +* ``audit`` -- ``audit_enable`` event. + +* ``auth`` -- authorization events: ``auth_ok``, ``auth_fail``. + +* ``priv`` -- events related to authentication, authorization, users, and roles: + ``user_create``, ``user_drop``, ``role_create``, ``role_drop``, ``user_enable``, ``user_disable``, + ``user_grant_rights``, ``user_revoke_rights``, ``role_grant_rights``, ``role_revoke_rights``. + +* ``ddl`` -- events of space creation, altering, and dropping: + ``space_create``, ``space_alter``, ``space_drop``. + +* ``dml`` -- events of data modification in spaces: + ``space_insert``, ``space_replace``, ``space_delete``. + +* ``data_operations`` -- events of data modification or selection from spaces: + ``space_select``, ``space_insert``, ``space_replace``, ``space_delete``. + +* ``compatibility`` -- events available in Tarantool before the version 2.10.0. + ``auth_ok``, ``auth_fail``, ``disconnect``, ``user_create``, ``user_drop``, + ``role_create``, ``role_drop``, ``user_enable``, ``user_disable``, + ``user_grant_rights``, ``user_revoke_rights``, ``role_grant_rights``. + ``role_revoke_rights``, ``password_change``, ``access_denied``. + This group enables the compatibility with earlier Tarantool versions. + +.. warning:: + + Be careful when recording ``all`` and ``data_operations`` event groups. + The more events you record, the slower the requests will be processed over time. + It is recommended that you select only those groups + whose events your company really needs to monitor and analyze. + +.. _audit-log-structure: + +Structure of audit log events +----------------------------- + +Each audit log event contains several fields to make it easy to filter and aggregate the resulting logs. +They are described in the following table. + +.. container:: table + + .. list-table:: + :widths: 30 35 35 + :header-rows: 1 + + * - Field + - Description + - Example of a log field display + * - ``time`` + - Time of the event + - 2022-04-07T13:20:05.327+0300 + * - ``remote`` + - Remote host that triggered the event + - 100.96.163.226:48722 + * - ``session_type`` + - Session type + - console + * - ``module`` + - Audit log module. Set to ``tarantool`` for system events; + can be overwritten for user-defined events + - tarantool + * - ``user`` + - User who triggered the event + - admin + * - ``type`` + - Audit event type + - access_denied + * - ``tag`` + - A text field that can be overwritten by the user + - + * - ``description`` + - Human-readable event description + - Authenticate user Alice + + .. warning:: + + You can set all these parameters only once. Unlike many other parameters in ``box.cfg``, + they cannot be changed. + +.. _audit-log-start: + +Enable the Tarantool audit log +------------------------------ + +By default, audit logging is disabled. To enable audit logging, +define the logs location by setting the ``box.cfg.audit_log`` option. +Tarantool can write audit logs to a file, to a pipe, or to the system logger. + +To disable audit logging, set the ``audit_log`` option to ``nil``. + +Write to a file +~~~~~~~~~~~~~~~ + +.. code-block:: lua + + box.cfg{audit_log = 'audit_tarantool.log'} + -- or + box.cfg{audit_log = 'file:audit_tarantool.log'} + +This opens the ``audit_tarantool.log`` file for output in the server’s default directory. +If the ``audit_log`` string has no prefix or the prefix ``file:``, the string is interpreted as a file path. + +Send to a pipe +~~~~~~~~~~~~~~ + +.. code-block:: lua + + box.cfg{audit_log = '| cronolog audit_tarantool.log'} + -- or + box.cfg{audit_log = 'pipe: cronolog audit_tarantool.log'}' + +This starts the `cronolog `_ program when the server starts +and sends all ``audit_log`` messages to cronolog's standard input (``stdin``). +If the ``audit_log`` string starts with '|' or contains the prefix ``pipe:``, +the string is interpreted as a Unix `pipeline `_. + +Send to syslog +~~~~~~~~~~~~~~ + +.. warning:: + + Below is an example of writing audit logs to a directory shared with the system logs. + Tarantool allows this option, but it is not recommended to do this to avoid difficulties + when working with audit logs. System and audit logs should be written separately. + To do this, create separate paths and specify them. + +This example setting sends the audit log to syslog: + +.. code-block:: lua + + box.cfg{audit_log = 'syslog:identity=tarantool'} + -- or + box.cfg{audit_log = 'syslog:facility=user'} + -- or + box.cfg{audit_log = 'syslog:identity=tarantool,facility=user'} + -- or + box.cfg{audit_log = 'syslog:server=unix:/dev/log'} + +If the ``audit_log`` string starts with "syslog:", +it is interpreted as a message for the `syslogd `_ program, +which normally runs in the background of any Unix-like platform. +The setting can be 'syslog:', 'syslog:facility=...', 'syslog:identity=...', 'syslog:server=...' or a combination. + +The ``syslog:identity`` setting is an arbitrary string that is placed at the beginning of all messages. +The default value is ``tarantool``. + +The ``syslog:facility`` setting is currently ignored, but will be used in the future. +The value must be one of the `syslog `_ keywords +that tell ``syslogd`` where to send the message. +The possible values are ``auth``, ``authpriv``, ``cron``, ``daemon``, ``ftp``, +``kern``, ``lpr``, ``mail``, ``news``, ``security``, ``syslog``, ``user``, ``uucp``, +``local0``, ``local1``, ``local2``, ``local3``, ``local4``, ``local5``, ``local6``, ``local7``. +The default value is ``local7``. + +The ``syslog:server`` setting is the locator for the syslog server. +It can be a Unix socket path starting with "unix:" or an ipv4 port number. +The default socket value is ``/dev/log`` (on Linux) or ``/var/run/syslog`` (on Mac OS). +The default port value is 514, which is the UDP port. + +If you log to a file, Tarantool will reopen the audit log at `SIGHUP `_. +If log is a program, its pid is stored in the ``audit_log.logger_pid`` variable. +You need to send it a signal to rotate logs. + +An example of a Tarantool audit log entry in the syslog: + +.. code-block:: json + + { + "__CURSOR" : "s=81564632436a4de590e80b89b0151148;i=11519;b=def80c1464fe49d1aac8a64895d6614d;m=8c825ebfc;t=5edb27a75f282;x=7eba320f7cc9ae4d", + "__REALTIME_TIMESTAMP" : "1668725698065026", + "__MONOTONIC_TIMESTAMP" : "37717666812", + "_BOOT_ID" : "def80c1464fe49d1aac8a64895d6614d", + "_UID" : "1003", + "_GID" : "1004", + "_COMM" : "tarantool", + "_EXE" : "/app/tarantool/dist/tdg-2.6.4.0.x86_64/tarantool", + "_CMDLINE" : "tarantool init.lua : core-03", + "_CAP_EFFECTIVE" : "0", + "_AUDIT_SESSION" : "1", + "_AUDIT_LOGINUID" : "1003", + "_SYSTEMD_CGROUP" : "/user.slice/user-1003.slice/user@1003.service/app.slice/app@core-03.service", + "_SYSTEMD_OWNER_UID" : "1003", + "_SYSTEMD_UNIT" : "user@1003.service", + "_SYSTEMD_USER_UNIT" : "app@core-03.service", + "_SYSTEMD_SLICE" : "user-1003.slice", + "_SYSTEMD_USER_SLICE" : "app.slice", + "_SYSTEMD_INVOCATION_ID" : "be368b4243d842ea8c06b010e0df62c2", + "_MACHINE_ID" : "2e2339725deb4bc198c54ff4a2e8d626", + "_HOSTNAME" : "vm-0.test.env", + "_TRANSPORT" : "syslog", + "PRIORITY" : "6", + "SYSLOG_FACILITY" : "23", + "SYSLOG_IDENTIFIER" : "tarantool", + "SYSLOG_PID" : "101562", + "_PID" : "101562", + "MESSAGE" : "remote: session_type:background module:common.admin.auth user: type:custom_tdg_audit tag:tdg_severity_INFO description:[119eae0e-a691-42cc-9b4c-f14c499e6726] subj: \"anonymous\", msg: \"Access granted to anonymous user\"", + "_SOURCE_REALTIME_TIMESTAMP" : "1668725698064202" + } + +.. _audit-log-filters: + +Select events to write to audit log +----------------------------------- + +Tarantool's extensive filtering options help you write only the events you need to the audit log. + +To select events to write to audit log, use the ``box.cfg.audit_filter`` option. +Its value can be a list of events and event groups. +The default value for the ``box.cfg.audit_filter`` option is ``compatibility``, +which enables logging of all events available before 2.10.0. + +.. code-block:: lua + + box.cfg{ + audit_log = 'audit.log', + audit_filter = 'audit,auth,priv,password_change,access_denied' + } + +.. _audit-log-combinations: + +Customize your filters +~~~~~~~~~~~~~~~~~~~~~~ + +You can customize the filters and use different combinations of filters for your purposes. + +Filter based on a specific event +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can set only certain events that you need to record. + +For example, select ``password_change`` to monitor the users who have changed their passwords. + +.. code-block:: lua + + box.cfg{ + audit_log = 'audit.log', + audit_filter = 'password_change' + } + +Filter based on a specific group +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can set one of the groups of events that you need to record. + +For example, select ``compatibility`` to monitor only events of user authorization, +granted privileges, disconnection, user password change, and denied access. + +.. code-block:: lua + + box.cfg{ + audit_log = 'audit.log', + audit_filter = 'compatibility' + } + +Filter based on multiple groups +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can specify multiple groups depending on the purpose. + +For example, select ``auth`` and ``priv`` to see only events related to authorization and granted privileges. + +.. code-block:: lua + + box.cfg{ + audit_log = 'audit.log', + audit_filter = 'auth,priv' + } + +Filter based on a group and a specific event +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can specify a group and a certain event depending on the purpose. + +For example, you can select ``priv`` and ``disconnect`` to see only events related to +granted privileges and disconnect events. + +.. code-block:: lua + + box.cfg{ + audit_log = 'audit.log', + audit_filter = 'priv,disconnect' + } + +Example +~~~~~~~ + +Run the command to filter: + +.. code-block:: lua + + local audit = require('audit') + + box.cfg{audit_log = 'audit.log', audit_filter = 'custom,user_create', audit_format = 'csv'} + -- The Tarantool audit module writes the event because a filter is set for it + box.schema.user.create('alice') + -- The Tarantool audit module will not write the event because no filter is set for it + box.schema.user.drop('alice') + +.. _audit-log-nonblock: + +Configure a blocking mode +------------------------- + +By default, the ``audit_nonblock`` option is set to ``true`` +and Tarantool will not block during logging if the system is not ready to write, dropping the message instead. +Using this value may improve logging performance at the cost of losing some log messages. +This option only has an effect if the output goes to ``syslog:`` or ``pipe:``. +Setting ``audit_nonblock`` to ``true`` is not allowed if the output is to a file. +In this case, set ``audit_nonblock`` to ``false``. + +.. _audit-log-format: + +Configure the format of audit log events +---------------------------------------- + +You can choose the format of audit log events -- plain text, CSV or JSON format. + +Plain text is used by default. This human-readable format can be efficiently compressed. +The JSON format is more convenient to receive log events, analyze them and integrate them with other systems if needed. +Using the CSV format allows you to view audit log events in tabular form. + +Use these commands to configure the format of audit log events in Tarantool. + +Plain text +~~~~~~~~~~ + +.. code-block:: lua + + box.cfg{audit_log = 'audit.log', audit_format = 'plain'} + +Example: + +.. code-block:: text + + remote: + session_type:background + module:common.admin.auth + user: type:custom_tdg_audit + tag:tdg_severity_INFO + description:[5e35b406-4274-4903-857b-c80115275940] + subj: "anonymous", + msg: "Access granted to anonymous user" + +JSON format +~~~~~~~~~~~ + +.. code-block:: lua + + box.cfg{audit_log = 'audit.log', audit_format = 'json'} + +Example: + +.. code-block:: json + + { + "time": "2022-11-17T21:55:49.880+0300", + "remote": "", + "session_type": "background", + "module": "common.admin.auth", + "user": "", + "type": "custom_tdg_audit", + "tag": "tdg_severity_INFO", + "description": "[c26cd11a-3342-4ce6-8f0b-a4b222268b9d] subj: \"anonymous\", msg: \"Access granted to anonymous user\"" + } + +CSV format +~~~~~~~~~~ + +.. code-block:: lua + + box.cfg{audit_log = 'audit.log', audit_format = 'csv'} + +Example: + +.. code-block:: text + + 2022-11-17T21:58:03.131+0300,,background,common.admin.auth,,,custom_tdg_audit,tdg_severity_INFO,"[b3dfe2a3-ec29-4e61-b747-eb2332c83b2e] subj: ""anonymous"", msg: ""Access granted to anonymous user""" + +.. _audit-log-custom: + +Create user-defined events +-------------------------- + +Tarantool provides an API for writing user-defined audit log events. + +To add a new event, use the ``audit.log()`` function that takes one of the following values: + +* Message string. Printed to the audit log with type ``message``. Example: ``audit.log('Hello, World!')``. + +* Format string and arguments. Passed to string format and then output to the audit log with type message. + Example: ``audit.log('Hello, %s!', 'World')``. + +* Table with audit log field values. The table must contain at least one field -- description. + Example: ``audit.log({type = 'custom_hello', description = 'Hello, World!'})``. + +Using the field ``audit.new()``, you can create a new log module that allows you +to avoid passing all custom audit log fields each time ``audit.log()`` is called. +It takes a table of audit log field values (same as ``audit.log()``). The ``type`` +of the log module for writing user-defined events must either be ``message`` or +have the ``custom_`` prefix. + +Example +~~~~~~~ + +.. code-block:: lua + + local my_audit = audit.new({type = 'custom_hello', module = 'my_module'}) + my_audit:log('Hello, Alice!') + my_audit:log({tag = 'admin', description = 'Hello, Bob!'}) + + -- is equivalent to + audit.log({type = 'custom_hello', module = 'my_module', + description = 'Hello, Alice!' }) + audit.log({type = 'custom_hello', module = 'my_module', + tag = 'admin', description = 'Hello, Bob!'}) + + +Some user-defined audit log fields (``time``, ``remote``, ``session_type``) +are set in the same way as for a system event. +If a field is not overwritten, it is set to the same value as for a system event. + +Some audit log fields you can overwrite with ``audit.new()`` and ``audit.log()``: + +* type +* user +* module +* tag +* description + + .. note:: + + To avoid confusion with system events, the value of the type field must either be ``message`` (default) + or begin with ``custom_``. Otherwise you will get the error message. + User-defined events are filtered out by default. + To enable user-defined audit log events, you must add ``custom`` to ``box.cfg.audit_filter``. + +Example +~~~~~~~ + +.. code-block:: lua + + local audit = require('audit') + + box.cfg{audit_log = 'audit.log', audit_filter = 'custom', audit_format = 'csv'} + audit.log('Hello, Alice!') + audit.log('Hello, %s!', 'Bob') + audit.log({type = 'custom_hello', description = 'Hello, Eve!'}) + audit.log({type = 'custom_farewell', user = 'eve', module = 'custom', description = 'Farewell, Eve!'}) + + local my_audit = audit.new({module = 'my_module', tag = 'default'}) + my_audit:log({description = 'Message 1'}) + my_audit:log({description = 'Message 2', tag = 'my_tag'}) + my_audit:log({description = 'Message 3', module = 'other_module'}) + +.. _audit-log-read: + +Use read commands +----------------- + +To easily read the audit log events in the needed form, use the different commands: + +* ``cat`` -- prints one or more files + +* ``grep`` -- prints a specific text + +* ``head`` -- prints the first N lines of the file + +* ``tail`` -- prints the last N lines of the file + + .. note:: + + These are the basic commands to help you read the logs. If necessary, you can use other commands. + +.. _audit-log-tips: + +Tips +---- + +How many events can be recorded? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you write to a file, the size of the Tarantool audit module is limited by the disk space. +If you write to a system logger, the size of the Tarantool audit module is limited by the system logger. +If you write to a pipe, the size of the Tarantool audit module is limited by the system buffer +if the ``audit_nonblock`` = ``false``; if ``audit_nonblock`` = ``true``, there is no limit. +However, it is not recommended to use the entire memory, as this may cause performance degradation +and even loss of some logs. + +How often should audit logs be reviewed? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Consider setting up a schedule in your company. It is recommended to review audit logs at least every 3 months. + +How long should audit logs be stored? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is recommended to store audit logs for at least one year. + +What is the best way to process audit logs? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is recommended to use SIEM systems for this issue. diff --git a/doc/enterprise/cartridge-auth.rst b/doc/enterprise/cartridge-auth.rst new file mode 100644 index 0000000000..3cd3a7b796 --- /dev/null +++ b/doc/enterprise/cartridge-auth.rst @@ -0,0 +1,143 @@ +.. _enterprise-cartridge-auth: + +LDAP authorization +================== + +This chapter describes how to manage the access roles for LDAP users authorizing in your Cartridge application. + +Setting up this feature is twofold: + +* :ref:`enabling the feature ` for your application +* :ref:`specifying configuration parameters `. + +.. note:: + + For information on setting up the authorization of external users in your application, refer to :ref:`ldap_auth`. + +.. _enterprise-cartridge-auth-enable: + +Enabling LDAP authorization +--------------------------- + +First, you should enable LDAP authorization function in your :ref:`application development project `: + +* set up dependency to the ``cartridge-auth-extension`` module that is available in the :ref:`Enterprise Edition's package `. +* update the configuration in the application initialization file. + +.. note:: + + If you don't have a development project yet, refer to :doc:`dev` on how to create it. + +1. In your development project, find a ``.rockspec`` file and specify the following dependency: + + .. code-block:: bash + + dependencies = { + 'cartridge-auth-extension' + } + +2. In an initialization Lua file of your project, specify the ``cartridge-auth-extension`` :ref:`cluster role ` in the :ref:`Cartridge configuration `. + The role enables storing authorized users and validating the :ref:`LDAP configuration `. + + .. code-block:: lua + + cartridge.cfg({ + roles = { + 'cartridge-auth-extension', + }, + auth_backend_name = 'cartridge-auth-extension', + }) + +3. Deploy and start your application. For details, refer to :doc:`dev`. + +.. _enterprise-cartridge-auth-config: + +Configuring LDAP authorization +------------------------------ + +After starting your application, you need to configure LDAP authorization. It can be done via the GUI administrative console. + +1. In a web browser, open the GUI administrative console of your application. + +2. If you have the application instances already configured, proceed to the next step. Otherwise, refer to :ref:`cartridge-deployment` on how to configure the cluster. + +3. In the GUI administrative console, navigate to the **Code** tab. Create the following YAML configuration files and specify the necessary parameters. + Below is the example of configuration and the :ref:`description of parameters `. + +.. note:: + + If you set the authorization mode as ``local`` in the ``auth_extension.yml`` file, you don't need to define LDAP configuration parameters in the ``ldap.yml`` file. + + +* ``auth_extension.yml`` + + .. code-block:: yaml + + method: local+ldap + +* ``ldap.yml`` + + .. code-block:: yaml + + - domain: 'test.glauth.com' + organizational_units: ['all_staff'] + hosts: + - localhost:3893 + use_tls: false + use_active_directory: false + search_timeout: 2 + roles: + - role: 'admin' + domain_groups: + - 'cn=superusers,ou=groups,dc=glauth,dc=com' + - 'cn=users,ou=groups,dc=glauth,dc=com' + options: + LDAP_OPT_DEBUG_LEVEL: 10 + +* ``auth.yml`` + + .. code-block:: yaml + + enabled: true + +.. _enterprise-cartridge-auth-config-params: + +**Configuration parameters:** + +* ``method`` -- authorization mode. Possible values: + + * ``local`` -- only local users can be authorized in the application. "Local" refers to users created in the application. + * ``ldap`` -- only LDAP users can be authorized. + * ``local+ldap`` -- both local and LDAP users can be authorized. + +* ``domain`` -- domain name that is used in the domain login ID (``user_name@domain``). + +* ``organizational_units`` -- names of the organizational units or user groups. + +* ``hosts`` -- LDAP server addresses. + +* ``use_tls`` -- boolean flag that defines TLS usage. Defaults to ``false``. + +* ``use_active_directory`` -- boolean flag that defines usage of the Active Directory. Defaults to ``false``. + If set to ``true``, use the login ID in the email format (``user_name@domain``). + The ID should be equal to the ``userPrincipalName`` Active Directory attribute value because the latter is used in the Active Directory filter. + +* ``search_timeout`` -- LDAP server response timeout. Defaults to 2 seconds. + +* ``roles`` -- user roles assigned to a user depending on the LDAP groups the user belongs to: + + * ``role`` -- user role; + * ``domain_groups`` -- LDAP groups where ``cn`` -- common name; ``ou`` -- organization unit name; ``dc`` -- domain component. + +* ``options`` -- the OpenLDAP library options. Supported options: + + * LDAP_OPT_X_TLS_REQUIRE_CERT + * LDAP_OPT_PROTOCOL_VERSION + * LDAP_OPT_DEBUG_LEVEL + * LDAP_OPT_X_TLS_CACERTFILE + * LDAP_OPT_X_TLS_CACERTDIR. + + For description of the options, refer to the `OpenLDAP documentation `__. + +* ``enabled`` -- boolean flag. If set to ``true``, enables mandatory authentication mode in the application web interface. + diff --git a/doc/enterprise/changelog.rst b/doc/enterprise/changelog.rst new file mode 100644 index 0000000000..554fc8e609 --- /dev/null +++ b/doc/enterprise/changelog.rst @@ -0,0 +1,480 @@ +.. _enterprise_changelog: + +Changelog +========= + +Versioning policy +----------------- + +A Tarantool Enterprise SDK version consists of two parts: + +.. code-block:: text + + -r + + +For example: ``2.11.1-0-gc42d9735b-r589``. + +- ``TARANTOOL_BASE_VERSION`` is the Community version which the Enterprise version is based on. +- ``REVISION`` is the SDK revision. Besides Tarantool itself, it includes the ``tt`` utility, a set of open and closed source modules, and examples. Learn more from :ref:`Package contents `. + +595 +--- + +- Updated tt-ee to `1.3.0 `__. +- Updated cartridge to `2.8.3 `__. +- Updated cartridge-cli-extensions to `1.1.2 `__. +- Updated crud to `1.3.0 `__. +- Updated queue to `1.3.3 `__. +- Updated sharded-queue to `0.1.1 `__. +- Updated membership to `2.4.1 `__. +- Added tests for Astra Linux 1.7. + + +589 +--- + +- Updated ``tarantool-2.10`` to 2.10.8. +- Updated ``tarantool-master`` to 3.0.0-alpha3. +- Updated migrations to `0.6.0 `__. +- Updated tt-ee to `1.2.0 `__. +- Updated space-explorer to `1.1.8 `__. +- Updated cartridge-metrics-role to `0.1.1 `__. +- Updated cartridge to `2.8.2 `__. +- Updated expirationd to `1.5.0 `__. +- Added sideservice `0.1.0 `__. + +579 +--- + +- Updated cartridge-cli to `2.12.7 `__. +- Updated ``tarantool-2.11`` to 2.11.1. + +577 +--- + +- Added crud `1.2.0 `__. +- Added ddl `1.6.3 `__. +- Added sharded-queue `0.1.0 `__. +- Added ddl `1.6.4 `__. +- Updated tt-ee to `1.1.2 `__. +- Updated cartridge-cli to `2.12.6 `__. + +563 +--- + +- Updated ``tarantool-2.10`` to 2.10.7. +- Updated ``tarantool-2.11`` to 2.11.0. +- Added kafka `1.6.6 `__. +- Added vshard `0.1.24 `__. +- Added metrics `1.0.0 `__. +- Added cartridge-metrics-role `0.1.0 `__. +- Added cartridge `2.8.0 `__. +- Added http `1.5.0 `__. + +557 +--- + +- Added checks `3.3.0 `__. +- Updated cartridge-cli to `2.12.5 `__. + +553 +--- + +- Added ``tt-ee`` and ``tt`` environment configuration. +- Added crud `1.1.1 `__. +- Added avro-schema `3.1.1 `__. +- Added expirationd `1.4.0 `__. +- Added graphql `0.3.0 `__. +- Added graphqlapi `0.0.10 `__. +- Added metrics `0.17.0 `__. +- Added migrations `0.5.0 `__. +- Added oracle `1.4.0 `__. +- Added cartridge `2.7.9 `__. +- Added vshard `0.1.23 `__. +- Added kafka `1.6.5 `__. + +549 +--- + +- Updated ``tarantool-2.10`` to 2.10.6. + +545 +--- + +- Updated ``tarantool-2.11`` to 2.11.0-rc2. + +543 +--- + +- Added the ``tarantool-2.11`` submodule. + +542 +--- + +- Updated ``tarantool-1.10`` to 1.10.15. + +541 +--- + +- Updated ``tarantool-master`` to ``3.0.0-entrypoint``. + +540 +--- + +- Updated ``tarantool-2.10`` to 2.10.5. + +539 +--- + +- Added vshard `0.1.22 `__. + +538 +--- + +- Updated ``tarantool-2.8`` to apply 2 hotfixes. + +537 +--- + +- Fix non-interactive installation of the ``brew`` package. + +- Changed the owner of the ``/usr/local/bin`` directory. + +- Installed ``awscli@1`` instead of ``awscli`` since it takes much less + time. + +536 +--- + +- Added the missing property ``2.10`` for scope ``CACHE`` in CMakeLists.txt. + +535 +--- + +- Added expirationd `1.3.1 `__. + +534 +--- + +- Added crud `1.0.0 `__. + +533 +--- + +- Use runners with label ``regular`` for builds and the tagged release + workflow. + +532 +--- + +- Added http `1.4.0 `__. +- Added space-explorer `1.1.7 `__. +- Added checks `3.2.0 `__. +- Added metrics `0.16.0 `__. +- Added cartridge `2.7.8 `__. + +531 +--- + +- Added the ``-DENABLE_LTO=ON`` flag for tarantool-ee@master branch to + CMakeLists.txt + +530 +--- + +- Upgraded devtoolset from 8 to 9. It was required for upgrading ld from + 2.30 to 2.31+ for LTO. + + +529 +--- + +- Updated tarantool’s master branch to a recent revision. + +528 +--- + +- Fixed code style in the Linux and macOS workflows. + +527 +--- + +- Reliably install packages in macOS builds. + +526 +--- + +- Refactored the way that GC64 builds are defined in the build workflow. + There are no changes to the composition of resulting bundles. + +525 +--- + +- Added alerting failures in builds on stable branches and integration testing + to VK Teams chats. + +524 +--- + +- Updated to fresh tarantool master (``2.11.0-entrypoint-107-ga18449d``) + +523 +--- + +- Added cartridge `2.7.7 `__. + +522 +--- + +- Outdated workflow runs are now canceled to save CI time. + +521 +--- + +- Added crud `0.14.1 `__. +- Added expirationd `1.3.0 `__. +- Added metrics `0.15.1 `__. +- Added queue `1.2.2 `__. + +520 +--- + +Release SDK by tags: + +- Run workflow in SDK docker container. +- Upload SDK files for 1.10, 2.8, 2.10 versions to release folder. +- Add consistency check for all versions. + +519 +--- + +* On feature branches, SDK is now rebuilt only on relevant changes. + +r518 +---- + +* Added frontend core `8.2.1 `__. +* Added vshard `0.1.21 `__. +* Added http `1.3.0 `__. +* Added cartridge `2.7.6 `__. + +r517 +---- + +* Updated Tarantool EE to `2.10.4 `__. + +r516 +---- + +* Updated bundled OpenSSL to version 1.1.1q. + +r515 +---- + +* Removed support of Tarantool 2.7. +* Started using ``tarantool/actions/prepare-checkout`` to make builds more stable. + +r514 +---- + +* Remove the local registry and setup using GitHub registry. +* Sync rocks cache to s3 and back. +* Setup using shared runners. +* Refactor and format ``ci-linux.yml`` and ``ci-macos.yml``. + +r513 +---- + +* Removed kafka 1.5.0 due to a build issue with Tarantool 2.10.3 and higher. +* Updated kafka to version `1.6.2 `__. + +r512 +---- + +* Updated tuple-keydef to version `0.0.3 `__. + +r511 +---- + +* Enabled parallel build of rocks for macOS in CI. + +r510 +---- + +* Updated Tarantool to :doc:`2.10.3 `. +* Added a readable error for the case when the flight recoder fails + to write data due to insufficient free space on the disk device. + Previously, it was sending a `SIGBUS` error (:tarantool-ee-issue:`196`). +* Fixed a crash in the flight recorder caused by non-thread-safe log + recording from multiple threads (:tarantool-ee-issue:`226`). + +r502 +---- + +* Updated Tarantool to :doc:`2.10.2 `. +* Increased resolution of stored entries in flight recorder (:tarantool-ee-issue:`193`). +* Fixed a bug in the flight recorder that resulted in skipping log entries in case + ``box.cfg.log_level`` is less than ``flightrec_log_level`` (:tarantool-ee-issue:`201`). + +r498 +---- + +* Updated Tarantool to :doc:`2.10.1 `. +* Updated Cyrus SASL to version 2.1.28. +* Updated OpenLDAP to version 2.5.13. +* Updated LZ4 to version 1.9.3. Fixed `CVE-2021-3520 `__. +* Fixed replication reconnect failure after disabling SSL encryption (:tarantool-ee-issue:`137`). +* Fixed a crash that occurred while tyring to start an instance that has + a compressed memtx space (:tarantool-ee-issue:`171`). +* Fixed `CVE-2022-29242 `__ in GOST SSL engine. +* Fixed a bug in the flight recorder reader implementation that resulted in + a hang or error while trying to open an empty section (:tarantool-ee-issue:`187`). + +r467 +---- + +Breaking changes +~~~~~~~~~~~~~~~~ + +* Default audit log format was changed to CSV. + +Functionality added or changed +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enterprise +^^^^^^^^^^ + +* Implemented user-defined audit events. Now it's possible to log custom + messages to the audit log from Lua (:tarantool-ee-issue:`65`). + +* **[Breaking change]** Switched the default audit log format to CSV. The + format can be switched back to JSON using the new ``box.cfg.audit_format`` + configuration option (:tarantool-ee-issue:`66`). + +* Implemented the audit log filter. Now, it's possible to enable logging only + for a subset of all audit events using the new ``box.cfg.audit_filter`` + configuration option (:tarantool-ee-issue:`67`). + +Core +^^^^ + +* Implement constraints and foreign keys. Now a user can create function constraints and foreign key relations + (:tarantool-issue:`6436`). +* Changed log level of some information messages from critical to info + (:tarantool-issue:`4675`). +* Added predefined system events: ``box.status``, ``box.id``, ``box.election`` + and ``box.schema`` (:tarantool-issue:`6260`). +* Introduced transaction isolation levels in Lua and IPROTO (:tarantool-issue:`6930`). + +Vinyl +^^^^^ + +* Disabled the deferred DELETE optimization in Vinyl to avoid possible + performance degradation of secondary index reads. Now, to enable the + optimization, one has to set the ``defer_deletes`` flag in space options + (:tarantool-issue:`4501`). + +Lua +^^^ + +* Added support of console autocompletion for net.box objects ``stream`` + and ``future`` (:tarantool-issue:`6305`). + +Datetime +^^^^^^^^ + +* Parse method to allow converting string literals in extended iso-8601 + or rfc3339 formats (:tarantool-issue:`6731`). +* The range of supported years has been extended in all parsers to cover + fully -5879610-06-22..5879611-07-11 (:tarantool-issue:`6731`). + +Build +^^^^^ + +* Added bundling of *GNU libunwind* to support backtrace feature on + *AARCH64* architecture and distributives that don't provide *libunwind* + package. +* Re-enabled backtrace feature for all *RHEL* distributions by default, except + for *AARCH64* architecture and ancient *GCC* versions, which lack compiler + features required for backtrace (gh-4611). + +Bugs fixed +~~~~~~~~~~ + +Enterprise +^^^^^^^^^^ + +* Disabled audit log unless explicitly configured (:tarantool-ee-issue:`39`). Before this change, + audit events were written to stderr if ``box.cfg.audit_log`` wasn't set. Now, + audit log is disabled in this case. +* Disabled audit logging of replicated events (:tarantool-ee-issue:`59`). Now, replicated events + (for example, user creation) are logged only on the origin, never on a + replica. + +Core +^^^^ + +* Banned DDL operations in space on_replace triggers, since they could lead + to a crash (:tarantool-issue:`6920`). +* Fixed a bug due to which all fibers created with ``fiber_attr_setstacksize()`` + leaked until the thread exit. Their stacks also leaked except when + ``fiber_set_joinable(..., true)`` was used. +* Fixed a crash in mvcc connected with secondary index conflict (:tarantool-issue:`6452`). +* Fixed a bug which resulted in wrong space count (:tarantool-issue:`6421`). +* Select in RO transaction now reads confirmed data, like a standalone (auotcommit) select does + (:tarantool-issue:`6452`). + +Replication +^^^^^^^^^^^ + +* Fixed potential obsolete data write in synchronious replication + due to race in accessing terms while disk write operation is in + progress and not yet completed. +* Fixed replicas failing to bootstrap when master is just re-started (:tarantool-issue:`6966`). + +Lua +^^^ + +* Fixed the behavior of tarantool console on SIGINT. Now Ctrl+C discards + the current input and prints the new prompt (:tarantool-issue:`2717`). + +Triggers +^^^^^^^^ + +* Fixed assertion or segfault when MP_EXT received via net.box (:tarantool-issue:`6766`). +* Now ROUND() properly support INTEGER and DECIMAL as the first + argument (:tarantool-issue:`6988`). + +Datetime +^^^^^^^^ + +* Intervals received after datetime arithmetic operations may be improperly + normalized if result was negative + + .. code-block:: tarantoolsession + + tarantool> date.now() - date.now() + --- + - -1.000026000 seconds + ... + + I.e. 2 immediately called ``date.now()`` produce very close values, whose + difference should be close to 0, not 1 second (gh-6882). + +Net.box +^^^^^^^ + +* Changed the type of the error returned by net.box on timeout + from ClientError to TimedOut (:tarantool-issue:`6144`). + +r457 +---- + +- Fixed some binary protocol encryption bugs. + +r455 +---- + +- Added :ref:`binary protocol encryption `. +- Added :doc:`tuple field compression `. \ No newline at end of file diff --git a/doc/enterprise/deprecated.rst b/doc/enterprise/deprecated.rst new file mode 100644 index 0000000000..248a0fd3cc --- /dev/null +++ b/doc/enterprise/deprecated.rst @@ -0,0 +1,88 @@ +.. _enterprise_deprecated_features: + +Deprecated features +=================== + +The ZooKeeper along with ``orchestrator`` are no longer supported. However, they +still can be used, if necessary. + +The following sections describe the corresponding functionality. + +.. _manage-sharding-api: + +Controlling the cluster via API +------------------------------- + +To control the cluster, use the ``orchestrator`` included in the delivery package. +The ``orchestrator`` uses ZooKeeper to store and distribute the configuration. +The ``orchestrator`` provides the REST API for controlling the cluster. +Configurations in the ZooKeeper are changed as a result of calling the ``orchestrator``'s +API-functions, which in turn leads to changes in configurations of the Tarantool +nodes. + +We recommend using a **curl** command line interface to call the API-functions +of the ``orchestrator``. + +The following example shows how to register a new availability zone (DC): + +.. code-block:: kconfig + + $ curl -X POST http://HOST:PORT/api/v1/zone \ + -d '{ + "name": "Caucasian Boulevard" + }' + +To check whether the DC registration was successful, try the following instruction. +It retrieves the list of all registered nodes in the JSON format: + +.. code-block:: console + + $ curl http://HOST:PORT/api/v1/zone| python -m json.tool + +To apply the new configuration directly on the Tarantool nodes, increase the +configuration version number after calling the API function. To do this, use the +POST request to ``/api/v1/version``: + +.. code-block:: console + + $ curl -X POST http://HOST:PORT/api/v1/version + +Altogether, to update the cluster configuration: + +1. Call the ``POST/PUT`` method of the ``orchestrator``. + As a result, the ZooKeeper nodes are updated, and a subsequent update of the + Tarantool nodes is initiated. +2. Update the configuration version using the ``POST`` request to ``/api/v1/version``. + As a result, the configuration is applied to the Tarantool nodes. + +See the :ref:`Orchestrator API reference ` for the detailed orchestrator API. + +.. _geo-redundancy-setup: + +Setting up geo redundancy +------------------------- + +Logically, cluster nodes can belong to some availability zone. Physically, an +availability zone is a separate DC, or a rack inside a DC. You can specify a matrix +of weights (distances) for the availability zones. + +New zones are added by calling a corresponding API method of the orchestrator. + +By default, the matrix of weights (distances) for the zones is not configured, +and geo-redundancy for such configurations works as follows: + +* Data is always written to the master. +* If the master is available, then it is used for reading. +* If the master is unavailable, then any available replica is used for reading. + +When you define a matrix of weights (distances) by calling ``/api/v1/zones/weights``, +the automatic scale-out system of the Tarantool DBMS finds a replica which is the +closest to the specified router in terms of weights, and starts using this replica +for reading. If this replica is not available, then the next nearest replica is +selected, taking into account the distances specified in the configuration. + + +.. toctree:: + :hidden: + + deprecated/orchestrator_api diff --git a/doc/enterprise/deprecated/orchestrator_api.rst b/doc/enterprise/deprecated/orchestrator_api.rst new file mode 100644 index 0000000000..78d34c3c6d --- /dev/null +++ b/doc/enterprise/deprecated/orchestrator_api.rst @@ -0,0 +1,954 @@ +.. _enterprise_orchestrator_api: + +Orchestrator API reference +========================== + +.. _orchestrator-configure-zones: + +Configuring the zones +--------------------- + +* :ref:`POST /api/v1/zone ` +* :ref:`GET /api/v1/zone/ ` +* :ref:`PUT /api/v1/zone/ ` +* :ref:`DELETE /api/v1/zone/ ` + +.. _orchestrator_api-post_zone: + +.. function:: POST /api/v1/zone + + Create a new zone. + + **Request** + + .. code-block:: kconfig + + { + "name": "zone 1" + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": { + "id": 2, + "name": "zone 2" + }, + "status": true + } + + **Potential errors** + + * ``zone_exists`` - the specified zone already exists + +.. _orchestrator_api-get_zone: + +.. function:: GET /api/v1/zone/{zone_id: optional} + + Return information on the specified zone or on all the zones. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": [ + { + "id": 1, + "name": "zone 11" + }, + { + "id": 2, + "name": "zone 2" + } + ], + "status": true + } + + **Potential errors** + + * ``zone_not_found`` - the specified zone is not found + +.. _orchestrator_api-put_zone: + +.. function:: PUT /api/v1/zone/{zone_id} + + Update information on the zone. + + **Body** + + .. code-block:: kconfig + + { + "name": "zone 22" + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``zone_not_found`` - the specified zone is not found + +.. _orchestrator_api-delete_zone: + +.. function:: DELETE /api/v1/zone/{zone_id} + + Delete a zone if it doesn’t store any nodes. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``zone_not_found`` - the specified zone is not found + * ``zone_in_use`` - the specified zone stores at least one node + +.. _orchestrator-configure-zone-weights: + +Configuring the zone weights +---------------------------- + +* :ref:`GET /api/v1/zones/weights ` +* :ref:`POST /api/v1/zones/weights ` + +.. _orchestrator_api-post_weights: + +.. function:: POST /api/v1/zones/weights + + Set the zone weights configuration. + + **Body** + + .. code-block:: kconfig + + { + "weights": { + "1": { + "2": 10, + "3": 11 + }, + "2": { + "1": 10, + "3": 12 + }, + "3": { + "1": 11, + "2": 12 + } + } + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``zones_weights_error`` - configuration error + +.. _orchestrator_api-get_weights: + +.. function:: GET /api/v1/zones/weights + + Return the zone weights configuration. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": { + "1": { + "2": 10, + "3": 11 + }, + "2": { + "1": 10, + "3": 12 + }, + "3": { + "1": 11, + "2": 12 + } + }, + "status": true + } + + **Potential errors** + + * ``zone_not_found`` - the specified zone is not found + +.. _orchestrator-configure-registry: + +Configuring registry +-------------------- + +* :ref:`GET /api/v1/registry/nodes/new ` +* :ref:`POST /api/v1/registry/node ` +* :ref:`PUT /api/v1/registry/node/ ` +* :ref:`GET /api/v1/registry/node/ ` +* :ref:`DELETE /api/v1/registry/node/ ` + +.. _orchestrator_api-get_new: + +.. function:: GET /api/v1/registry/nodes/new + + Return all the detected nodes. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": [ + { + "uuid": "uuid-2", + "hostname": "tnt2.public.i", + "name": "tnt2" + } + ], + "status": true + } + +.. _orchestrator_api-post_registry_node: + +.. function:: POST /api/v1/registry/node + + Register the detected node. + + **Body** + + .. code-block:: kconfig + + { + "zone_id": 1, + "uuid": "uuid-2", + "uri": "tnt2.public.i:3301", + "user": "user1:pass1", + "repl_user": "repl_user1:repl_pass1", + "cfg": { + "listen": "0.0.0.0:3301" + } + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``node_already_registered`` - the specified node is already registered + * ``zone_not_found`` - the specified zone is not found + * ``node_not_discovered`` - the specified node is not detected + +.. _orchestrator_api-put_node: + +.. function:: PUT /api/v1/registry/node/{node_uuid} + + Update the registered node parameters. + + **Body** + + Pass only those parameters that need to be updated. + + .. code-block:: kconfig + + { + "zone_id": 1, + "repl_user": "repl_user2:repl_pass2", + "cfg": { + "listen": "0.0.0.0:3301", + "memtx_memory": 100000 + } + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``node_not_registered`` - the specified node is not registered + +.. _orchestrator_api-get_node: + +.. function:: GET /api/v1/registry/node/{node_uuid: optional} + + Return information on the nodes in a cluster. If ``node_uuid`` is passed, + information on this node only is returned. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": { + "uuid-1": { + "user": "user1:pass1", + "hostname": "tnt1.public.i", + "repl_user": "repl_user2:repl_pass2", + "uri": "tnt1.public.i:3301", + "zone_id": 1, + "name": "tnt1", + "cfg": { + "listen": "0.0.0.0:3301", + "memtx_memory": 100000 + }, + "zone": 1 + }, + "uuid-2": { + "user": "user1:pass1", + "hostname": "tnt2.public.i", + "name": "tnt2", + "uri": "tnt2.public.i:3301", + "repl_user": "repl_user1:repl_pass1", + "cfg": { + "listen": "0.0.0.0:3301" + }, + "zone": 1 + } + }, + "status": true + } + + **Potential errors** + + * ``node_not_registered`` - the specified node is not registered + +.. _orchestrator_api-delete_node: + +.. function:: DELETE /api/v1/registry/node/{node_uuid} + + Delete the node if it doesn’t belong to any replica set. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``node_not_registered`` - the specified node is not registered + * ``node_in_use`` - the specified node is in use by a replica set + +.. _orchestrator-router-api: + +Routers API +----------- + +* :ref:`GET /api/v1/routers ` +* :ref:`POST /api/v1/routers ` +* :ref:`DELETE /api/v1/routers/{uuid} ` + +.. _orchestrator_api-get_routers: + +.. function:: GET /api/v1/routers + + Return the list of all nodes that constitute the router. + + **Response** + + .. code-block:: kconfig + + { + "data": [ + "uuid-1" + ], + "status": true, + "error": { + "code": 0, + "message": "ok" + } + } + +.. _orchestrator_api-post_routers: + +.. function:: POST /api/v1/routers + + Assign the router role to the node. + + **Body** + + .. code-block:: kconfig + + { + "uuid": "uuid-1" + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``node_not_registered`` - the specified node is not registered + +.. _orchestrator_api-delete_routers: + +.. function:: DELETE /api/v1/routers/{uuid} + + Release the router role from the node. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + +.. _orchestrator_api-replica_set_cfg: + +Configuring replica sets +------------------------ + +* :ref:`POST /api/v1/replicaset ` +* :ref:`PUT /api/v1/replicaset/ ` +* :ref:`GET /api/v1/replicaset/ ` +* :ref:`DELETE /api/v1/replicaset/ ` +* :ref:`POST /api/v1/replicaset/{replicaset_uuid}/master ` +* :ref:`POST /api/v1/replicaset/{replicaset_uuid}/node ` +* :ref:`DELETE /api/v1/zone/ ` + +.. _orchestrator_api-post_replicaset: + +.. function:: POST /api/v1/replicaset + + Create a replica set containing all the registered nodes. + + **Body** + + .. code-block:: kconfig + + { + "uuid": "optional-uuid", + "replicaset": [ + { + "uuid": "uuid-1", + "master": true + } + ] + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": { + "replicaset_uuid": "cc6568a2-63ca-413d-8e39-704b20adb7ae" + }, + "status": true + } + + **Potential errors** + + * ``replicaset_exists`` – the specified replica set already exists + * ``replicaset_empty`` – the specified replica set doesn’t contain any nodes + * ``node_not_registered`` – the specified node is not registered + * ``node_in_use`` – the specified node is in use by another replica set + +.. _orchestrator_api-put_replicaset: + +.. function:: PUT /api/v1/replicaset/{replicaset_uuid} + + Update the replica set parameters. + + **Body** + + .. code-block:: kconfig + + { + "replicaset": [ + { + "uuid": "uuid-1", + "master": true + }, + { + "uuid": "uuid-2", + "master": false, + "off": true + } + ] + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``replicaset_empty`` – the specified replica set doesn’t contain any nodes + * ``replicaset_not_found`` – the specified replica set is not found + * ``node_not_registered`` – the specified node is not registered + * ``node_in_use`` – the specified node is in use by another replica set + +.. _orchestrator_api-get_replicaset: + +.. function:: GET /api/v1/replicaset/{replicaset_uuid: optional} + + Return information on all the cluster components. If ``replicaset_uuid`` is + passed, information on this replica set only is returned. + + **Body** + + .. code-block:: kconfig + + { + "name": "zone 22" + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": { + "cc6568a2-63ca-413d-8e39-704b20adb7ae": { + "uuid-1": { + "hostname": "tnt1.public.i", + "off": false, + "repl_user": "repl_user2:repl_pass2", + "uri": "tnt1.public.i:3301", + "master": true, + "name": "tnt1", + "user": "user1:pass1", + "zone_id": 1, + "zone": 1 + }, + "uuid-2": { + "hostname": "tnt2.public.i", + "off": true, + "repl_user": "repl_user1:repl_pass1", + "uri": "tnt2.public.i:3301", + "master": false, + "name": "tnt2", + "user": "user1:pass1", + "zone": 1 + } + } + }, + "status": true + } + + **Potential errors** + + * ``replicaset_not_found`` – the specified replica set is not found + +.. _orchestrator_api-delete_replicaset: + +.. function:: DELETE /api/v1/replicaset/{replicaset_uuid} + + Delete a replica set. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``replicaset_not_found`` - the specified replica set is not found + +.. _orchestrator_api-post_master: + +.. function:: POST /api/v1/replicaset/{replicaset_uuid}/master + + Switch the master in the replica set. + + **Body** + + .. code-block:: kconfig + + { + "instance_uuid": "uuid-1", + "hostname_name": "hostname:instance_name" + } + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Potential errors** + + * ``replicaset_not_found`` – the specified replica set is not found + * ``node_not_registered`` – the specified node is not registered + * ``node_not_in_replicaset`` – the specified node is not in the specified replica set + +.. _orchestrator_api-post_replicaset_node: + +.. function:: POST /api/v1/replicaset/{replicaset_uuid}/node + + Add a node to the replica set. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": {}, + "status": true + } + + **Body** + + .. code-block:: kconfig + + { + "instance_uuid": "uuid-1", + "hostname_name": "hostname:instance_name", + "master": false, + "off": false + } + + **Potential errors** + +* ``replicaset_not_found`` – the specified replica set is not found +* ``node_not_registered`` – the specified node is not registered +* ``node_in_use`` – the specified node is in use by another replica set + +.. _orchestrator_api-get_status: + +.. function:: GET /api/v1/replicaset/status + + Return statistics on the cluster. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "data": { + "cluster": { + "routers": [ + { + "zone": 1, + "name": "tnt1", + "repl_user": "repl_user1:repl_pass1", + "hostname": "tnt1.public.i", + "status": null, + "uri": "tnt1.public.i:3301", + "user": "user1:pass1", + "uuid": "uuid-1", + "total_rps": null + } + ], + "storages": [ + { + "hostname": "tnt1.public.i", + "repl_user": "repl_user2:repl_pass2", + "uri": "tnt1.public.i:3301", + "name": "tnt1", + "total_rps": null, + "status": 'online', + "replicas": [ + { + "user": "user1:pass1", + "hostname": "tnt2.public.i", + "replication_info": null, + "repl_user": "repl_user1:repl_pass1", + "uri": "tnt2.public.i:3301", + "uuid": "uuid-2", + "status": 'online', + "name": "tnt2", + "total_rps": null, + "zone": 1 + } + ], + "user": "user1:pass1", + "zone_id": 1, + "uuid": "uuid-1", + "replicaset_uuid": "cc6568a2-63ca-413d-8e39-704b20adb7ae", + "zone": 1 + } + ] + } + }, + "status": true + } + + **Potential errors** + + * ``zone_not_found`` - the specified zone is not found + * ``zone_in_use`` - the specified zone stores at least one node + +.. _orchestrator-setup-config-versions: + +Setting up configuration versions +--------------------------------- + +* :ref:`POST /api/v1/version ` +* :ref:`GET /api/v1/version ` + +.. _orchestrator_api-post_version: + +.. function:: POST /api/v1/version + + Set the configuration version. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "status": true, + "data": { + "version": 2 + } + } + + **Potential errors** + + * ``cfg_error`` - configuration error + +.. _orchestrator_api-get_version: + +.. function:: GET /api/v1/version + + Return the configuration version. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "status": true, + "data": { + "version": 2 + } + } + +.. _orchestrator-config-shards: + +Configuring sharding +-------------------- + +* :ref:`POST /api/v1/sharding/cfg ` +* :ref:`GET /api/v1/sharding/cfg ` + +.. _orchestrator_api-post_cfg: + +.. function:: POST /api/v1/sharding/cfg + + Add a new sharding configuration. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "status": true, + "data": {} + } + +.. _orchestrator_api-get_cfg: + +.. function:: GET /api/v1/sharding/cfg + + Return the current sharding configuration. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "status": true, + "data": {} + } + +.. _orchestrator-reset-cluster-config: + +Resetting cluster configuration +------------------------------- + +* :ref:`POST /api/v1/clean/cfg ` +* :ref:`POST /api/v1/clean/all ` + +.. _orchestrator_api-post_clean_cfg: + +.. function:: POST /api/v1/clean/cfg + + Reset the cluster configuration. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "status": true, + "data": {} + } + +.. _orchestrator_api-post_clean_all: + +.. function:: POST /api/v1/clean/all + + Reset the cluster configuration and delete information on the cluster nodes + from the ZooKeeper catalogues. + + **Response** + + .. code-block:: kconfig + + { + "error": { + "code": 0, + "message": "ok" + }, + "status": true, + "data": {} + } diff --git a/doc/enterprise/dev.rst b/doc/enterprise/dev.rst new file mode 100644 index 0000000000..b1c5a08220 --- /dev/null +++ b/doc/enterprise/dev.rst @@ -0,0 +1,448 @@ +.. _enterprise-app-development: + +=============================================================================== +Developer's guide +=============================================================================== + +To develop an application, use the Tarantool Cartridge framework that is +:ref:`installed ` as part of Tarantool Enterprise Edition. + +Here is a summary of the commands you need: + +#. Create a cluster-aware application from the template: + + .. code-block:: bash + + $ tt create cartridge --name -d /path/to + +#. Develop your application: + + .. code-block:: bash + + $ cd /path/to/ + $ ... + +#. Package your application: + + .. code-block:: bash + + $ tt pack [rpm|tgz] /path/to/ + +#. Deploy your application: + + * For ``rpm`` package: + + 1. Upload the package to all servers dedicated to Tarantool. + 2. Install the package: + + .. code-block:: bash + + $ yum install -.rpm + + 3. Launch the application. + + .. code-block:: bash + + $ systemctl start + + * For ``tgz`` archive: + + 1. Upload the archive to all servers dedicated to Tarantool. + 2. Unpack the archive: + + .. code-block:: bash + + $ tar -xzvf -.tar.gz -C /home//apps + + 3. Launch the application + + .. code-block:: bash + + $ tarantool init.lua + +For details and examples, consult the following documentation: + +* a `getting started guide `_ + that walks you through developing and deploying a simple clustered application using + Tarantool Cartridge, +* a :doc:`detailed manual ` + on creating and managing clustered Tarantool applications using + Tarantool Cartridge. + +Further on, this guide focuses on Enterprise-specific developer features available +on top of Tarantool Community Edition with the Tarantool Cartridge framework: + +* :ref:`LDAP authorization in the web interface `, +* :ref:`environment-independent applications `, +* :ref:`sample applications with Enterprise flavors `. + +.. _ldap_auth: + +------------------------------------------------------------------------------- +Implementing LDAP authorization in the web interface +------------------------------------------------------------------------------- + +If you run an LDAP server in your organization, you can connect Tarantool +Enterprise to it and let it handle the authorization. In this case, follow the +:ref:`general recipe ` +where in the first step add the ``ldap`` module to the ``.rockspec`` file +as a dependency and consider implementing the ``check_password`` function +the following way: + +.. code-block:: Lua + :emphasize-lines: 4, 10, 13 + + -- auth.lua + -- Require the LDAP module at the start of the file + local ldap = require('ldap') + ... + -- Add a function to check the credentials + local function check_password(username, password) + + -- Configure the necessary LDAP parameters + local user = string.format("cn=%s,ou=tarantool,dc=glauth,dc=com", username) + + -- Connect to the LDAP server + local ld, err = ldap.open("localhost:3893", user, password) + + -- Return an authentication success or failure + if not ld then + return false + end + return true + end + ... + +.. _enterprise-env-independent-apps: + +-------------------------------------------------------------------------------- +Delivering environment-independent applications +-------------------------------------------------------------------------------- + +Tarantool Enterprise Edition allows you to build environment-independent applications. + +An environment-independent application is an assembly (in one directory) of: + +* files with Lua code, +* ``tarantool`` executable, +* plugged external modules (if necessary). + +When started by the ``tarantool`` executable, the application provides a +service. + +The modules are Lua rocks installed into a virtual environment (under the +application directory) similar to Python's ``virtualenv`` and Ruby's bundler. + +Such an application has the same structure both in development and +production-ready phases. All the application-related code resides in one place, +ready to be packed and copied over to any server. + +.. _enterprise-app-package: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Packaging applications +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Once custom cluster role(s) are defined and the application is developed, pack +it and all its dependencies (module binaries) together with the ``tarantool`` +executable. + +This will allow you to upload, install, and run your application on any server in +one go. + +To pack the application, say: + +.. code-block:: console + + $ tt pack [rpm|tgz] /path/to/ + +where specify a path to your development environment -- the Git repository +containing your application code, -- and one of the following build options: + +* ``rpm`` to build an RPM package (recommended), or +* ``tgz`` to build a ``tar + gz`` archive + (choose this option only if you do not have root + privileges on servers dedicated for Tarantool Enterprise). + +This will create a package (or compressed archive) named +``--`` (e.g., ``myapp-1.2.1-12.rpm``) +containing your environment-independent application. + +Next, proceed to deploying :ref:`packaged applications ` +(or :ref:`archived ones `) on your servers. + +.. _enterprise-packaged-app: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Deploying packaged applications +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To deploy your packaged application, do the following on every server dedicated +for Tarantool Enterprise: + +#. Upload the package created in the :ref:`previous step `. + +#. Install: + + .. code-block:: console + + $ yum install -.rpm + +#. Start one or multiple Tarantool instances with the corresponding services + as described below. + + * A single instance: + + .. code-block:: console + + $ systemctl start + + This will start an instantiated ``systemd`` service that will listen to port + ``3301``. + + * Multiple instances on one or multiple servers: + + .. code-block:: console + + $ systemctl start @instance_1 + $ systemctl start @instance_2 + ... + $ systemctl start @instance_ + + where ``@instance_`` is the instantiated service name + for ``systemd`` with an incremental ```` (unique for every + instance) to be added to the ``3300`` port the instance will listen to + (e.g., ``3301``, ``3302``, etc.). + +#. In case it is a cluster-aware application, proceed to + :ref:`deploying the cluster `. + +To stop all services on a server, use the ``systemctl stop`` command and specify +instance names one by one. For example: + +.. code-block:: console + + $ systemctl stop @instance_1 @instance_2 ... @instance_ + +.. _enterprise-archived-app: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Deploying archived applications +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +While the RPM package places your application to ``/usr/share/tarantool/`` +on your server by default, the ``tar + gz`` archive does not enforce any structure +apart from just the ``/`` directory, so you are responsible for placing +it appropriately. + +.. NOTE:: + + RPM packages are recommended for deployment. Deploy archives only if + you do not have root privileges. + +To place and deploy the application, do the following on every server dedicated +for Tarantool Enterprise: + +#. Upload the archive, decompress, and extract it to the ``/home//apps`` + directory: + + .. code-block:: console + + $ tar -xzvf -.tar.gz -C /home//apps + +#. Start Tarantool instances with the corresponding services. + + To manage instances and configuration, use tools like ``ansible``, + ``systemd``, and ``supervisord``. + +#. In case it is a cluster-aware application, proceed to + :ref:`deploying the cluster `. + +.. _enterprise-code-upgrade: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Upgrading code +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +All instances in the cluster are to run the same code. This includes all the +components: custom roles, applications, module binaries, ``tarantool``, and +``tt`` (if necessary) executables. + +Pay attention to possible backward incompatibility that any component may +introduce. This will help you choose a scenario for an +:ref:`upgrade in production `. Keep in mind that +you are responsible for code compatibility and handling conflicts should +inconsistencies occur. + +To upgrade any of the components, prepare a new version of the package (archive): + +#. Update the necessary files in your development environment (directory): + + * Your own source code: custom roles and/or applications. + * Module binaries. + * Executables. Replace them with ones from the new bundle. + +#. Increment the version as described in + :ref:`application versioning `. + +#. Repack the updated files as described in :ref:`packaging applications `. + +#. Choose an upgrade scenario as described in the :ref:`Upgrading in production ` + section. + +.. _enterprise-run-app: + +------------------------------------------------------------------------------- +Running sample applications +------------------------------------------------------------------------------- + +The Enterprise distribution package includes sample applications in the +``examples/`` directory that showcase basic Tarantool functionality. + +.. contents:: Sample applications: + :depth: 1 + :local: + +.. _enterprise-pg-write-through-cache: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Write-through cache application for PostgreSQL +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The example in ``pg_writethrough_cache/`` shows how Tarantool can cache data +written *through* it to a PostgreSQL database to speed up the reads. + +The sample application requires a deployed PostgreSQL database and the following +rock modules: + +.. code-block:: console + + $ tt rocks install http + $ tt rocks install pg + $ tt rocks install argparse + +Look through the code in the files to get an understanding of what the application +does. + +To run the application for a local PostgreSQL database, say: + +.. code-block:: console + + $ tarantool cachesrv.lua --binary-port 3333 --http-port 8888 --database postgresql://localhost/postgres + +.. _enterprise-ora-write-behind-cache: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Write-behind cache application for Oracle +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The example in ``ora-writebehind-cache/`` shows how Tarantool can cache writes +and queue them to an Oracle database to speed up both writes and reads. + +.. _enterprise-ora-write-behind-cache_reqs: + +******************************************************************************* +Application requirements +******************************************************************************* + +The sample application requires: + +* deployed Oracle database; +* Oracle tools: `Instant Client and SQL Plus `_, + both of version 12.2; + + .. NOTE:: + + In case the Oracle Instant Client errors out on ``.so`` files + (Oracle's dynamic libraries), put them to some directory and add it to the + ``LD_LIBRARY_PATH`` environment variable. + + For example: ``export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/`` + +* rock modules listed in the ``rockspec`` file. + +To install the modules, run the following command in the ``examples/ora_writebehind_cache`` +directory: + +.. code-block:: console + + $ tt rocks make oracle_rb_cache-0.1.0-1.rockspec + +If you do not have a deployed Oracle instance at hand, run a dummy in a Docker +container: + +#. In the browser, log in to `Oracle container registry `_, + click **Database**, and accept the Oracle's Enterprise Terms and Restrictions. + +#. In the ``ora-writebehind-cache/`` directory, log in to the repository under + the Oracle account, pull, and run an image using the prepared scripts: + + .. code-block:: console + + $ docker login container-registry.oracle.com + Login: + Password: + Login Succeeded + $ docker pull container-registry.oracle.com/database/enterprise:12.2.0.1 + $ docker run -itd \ + -p 1521:1521 \ + -p 5500:5500 \ + --name oracle \ + -v "$(pwd)"/setupdb/configDB.sh:/home/oracle/setup/configDB.sh \ + -v "$(pwd)"/setupdb/runUserScripts.sh:/home/oracle/setup/runUserScripts.sh \ + -v "$(pwd)"/startupdb:/opt/oracle/scripts/startup \ + container-registry.oracle.com/database/enterprise:12.2.0.1 + +When all is set and done, run the example application. + +.. _enterprise-ora-write-behind-cache_run: + +******************************************************************************* +Running write-behind cache +******************************************************************************* + +To launch the application, run the following in the ``examples/ora_writebehind_cache`` +directory: + +.. code-block:: console + + $ tarantool init.lua + +The application supports the following requests: + +* Get: ``GET http://:/account/id``; +* Add: ``POST http://:/account/`` with the following data: + + .. code-block:: console + + {"clng_clng_id":1,"asut_asut_id":2,"creation_data":"01-JAN-19","navi_user":"userName"} + +* Update: ``POST http://:/account/id`` with the same data as in the add request; +* Remove: ``DELETE http://:/account/id`` where ``id`` is an account identifier. + +Look for sample CURL scripts in the ``examples/ora_writebehind_cache/testing`` +directory and check ``README.md`` for more information on implementation. + +.. _enterprise-docker-app: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Hello-world application in Docker +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The example in the ``docker/`` directory contains a hello-world application +that you can pack in a Docker container and run on CentOS 7. + +The ``hello.lua`` file is the entry point and it is very bare-bones, so you +can add your code here. + +#. To build the container, say: + + .. code-block:: console + + $ docker build -t tarantool-enterprise-docker -f Dockerfile ../.. + +#. To run it: + + .. code-block:: console + + $ docker run --rm -t -i tarantool-enterprise-docker diff --git a/doc/enterprise/flight_recorder.rst b/doc/enterprise/flight_recorder.rst new file mode 100644 index 0000000000..ce3f6cbac2 --- /dev/null +++ b/doc/enterprise/flight_recorder.rst @@ -0,0 +1,218 @@ +.. _enterprise-flight-recorder: + +Flight recorder +=============== + +The flight recorder available in the Enterprise Edition is an event collection tool that +gathers various information about a working Tarantool instance, such as: + +* logs + +* metrics + +* requests and responses + +This information helps you investigate incidents related +to :ref:`crashing ` a Tarantool instance. + + +.. _enable: + +Enabling the flight recorder +---------------------------- + +The flight recorder is disabled by default and can be enabled and configured for +a specific Tarantool instance. +To enable the flight recorder, set the ``flightrec_enabled`` +:doc:`configuration option ` to ``true``. +This option is :ref:`dynamic ` and can be changed at runtime by calling ``box.cfg{}``: + +.. code-block:: lua + + box.cfg{ flightrec_enabled = true } + +After ``flightrec_enabled`` is set to ``true``, the flight recorder starts collecting data in the flight recording file ``current.ttfr``. +This file is stored in the :ref:`memtx_dir ` directory. +If the instance crashes and reboots, Tarantool rotates the flight recording: +``current.ttfr`` is renamed to ``.ttfr`` (for example, ``20230411T050721.ttfr``) +and the new ``current.ttfr`` file is created for collecting data. +In the case of correct shutdown (for example, using ``os.exit()``), +Tarantool continues writing to the existing ``current.ttfr`` file after restart. + +.. NOTE:: + + Note that old flight recordings should be removed manually. + + + +.. _config: + +Configuration +------------- + +This section describes options related to the flight recorder configuration. +Note that all options are :ref:`dynamic ` and can be changed at runtime. + +.. TODO not implemented yet + .. _config-directory: + + Flight recording directory + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + .. _cfg_flightrec_dir: + + .. confval:: flightrec_dir + + Specifies the directory used to store flight recordings (``*.ttfr`` files). + + | Type: string + | Default: :ref:`memtx_dir ` + | Environment variable: TT_FLIGHTREC_DIR + + + +.. _config-logs: + +Logs +~~~~ + +This section describes the flight recorder settings related to :ref:`logging `. +For example, you can configure a more detailed logging level in the flight recorder for deeper analysis. + +* :ref:`flightrec_logs_size ` +* :ref:`flightrec_logs_max_msg_size ` +* :ref:`flightrec_logs_log_level ` + +.. _cfg_flightrec_logs_size: + +.. confval:: flightrec_logs_size + + Specifies the size (in bytes) of the log storage. + You can set this option to ``0`` to disable the log storage. + + | Type: integer + | Default: 10485760 + | Environment variable: TT_FLIGHTREC_LOGS_SIZE + + +.. _cfg_flightrec_logs_max_msg_size: + +.. confval:: flightrec_logs_max_msg_size + + Specifies the maximum size (in bytes) of the log message. + The log message is truncated if its size exceeds this limit. + + | Type: integer + | Default: 4096 + | Maximum: 16384 + | Environment variable: TT_FLIGHTREC_LOGS_MAX_MSG_SIZE + + +.. _cfg_flightrec_logs_log_level: + +.. confval:: flightrec_logs_log_level + + Specifies the level of detail the log has. + You can learn more about log levels from the :ref:`log_level ` + option description. + Note that the ``flightrec_logs_log_level`` value might differ from ``log_level``. + + | Type: integer + | Default: 6 + | Environment variable: TT_FLIGHTREC_LOGS_LOG_LEVEL + + +.. _config-metrics: + +Metrics +~~~~~~~ + +This section describes the flight recorder settings related to collecting +:ref:`metrics `. + +* :ref:`flightrec_metrics_period ` +* :ref:`flightrec_metrics_interval ` + +.. _cfg_flightrec_metrics_period: + +.. confval:: flightrec_metrics_period + + Specifies the time period (in seconds) that defines how long metrics are stored from the moment of dump. + So, this value defines how much historical metrics data is collected up to the moment of crash. + The frequency of metric dumps is defined by :ref:`flightrec_metrics_interval `. + + | Type: integer + | Default: 180 + | Environment variable: TT_FLIGHTREC_METRICS_PERIOD + + +.. _cfg_flightrec_metrics_interval: + +.. confval:: flightrec_metrics_interval + + Specifies the time interval (in seconds) that defines the frequency of dumping metrics. + This value shouldn't exceed :ref:`flightrec_metrics_period `. + + | Type: number + | Default: 1.0 + | Minimum: 0.001 + | Environment variable: TT_FLIGHTREC_METRICS_INTERVAL + +.. NOTE:: + + Given that the average size of a metrics entry is 2 kB, + you can estimate the size of the metrics storage as follows: + + .. code-block:: console + + (flightrec_metrics_period / flightrec_metrics_interval) * 2 kB + + + +.. _config-requests: + +Requests +~~~~~~~~ + +This section lists the flight recorder settings related to +storing the :ref:`request and response ` data. + +* :ref:`flightrec_requests_size ` +* :ref:`flightrec_requests_max_req_size ` +* :ref:`flightrec_requests_max_res_size ` + +.. _cfg_flightrec_requests_size: + +.. confval:: flightrec_requests_size + + Specifies the size (in bytes) of storage for the request and response data. + You can set this parameter to ``0`` to disable a storage of requests and responses. + + | Type: integer + | Default: 10485760 + | Environment variable: TT_FLIGHTREC_REQUESTS_SIZE + + + +.. _cfg_flightrec_requests_max_req_size: + +.. confval:: flightrec_requests_max_req_size + + Specifies the maximum size (in bytes) of a request entry. + A request entry is truncated if this size is exceeded. + + | Type: integer + | Default: 16384 + | Environment variable: TT_FLIGHTREC_REQUESTS_MAX_REQ_SIZE + + +.. _cfg_flightrec_requests_max_res_size: + +.. confval:: flightrec_requests_max_res_size + + Specifies the maximum size (in bytes) of a response entry. + A response entry is truncated if this size is exceeded. + + | Type: integer + | Default: 16384 + | Environment variable: TT_FLIGHTREC_REQUESTS_MAX_RES_SIZE diff --git a/doc/enterprise/images/ddl-state.png b/doc/enterprise/images/ddl-state.png new file mode 100644 index 0000000000..d9714238a4 Binary files /dev/null and b/doc/enterprise/images/ddl-state.png differ diff --git a/doc/enterprise/images/hidden_spaces.png b/doc/enterprise/images/hidden_spaces.png new file mode 100644 index 0000000000..587244358a Binary files /dev/null and b/doc/enterprise/images/hidden_spaces.png differ diff --git a/doc/enterprise/images/space_contents.png b/doc/enterprise/images/space_contents.png new file mode 100644 index 0000000000..b086377f26 Binary files /dev/null and b/doc/enterprise/images/space_contents.png differ diff --git a/doc/enterprise/images/space_explr_tab.png b/doc/enterprise/images/space_explr_tab.png new file mode 100644 index 0000000000..dadcf14200 Binary files /dev/null and b/doc/enterprise/images/space_explr_tab.png differ diff --git a/doc/enterprise/images/space_search.png b/doc/enterprise/images/space_search.png new file mode 100644 index 0000000000..a6c719572b Binary files /dev/null and b/doc/enterprise/images/space_search.png differ diff --git a/doc/enterprise/images/spaces_with_data.png b/doc/enterprise/images/spaces_with_data.png new file mode 100644 index 0000000000..22f836070c Binary files /dev/null and b/doc/enterprise/images/spaces_with_data.png differ diff --git a/doc/enterprise/index.rst b/doc/enterprise/index.rst new file mode 100644 index 0000000000..b301c6cf4e --- /dev/null +++ b/doc/enterprise/index.rst @@ -0,0 +1,70 @@ +.. _tarantool_enterprise: + +Tarantool Enterprise Edition +============================ + +.. ifconfig:: language == 'en' + + .. container:: documentation-main-page-description + + This section describes the Enterprise Edition of Tarantool software -- a Lua + application server integrated with a DBMS for deploying fault-tolerant + distributed data storages. + + The Enterprise Edition provides an `extended feature set `__ for developing + and managing clustered Tarantool applications, for example: + + * :ref:`Static package ` + for standalone Linux systems. + * Tarantool :ref:`bindings to OpenLDAP `. + * Security :ref:`audit log `. + * Enterprise :ref:`database connectivity `: + Oracle and any ODBC-supported DBMS + (for example, MySQL, Microsoft SQL Server). + * SSL support for :ref:`traffic encryption `. + * :doc:`Tuple compression `. + * :doc:`Non-blocking DDL `. + +.. ifconfig:: language == 'ru' + + .. container:: documentation-main-page-description + + Данное руководство посвящено Enterprise-версии продукта Tarantool, + который сочетает в себе сервер приложений Lua и отказоустойчивую + распределенную СУБД. + + Enterprise-версия предлагает `дополнительные возможности `__ по + разработке и эксплуатации кластерных приложений, например: + + * :ref:`Статическая сборка ` + для автономных Linux-систем. + * :ref:`Модуль интеграции с OpenLDAP `. + * :ref:`Журнал аудита безопасности `. + * Подключения к :ref:`корпоративным базам данных `: + Oracle и любым СУБД с интерфейсом ODBC (MySQL, Microsoft SQL Server и т.д.). + (например, MySQL, Microsoft SQL Server). + * :ref:`Шифрование трафика ` с помощью SSL. + * :doc:`Сжатие кортежей `. + * :doc:`Смена схемы данных в фоновом режиме `. + + +.. toctree:: + :hidden: + + changelog + setup + dev + admin + security + audit + cartridge-auth + tuple_compression + wal_extensions + read_views + flight_recorder + audit_log + space_upgrade + migration + system_metrics + deprecated + rocksref diff --git a/doc/enterprise/migration.rst b/doc/enterprise/migration.rst new file mode 100644 index 0000000000..71af6ddddf --- /dev/null +++ b/doc/enterprise/migration.rst @@ -0,0 +1,60 @@ +Migration from Tarantool Cartridge +================================== + +If your company uses a service based on Tarantool Community Edition and +Tarantool Cartridge, follow the steps below to update these components to +Tarantool Enterprise Edition. + +As a reference, the instructions below use a template service created with +:ref:`tt`, the Tarantool CLI utility. + +Service build pipeline +---------------------- + +Get access to the source code and build pipeline of your service. Here is an +example of what the service build pipeline might look like for CentOS/RHEL 7: + +.. code-block:: bash + + curl -L https://tarantool.io/release/2/installer.sh | bash + yum -y install tarantool tarantool-devel tt git gcc gcc-с++ cmake + tt pack rpm + + +Update the pipeline +------------------- + +In the installation section of your pipeline, replace open-source ``tarantool`` +packages with Tarantool Enterprise SDK: + +.. code-block:: bash + + curl -L \ + https://${TOKEN}@download.tarantool.io/enterprise/release/${OS}/${ARCH}/${VERSION}/tarantool-enterprise-sdk-${VERSION_OS_ARCH_POSTFIX}.tar.gz \ + > sdk.tar.gz + + # for example, the URL for the Linux build of Tarantool 2.10.4 for the x86_64 platform will be: + # https://${TOKEN}@download.tarantool.io/enterprise/release/linux/x86_64/2.10/tarantool-enterprise-sdk-gc64-2.10.4-0-r523.linux.x86_64.tar.gz + + tar -xvf sdk.tar.gz + source tarantool-enterprise/env.sh + tt pack rpm + +Now the pipeline will produce a new service artifact, which includes +Tarantool Enterprise Edition. + +Update the service +------------------ + +Update your service to the new version like you usually update Tarantool in +your organization. You don't have to interrupt access to the service. +To learn how to do it with ``ansible-cartridge``, +`check this example `__. + + +That's it! +---------- + +You can now use Tarantool Enterprise Edition's features in your installation. +For example, to enable the audit log, +:ref:`set up the audit_log parameter in your node configuration `. diff --git a/doc/enterprise/read_views.rst b/doc/enterprise/read_views.rst new file mode 100644 index 0000000000..8316473dbf --- /dev/null +++ b/doc/enterprise/read_views.rst @@ -0,0 +1,211 @@ +.. _read_views: + +Read views +========== + +A read view is an in-memory snapshot of the entire database that isn't +affected by future :ref:`data modifications `. +Read views provide access to database spaces and their indexes and enable you to +retrieve data using the same ``select`` and ``pairs`` operations. + +Read views can be used to make complex analytical queries. +This reduces the load on the main database and improves RPS for a single Tarantool instance. + +To improve memory consumption and performance, +Tarantool creates read views using the copy-on-write technique. +In this case, duplication of the entire data set is not required: +Tarantool duplicates only blocks modified after a read view is created. + +.. NOTE:: + + Tarantool Enterprise Edition supports read views starting from v2.11.0 and enables the ability + to work with them using both :ref:`Lua ` and :ref:`C API `. + + + + + +.. _read_views_limitations: + +Limitations +----------- + +Read views have the following limitations: + +- Only the :ref:`memtx ` engine is supported. +- Only TREE and HASH :ref:`indexes ` are supported. +- Pagination is not supported (the :ref:`after ` option). + + + +.. _working_with_read_views: + +Working with read views +----------------------- + +.. _creating_read_view: + +Creating a read view +~~~~~~~~~~~~~~~~~~~~ + +To create a read view, call the :ref:`box.read_view.open() ` function. +The snippet below shows how to create a read view with the ``read_view1`` name. + +.. code-block:: tarantoolsession + + tarantool> read_view1 = box.read_view.open({name = 'read_view1'}) + +After creating a read view, you can see the information about it by calling +:ref:`read_view_object:info() `. + +.. code-block:: tarantoolsession + + tarantool> read_view1:info() + --- + - timestamp: 66.606817935 + signature: 24 + is_system: false + status: open + vclock: {1: 24} + name: read_view1 + id: 1 + ... + +To list all the created read views, call the :ref:`box.read_view.list() ` function. + + + +.. _querying_data: + +Querying data +~~~~~~~~~~~~~ + +After creating a read view, you can access database spaces using the +:ref:`read_view_object.space ` field. +This field provides access to a space object that exposes the +:ref:`select `, :ref:`get `, +and :ref:`pairs ` methods with the same behavior +as corresponding ``box.space`` methods. + +The example below shows how to select 4 records from the ``bands`` space: + +.. code-block:: tarantoolsession + + tarantool> read_view1.space.bands:select({}, {limit = 4}) + --- + - - [1, 'Roxette', 1986] + - [2, 'Scorpions', 1965] + - [3, 'Ace of Base', 1987] + - [4, 'The Beatles', 1960] + ... + +Similarly, you can retrieve data by the specific index. + +.. code-block:: tarantoolsession + + tarantool> read_view1.space.bands.index.year:select({}, {limit = 4}) + --- + - - [4, 'The Beatles', 1960] + - [2, 'Scorpions', 1965] + - [1, 'Roxette', 1986] + - [3, 'Ace of Base', 1987] + ... + + + +.. _closing_read_view: + +Closing a read view +~~~~~~~~~~~~~~~~~~~ + +When a read view is no longer needed, close it using the +:ref:`read_view_object:close() ` method +because a read view may consume a substantial amount of memory. + +.. code-block:: tarantoolsession + + tarantool> read_view1:close() + --- + ... + +Otherwise, a read view is closed implicitly when the read view object is collected by the Lua garbage collector. + +After the read view is closed, +its :ref:`status ` is set to ``closed``. +On an attempt to use it, an error is raised. + + +.. _read_views_example: + +Example +------- + + +A Tarantool session below demonstrates how to open a read view, +get data from this view, and close it. +To repeat these steps, you need to bootstrap a Tarantool instance +as described in :ref:`Using data operations ` +(you can skip creating secondary indexes). + +1. Insert test data. + + .. code-block:: tarantoolsession + + tarantool> bands:insert{1, 'Roxette', 1986} + bands:insert{2, 'Scorpions', 1965} + bands:insert{3, 'Ace of Base', 1987} + bands:insert{4, 'The Beatles', 1960} + +2. Create a read view by calling the ``open`` function. + Then, make sure that the read view status is ``open``. + + .. code-block:: tarantoolsession + + tarantool> read_view1 = box.read_view.open({name = 'read_view1'}) + + tarantool> read_view1.status + --- + - open + ... + +3. Change data in a database using the ``delete`` and ``update`` operations. + + .. code-block:: tarantoolsession + + tarantool> bands:delete(4) + --- + - [4, 'The Beatles', 1960] + ... + tarantool> bands:update({2}, {{'=', 2, 'Pink Floyd'}}) + --- + - [2, 'Pink Floyd', 1965] + ... + +4. Query a read view to make sure it contains a snapshot of data before a database is updated. + + .. code-block:: tarantoolsession + + tarantool> read_view1.space.bands:select() + --- + - - [1, 'Roxette', 1986] + - [2, 'Scorpions', 1965] + - [3, 'Ace of Base', 1987] + - [4, 'The Beatles', 1960] + ... + +5. Close a read view. + + .. code-block:: tarantoolsession + + tarantool> read_view1:close() + --- + ... + + + +.. toctree:: + :maxdepth: 2 + :hidden: + + read_views/lua_api + read_views/c_api \ No newline at end of file diff --git a/doc/enterprise/read_views/c_api.rst b/doc/enterprise/read_views/c_api.rst new file mode 100644 index 0000000000..a21eb2729a --- /dev/null +++ b/doc/enterprise/read_views/c_api.rst @@ -0,0 +1,274 @@ +.. _read_views_c_api: + +Read views: C API +================= + +This topic describes the C API for working with :ref:`read views `. +The C API is MT-safe and provides the ability to use a read view from any thread, +not only from the :ref:`main (TX) thread `. + +The C API has the following specifics: + +* The :ref:`space.upgrade ` function is not applied to retrieved tuples even if a space upgrade is in progress. + +* Tuples stored in :ref:`compressed spaces ` are not decompressed - they are returned as :ref:`raw MessagePack ` (``MP_EXT/MP_COMPRESSION``). + +.. note:: + + You can learn how to call C code using stored procedures in the + :ref:`C tutorial`. + + +.. _data_types: + +Data types +---------- + +The opaque data types below represent raw read views and an iterator over data in a raw read view. +Note that there is no special data type for tuples retrieved from a read view. +Tuples are returned as raw MessagePack data (``const char *``). + +.. c:type:: box_raw_read_view box_raw_read_view_t + + A raw database read view. + +.. c:type:: box_raw_read_view_space box_raw_read_view_space_t + + A space in a raw read view. + +.. c:type:: box_raw_read_view_index box_raw_read_view_index_t + + An index in a raw read view. + +.. c:type:: box_raw_read_view_iterator box_raw_read_view_iterator_t + + An iterator over data in a raw read view. + + + +.. _creating_destroying_read_views: + +Creating and destroying read views +---------------------------------- + +To create or destroy a read view, use the functions below. + +.. _box_raw_read_view_new: + +.. c:function:: box_raw_read_view_t * box_raw_read_view_new(const char *name) + + Open a raw read view with the specified name and get a pointer to this read view. + In the case of error, returns ``NULL`` and sets :ref:`box_error_last()`. + This function may be called from the main (TX) thread only. + + :param const char *name: (optional) a read view name; if ``name`` is not specified, a read view name is set to ``unknown`` + + :return: a pointer to a read view + + +.. _box_raw_read_view_delete: + +.. c:function:: void box_raw_read_view_delete(box_raw_read_view_t *rv) + + Close a raw read view and release all resources associated with it. + This function may be called from the main (TX) thread only. + + :param box_raw_read_view_t *rv: a pointer to a read view + + +.. NOTE:: + + Read views created using ``box_raw_read_view_new`` are displayed in :ref:`box.read_view.list() ` along with read views :ref:`created in Lua `. + + +.. _spaces_and_indexes: + +Spaces and indexes +------------------ + +To fetch data from a read view, you need to specify an index to fetch the data from. +The following functions are available for looking up spaces and indexes in a read view object. + + +.. _box_raw_read_view_space_by_id: + +.. c:function:: box_raw_read_view_space_t * box_raw_read_view_space_by_id(const box_raw_read_view_t *rv, uint32_t space_id) + + Find a space by ID in a raw read view. + If not found, returns ``NULL`` and sets :ref:`box_error_last()`. + + :param const box_raw_read_view_t *rv: a pointer to a read view + :param uint32_t space_id: a space identifier + + :return: a pointer to a space + + +.. _box_raw_read_view_space_by_name: + +.. c:function:: box_raw_read_view_space_t * box_raw_read_view_space_by_name(const box_raw_read_view_t *rv, const char *space_name, uint32_t space_name_len) + + Find a space by name in a raw read view. + If not found, returns ``NULL`` and sets :ref:`box_error_last()`. + + :param const box_raw_read_view_t *rv: a pointer to a read view + :param const char *space_name: a space name + :param uint32_t space_name_len: a space name length + + :return: a pointer to a space + + +.. _box_raw_read_view_index_by_id: + +.. c:function:: box_raw_read_view_index_t * box_raw_read_view_index_by_id(const box_raw_read_view_space_t *space, uint32_t index_id) + + Find an index by ID in a read view's space. + If not found, returns ``NULL`` and sets :ref:`box_error_last()`. + + :param const box_raw_read_view_space_t *space: a pointer to a read view's space + :param uint32_t space_id: a space identifier + + :return: a pointer to an index + + +.. _box_raw_read_view_index_by_name: + +.. c:function:: box_raw_read_view_index_t * box_raw_read_view_index_by_name(const box_raw_read_view_space_t *space, const char *index_name, uint32_t index_name_len) + + Find an index by name in a read view's space. + If not found, returns ``NULL`` and sets :ref:`box_error_last()`. + + :param const box_raw_read_view_space_t *space: a pointer to a space + :param const char *index_name: an index name + :param uint32_t index_name_len: an index name length + + :return: a pointer to an index + + + +.. _iteration_and_lookup: + +Iteration and lookup +-------------------- + +The functions below provide the ability to look up a tuple by the key or create an iterator over a read view index. + +.. NOTE:: + + Methods of the read view iterator are safe to call from any thread, but they may be used in one thread at the same time. This means that an iterator should be thread-local. + + +.. _box_raw_read_view_get: + +.. c:function:: int box_raw_read_view_get(const box_raw_read_view_index_t *index, const char *key, const char *key_end, const char **data, uint32_t *size) + + Look up a tuple in a read view's index. + If found, the ``data`` and ``size`` out arguments return a pointer to and the size of tuple data. + If not found, ``*data`` is set to ``NULL`` and ``*size`` is set to ``0``. + + :param const box_raw_read_view_index_t *index: a pointer to a read view's index + :param const char *key: a pointer to the first byte of the MsgPack data that represents the search key + :param const char *key_end: a pointer to the byte following the last byte of the MsgPack data that represents the search key + :param const char **data: a pointer to the tuple data + :param uint32_t *size: the size of tuple data + + :return: ``0`` on success; in the case of error, returns ``-1`` and sets :ref:`box_error_last()` + + + + +.. _box_raw_read_view_iterator_create: + +.. c:function:: int box_raw_read_view_iterator_create(box_raw_read_view_iterator_t *it, const box_raw_read_view_index_t *index, int type, const char *key, const char *key_end) + + Create an iterator over a raw read view index. + The initialized iterator object returned by this function remains valid and may be safely used until it's destroyed or the read view is closed. + When the iterator object is no longer needed, it should be destroyed using + :ref:`box_raw_read_view_iterator_destroy() `. + + :param box_raw_read_view_iterator_t *it: an iterator over a raw read view index + :param const box_raw_read_view_index_t *index: a pointer to a read view index + :param int type: an iteration direction represented by the :ref:`iterator_type ` + :param const char *key: a pointer to the first byte of the MsgPack data that represents the search key + :param const char *key_end: a pointer to the byte following the last byte of the MsgPack data that represents the search key + + :return: ``0`` on success; in the case of error, returns ``-1`` and sets :ref:`box_error_last()` + + + +.. _box_raw_read_view_iterator_next: + +.. c:function:: int box_raw_read_view_iterator_next(box_raw_read_view_iterator_t *it, const char **data, uint32_t *size) + + Retrieve the current tuple and advance the given iterator over a raw read view index. + The pointer to and the size of tuple data are returned in the ``data`` and the ``size`` out arguments. + The data returned by this function remains valid and may be safely used until the read view is closed. + + :param box_raw_read_view_iterator_t *it: an iterator over a read view index + :param const char **data: a pointer to the tuple data; at the end of iteration, ``*data`` is set to ``NULL`` + :param uint32_t *size: the size of tuple data; at the end of iteration, ``*size`` is set to ``0`` + + :return: ``0`` on success; in the case of error, returns ``-1`` and sets :ref:`box_error_last()` + + + +.. _box_raw_read_view_iterator_destroy: + +.. c:function:: void box_raw_read_view_iterator_destroy(box_raw_read_view_iterator_t *it) + + Destroy an iterator over a raw read view index. + The iterator object should not be used after calling this function, + but the data returned by the iterator may be safely dereferenced until the read view is closed. + + :param box_raw_read_view_iterator_t *it: an iterator over a read view index + + + + + +.. _space_format: + +Space format +------------ + +A space object's methods below provide the ability to get names and types of space fields. + + +.. _box_raw_read_view_space_field_count: + +.. c:function:: uint32_t box_raw_read_view_space_field_count(const box_raw_read_view_space_t *space) + + Get the number of fields defined in the format of a read view space. + + :param const box_raw_read_view_space_t *space: a pointer to a read view space + + :return: the number of fields + + + +.. _box_raw_read_view_space_field_name: + +.. c:function:: const char * box_raw_read_view_space_field_name(const box_raw_read_view_space_t *space, uint32_t field_no) + + Get the name of a field defined in the format of a read view space. + If the field number is greater than the total number of fields defined in the format, ``NULL`` is returned. + The string returned by this function is guaranteed to remain valid until the read view is closed. + + :param const box_raw_read_view_space_t *space: a pointer to a read view space + :param uint32_t field_no: the field number (starts with ``0``) + + :return: the name of a field + + + +.. _box_raw_read_view_space_field_type: + +.. c:function:: const char * box_raw_read_view_space_field_type(const box_raw_read_view_space_t *space, uint32_t field_no) + + Get the type of a field defined in the format of a read view space. + If the field number is greater than the total number of fields defined in the format, ``NULL`` is returned. + The string returned by this function is guaranteed to remain valid until the read view is closed. + + :param const box_raw_read_view_space_t *space: a pointer to a read view space + :param uint32_t field_no: the field number (starts with ``0``) + + :return: the type of a field diff --git a/doc/enterprise/read_views/lua_api.rst b/doc/enterprise/read_views/lua_api.rst new file mode 100644 index 0000000000..81b3daa958 --- /dev/null +++ b/doc/enterprise/read_views/lua_api.rst @@ -0,0 +1,118 @@ +.. _read_views_lua_api: + +Read views: Lua API +=================== + +This topic describes the Lua API for working with :ref:`read views `. + +.. _box-read_view-open: + +.. function:: box.read_view:open({opts}) + + Create a :ref:`new read view `. + + :param table opts: (optional) configurations options for a read view. + For example, the ``name`` option specifies a read view name. + If ``name`` is not specified, a read view name is set to ``unknown``. + + :return: a created read view object + :rtype: read_view_object + + **Example:** + + .. code-block:: tarantoolsession + + tarantool> read_view1 = box.read_view.open({name = 'read_view1'}) + + + +.. class:: read_view_object + + An object that represents a :ref:`read view `. + + .. _read_view_object-info: + + .. method:: read_view_object:info() + + Get information about a read view such as a name, status, or ID. + All the available fields are listed below in the object options. + + :return: information about a read view + :rtype: table + + .. _read_view_object-close: + + .. method:: read_view_object:close() + + Close a read view. + After the read view is closed, its :ref:`status ` is set to ``closed``. + On an attempt to use it, an error is raised. + + .. _read_view_object-status: + + .. data:: status + + A read view status. + The possible values are ``open`` and ``closed``. + + :rtype: string + + .. _read_view_object-id: + + .. data:: id + + A unique numeric identifier of a read view. + + :rtype: number + + .. _read_view_object-name: + + .. data:: name + + A read view name. + You can specify a read view name in the :ref:`box.read_view.open() ` arguments. + + :rtype: string + + .. _read_view_object-is_system: + + .. data:: is_system + + Determine whether a read view is system. + For example, system read views can be created to make a :ref:`checkpoint ` + or join a new :ref:`replica `. + + :rtype: boolean + + .. _read_view_object-timestamp: + + .. data:: timestamp + + The :ref:`fiber.clock() ` value at the moment of opening a read view. + + :rtype: number + + .. _read_view_object-vclock: + + .. data:: vclock + + The :ref:`box.info.vclock ` value at the moment of opening a read view. + + :rtype: table + + .. _read_view_object-signature: + + .. data:: signature + + The :ref:`box.info.signature ` value at the moment of opening a read view. + + :rtype: number + + .. _read_view_object-space: + + .. data:: space + + Get access to database spaces included in a read view. + You can use this field to :ref:`query space data `. + + :rtype: space object diff --git a/doc/enterprise/rocksref.rst b/doc/enterprise/rocksref.rst new file mode 100644 index 0000000000..e85f1f79f8 --- /dev/null +++ b/doc/enterprise/rocksref.rst @@ -0,0 +1,109 @@ +.. _enterprise-rocks: + +=============================================================================== +Modules +=============================================================================== + +This section covers open and closed source Lua modules for Tarantool Enterprise Edition +included in the distribution as an offline rocks repository. + +------------------------------------------------------------------------------- +Open source modules +------------------------------------------------------------------------------- + +* `avro-schema `_ + is an assembly of `Apache Avro `_ + schema tools; +* :doc:`cartridge ` + is a high-level cluster management interface that contains + several modules: + + * ``rpc`` implements remote procedure calls between cluster instances and + allows roles running on some instances to interact with other roles on + other instances. + * ``service-registry`` implements inter-role interaction and allows different + roles to interact with each other in the scope of one instance. + * ``confapplier`` implements cluster-wide configuration validation and + application via a two-phase commit. + * ``auth`` manages authentication. + * ``pool`` reuses Tarantool's ``net.box`` connections. + * ``admin`` implements administration functions. + +* :doc:`cartridge-cli ` + is the command-line interface for the ``cartridge`` module. + + .. important:: + + ``cartridge-cli`` is deprecated in favor of the :ref:`tt CLI utility `. + +* :ref:`checks ` + is a type checker of functional arguments. This library that declares + a ``checks()`` function and ``checkers`` table that allow to check the + parameters passed to a Lua function in a fast and unobtrusive way. +* `http `_ is an + on-board HTTP-server, which comes in addition to Tarantool's out-of-the-box + HTTP client, and must be installed as described in the + :ref:`installation section `. +* `icu-date `_ + is a date-and-time formatting library for Tarantool + based on International Components for Unicode; +* `kafka `_ + is a full-featured high-performance ``kafka`` library for Tarantool + based on ``librdkafka``; +* `luacheck `_ is a static analyzer and + linter for Lua, preconfigured for Tarantool. +* `luarapidxml `_ + is a fast XML parser. +* `luatest `_ is + a Tarantool test framework written in Lua. +* :ref:`membership ` + builds a mesh from multiple Tarantool instances based on gossip protocol. + The mesh monitors itself, helps members discover everyone else in the group + and get notified about their status changes with low latency. It is built + upon the ideas from Consul or, more precisely, the SWIM algorithm. +* :ref:`metrics ` is a collection + of useful monitoring metrics. +* `tracing `_ + is a module for debugging performance issues. +* :ref:`vshard ` + is an automatic sharding system that enables horizontal scaling for Tarantool + DBMS instances. + +------------------------------------------------------------------------------- +Closed source modules +------------------------------------------------------------------------------- + +* :doc:`ldap ` + allows you to authenticate in a LDAP server and perform searches. +* :doc:`odbc ` + is an ODBC connector for Tarantool based on unixODBC. +* :doc:`oracle ` + is an Oracle connector for Lua applications through which they can send and + receive data to and from Oracle databases. + The advantage of the Tarantool-Oracle integration is that anyone can handle all + the tasks with Oracle DBMSs (control, manipulation, storage, access) with the + same high-level language (Lua) and with minimal delay. +* :doc:`task ` + is a module for managing background tasks in a Tarantool cluster. +* :doc:`space-explorer ` + is a module for exploring Tarantool spaces in ``cartridge``. + +.. _enterprise-rocks-install: + +------------------------------------------------------------------------------- +Installing and using modules +------------------------------------------------------------------------------- + +To use a module, install the following: + +#. All the necessary third-party software packages (if any). See the + module's prerequisites for the list. + +#. The module itself on every Tarantool instance: + + .. code-block:: console + + $ tt rocks install MODULE_NAME [MODULE_VERSION] + +See the :ref:`tt rocks reference ` to learn more about +managing Lua modules. diff --git a/doc/enterprise/security.rst b/doc/enterprise/security.rst new file mode 100644 index 0000000000..c86f85daf1 --- /dev/null +++ b/doc/enterprise/security.rst @@ -0,0 +1,741 @@ +.. _enterprise-security: + +Security hardening guide +======================== + +This guide explains how to enhance security in your Tarantool Enterprise Edition's +cluster using built-in features and provides general recommendations on security +hardening. +If you need to perform a security audit of a Tarantool Enterprise cluster, +refer to the :doc:`security checklist `. + +Tarantool Enterprise Edition does not provide a dedicated API for security control. All +the necessary configurations can be done via an administrative console or +initialization code. + +Tarantool Enterprise Edition has the following built-in security features: + +* :ref:`authentication ` +* :ref:`access control ` +* :ref:`audit log ` +* :ref:`traffic encryption ` + + +.. _enterprise-authentication: + +Authentication +-------------- + +Tarantool Enterprise Edition supports password-based authentication and allows for two +types of connections: + +* Via an :doc:`administrative console `. +* Over a binary port for read and write operations and procedure invocation. + +For more information on authentication and connection types, see the +:doc:`Security ` section of the Tarantool manual. + +In addition, Tarantool provides the following functionality: + +* :ref:`Sessions ` + -- states which associate connections with users and make Tarantool API available + to them after authentication. +* Authentication :ref:`triggers `, + which execute actions on authentication events. +* Third-party (external) authentication protocols and services such as LDAP or + Active Directory -- supported in the web interface, but unavailable + on the binary-protocol level. + +.. _enterprise-access-control: + +Access control +-------------- + +Tarantool Enterprise Edition provides the means for administrators to prevent +unauthorized access to the database and to certain functions. + +Tarantool recognizes: + +* different users (guests and administrators) +* privileges associated with users +* roles (containers for privileges) granted to users + +The following system spaces are used to store users and privileges: + +* The ``_user`` space to store usernames and hashed passwords for authentication. +* The ``_priv`` space to store privileges for access control. + +For more information, see the +:ref:`Access control ` section. + +Users who create **objects** (spaces, indexes, users, roles, sequences, and +functions) in the database become their **owners** and automatically acquire +privileges for what they create. For more information, see the +:ref:`Owners and privileges ` section. + + +.. _enterprise-auth-restrictions: + +Authentication restrictions +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Tarantool Enterprise Edition provides the ability to apply additional restrictions for user authentication. +For example, you can specify the minimum time between authentication attempts +or disable access for guest users. + +The following :doc:`configuration options ` are available: + +* :ref:`auth_delay ` +* :ref:`disable_guest ` + + +.. _cfg_auth_delay: + +.. confval:: auth_delay + + Specifies a period of time (in seconds) that a specific user should wait + for the next attempt after failed authentication. + + With the configuration below, Tarantool refuses the authentication attempt if the previous + attempt was less than 5 seconds ago. + + .. code-block:: lua + + box.cfg{ auth_delay = 5 } + + + | Since version: 2.11 + | Type: number + | Default: 0 + | Environment variable: TT_AUTH_DELAY + | Dynamic: **yes** + + +.. _cfg_disable_guest: + +.. confval:: disable_guest + + If **true**, disables access over remote connections + from unauthenticated or :ref:`guest access ` users. + This option affects both + :doc:`net.box ` and + :ref:`replication ` connections. + + | Since version: 2.11 + | Type: boolean + | Default: false + | Environment variable: TT_DISABLE_GUEST + | Dynamic: **yes** + + + +.. _enterprise-password-policy: + +Password policy +~~~~~~~~~~~~~~~ + +A password policy allows you to improve database security by enforcing the use +of strong passwords, setting up a maximum password age, and so on. +When you create a new user with +:doc:`box.schema.user.create ` +or update the password of an existing user with +:doc:`box.schema.user.passwd `, +the password is checked against the configured password policy settings. + +The following :doc:`configuration options ` are available: + +* :ref:`password_min_length ` +* :ref:`password_enforce_uppercase ` +* :ref:`password_enforce_lowercase ` +* :ref:`password_enforce_digits ` +* :ref:`password_enforce_specialchars ` +* :ref:`password_lifetime_days ` +* :ref:`password_history_length ` + +.. _cfg_password_min_length: + +.. confval:: password_min_length + + Specifies the minimum number of characters for a password. + + The following example shows how to set the minimum password length to 10. + + .. code-block:: lua + + box.cfg{ password_min_length = 10 } + + | Since version: 2.11 + | Type: integer + | Default: 0 + | Environment variable: TT_PASSWORD_MIN_LENGTH + | Dynamic: **yes** + + +.. _cfg_password_enforce_uppercase: + +.. confval:: password_enforce_uppercase + + If **true**, a password should contain uppercase letters (A-Z). + + | Since version: 2.11 + | Type: boolean + | Default: false + | Environment variable: TT_PASSWORD_ENFORCE_UPPERCASE + | Dynamic: **yes** + + +.. _cfg_password_enforce_lowercase: + +.. confval:: password_enforce_lowercase + + If **true**, a password should contain lowercase letters (a-z). + + | Since version: 2.11 + | Type: boolean + | Default: false + | Environment variable: TT_PASSWORD_ENFORCE_LOWERCASE + | Dynamic: **yes** + + +.. _cfg_password_enforce_digits: + +.. confval:: password_enforce_digits + + If **true**, a password should contain digits (0-9). + + | Since version: 2.11 + | Type: boolean + | Default: false + | Environment variable: TT_PASSWORD_ENFORCE_DIGITS + | Dynamic: **yes** + + +.. _cfg_password_enforce_specialchars: + +.. confval:: password_enforce_specialchars + + If **true**, a password should contain at least one special character (such as ``&|?!@$``). + + | Since version: 2.11 + | Type: boolean + | Default: false + | Environment variable: TT_PASSWORD_ENFORCE_SPECIALCHARS + | Dynamic: **yes** + + +.. _cfg_password_lifetime_days: + +.. confval:: password_lifetime_days + + Specifies the maximum period of time (in days) a user can use the same password. + When this period ends, a user gets the "Password expired" error on a login attempt. + To restore access for such users, use :doc:`box.schema.user.passwd `. + + .. note:: + + The default 0 value means that a password never expires. + + The example below shows how to set a maximum password age to 365 days. + + .. code-block:: lua + + box.cfg{ password_lifetime_days = 365 } + + | Since version: 2.11 + | Type: integer + | Default: 0 + | Environment variable: TT_PASSWORD_LIFETIME_DAYS + | Dynamic: **yes** + + +.. _cfg_password_history_length: + +.. confval:: password_history_length + + Specifies the number of unique new user passwords before an old password can be reused. + + In the example below, a new password should differ from the last three passwords. + + .. code-block:: lua + + box.cfg{ password_history_length = 3 } + + | Since version: 2.11 + | Type: integer + | Default: 0 + | Environment variable: TT_PASSWORD_HISTORY_LENGTH + | Dynamic: **yes** + + .. note:: + Tarantool uses the ``auth_history`` field in the + :doc:`box.space._user ` + system space to store user passwords. + + + + +.. _enterprise-authentication-protocol: + +Authentication protocol +~~~~~~~~~~~~~~~~~~~~~~~ + +By default, Tarantool uses the +`CHAP `_ +protocol to authenticate users and applies ``SHA-1`` hashing to +:ref:`passwords `. +Note that CHAP stores password hashes in the ``_user`` space unsalted. +If an attacker gains access to the database, they may crack a password, for example, using a `rainbow table `_. + +In the Enterprise Edition, you can enable +`PAP `_ authentication +with the ``SHA256`` hashing algorithm. +For PAP, a password is salted with a user-unique salt before saving it in the database, +which keeps the database protected from cracking using a rainbow table. + +To enable PAP, specify the ``box.cfg.auth_type`` option as follows: + +.. code-block:: lua + + box.cfg{ auth_type = 'pap-sha256' } + +| Since version: 2.11 +| Type: string +| Default value: 'chap-sha1' +| Possible values: 'chap-sha1', 'pap-sha256' +| Environment variable: TT_AUTH_TYPE +| Dynamic: **yes** + +For new users, the :doc:`box.schema.user.create ` method +will generate authentication data using ``PAP-SHA256``. +For existing users, you need to reset a password using +:doc:`box.schema.user.passwd ` +to use the new authentication protocol. + +.. warning:: + + Given that ``PAP`` transmits a password as plain text, + Tarantool requires configuring :ref:`SSL/TLS ` + for a connection. + +The examples below show how to specify the authentication protocol on the client side: + +* For :doc:`net.box `, you can + specify the authentication protocol using the ``auth_type`` URI parameter or + the corresponding connection option: + + .. code-block:: lua + + -- URI parameters + conn = require('net.box').connect( + 'username:password@localhost:3301?auth_type=pap-sha256') + + -- URI parameters table + conn = require('net.box').connect({ + uri = 'username:password@localhost:3301', + params = {auth_type = 'pap-sha256'}, + }) + + -- Connection options + conn = require('net.box').connect('localhost:3301', { + user = 'username', + password = 'password', + auth_type = 'pap-sha256', + }) + +* For :ref:`replication configuration `, + the authentication protocol can be specified in URI parameters: + + .. code-block:: lua + + -- URI parameters + box.cfg{ + replication = { + 'replicator:password@localhost:3301?auth_type=pap-sha256', + }, + } + + -- URI parameters table + box.cfg{ + replication = { + { + uri = 'replicator:password@localhost:3301', + params = {auth_type = 'pap-sha256'}, + }, + }, + } + +If the authentication protocol isn't specified explicitly on the client side, +the client uses the protocol configured on the server via ``box.cfg.auth_type``. + + + + +.. _enterprise-logging: + +Audit log +--------- + +Tarantool Enterprise Edition has a built-in audit log that records events such as: + +* authentication successes and failures +* connection closures +* creation, removal, enabling, and disabling of users +* changes of passwords, privileges, and roles +* denials of access to database objects + +The audit log contains: + +* timestamps +* usernames of users who performed actions +* event types (e.g. ``user_create``, ``user_enable``, ``disconnect``, etc) +* descriptions + +You can configure the following audit log parameters: + +* ``audit_log = `` which is similar to the + :ref:`log ` + parameter. This parameter tells Tarantool to record audit events to a specific file. +* ``audit_nonblock`` which is similar to the + :ref:`log_nonblock ` + parameter. + +For more information on logging, see the following: + +* the :doc:`Logs ` section +* the :ref:`Logging ` section in the configuration reference +* the :ref:`Tarantool audit module ` topic + +Access permissions to audit log files can be set up as to any other Unix file +system object -- via ``chmod``. + +.. _enterprise-iproto-encryption: + +Traffic encryption +------------------ + +Since version 2.10.0, Tarantool Enterprise Edition has the built-in support for using SSL to encrypt the client-server communications over :ref:`binary connections `, +that is, between Tarantool instances in a cluster or connecting to an instance via connectors using :doc:`net.box `. + +Tarantool uses the OpenSSL library that is included in the delivery package. +Please note that SSL connections use only TLSv1.2. + +.. _enterprise-iproto-encryption-config: + +Configuration +~~~~~~~~~~~~~ + +To configure traffic encryption, you need to set the special :ref:`URI parameters ` for a particular connection. +The parameters can be set for the following ``box.cfg`` options and ``nex.box`` method: + +* :ref:`box.cfg.listen ` -- on the server side. +* :ref:`box.cfg.replication `--on the client side. +* :ref:`net_box_object.connect() `--on the client side. + +Below is the list of the parameters. +In the :ref:`next section `, you can find details and examples on what should be configured on both the server side and the client side. + +* ``transport`` -- enables SSL encryption for a connection if set to ``ssl``. + The default value is ``plain``, which means the encryption is off. If the parameter is not set, the encryption is off too. + Other encryption-related parameters can be used only if the ``transport = 'ssl'`` is set. + + Example: + + .. code-block:: lua + + c = require('net.box').connect({ + uri = 'localhost:3301', + params = {transport = 'ssl'} + }) + +* ``ssl_key_file`` -- a path to a private SSL key file. + Mandatory for a server. + For a client, it's mandatory if the ``ssl_ca_file`` parameter is set for a server; otherwise, optional. + If the private key is encrypted, provide a password for it in the ``ssl_password`` or ``ssl_password_file`` parameter. + +* ``ssl_cert_file`` -- a path to an SSL certificate file. + Mandatory for a server. + For a client, it's mandatory if the ``ssl_ca_file`` parameter is set for a server; otherwise, optional. + +* ``ssl_ca_file`` -- a path to a trusted certificate authorities (CA) file. Optional. If not set, the peer won't be checked for authenticity. + + Both a server and a client can use the ``ssl_ca_file`` parameter: + + * If it's on the server side, the server verifies the client. + * If it's on the client side, the client verifies the server. + * If both sides have the CA files, the sever and the client verify each other. + +* ``ssl_ciphers`` -- a colon-separated (``:``) list of SSL cipher suites the connection can use. See the :ref:`enterprise-iproto-encryption-ciphers` section for details. Optional. + Note that the list is not validated: if a cipher suite is unknown, Tarantool just ignores it, doesn't establish the connection and writes to the log that no shared cipher found. + +* ``ssl_password`` -- a password for an encrypted private SSL key. Optional. Alternatively, the password + can be provided in ``ssl_password_file``. + +* ``ssl_password_file`` -- a text file with one or more passwords for encrypted private SSL keys + (each on a separate line). Optional. Alternatively, the password can be provided in ``ssl_password``. + + Tarantool applies the ``ssl_password`` and ``ssl_password_file`` parameters in the following order: + + 1. If ``ssl_password`` is provided, Tarantool tries to decrypt the private key with it. + 2. If ``ssl_password`` is incorrect or isn't provided, Tarantool tries all passwords from ``ssl_password_file`` + one by one in the order they are written. + 3. If ``ssl_password`` and all passwords from ``ssl_password_file`` are incorrect, + or none of them is provided, Tarantool treats the private key as unencrypted. + +Configuration example: + +.. code-block:: lua + + box.cfg{ listen = { + uri = 'localhost:3301', + params = { + transport = 'ssl', + ssl_key_file = '/path_to_key_file', + ssl_cert_file = '/path_to_cert_file', + ssl_ciphers = 'HIGH:!aNULL', + ssl_password = 'topsecret' + } + }} + +.. _enterprise-iproto-encryption-ciphers: + +Supported ciphers +***************** + +Tarantool Enterprise supports the following cipher suites: + +* ECDHE-ECDSA-AES256-GCM-SHA384 +* ECDHE-RSA-AES256-GCM-SHA384 +* DHE-RSA-AES256-GCM-SHA384 +* ECDHE-ECDSA-CHACHA20-POLY1305 +* ECDHE-RSA-CHACHA20-POLY1305 +* DHE-RSA-CHACHA20-POLY1305 +* ECDHE-ECDSA-AES128-GCM-SHA256 +* ECDHE-RSA-AES128-GCM-SHA256 +* DHE-RSA-AES128-GCM-SHA256 +* ECDHE-ECDSA-AES256-SHA384 +* ECDHE-RSA-AES256-SHA384 +* DHE-RSA-AES256-SHA256 +* ECDHE-ECDSA-AES128-SHA256 +* ECDHE-RSA-AES128-SHA256 +* DHE-RSA-AES128-SHA256 +* ECDHE-ECDSA-AES256-SHA +* ECDHE-RSA-AES256-SHA +* DHE-RSA-AES256-SHA +* ECDHE-ECDSA-AES128-SHA +* ECDHE-RSA-AES128-SHA +* DHE-RSA-AES128-SHA +* AES256-GCM-SHA384 +* AES128-GCM-SHA256 +* AES256-SHA256 +* AES128-SHA256 +* AES256-SHA +* AES128-SHA +* GOST2012-GOST8912-GOST8912 +* GOST2001-GOST89-GOST89 + +Tarantool Enterprise static build has the embeded engine to support the GOST cryptographic algorithms. +If you use these algorithms for traffic encryption, specify the corresponding cipher suite in the ``ssl_ciphers`` parameter, for example: + +.. code-block:: lua + + box.cfg{ listen = { + uri = 'localhost:3301', + params = { + transport = 'ssl', + ssl_key_file = '/path_to_key_file', + ssl_cert_file = '/path_to_cert_file', + ssl_ciphers = 'GOST2012-GOST8912-GOST8912' + } + }} + +For detailed information on SSL ciphers and their syntax, refer to `OpenSSL documentation `__. + +Using environment variables +*************************** + +The URI parameters for traffic encryption can also be set via environment variables. For example: + +.. code-block:: bash + + export TT_LISTEN="localhost:3301?transport=ssl&ssl_cert_file=/path_to_cert_file&ssl_key_file=/path_to_key_file" + +For details, refer to the Tarantool :ref:`configuration reference `. + +.. _enterprise-iproto-encryption-config-sc: + +Server-client configuration details +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When configuring the traffic encryption, you need to specify the necessary parameters on both the server side and the client side. +Below you can find the summary on the options and parameters to be used and :ref:`examples of configuration `. + +**Server side** + +* Is configured via the ``box.cfg.listen`` option. +* Mandatory URI parameters: ``transport``, ``ssl_key_file`` and ``ssl_cert_file``. +* Optional URI parameters: ``ssl_ca_file``, ``ssl_ciphers``, ``ssl_password``, and ``ssl_password_file``. + + +**Client side** + +* Is configured via the ``box.cfg.replication`` option (see :ref:`details `) or ``net_box_object.connect()``. + +Parameters: + +* If the server side has only the ``transport``, ``ssl_key_file`` and ``ssl_cert_file`` parameters set, + on the client side, you need to specify only ``transport = ssl`` as the mandatory parameter. + All other URI parameters are optional. + +* If the server side also has the ``ssl_ca_file`` parameter set, + on the client side, you need to specify ``transport``, ``ssl_key_file`` and ``ssl_cert_file`` as the mandatory parameters. + Other parameters -- ``ssl_ca_file``, ``ssl_ciphers``, ``ssl_password``, and ``ssl_password_file`` -- are optional. + +.. _enterprise-iproto-encryption-config-example: + +Configuration examples +********************** + +Suppose, there is a :ref:`master-replica ` set with two Tarantool instances: + +* 127.0.0.1:3301 -- master (server) +* 127.0.0.1:3302 -- replica (client). + +Examples below show the configuration related to connection encryption for two cases: +when the trusted certificate authorities (CA) file is not set on the server side and when it does. +Only mandatory URI parameters are mentioned in these examples. + +1. **Without CA** + +* 127.0.0.1:3301 -- master (server) + + .. code-block:: lua + + box.cfg{ + listen = { + uri = '127.0.0.1:3301', + params = { + transport = 'ssl', + ssl_key_file = '/path_to_key_file', + ssl_cert_file = '/path_to_cert_file' + } + } + } + +* 127.0.0.1:3302 -- replica (client) + + .. code-block:: lua + + box.cfg{ + listen = { + uri = '127.0.0.1:3302', + params = {transport = 'ssl'} + }, + replication = { + uri = 'username:password@127.0.0.1:3301', + params = {transport = 'ssl'} + }, + read_only = true + } + +2. **With CA** + +* 127.0.0.1:3301 -- master (server) + + .. code-block:: lua + + box.cfg{ + listen = { + uri = '127.0.0.1:3301', + params = { + transport = 'ssl', + ssl_key_file = '/path_to_key_file', + ssl_cert_file = '/path_to_cert_file', + ssl_ca_file = '/path_to_ca_file' + } + } + } + +* 127.0.0.1:3302 -- replica (client) + + .. code-block:: lua + + box.cfg{ + listen = { + uri = '127.0.0.1:3302', + params = { + transport = 'ssl', + ssl_key_file = '/path_to_key_file', + ssl_cert_file = '/path_to_cert_file' + } + }, + replication = { + uri = 'username:password@127.0.0.1:3301', + params = { + transport = 'ssl', + ssl_key_file = '/path_to_key_file', + ssl_cert_file = '/path_to_cert_file' + } + }, + read_only = true + } + +.. _enterprise-security-hardening: + +Recommendations on security hardening +------------------------------------- + +This section lists recommendations that can help you harden the cluster's security. + +.. _enterprise-traffic-encryption: + +Encrypting traffic +~~~~~~~~~~~~~~~~~~ + +Since version 2.10.0, Tarantool Enterprise Edition has built-in support for using SSL to encrypt the client-server communications over binary connections, +that is, between Tarantool instances in a cluster. For details on enabling SSL encryption, see the :ref:`enterprise-iproto-encryption` section of this guide. + +In case the built-in encryption is not set for particular connections, consider the following security recommendations: + +* setting up connection tunneling, or +* encrypting the actual data stored in the database. + +For more information on data encryption, see the +:doc:`crypto module reference `. + +The `HTTP server module `_ provided by rocks +does not support the HTTPS protocol. To set up a secure connection for a client +(e.g., REST service), consider hiding the Tarantool instance (router if it is +a cluster of instances) behind an Nginx server and setting up an SSL certificate +for it. + +To make sure that no information can be intercepted 'from the wild', run nginx +on the same physical server as the instance and set up their communication over +a Unix socket. For more information, see the +:doc:`socket module reference `. + +.. _enterprise-firewall-config: + +Firewall configuration +~~~~~~~~~~~~~~~~~~~~~~ + +To protect the cluster from any unwanted network activity 'from the wild', +configure the firewall on each server to allow traffic on ports listed in +:ref:`Network requirements `. + +If you are using static IP addresses, whitelist them, again, on each server as +the cluster has a full mesh network topology. Consider blacklisting all the other +addresses on all servers except the router (running behind the Nginx server). + +Tarantool Enterprise does not provide defense against DoS or DDoS attacks. +Consider using third-party software instead. + +.. _enterprise-integrity: + +Data integrity +~~~~~~~~~~~~~~ + +Tarantool Enterprise Edition does not keep checksums or provide the means to control +data integrity. However, it ensures data persistence using a write-ahead log, +regularly snapshots the entire data set to disk, and checks the data format +whenever it reads the data back from the disk. For more information, see the +:ref:`Data persistence ` section. diff --git a/doc/enterprise/setup.rst b/doc/enterprise/setup.rst new file mode 100644 index 0000000000..551e4d5c34 --- /dev/null +++ b/doc/enterprise/setup.rst @@ -0,0 +1,193 @@ +.. _enterprise-setup: + +=============================================================================== +Setup +=============================================================================== + +This chapter explains how to download and set up Tarantool Enterprise Edition and run +a sample application provided with it. + +.. _enterprise-prereqs: + +------------------------------------------------------------------------------- +System requirements +------------------------------------------------------------------------------- + +The recommended system requirements for running Tarantool Enterprise are as +follows. + +.. _enterprise-prereqs-hardware: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Hardware requirements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To fully ensure the fault tolerance of a distributed data storage system, at +least **three** physical computers or virtual servers are required. + +For testing/development purposes, the system can be deployed using a smaller number +of servers; however, it is not recommended to use such configurations for production. + +.. _enterprise-prereqs-software: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Software requirements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#. As host operating systems, Tarantool Enterprise Edition supports + **Red Hat Enterprise Linux** and **CentOS** versions 7.5 and higher. + + .. NOTE:: + + Tarantool Enterprise can run on other ``systemd``-based Linux distributions + but it is not tested on them and may not work as expected. + +#. ``glibc`` 2.17-260.el7_6.6 and higher is required. Take care to check and + update, if needed: + + .. code-block:: console + + $ rpm -q glibc + glibc-2.17-196.el7_4.2 + $ yum update glibc + +.. _enterprise-prereqs-network: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Network requirements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Hereinafter, **"storage servers"** or **"Tarantool servers"** are the computers +used to store and process data, and **"administration server"** is the computer +used by the system operator to install and configure the product. + +The Tarantool cluster has a full mesh topology, therefore all Tarantool servers +should be able to communicate and send traffic from and to TCP/UDP ports +used by the cluster's instances (see ``advertise_uri: :`` and +``config: advertise_uri: ':'`` in ``/etc/tarantool/conf.d/*.yml`` +for each instance). For example: + +.. code-block:: kconfig + + # /etc/tarantool/conf.d/*.yml + + myapp.s2-replica: + advertise_uri: localhost:3305 # this is a TCP/UDP port + http_port: 8085 + + all: + ... + hosts: + storage-1: + config: + advertise_uri: 'vm1:3301' # this is a TCP/UDP port + http_port: 8081 + +To configure remote monitoring or to connect via the administrative console, +the administration server should be able to access the following TCP ports on +Tarantool servers: + +* 22 to use the SSH protocol, +* ports specified in + :ref:`instance configuration ` + (``http_port`` parameter) to monitor the HTTP-metrics. + +Additionally, it is recommended to apply the following settings for ``sysctl`` +on all Tarantool servers: + +.. code-block:: console + + $ # TCP KeepAlive setting + $ sysctl -w net.ipv4.tcp_keepalive_time=60 + $ sysctl -w net.ipv4.tcp_keepalive_intvl=5 + $ sysctl -w net.ipv4.tcp_keepalive_probes=5 + +This optional setup of the Linux network stack helps speed up the troubleshooting +of network connectivity when the server physically fails. To achieve maximum +performance, you may also need to configure other network stack parameters that +are not specific to the Tarantool DBMS. For more information, please refer to the +`Network Performance Tuning Guide `_ +section of the RHEL7 user documentation. + +.. _enterprise-package-contents: + +------------------------------------------------------------------------------- +Package contents +------------------------------------------------------------------------------- + +The latest release packages of Tarantool Enterprise are available in the +`customer zone `_ +at Tarantool website. Please contact ``support@tarantool.io`` for access. + +Each package is distributed as a ``tar + gzip`` archive and includes +the following components and features: + +* static Tarantool binary for simplified deployment in Linux environments, +* selection of open and closed source modules, +* sample application walking you through all included modules. + +Archive contents: + +* ``tarantool`` is the main executable of Tarantool. +* ``tt`` is the utility that provides a unified command-line interface for managing Tarantool-based applications. +* ``tarantoolctl`` is the utility script for installing supplementary modules + and connecting to the administrative console. + + .. important:: + + ``tarantoolctl`` is deprecated in favor of the :ref:`tt CLI utility `. + +* ``cartridge`` is the utility script to help you set up a development + environment for applications and pack them for easy deployment. + + .. important:: + + ``cartridge`` utility is deprecated in favor of the :ref:`tt CLI utility `. + +* ``examples/`` is the directory containing sample applications: + + * ``pg_writethrough_cache/`` is an application showcasing how Tarantool can + cache data written to, for example, a PostgreSQL database; + * ``ora_writebehind_cache/`` is an application showcasing how Tarantool can + cache writes and queue them to, for example, an Oracle database; + * ``docker/`` is an application designed to be easily packed into a Docker + container; + +* ``rocks/`` is the directory containing a selection of additional open and + closed source modules included in the distribution as an offline rocks + repository. See the :ref:`rocks reference ` for details. +* ``templates/`` is the directory containing template files for your application + development environment. +* ``deprecated/`` is a set of modules that are no longer supported: + + * ``vshard-zookeeper-orchestrator`` is a Python application + for launching ``orchestrator``, + * ``zookeeper-scm`` files are the ZooKeeper integration modules (require + ``usr/`` libraries). + +.. _archive-unpack: +.. _enterprise-install: + +------------------------------------------------------------------------------- +Installation +------------------------------------------------------------------------------- + +The delivered ``tar + gzip`` archive should be uploaded to a server and unpacked: + +.. code-block:: console + + $ tar xvf tarantool-enterprise-sdk-.tar.gz + +No further installation is required as the unpacked binaries are almost ready +to go. Go to the directory with the binaries (``tarantool-enterprise``) and +add them to the executable path by running the script provided by the distribution: + +.. code-block:: console + + $ source ./env.sh + +Make sure you have enough privileges to run the script and that the file is executable. +Otherwise, try ``chmod`` and ``chown`` commands to adjust it. + +Next, set up your development environment as described in +:ref:`the developer's guide `. diff --git a/doc/enterprise/space_upgrade.rst b/doc/enterprise/space_upgrade.rst new file mode 100644 index 0000000000..f8eb00c082 --- /dev/null +++ b/doc/enterprise/space_upgrade.rst @@ -0,0 +1,447 @@ +.. _enterprise-space_upgrade: + +Upgrading space schema +====================== + +In Tarantool, :ref:`migration ` refers to any change in a data schema, for example, +creating an index, adding a field, or changing a field format. +If you need to change a data schema, there are several possible cases: + +* Schema migration does not require data migration: adding a field with the ``is_nullable`` parameter to the end + of the space, creating an index. + +* Schema migration requires data migration. For example, it is necessary when you have to iterate + over the entire space to convert columns to a new format or remove the column completely. + +To solve the task of migrating the data, you can: + +* :ref:`Migrate data ` to a new space manually. + +* Use the ``space:upgrade()`` feature. + +Space upgrade overview +---------------------- + +The ``space:upgrade()`` feature allows users to upgrade the format of a space and the tuples stored in it without +blocking the database. + +.. _space_upgrade-requirements: + +How to apply space upgrade +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +First, specify an upgrade function -- a function that will convert the tuples in the space to a new format. +The requirements for this function are listed below. + +* The upgrade function takes two arguments. The first argument is a tuple to be upgraded. + The second one is optional. It contains some additional information stored in plain Lua object. + If omitted, the second argument is ``nil``. + +* The function returns a new tuple or a Lua table. For example, it can add a new field to the tuple. + The new tuple must conform to the new space format set by the upgrade operation. + +* The function should be registered with + :doc:`box.schema.func.create `. + It should also be stored, deterministic, and written in Lua. + +* The function should not change the primary key of the tuple. + +* The function should be idempotent: ``f(f(t)) = f(t)``. This is necessary because the function + is applied to all tuples returned to the user, and some of them may have already been upgraded in the background. + +Then define a new space format. This step is optional. +However, it could be useful if, for example, you want to add a new column with data. +For details, check the :ref:`Usage Example ` section. + +The next optional step is to choose an upgrade mode. +There are three modes: ``upgrade``, ``dryrun``, and ``dryrun+upgrade``. +The default value is ``upgrade``. +To check an upgrade function without applying any changes, choose the ``dryrun`` mode. +To run a space upgrade without testing the function, pick the ``upgrade`` mode. +If you want to apply both the test and the actual upgrade, use the ``dryrun+upgrade`` option. +For details, see the :ref:`Upgrade Modes ` section. + +How the upgrade works +~~~~~~~~~~~~~~~~~~~~~ + +The user defines an upgrade function. +Each tuple of the chosen space is passed through the function. +The function converts the tuple from the old format to a new one. +The function is applied to all tuples stored in the space in the background. +Besides, the function is applied to all tuples returned to the user via the box API (for example, ``select``, ``get``). +Therefore, it appears that the space upgrades instantly. + +Keep in mind that ``space:upgrade`` differs from +the :doc:`space_object:format() ` in the following ways: + +.. container:: table + + .. list-table:: + :widths: 20 40 40 + :header-rows: 1 + + * - Difference + - ``space:upgrade()`` + - ``space:format()`` + + * - Non-blocking + - Yes. It returns tuples in the new format, whether or not they have already been converted. + - Yes. + + * - Set a format incompatible with the current one + - Yes. Works for non-indexed field types only. + - No, only expand the format in a compatible way. + + * - Visibility of changes + - Immediately. All changes are visible and replicated immediately. + New data should conform to the new format immediately after the call. + - After data validation. + Data validation starts in the background, it does not block the database. + Inserting data incompatible with the new format is allowed before + validation is completed -- in this case ``space.format`` fails. + + * - Cancel (error/restart) + - Writes the state to the system table. + Restart: the operation continues. + Error: the operation should be restarted manually, any other attempt to change the table fails. + - Leaves no traces. + + * - Set the upgrade function + - Yes. The upgrade may take a while to traverse the space and transform tuples. + - No. + + +.. note:: + + At the moment, the feature is not supported + for :ref:`vinyl ` spaces. + +User API +-------- + +The ``space:upgrade()`` method is added to the :doc:`space object `: + +.. function:: space:upgrade({func[, arg, format, mode, is_async]}) + + :param string/integer func: upgrade function name (string) or ID (integer). For details, see the + :ref:`upgrade function requirements ` section. + + :param arg: additional information passed to the upgrade function in the second argument. + The option accepts any Lua value that can be encoded in MsgPack, which means that + the :doc:`msgpack.encode(arg) ` should succeed. + For example, one can pass a scalar or a Lua table. + The default value is ``nil``. + + :param map format: new space format. The requirements for this are the same as for any other + :doc:`space:format() `. + If the field is omitted, the space format will remain the same as before the upgrade. + + :param string mode: :ref:`upgrade mode `. Possible values: ``upgrade``, ``dryrun``, + ``dryrun+upgrade``. The default value is ``upgrade``. + + :param boolean is_async: the flag indicates whether to wait until the upgrade operation is complete + before exiting the function. + The default value is ``false`` -- the function is blocked + until the upgrade operation is finished. + + :Return: object describing the status of the operation (also known as ``future``). + The methods of the object are described below. + +.. class:: future_object + + .. method:: info(dryrun, status, func, arg, owner, error, progress) + + Shows information about the state of the upgrade operation. + + :param boolean dryrun: dry run mode flag. Possible values: + ``true`` for a dry run, ``nil`` for an actual upgrade. + + :param string status: :ref:`upgrade status `. Possible values: + ``inprogress``, ``waitrw``, ``error``, ``replica``, ``done``. + + :param string/integer func: name of the upgrade function. + It is the same as passed to the ``space:upgrade`` method. + The field is ``nil`` if the ``status`` is ``done``. + + :param arg: additional information passed to the upgrade function. + It is the same as for the ``space:upgrade`` method. + The field is ``nil`` if it is omitted in the ``space:upgrade``. + + :param string owner: UUID of the instance running the upgrade + (see :doc:`box.info.uuid `). + The field is ``nil`` if the ``status`` is ``done``. + + :param string error: error message if the ``status`` is ``error``, otherwise ``nil``. + + :param string progress: completion percentage if the ``status`` is ``inprogress``/``waitrw``, + otherwise ``nil``. + + :return: a table with information about the state of the upgrade operation + :rtype: table + + The fields can also be accessed directly, without calling the ``info()`` method. + For example, ``future.status`` is the same as ``future:info().status``. + + .. method:: wait([timeout]) + + Waits until the upgrade operation is completed or a timeout occurs. + An operation is considered completed if its status is ``done`` or ``error``. + + :param double timeout: if the ``timeout`` argument is omitted, the method waits as long as it takes. + + :return: returns ``true`` if the operation has been completed, ``false`` on timeout + :rtype: boolean + + .. method:: cancel() + + Cancels the upgrade operation if it is currently running. Otherwise, an exception is thrown. + A canceled upgrade operation completes with an error. + + :return: none + :rtype: void + +Running ``space:upgrade()`` with ``is_async = false`` or the ``is_async`` field not set is equal to: + +.. code-block:: lua + + local future = space:upgrade({func = 'my_func', is_async = true}) + future:wait() + return future + +If called without arguments, ``space:upgrade()`` returns a future object for the active upgrade operation. +If there is none, it returns ``nil``. + +.. _space_upgrade-modes: + +Upgrade modes +------------- + +There are three upgrade modes: ``dryrun``, ``dryrun+upgrade``, and ``upgrade``. +Regardless of the mode selected, the upgrade does not block execution. +Once in a while, the background fiber commits the upgraded tuples and yields. + +Calling ``space:upgrade`` without arguments always returns the current state of the space upgrade, +never the state of a dry run. If there is a dry run working in the background, ``space:upgrade`` will still return ``nil``. +Unlike an actual space upgrade, the future object returned by a dry run upgrade can't be recovered if it is lost. +So a dry run is aborted if it is garbage collected. + +.. warning:: + + In ``dryrun+upgrade`` mode: if the future object is garbage collected by Lua + before the end of the dry run and the start of the upgrade, + then the dry run will be canceled, and no upgrade will be started. + +Upgrade modes: + +* ``upgrade`` mode: the background fiber iterates over the + space, applies the upgrade function, checks that obtained tuples fit the new space format, + and updates the tuples. This mode prevents the space from being altered. + The mode can only be performed on the master instance. + +* ``dryrun`` mode: the dry-run mode is used to check the upgrade function. The mode does not apply any changes + to the target space. It starts a background fiber. The fiber: + + * Iterates over the target space. + * Attempts to apply the upgrade function to each tuple stored in the space. + * Checks if the returned tuple matches the new format. + * Checks if the function is idempotent. + * Checks that the function does not modify the primary key. + + For details, see the :ref:`upgrade function requirements ` section. + + To start a dry run, pass ``mode='dryrun'`` to the ``space:upgrade`` method. + In this case, the future object has the ``dryrun`` field set to ``true``. + The possible statuses are ``inprogress`` and ``dryrun``. ``replica`` and ``waitrw`` states are never set + for a dry run future object. + + The ``dryrun`` mode is not persisted. Restarting the instance does not restart a dry run. + A dry run only works on the original instance, never on replicas. + Unlike a real upgrade, a dry run does not prevent the space from being altered. + The space can even be dropped. In this case, the dry run will complete with an error. + +* ``dryrun+upgrade`` mode: it starts a dry run, which, if completed successfully, triggers an actual upgrade. + The future object returned by ``space:upgrade`` remains valid throughout the process. + It starts as the future object of the dry run. Then, under the hood, it is converted into an upgrade future object. + Waiting on it would wait for both the dry run and the upgrade to complete. + During the dry run, the future object has the ``dryrun`` field set to ``true``. + When the actual upgrade starts, the ``dryrun`` field is set to ``nil``. + The mode can only be performed on the master instance. + +.. _space_upgrade-states: + +States +------ + +An upgrade operation has one of the following upgrade states: + +* ``inprogress`` -- the upgrade operation is running in the background. + The function is applied to all tuples returned to the user. + +* ``waitrw`` -- the instance was switched to the read-only mode + (for example, by using ``box.cfg.read_only``), so the upgrade couldn't proceed. + The upgrade process will resume as soon as the instance switches back to read-write mode. + Nevertheless, the upgrade function is applied to all tuples returned to the user. + +* ``error`` -- the upgrade operation failed with an error. See the ``error`` field for the error message. + See the log for the tuple that caused the error. No alter operation is allowed, except for another upgrade, + supposed to fix the problem. + Nevertheless, the upgrade function is applied to all tuples returned to the user. The space is writable. + +* ``done`` -- the upgrade operation is successfully completed. The upgrade function is not applied to tuples returned + to the user anymore. The function can be deleted. + +* ``replica`` -- the upgrade operation is either running or completed with an error on another instance. + See the ``owner`` field for the UUID of the instance running the upgrade. + Nevertheless, the upgrade function is applied to all tuples returned to the user. + +.. image:: images/ddl-state.png + :align: center + :scale: 80% + + +Interaction with alter +---------------------- + +While a space upgrade is in progress, the space can't be altered or dropped. +The attempt to do that will throw an exception. +Restarting an upgrade is allowed in case the currently running upgrade is canceled or completed with an error. +It means the manual restart is possible if the upgrade operation is in the :ref:`error state `. + +If a space upgrade was canceled or failed with an error, the space can't be altered or dropped. +The only option is to restart the upgrade using a different upgrade function or format. + +Interaction with recovery +------------------------- + +The space upgrade state is persisted. It is stored in the ``_space`` system table. If an instance with +a space upgrade in progress (``inprogress`` state) is shut down, it restarts the space upgrade after recovery. +If a space upgrade fails (switches to the ``error`` state), it remains in the error state after recovery. + +Interaction with replication +---------------------------- + +The changes made to a space by a space upgrade are replicated. +Just as on the instance where the upgrade is performed, the upgrade function is applied to all tuples returned +to the user on the replicas. However, the upgrade operation is not performed on the replicas in the background. +The replicas wait for the upgrade operation to complete on the master. +They can't alter or drop the space. Normally, they can't cancel or restart the upgrade operation either. + +There is an emergency exception when the master is permanently dead. +It is possible to restart a space upgrade that started on another instance. +The restart is possible if the upgrade owner UUID (see the ``owner`` field) has been deleted +from the ``_cluster`` system table. + +.. note:: + + Except the ``dryrun`` mode, the upgrade can only be performed on the master. + If the instance is no longer the master, the upgrade is suspended until the instance is master again. + Restarting the upgrade on a new master works only if the old one has been removed from the replica set + (``_cluster`` system space). + +.. _space_upgrade-example: + +Usage example +------------- + +Suppose there are two columns in the space `test` -- ``id`` (unsigned) and ``data`` (string). +The example shows how to upgrade the schema and add another column to the space using ``space:upgrade()``. +The new column contains the ``id`` values converted to string. Each step takes a while. + +The test space is generated with the following script: + + .. code-block:: lua + + local log = require('log') + box.cfg{ + checkpoint_count = 1, + memtx_memory = 5 * 1024 * 1024 * 1024, + } + box.schema.space.create('test') + box.space.test:format{ + {name = 'id', type = 'unsigned'}, + {name = 'data', type = 'string'}, + } + box.space.test:create_index('pk') + local count = 20 * 1000 * 1000 + local progress = 0 + box.begin() + for i = 1, count do + box.space.test:insert{i, 'data' .. i} + + if i % 1000 == 0 then + box.commit() + local p = math.floor(i / count * 100) + if progress ~= p then + progress = p + log.info('Generating test data set... %d%% done', p) + end + box.begin() + end + end + box.commit() + box.snapshot() + os.exit(0) + +To upgrade the space, connect to the server and then run the commands below: + + .. code-block:: tarantoolsession + + localhost:3301> box.schema.func.create('convert', { + > language = 'lua', + > is_deterministic = true, + > body = [[function(t) + > if #t == 2 then + > return t:update({{'!', 2, tostring(t.id)}}) + > else + > return t + > end + > end]], + > }) + localhost:3301> box.space.test:upgrade({ + > func = 'convert', + > format = { + > {name = 'id', type = 'unsigned'}, + > {name = 'id_string', type = 'string'}, + > {name = 'data', type = 'string'}, + > }, + > }) + + +While the upgrade is in progress, you can track the state of the upgrade. +To check the status, connect to Tarantool from another console and run the following commands: + + .. code-block:: tarantoolsession + + localhost:3311> box.space.test:upgrade() + --- + - status: inprogress + progress: 8% + owner: 579a9e99-427e-4e99-9e2e-216bbd3098a7 + func: convert + ... + + +Even though the upgrade is only 8% complete, selecting the data from the space returns the converted tuples: + + .. code-block:: tarantoolsession + + localhost:3311> box.space.test:select({}, {iterator = 'req', limit = 5}) + --- + - - [20000000, '20000000', 'data20000000'] + - [19999999, '19999999', 'data19999999'] + - [19999998, '19999998', 'data19999998'] + - [19999997, '19999997', 'data19999997'] + - [19999996, '19999996', 'data19999996'] + ... + + .. note:: + + The tuples contain the new field even though the space upgrade is still running. + + +Wait for the space upgrade to complete using the command below: + + .. code-block:: tarantoolsession + + localhost:3311> box.space.test:upgrade():wait() + diff --git a/doc/enterprise/system_metrics.rst b/doc/enterprise/system_metrics.rst new file mode 100644 index 0000000000..0ee9cd27b3 --- /dev/null +++ b/doc/enterprise/system_metrics.rst @@ -0,0 +1,90 @@ +.. _enterprise_system_metrics: + +Monitoring system metrics +========================= + +.. container:: table + + .. rst-class:: left-align-column-1 + .. rst-class:: left-align-column-2 + + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | Option | Description | SNMP type | Units of measure| Threshold | + +======================+======================================+==============+=================+=================+ + | Version | Tarantool version | DisplayString| | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | IsAlive | instance availability indicator | Integer | | 0 - unavailable | + | | | | | | + | | | (listing) | | 1 - available | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | MemoryLua | storage space used by Lua | Gauge32 | Mbyte | 900 | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | MemoryData | storage space used for storing data | Gauge32 | Mbyte | set the value | + | | | | | manually | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | MemoryNet | storage space used for network I/O | Gauge32 | Mbyte | 1024 | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | MemoryIndex | storage space used for storing | Gauge32 | Mbyte | set the value | + | | indexes | | | manually | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | MemoryCache | storage space used for storing caches| Gauge32 | Mbyte | | + | | (for vinyl engine only) | | | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | ReplicationLag | lag time since the last sync between | Integer32 | sec. | 5 | + | | (the maximum value in case there are | | | | + | | multiple fibers) | | | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | FiberCount | number of fibers | Gauge32 | pc. | 1000 | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | CurrentTime | current time, in seconds, starting at| Unsigned32 | Unix timestamp, | | + | | January, 1st, 1970 | | in sec. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | StorageStatus | status of a replica set | Integer | listing | > 1 | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | StorageAlerts | number of alerts for storage nodes | Gauge32 | pc. | >= 1 | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | StorageTotalBkts | total number of buckets in the | Gauge32 | pc. | < 0 | + | | storage | | | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | StorageActiveBkts | number of buckets in the ACTIVE state| Gauge32 | pc. | < 0 | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | StorageGarbageBkts | number of buckets in the GARBAGE | Gauge32 | pc. | < 0 | + | | state | | | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | StorageReceivingBkts | number of buckets in the RECEIVING | Gauge32 | pc. | < 0 | + | | state | | | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | StorageSendingBkts | number of buckets in the SENDING | Gauge32 | pc. | < 0 | + | | state | | | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | RouterStatus | status of the ``router`` | Integer | listing | > 1 | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | RouterAlerts | number of alerts for the router | Gauge32 | pc. | >= 1 | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | RouterKnownBkts | number of buckets within the known | Gauge32 | pc. | < 0 | + | | destination replica sets | | | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | RouterUnknownBkts | number of buckets that are unknown to| Gauge32 | pc. | < 0 | + | | the ``router`` | | | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | RequestCount | total number of requests | Counter64 | pc. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | InsertCount | total number of insert requests | Counter64 | pc. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | DeleteCount | total number of delete requests | Counter64 | pc. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | ReplaceCount | total number of replace requests | Counter64 | pc. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | UpdateCount | total number of update requests | Counter64 | pc. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | SelectCount | total number of select requests | Counter64 | pc. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | EvalCount | number of calls made via Eval | Counter64 | pc. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | CallCount | number of calls made via ``call`` | Counter64 | pc. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | ErrorCount | number of errors in Tarantool | Counter64 | pc. | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ + | AuthCount | number of completed authentication | Counter64 | pc. | | + | | operations | | | | + +----------------------+--------------------------------------+--------------+-----------------+-----------------+ diff --git a/doc/enterprise/tuple_compression.rst b/doc/enterprise/tuple_compression.rst new file mode 100644 index 0000000000..ec53e8114e --- /dev/null +++ b/doc/enterprise/tuple_compression.rst @@ -0,0 +1,183 @@ +.. _tuple_compression: + +Tuple compression +================= + +Tuple compression, introduced in Tarantool Enterprise Edition 2.10.0, aims to save memory space. +Typically, it decreases the volume of stored data by 15%. +However, the exact volume saved depends on the type of data. + +The following compression algorithms are supported: + +* `lz4 `_ +* `zstd `_ +* `zlib `_ (since :doc:`2.11.0 `) + +To learn about the performance costs of each algorithm, +check :ref:`Tuple compression performance `. + +Tarantool doesn't compress tuples themselves, just the fields inside these tuples. +You can only compress non-indexed fields. +Compression works best when JSON is stored in the field. + +.. note:: + + The :ref:`compress ` module provides the API for compressing and decompressing data. + + +.. _compression_new_space: + +Enabling compression for a new space +------------------------------------ + +First, create a space: + +.. code-block:: lua + + box.schema.space.create('bands') + +Then, create an index for this space, for example: + +.. code-block:: lua + + box.space.bands:create_index('primary', {parts = {{1, 'unsigned'}}}) + +Create a format to declare field names and types. +In the example below, the ``band_name`` and ``year`` fields have the ``zstd`` and ``lz4`` compression formats, respectively. +The first field (``id``) has the index, so it cannot be compressed. + +.. code-block:: lua + + box.space.bands:format({ + {name = 'id', type = 'unsigned'}, + {name = 'band_name', type = 'string', compression = 'zstd'}, + {name = 'year', type = 'unsigned', compression = 'lz4'} + }) + +Now, the new tuples that you add to the space ``bands`` will be compressed. +When you read a compressed tuple, you do not need to decompress it back yourself. + + + +.. _checking_which_fields_are_compressed: + +Checking which fields are compressed +------------------------------------ + +To check which fields in a space are compressed, run +:ref:`space_object:format() ` on the space. +If a field is compressed, the format includes the compression algorithm, for example: + +.. code-block:: tarantoolsession + + tarantool> box.space.bands:format() + --- + - [{'name': 'id', 'type': 'unsigned'}, + {'type': 'string', 'compression': 'zstd', 'name': 'band_name'}, + {'type': 'unsigned', 'compression': 'lz4', 'name': 'year'}] + ... + + + +.. _compression_existing_spaces: + +Enabling compression for existing spaces +---------------------------------------- + +You can enable compression for existing fields. +All the tuples added after that will have this field compressed. +However, this doesn't affect the tuples already stored in the space. +You need to make the snapshot and restart Tarantool to compress the existing tuples. + +Here's an example of how to compress existing fields: + +1. Create a space without compression and add several tuples: + + .. code-block:: lua + + box.schema.space.create('bands') + + box.space.bands:format({ + { name = 'id', type = 'unsigned' }, + { name = 'band_name', type = 'string' }, + { name = 'year', type = 'unsigned' } + }) + + box.space.bands:create_index('primary', { parts = { 'id' } }) + + box.space.bands:insert { 1, 'Roxette', 1986 } + box.space.bands:insert { 2, 'Scorpions', 1965 } + box.space.bands:insert { 3, 'Ace of Base', 1987 } + box.space.bands:insert { 4, 'The Beatles', 1960 } + +2. Suppose that you want fields 2 and 3 to be compressed from now on. + To enable compression, change the format as follows: + + .. code-block:: lua + + local new_format = box.space.bands:format() + + new_format[2].compression = 'zstd' + new_format[3].compression = 'lz4' + + box.space.bands:format(new_format) + + From now on, all the tuples that you add to the space have fields 2 and 3 compressed. + +3. To finalize the change, create a snapshot by running + :ref:`box.snapshot() ` and restart Tarantool. + As a result, all old tuples will also be compressed in memory during recovery. + +.. note:: + + :doc:`space:upgrade() ` provides the ability to enable compression + and update the existing tuples in the background. + To achieve this, you need to pass a new space format in the ``format`` argument of ``space:upgrade()``. + + +.. _enterprise-tuple-comp-performance: + +Tuple compression performance +----------------------------- + +Below are the results of a `synthetic test `_ that illustrate how tuple compression affects performance. +The test was carried out on a simple Tarantool space containing 100,000 tuples, +each having a field with a sample JSON roughly 600 bytes large. +The test compared the speed of running ``select`` and ``replace`` operations on uncompressed and compressed data +as well as the overall data size of the space. +Performance is measured in requests per second. + +.. container:: table + + .. list-table:: + :widths: 25 25 25 25 + :header-rows: 1 + + * - Compression type + - ``select``, RPS + - ``replace``, RPS + - Space size, bytes + * - None + - 4,486k + - 1,109k + - 41,168,548 + * - ``zstd`` + - 308k + - 26k + - 21,368,548 + * - ``lz4`` + - 1,765k + - 672k + - 25,268,548 + * - ``zlib`` + - 325k + - 107k + - 20,768,548 + + + +.. toctree:: + :maxdepth: 2 + :hidden: + + tuple_compression/api/compress diff --git a/doc/enterprise/tuple_compression/api/code_snippets/compress_lz4.lua b/doc/enterprise/tuple_compression/api/code_snippets/compress_lz4.lua new file mode 100644 index 0000000000..33c2e25c0e --- /dev/null +++ b/doc/enterprise/tuple_compression/api/code_snippets/compress_lz4.lua @@ -0,0 +1,8 @@ +local lz4_compressor = require('compress.lz4').new({ + acceleration = 1000, + decompress_buffer_size = 2097152 +}) + +compressed_data = lz4_compressor:compress('Hello world!') +decompressed_data = lz4_compressor:decompress(compressed_data) +print(decompressed_data) diff --git a/doc/enterprise/tuple_compression/api/code_snippets/compress_zlib.lua b/doc/enterprise/tuple_compression/api/code_snippets/compress_zlib.lua new file mode 100644 index 0000000000..15a4f7dfd8 --- /dev/null +++ b/doc/enterprise/tuple_compression/api/code_snippets/compress_zlib.lua @@ -0,0 +1,9 @@ +local zlib_compressor = require('compress.zlib').new({ + level = 5, + mem_level = 5, + strategy = 'filtered' +}) + +compressed_data = zlib_compressor:compress('Hello world!') +decompressed_data = zlib_compressor:decompress(compressed_data) +print(decompressed_data) diff --git a/doc/enterprise/tuple_compression/api/code_snippets/compress_zstd.lua b/doc/enterprise/tuple_compression/api/code_snippets/compress_zstd.lua new file mode 100644 index 0000000000..d834f4d4f2 --- /dev/null +++ b/doc/enterprise/tuple_compression/api/code_snippets/compress_zstd.lua @@ -0,0 +1,7 @@ +local zstd_compressor = require('compress.zstd').new({ + level = 5 +}) + +compressed_data = zstd_compressor:compress('Hello world!') +decompressed_data = zstd_compressor:decompress(compressed_data) +print(decompressed_data) diff --git a/doc/enterprise/tuple_compression/api/compress.rst b/doc/enterprise/tuple_compression/api/compress.rst new file mode 100644 index 0000000000..14a5667cd5 --- /dev/null +++ b/doc/enterprise/tuple_compression/api/compress.rst @@ -0,0 +1,18 @@ +.. _compress-module: + +Module compress +=============== + +.. module:: compress + +**Since:** :doc:`2.11.0 ` + +The ``compress`` module provides a set of submodules for compressing and decompressing data using different algorithms: + +.. toctree:: + :maxdepth: 1 + :includehidden: + + zlib + zstd + lz4 diff --git a/doc/enterprise/tuple_compression/api/lz4.rst b/doc/enterprise/tuple_compression/api/lz4.rst new file mode 100644 index 0000000000..266b132ae2 --- /dev/null +++ b/doc/enterprise/tuple_compression/api/lz4.rst @@ -0,0 +1,175 @@ +.. _compress-lz4-module: + +Submodule compress.lz4 +======================= + +.. _overview-lz4-compress: + +Overview +-------- + +The ``compress.lz4`` submodule provides the ability to compress and decompress data using the `lz4 `_ algorithm. +You can use the ``lz4`` compressor as follows: + +1. Create a compressor instance using the :ref:`compress.lz4.new() ` function: + + .. code-block:: lua + + local lz4_compressor = require('compress.lz4').new() + -- or -- + local lz4_compressor = require('compress').lz4.new() + + Optionally, you can pass compression options (:ref:`lz4_opts `) specific for ``lz4``: + + .. literalinclude:: code_snippets/compress_lz4.lua + :language: lua + :lines: 1-4 + +2. To compress the specified data, use the :ref:`compress() ` method: + + .. literalinclude:: code_snippets/compress_lz4.lua + :language: lua + :lines: 6 + +3. To decompress data, call :ref:`decompress() `: + + .. literalinclude:: code_snippets/compress_lz4.lua + :language: lua + :lines: 7 + + + +.. _api-reference-compress-lz4: + +API Reference +------------- + +.. container:: table + + .. rst-class:: left-align-column-1 + .. rst-class:: left-align-column-2 + + .. list-table:: + :widths: 35 65 + + * - **Functions** + - + + * - :ref:`compress.lz4.new() ` + - Create a ``lz4`` compressor instance. + + * - **Objects** + - + + * - :ref:`lz4_compressor ` + - A ``lz4`` compressor instance. + + * - :ref:`lz4_opts ` + - Configuration options of the ``lz4`` compressor. + + + +.. _compress-lz4-new: + +compress.lz4.new() +~~~~~~~~~~~~~~~~~~ + +.. module:: compress.lz4 + +.. function:: new([lz4_opts]) + + Create a ``lz4`` compressor instance. + + :param table options: ``lz4`` compression options (see :ref:`lz4_opts `) + + :return: a new ``lz4`` compressor instance (see :ref:`lz4_compressor `) + :rtype: userdata + + **Example** + + .. literalinclude:: code_snippets/compress_lz4.lua + :language: lua + :lines: 1-4 + + +.. _lz4_compressor_class: + +lz4_compressor +~~~~~~~~~~~~~~ + +.. class:: lz4_compressor + + A compressor instance that exposes the API for compressing and decompressing data using the ``lz4`` algorithm. + To create the ``lz4`` compressor, call :ref:`compress.lz4.new() `. + + .. _lz4_compressor-compress: + + .. method:: compress(data) + + Compress the specified data. + + :param string data: data to be compressed + + :return: compressed data + :rtype: string + + **Example** + + .. literalinclude:: code_snippets/compress_lz4.lua + :language: lua + :lines: 6 + + .. _lz4_compressor-decompress: + + .. method:: decompress(data) + + Decompress the specified data. + + :param string data: data to be decompressed + + :return: decompressed data + :rtype: string + + **Example** + + .. literalinclude:: code_snippets/compress_lz4.lua + :language: lua + :lines: 7 + + +.. _lz4_opts_class: + +lz4_opts +~~~~~~~~ + +.. class:: lz4_opts + + Configuration options of the :ref:`lz4_compressor `. + These options can be passed to the :ref:`compress.lz4.new() ` function. + + **Example** + + .. literalinclude:: code_snippets/compress_lz4.lua + :language: lua + :lines: 1-5 + + .. _lz4_opts-acceleration: + + .. data:: acceleration + + Specifies the acceleration factor that enables you to adjust the compression ratio and speed. + The higher acceleration factor increases the compression speed but decreases the compression ratio. + + | Default: 1 + | Maximum: 65537 + | Minimum: 1 + + + .. _lz4_opts-decompress_buffer_size: + + .. data:: decompress_buffer_size + + Specifies the decompress buffer size (in bytes). + If the size of decompressed data is larger than this value, the compressor returns an error on decompression. + + | Default: 1048576 diff --git a/doc/enterprise/tuple_compression/api/zlib.rst b/doc/enterprise/tuple_compression/api/zlib.rst new file mode 100644 index 0000000000..a0bf3673da --- /dev/null +++ b/doc/enterprise/tuple_compression/api/zlib.rst @@ -0,0 +1,190 @@ +.. _compress-zlib-module: + +Submodule compress.zlib +======================= + +.. _overview-zlib-compress: + +Overview +-------- + +The ``compress.zlib`` submodule provides the ability to compress and decompress data using the `zlib `_ algorithm. +You can use the ``zlib`` compressor as follows: + +1. Create a compressor instance using the :ref:`compress.zlib.new() ` function: + + .. code-block:: lua + + local zlib_compressor = require('compress.zlib').new() + -- or -- + local zlib_compressor = require('compress').zlib.new() + + Optionally, you can pass compression options (:ref:`zlib_opts `) specific for ``zlib``: + + .. literalinclude:: code_snippets/compress_zlib.lua + :language: lua + :lines: 1-5 + +2. To compress the specified data, use the :ref:`compress() ` method: + + .. literalinclude:: code_snippets/compress_zlib.lua + :language: lua + :lines: 7 + +3. To decompress data, call :ref:`decompress() `: + + .. literalinclude:: code_snippets/compress_zlib.lua + :language: lua + :lines: 8 + + + +.. _api-reference-compress-zlib: + +API Reference +------------- + +.. container:: table + + .. rst-class:: left-align-column-1 + .. rst-class:: left-align-column-2 + + .. list-table:: + :widths: 35 65 + + * - **Functions** + - + + * - :ref:`compress.zlib.new() ` + - Create a ``zlib`` compressor instance. + + * - **Objects** + - + + * - :ref:`zlib_compressor ` + - A ``zlib`` compressor instance. + + * - :ref:`zlib_opts ` + - Configuration options of the ``zlib`` compressor. + + + +.. _compress-zlib-new: + +compress.zlib.new() +~~~~~~~~~~~~~~~~~~~ + +.. module:: compress.zlib + +.. function:: new([zlib_opts]) + + Create a ``zlib`` compressor instance. + + :param table options: ``zlib`` compression options (see :ref:`zlib_opts `) + + :return: a new ``zlib`` compressor instance (see :ref:`zlib_compressor `) + :rtype: userdata + + **Example** + + .. literalinclude:: code_snippets/compress_zlib.lua + :language: lua + :lines: 1-5 + + +.. _zlib_compressor_class: + +zlib_compressor +~~~~~~~~~~~~~~~ + +.. class:: zlib_compressor + + A compressor instance that exposes the API for compressing and decompressing data using the ``zlib`` algorithm. + To create the ``zlib`` compressor, call :ref:`compress.zlib.new() `. + + .. _zlib_compressor-compress: + + .. method:: compress(data) + + Compress the specified data. + + :param string data: data to be compressed + + :return: compressed data + :rtype: string + + **Example** + + .. literalinclude:: code_snippets/compress_zlib.lua + :language: lua + :lines: 7 + + .. _zlib_compressor-decompress: + + .. method:: decompress(data) + + Decompress the specified data. + + :param string data: data to be decompressed + + :return: decompressed data + :rtype: string + + **Example** + + .. literalinclude:: code_snippets/compress_zlib.lua + :language: lua + :lines: 8 + + +.. _zlib_opts_class: + +zlib_opts +~~~~~~~~~ + +.. class:: zlib_opts + + Configuration options of the :ref:`zlib_compressor `. + These options can be passed to the :ref:`compress.zlib.new() ` function. + + **Example** + + .. literalinclude:: code_snippets/compress_zlib.lua + :language: lua + :lines: 1-5 + + .. _zlib_opts-level: + + .. data:: level + + Specifies the ``zlib`` compression level that enables you to adjust the compression ratio and speed. + The lower level improves the compression speed at the cost of compression ratio. + + | Default: 6 + | Minimum: 0 (no compression) + | Maximum: 9 + + + .. _zlib_opts-mem_level: + + .. data:: mem_level + + Specifies how much memory is allocated for the ``zlib`` compressor. + The larger value improves the compression speed and ratio. + + | Default: 8 + | Minimum: 1 + | Maximum: 9 + + + .. _zlib_opts-strategy: + + .. data:: strategy + + Specifies the compression strategy. The possible values: + + * ``default`` - for normal data. + * ``huffman_only`` - forces Huffman encoding only (no string match). The fastest compression algorithm but not very effective in compression for most of the data. + * ``filtered`` - for data produced by a filter or predictor. Filtered data consists mostly of small values with a somewhat random distribution. This compression algorithm is tuned to compress them better. + * ``rle`` - limits match distances to one (run-length encoding). ``rle`` is designed to be almost as fast as ``huffman_only`` but gives better compression for PNG image data. + * ``fixed`` - prevents the use of dynamic Huffman codes and provides a simpler decoder for special applications. diff --git a/doc/enterprise/tuple_compression/api/zstd.rst b/doc/enterprise/tuple_compression/api/zstd.rst new file mode 100644 index 0000000000..9df82bd412 --- /dev/null +++ b/doc/enterprise/tuple_compression/api/zstd.rst @@ -0,0 +1,170 @@ +.. _compress-zstd-module: + +Submodule compress.zstd +======================= + +.. _overview-zstd-compress: + +Overview +-------- + +The ``compress.zstd`` submodule provides the ability to compress and decompress data using the `zstd `_ algorithm. +You can use the ``zstd`` compressor as follows: + +1. Create a compressor instance using the :ref:`compress.zstd.new() ` function: + + .. code-block:: lua + + local zstd_compressor = require('compress.zstd').new() + -- or -- + local zstd_compressor = require('compress').zstd.new() + + Optionally, you can pass compression options (:ref:`zstd_opts `) specific for ``zstd``: + + .. literalinclude:: code_snippets/compress_zstd.lua + :language: lua + :lines: 1-3 + +2. To compress the specified data, use the :ref:`compress() ` method: + + .. literalinclude:: code_snippets/compress_zstd.lua + :language: lua + :lines: 5 + +3. To decompress data, call :ref:`decompress() `: + + .. literalinclude:: code_snippets/compress_zstd.lua + :language: lua + :lines: 6 + + + +.. _api-reference-compress-zstd: + +API Reference +------------- + +.. container:: table + + .. rst-class:: left-align-column-1 + .. rst-class:: left-align-column-2 + + .. list-table:: + :widths: 35 65 + + * - **Functions** + - + + * - :ref:`compress.zstd.new() ` + - Create a ``zstd`` compressor instance. + + * - **Objects** + - + + * - :ref:`zstd_compressor ` + - A ``zstd`` compressor instance. + + * - :ref:`zstd_opts ` + - Configuration options of the ``zstd`` compressor. + + + +.. _compress-zstd-new: + +compress.zstd.new() +~~~~~~~~~~~~~~~~~~~ + +.. module:: compress.zstd + +.. function:: new([zstd_opts]) + + Create a ``zstd`` compressor instance. + + :param table options: ``zstd`` compression options (see :ref:`zstd_opts `) + + :return: a new ``zstd`` compressor instance (see :ref:`zstd_compressor `) + :rtype: userdata + + **Example** + + .. literalinclude:: code_snippets/compress_zstd.lua + :language: lua + :lines: 1-3 + + +.. _zstd_compressor_class: + +zstd_compressor +~~~~~~~~~~~~~~~ + +.. class:: zstd_compressor + + A compressor instance that exposes the API for compressing and decompressing data using the ``zstd`` algorithm. + To create the ``zstd`` compressor, call :ref:`compress.zstd.new() `. + + .. _zstd_compressor-compress: + + .. method:: compress(data) + + Compress the specified data. + + :param string data: data to be compressed + + :return: compressed data + :rtype: string + + **Example** + + .. literalinclude:: code_snippets/compress_zstd.lua + :language: lua + :lines: 5 + + .. _zstd_compressor-decompress: + + .. method:: decompress(data) + + Decompress the specified data. + + :param string data: data to be decompressed + + :return: decompressed data + :rtype: string + + **Example** + + .. literalinclude:: code_snippets/compress_zstd.lua + :language: lua + :lines: 6 + + +.. _zstd_opts_class: + +zstd_opts +~~~~~~~~~ + +.. class:: zstd_opts + + Configuration options of the :ref:`zstd_compressor `. + These options can be passed to the :ref:`compress.zstd.new() ` function. + + **Example** + + .. literalinclude:: code_snippets/compress_zstd.lua + :language: lua + :lines: 1-3 + + .. _zstd_opts-level: + + .. data:: level + + Specifies the ``zstd`` compression level that enables you to adjust the compression ratio and speed. + The lower level improves the compression speed at the cost of compression ratio. + For example, you can use level 1 if speed is most important and level 22 if size is most important. + + | Default: 3 + | Minimum: -131072 + | Maximum: 22 + + .. note:: + + Assigning 0 to ``level`` resets its value to the default (3). diff --git a/doc/enterprise/wal_extensions.rst b/doc/enterprise/wal_extensions.rst new file mode 100644 index 0000000000..c07cc5d0fb --- /dev/null +++ b/doc/enterprise/wal_extensions.rst @@ -0,0 +1,101 @@ +.. _wal_extensions: + +WAL extensions +============== + +WAL extensions available in Tarantool Enterprise Edition allow you to add auxiliary information to each :ref:`write-ahead log ` record. +For example, you can enable storing an old and new tuple for each CRUD operation performed. +This information might be helpful for implementing a CDC (Change Data Capture) utility +that transforms a data replication stream. + + +.. _wal_extensions_configuration: + +Configuration +------------- + +To configure WAL extensions, use the ``wal_ext`` :ref:`configuration property `. +Inside the ``wal_ext`` block, you can enable storing old and new tuples as follows: + +* Set the ``old`` and ``new`` options to ``true`` to store old and new tuples in a write-ahead log for all spaces. + + .. code-block:: lua + + box.cfg { + wal_ext = { old = true, new = true } + } + +* To adjust these options for specific spaces, use the ``spaces`` option. + + .. code-block:: lua + + box.cfg { + wal_ext = { + old = true, new = true, + spaces = { + space1 = { old = false }, + space2 = { new = false } + } + } + } + + + The configuration for specific spaces has priority over the global configuration, + so only new tuples are added to the log for ``space1`` and only old tuples for ``space2``. + +Note that records with additional fields are :ref:`replicated ` as follows: + +* If a replica doesn't support the extended format configured on a master, auxiliary fields are skipped. +* If a replica and master have different configurations for WAL records, a master's configuration is ignored. + + +.. _wal_extensions_example: + +Example +------- + +The table below demonstrates how write-ahead log records might look +for the specific :ref:`CRUD operations ` +if storing old and new tuples is enabled for the ``bands`` space. + +.. container:: table + + .. list-table:: + :widths: 10 50 40 + :header-rows: 1 + + * - Operation + - Example + - WAL information + * - insert + - ``bands:insert{4, 'The Beatles', 1960}`` + - | **new_tuple**: [4, 'The Beatles', 1960] + | tuple: [4, 'The Beatles', 1960] + * - delete + - ``bands:delete{4}`` + - | key: [4] + | **old_tuple**: [4, 'The Beatles', 1960] + * - update + - ``bands:update({2}, {{'=', 2, 'Pink Floyd'}})`` + - | **new_tuple**: [2, 'Pink Floyd', 1965] + | **old_tuple**: [2, 'Scorpions', 1965] + | key: [2] + | tuple: [['=', 2, 'Pink Floyd']] + * - upsert + - ``bands:upsert({2, 'Pink Floyd', 1965}, {{'=', 2, 'The Doors'}})`` + - | **new_tuple**: [2, 'The Doors', 1965] + | **old_tuple**: [2, 'Pink Floyd', 1965] + | operations: [['=', 2, 'The Doors']] + | tuple: [2, 'Pink Floyd', 1965] + * - replace + - ``bands:replace{1, 'The Beatles', 1960}`` + - | **old_tuple**: [1, 'Roxette', 1986] + | **new_tuple**: [1, 'The Beatles', 1960] + | tuple: [1, 'The Beatles', 1960] + +Storing both old and new tuples is especially useful for the ``update`` +operation because a write-ahead log record contains only a key value. + +.. NOTE:: + + You can use the :doc:`tt cat ` command to see the contents of a write-ahead log. diff --git a/doc/index.rst b/doc/index.rst index e900f24d6c..3c0d334c1b 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -58,6 +58,7 @@ Cluster on Cartridge book/admin/index book/connectors + enterprise/index reference/index contributing/index release/index diff --git a/doc/overview.rst b/doc/overview.rst index a6fbb9051e..199939714b 100644 --- a/doc/overview.rst +++ b/doc/overview.rst @@ -51,18 +51,18 @@ Editions Tarantool comes in two editions: the open-source **Community Edition (CE)** and the commercial **Enterprise Edition (EE)**. -**Tarantool CE** lets you develop applications and speed up a system in operation. +**Tarantool Community Edition** lets you develop applications and speed up a system in operation. It features :ref:`synchronous replication `, affords easy :ref:`scalability `, and includes tools to develop efficient :ref:`applications `. The `Tarantool community `__ helps with any practical questions regarding the Community Edition. -**Tarantool EE** `provides advanced tools `__ for +**Tarantool Enterprise Edition** `provides advanced tools `__ for administration, deployment, and security management, along with premium support services. This edition includes all the Community Edition features and is more predictable in terms of solution cost and maintenance. The Enterprise Edition is shipped as an SDK and includes a number of closed-source modules. -See the `documentation for Tarantool EE `__. +See the :ref:`Tarantool Enterprise Edition ` documentation. .. _overview-use_cases: diff --git a/doc/reference/reference_lua/box_read_view/list.rst b/doc/reference/reference_lua/box_read_view/list.rst index 94a640d541..370be5de1b 100644 --- a/doc/reference/reference_lua/box_read_view/list.rst +++ b/doc/reference/reference_lua/box_read_view/list.rst @@ -9,7 +9,7 @@ box.read_view.list() Return an array of all active database read views. This array might include the following read view types: - * `read views `_ created by application code (available in Tarantool Enterprise only) + * :ref:`read views ` created by application code (Enterprise Edition only) * system read views (used, for example, to make a :ref:`checkpoint ` or join a new :ref:`replica `) @@ -21,7 +21,7 @@ box.read_view.list() .. NOTE:: ``read_view.list()`` also contains read views created using the - `C API `_ (``box_raw_read_view_new()``). + :ref:`C API ` (:ref:`box_raw_read_view_new() `). Note that you cannot access database spaces included in such views from Lua. diff --git a/doc/reference/reference_lua/box_schema/downgrade.rst b/doc/reference/reference_lua/box_schema/downgrade.rst index f4038b80a3..71d4758e53 100644 --- a/doc/reference/reference_lua/box_schema/downgrade.rst +++ b/doc/reference/reference_lua/box_schema/downgrade.rst @@ -28,7 +28,7 @@ box.schema.downgrade() in the target Tarantool version. You can see all such issues using the :ref:`box.schema.downgrade_issues() ` method, which accepts the target version. - For example, ``downgrade`` to the ``2.8.4`` version fails if you use `tuple compression `__ or field :ref:`constraints ` in your database: + For example, ``downgrade`` to the ``2.8.4`` version fails if you use :ref:`tuple compression ` or field :ref:`constraints ` in your database: .. code-block:: tarantoolsession diff --git a/doc/reference/reference_rock/index.rst b/doc/reference/reference_rock/index.rst index af26e353a2..279ed717e4 100644 --- a/doc/reference/reference_rock/index.rst +++ b/doc/reference/reference_rock/index.rst @@ -18,4 +18,4 @@ This reference covers third-party Lua modules for Tarantool. other For Tarantool Enterprise modules, see the -`Tarantool Enterprise documentation `_. +:ref:`Tarantool EE ` documentation. diff --git a/doc/reference/reference_rock/other.rst b/doc/reference/reference_rock/other.rst index 5de78962d0..713bc63ca3 100644 --- a/doc/reference/reference_rock/other.rst +++ b/doc/reference/reference_rock/other.rst @@ -10,4 +10,4 @@ that is hosted externally -- mostly on GitHub pages or in READMEs: * `tracing `_ For Tarantool Enterprise modules, see the -`Tarantool Enterprise documentation `_. +:ref:`Tarantool EE ` documentation. diff --git a/doc/reference/tooling/tt_cli/configuration.rst b/doc/reference/tooling/tt_cli/configuration.rst index 6548b5aec6..807c2718d2 100644 --- a/doc/reference/tooling/tt_cli/configuration.rst +++ b/doc/reference/tooling/tt_cli/configuration.rst @@ -108,7 +108,7 @@ ee section ~~~~~~~~~~ * ``credential_path`` -- a path to the file with credentials used for - downloading Tarantool Enterprise. + downloading Tarantool Enterprise Edition. templates section ~~~~~~~~~~~~~~~~~ diff --git a/doc/reference/tooling/tt_cli/export.rst b/doc/reference/tooling/tt_cli/export.rst index a4fc09a5ba..b43cebd582 100644 --- a/doc/reference/tooling/tt_cli/export.rst +++ b/doc/reference/tooling/tt_cli/export.rst @@ -141,7 +141,7 @@ Options .. option:: --readview - Export data using a `read view `_. + Export data using a :ref:`read view `. .. option:: --username STRING diff --git a/doc/reference/tooling/tt_cli/index.rst b/doc/reference/tooling/tt_cli/index.rst index bfe7362102..2d0115da6c 100644 --- a/doc/reference/tooling/tt_cli/index.rst +++ b/doc/reference/tooling/tt_cli/index.rst @@ -13,7 +13,7 @@ a specific Tarantool version to managing remote instances and developing applica Here you can find its source code, changelog, and releases information. There is also the Enterprise version of ``tt`` available in a -Tarantool Enterprise's `release package `_. +Tarantool Enterprise Edition's :ref:`release package `. The Enterprise version provides additional features, for example, :ref:`importing ` and :ref:`exporting ` data. This section provides instructions on ``tt`` installation and configuration, diff --git a/doc/reference/tooling/tt_cli/install.rst b/doc/reference/tooling/tt_cli/install.rst index e8b2e7e829..dfde673c73 100644 --- a/doc/reference/tooling/tt_cli/install.rst +++ b/doc/reference/tooling/tt_cli/install.rst @@ -10,9 +10,9 @@ Installing Tarantool software ``tt install`` installs the latest or an explicitly specified version of Tarantool or ``tt``. The possible values of ``PROGRAM_NAME`` are: -* ``tarantool``: Install Tarantool Community edition. +* ``tarantool``: Install Tarantool Community Edition. * ``tarantool-dev``: Install Tarantool from a local build directory. -* ``tarantool-ee``: Install Tarantool Enterprise edition. +* ``tarantool-ee``: Install Tarantool Enterprise Edition. * ``tt``: Install the ``tt`` command-line utility. .. note:: @@ -60,11 +60,11 @@ When called without an explicitly specified version, ``tt install`` installs the latest available version. To check versions available for installation, use :doc:`tt search `. -By default, available versions of Tarantool CE and ``tt`` are taken from their git repositories. +By default, available versions of Tarantool Community Edition and ``tt`` are taken from their git repositories. Their installation includes building from sources, which requires some tools and dependencies, such as a C compiler. Make sure they are available in the system. -Tarantool EE is installed from prebuilt packages. +Tarantool Enterprise Edition is installed from prebuilt packages. You can also set up a local repository with installation files you need. To use it, specify its location in the :ref:`repo section ` diff --git a/doc/reference/tooling/tt_cli/installation.rst b/doc/reference/tooling/tt_cli/installation.rst index 8e62731998..7d168026cf 100644 --- a/doc/reference/tooling/tt_cli/installation.rst +++ b/doc/reference/tooling/tt_cli/installation.rst @@ -7,7 +7,7 @@ APT on Linux, or Homebrew on macOS. If you need a specific build, you can build .. NOTE:: - A Tarantool Enterprise's `release package `_ includes the `tt` utility extended with additional features like :ref:`importing ` and :ref:`exporting ` data. + A Tarantool Enterprise Edition's :ref:`release package ` includes the `tt` utility extended with additional features like :ref:`importing ` and :ref:`exporting ` data. Using Linux package managers diff --git a/doc/reference/tooling/tt_cli/search.rst b/doc/reference/tooling/tt_cli/search.rst index 040cc9e0e7..0437d295e0 100644 --- a/doc/reference/tooling/tt_cli/search.rst +++ b/doc/reference/tooling/tt_cli/search.rst @@ -27,7 +27,7 @@ Options **Applicable to:** ``taranttol-ee`` - Search for debug builds of Tarantool Enterprise SDK. + Search for debug builds of Tarantool Enterprise Edition's SDK. .. option:: --local-repo diff --git a/doc/release/2.11.0.rst b/doc/release/2.11.0.rst index 6fb72306c6..d544a39506 100644 --- a/doc/release/2.11.0.rst +++ b/doc/release/2.11.0.rst @@ -6,7 +6,7 @@ Release date: May 24, 2023 Releases on GitHub: :tarantool-release:`2.11.1`, :tarantool-release:`2.11.0` The 2.11 release of Tarantool includes many new features and fixes. -This document provides an overview of the most important features for Enterprise and Community versions. +This document provides an overview of the most important features for the Enterprise and Community editions. 2.11 is the long-term support (LTS) release with four years of maintenance. This means that you will continue to receive all the necessary security fixes and bug fixes throughout this period. @@ -19,8 +19,8 @@ You can learn more about the Tarantool release policy from the :doc:`correspondi :widths: 50 50 :header-rows: 1 - * - :ref:`Tarantool Enterprise <2-11-enterprise>` - - :ref:`Tarantool Community <2-11-community>` + * - :ref:`Enterprise Edition <2-11-enterprise>` + - :ref:`Community Edition <2-11-community>` * - * :ref:`Security enhancements <2-11-security_enhancements>` * :ref:`Read views <2-11-read_views>` @@ -49,8 +49,8 @@ To learn how to upgrade to Tarantool 2.11, see :doc:`Upgrades `_. +To learn more, see :ref:`Traffic encryption `. .. _2-11-security_enforcement_options: @@ -90,7 +90,7 @@ To learn more, see `Traffic encryption `_ and -`Password policy `_ sections. +:ref:`Authentication restrictions ` and +:ref:`Password policy ` sections. .. _2-11-pap_sha_256: @@ -119,18 +119,18 @@ By default, Tarantool uses the CHAP protocol to authenticate users and applies S In this case, password hashes are stored in the ``_user`` space unsalted. If an attacker gains access to the database, they may crack a password, for example, using a rainbow table. -With Tarantool Enterprise, you can enable PAP authentication with the SHA256 hashing algorithm. +With the Enterprise Edition, you can enable PAP authentication with the SHA256 hashing algorithm. For PAP, a password is salted with a user-unique salt before saving it in the database. Given that PAP transmits a password as plain text, Tarantool requires configuring -`SSL/TLS `_. +:ref:`SSL/TLS `. Then, you need to specify the ``box.cfg.auth_type`` option as follows: .. code-block:: lua box.cfg{ auth_type = 'pap-sha256' } -Learn more from the `Authentication protocol `_ section. +Learn more from the :ref:`Authentication protocol ` section. @@ -140,7 +140,7 @@ Learn more from the `Authentication protocol read_view1:close() -To learn more, see the `Read views `_ topic. +To learn more, see the :ref:`Read views ` topic. .. _2-11-data_compression_improvements: @@ -177,7 +177,7 @@ To learn more, see the `Read views `_. +Tarantool Enterprise Edition now includes the ``zlib`` algorithm for :ref:`tuple compression `. This algorithm shows good performance in data decompression, which reduces CPU usage if the volume of read operations significantly exceeds the volume of write operations. @@ -190,7 +190,7 @@ To use the new algorithm, set the ``compression`` option to ``zlib`` when format {name = 'data', type = 'string', compression = 'zlib'}, } -The new ``compress`` module provides an API for compressing and decompressing arbitrary data strings using the same algorithms available for tuple compression: +The new :ref:`compress ` module provides an API for compressing and decompressing arbitrary data strings using the same algorithms available for tuple compression: .. code-block:: lua @@ -213,18 +213,18 @@ Another use case is implementing a CDC (Change Data Capture) utility that transf :align: center :alt: Write-ahead log extensions -With 2.11, Tarantool Enterprise provides WAL extensions that add auxiliary information to each write-ahead log record. +With 2.11, Tarantool Enterprise Edition provides WAL extensions that add auxiliary information to each write-ahead log record. For example, you can enable storing old and new tuples for each write-ahead log record. This is especially useful for the ``update`` operation because a write-ahead log record contains only a key value. -See the `WAL extensions `_ topic to learn how to enable and configure WAL extensions. +See the :ref:`WAL extensions ` topic to learn how to enable and configure WAL extensions. .. _2-11-community: -Tarantool Community -------------------- +Community Edition +----------------- .. _2-11-pagination: diff --git a/doc/release/major-features.rst b/doc/release/major-features.rst index 753736fb3a..3b51c0ac92 100644 --- a/doc/release/major-features.rst +++ b/doc/release/major-features.rst @@ -21,12 +21,12 @@ Versions that only include bug fixes are not listed in this table. - Feature * - :doc:`2.11.0 ` - - **Tarantool Enterprise** |br| - Security enhancements: `Encrypted SSL/TLS keys `_, new `security enforcement options `_, `PAP-SHA256 support `_ |br| - `Read views `_ |br| - ``zlib`` support for `tuple compression `_ |br| - `WAL extensions `_ |br| - **Tarantool Community** |br| + - **Tarantool Enterprise Edition** |br| + Security enhancements: :ref:`Encrypted SSL/TLS keys `, new :ref:`security enforcement options `, :ref:`PAP-SHA256 support ` |br| + :ref:`Read views ` |br| + ``zlib`` support for :ref:`tuple compression ` |br| + :ref:`WAL extensions ` |br| + **Tarantool Community Edition** |br| Pagination support (the :ref:`after ` option) |br| Support for downgrading a database (:ref:`box.schema.downgrade() `) |br| :ref:`New bootstrap strategy ` |br| diff --git a/doc/toctree.rst b/doc/toctree.rst index feb0908bcd..353ccd2047 100644 --- a/doc/toctree.rst +++ b/doc/toctree.rst @@ -13,6 +13,7 @@ Cluster on Cartridge book/admin/index book/connectors + enterprise/index reference/index release/index contributing/index diff --git a/locale/ru/LC_MESSAGES/enterprise/admin.po b/locale/ru/LC_MESSAGES/enterprise/admin.po new file mode 100755 index 0000000000..0351a9e4a9 --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/admin.po @@ -0,0 +1,1437 @@ + +msgid "Cluster administrator's guide" +msgstr "Руководство администратора кластера" + +msgid "" +"This guide focuses on Enterprise-specific administration features available " +"on top of Tarantool Community Edition with Tarantool Cartridge " +"framework:" +msgstr "" +"В этом руководстве особое внимание уделяется функциям разработчика, " +"специфичным для Enterprise-версии, которые доступны в дополнение к версии " +"Tarantool с открытым исходным кодом в среде Tarantool Cartridge:" + +msgid ":ref:`space explorer `" +msgstr ":ref:`проводник спейсов `" + +msgid "" +":ref:`upgrade of environment-independent applications in production " +"`" +msgstr "" +":ref:`обновление независимых от среды приложений на рабочих серверах " +"`" + +msgid "Otherwise, consult the following documentation for:" +msgstr "" +"Либо обратитесь к следующей документации чтобы" +" получить:" + +msgid "" +"basic information on `deploying and managing a Tarantool cluster " +"`_" +msgstr "" +"базовую информацию о `развертывании и управлении Tarantool-кластером " +"`_" + +msgid "" +"more information on `managing Tarantool instances " +"`_." +msgstr "" +"дополнительную информацию об `управлении экземплярами Tarantool " +"`_" + +msgid "Exploring spaces" +msgstr "Анализ спейсов" + +msgid "" +"The web interface lets you connect (in the browser) to any instance in the " +"cluster and see what spaces it stores (if any) and their contents." +msgstr "" +"Веб-интерфейс позволяет подключиться к любому экземпляру в кластере в " +"браузере, чтобы проверить, какие в нем хранятся спейсы (если они есть) и их " +"содержимое." + +msgid "To explore spaces:" +msgstr "Чтобы просмотреть спейсы:" + +msgid "Open the **Space Explorer** tab in the menu on the left:" +msgstr "Откройте вкладку **Space Explorer** (Проводник спейсов) в меню слева:" + +msgid "" +"Click **connect** next to an instance that stores data. The basic sanity-" +"check (``test.py``) of the example application puts sample data to one " +"replica set (shard), so its master and replica store the data in their " +"spaces:" +msgstr "" +"Нажмите **connect** (подключиться) рядом с экземпляром, в котором хранятся " +"данные. Базовая проверка работоспособности (``test.py``) из примера " +"приложения размещает образцы данных в одном наборе реплик (шарде), поэтому " +"его мастер и реплика хранят данные в своих спейсах:" + +msgid "" +"When connected to a instance, the space explorer shows a table with basic " +"information on its spaces. For more information, see the `box.space " +"reference `_." +msgstr "" +"При подключении к экземпляру проводник спейсов отображает таблицу с базовой " +"информацией по спейсам. Для получения дополнительной информации см. " +"`справочник по box.space " +"`_." + +msgid "To see hidden spaces, tick the corresponding checkbox:" +msgstr "Чтобы просмотреть скрытые спейсы, отметьте соответствующий флажок:" + +msgid "Click the space's name to see its format and contents:" +msgstr "" +"Нажмите на имя спейса, чтобы увидеть информацию о его формате и содержимом:" + +msgid "" +"To search the data, select an index and, optionally, its iteration type from" +" the drop-down lists, and enter the index value:" +msgstr "" +"Для поиска данных выберите индекс и (необязательно) его тип итерации из " +"выпадающего списка и введите значение индекса:" + +msgid "Upgrading in production" +msgstr "Обновление в эксплуатационной среде" + +msgid "" +"To upgrade either a single instance or a cluster, you need a new version of " +"the packaged (archived) application." +msgstr "" +"Чтобы выполнить обновление отдельного экземпляра или кластера, необходима " +"новая версия пакетного (или архивированного) приложения." + +msgid "A single instance upgrade is simple:" +msgstr "Обновить отдельный экземпляр просто:" + +msgid "Upload the package (archive) to the server." +msgstr "Загрузите пакет (архив) на сервер." + +msgid "Stop the current instance." +msgstr "Остановите текущий экземпляр." + +msgid "" +"Deploy the new one as described in :ref:`deploying packaged applications " +"` (or :ref:`archived ones `)." +msgstr "" +"Разверните новый экземпляр, как описано в разделе о развертывании " +":ref:`пакетных приложений ` (или " +":ref:`архивированных `)." + +msgid "Cluster upgrade" +msgstr "Обновление кластера" + +msgid "To upgrade a cluster, choose one of the following scenarios:" +msgstr "Чтобы обновить кластер, выберите один из следующих сценариев:" + +msgid "" +"**Cluster shutdown**. Recommended for backward-incompatible updates, " +"requires downtime." +msgstr "" +"**Завершение работы кластера**. Рекомендуется для обновлений без обратной " +"совместимости, требует простоя." + +msgid "" +"**Instance by instance**. Recommended for backward-compatible updates, does " +"not require downtime." +msgstr "" +"**Поочередное обновление**. Рекомендуется для обновлений с обратной " +"совместимостью, не требует простоя." + +msgid "To upgrade the cluster, do the following:" +msgstr "Чтобы обновить кластер, выполните следующие действия:" + +msgid "Schedule a downtime or plan for the instance-by-instance upgrade." +msgstr "Запланируйте время простоя или поочередное обновление экземпляров." + +msgid "Upload a new application package (archive) to all servers." +msgstr "Загрузите новый пакет (или архив) приложения на все серверы." + +msgid "Next, execute the chosen scenario:" +msgstr "Далее действуйте по выбранному сценарию:" + +msgid "**Cluster shutdown**:" +msgstr "**Завершение работы кластера**:" + +msgid "Stop all instances on all servers." +msgstr "Остановите все экземпляры на всех серверах." + +msgid "Deploy the new package (archive) on every server." +msgstr "Разверните новый пакет (архив) на каждом сервере." + +msgid "" +"**Instance by instance**. Do the following in every replica set in " +"succession:" +msgstr "" +"**Поочередное обновление**. Выполните следующие действия для каждого набора " +"реплик поочередно:" + +msgid "Stop a replica on any server." +msgstr "Остановите реплику на любом сервере." + +msgid "Deploy the new package (archive) in place of the old replica." +msgstr "Разверните новый пакет (архив) на месте старой реплики." + +msgid "" +"Promote the new replica to a master (see `Switching the replica set's " +"master`_ section in the Tarantool manual)." +msgstr "" +"Переведите новую реплику в статус мастера (см. раздел `Смена мастера в " +"наборе реплик " +"`_ в руководстве по Tarantool)." + +msgid "" +"Redeploy the old master and the rest of the instances in the replica set." +msgstr "" +"Повторно разверните старый мастер и остальные экземпляры в наборе реплик." + +msgid "Be prepared to resolve possible logic conflicts." +msgstr "Будьте готовы решать возможные проблемы с логикой." + +#~ msgid "" +#~ "To enable it manually, click **Log in** in the upper left corner, enter the " +#~ "credentials, click another **Log in** and the **Auth: disabled** switch (it " +#~ "turns into **Auth: enabled**)." +#~ msgstr "" +#~ "Чтобы включить аутентификацию вручную, в верхнем правом углу нажмите **Log " +#~ "in** (Войти), введите учетные данные, снова нажмите **Log in** и " +#~ "переключатель аутентификации **Auth: disabled** (он сменится на **Auth: " +#~ "enabled**)." + +#~ msgid "In the pop-up window, check the ``vshard-router`` role." +#~ msgstr "Во всплывающем окне отметьте флажок роли ``vshard-router``." + +#~ msgid "" +#~ "Additionally, check every custom cluster role meant to handle *compute-" +#~ "intensive* workloads." +#~ msgstr "" +#~ "Кроме того, добавьте любую специальную кластерную роль для обработки " +#~ "*ресурсоемких* вычислений." + +#~ msgid "" +#~ "Create another replica set for storage nodes by repeating the first step and" +#~ " checking the ``vshard-storage`` role." +#~ msgstr "" +#~ "Создайте новый набор реплик для узлов хранения данных, повторив первый шаг с" +#~ " выбором роли ``vshard-storage``." + +#~ msgid "" +#~ "Additionally, check every custom cluster role meant to handle *transaction-" +#~ "intensive* workloads." +#~ msgstr "" +#~ "Кроме того, добавьте любую специальную кластерную роль для обработки " +#~ "*большого количества транзакций*." + +#~ msgid "Automatic configuration synchronization" +#~ msgstr "Автоматическая синхронизация настроек" + +#~ msgid "" +#~ "All instances in Tarantool cluster have the same configuration. To this end," +#~ " every instance stores a copy of the configuration file. The cluster keeps " +#~ "these copies in sync." +#~ msgstr "" +#~ "У всех экземпляров в кластере Tarantool одинаковые настройки. Для этого " +#~ "каждый экземпляр хранит свою копию конфигурационного файла. Кластер " +#~ "синхронизирует эти копии." + +#~ msgid "" +#~ "The distributed configuration file is changed automatically upon submits in " +#~ "the Web interface and includes cluster topology and role descriptions." +#~ msgstr "" +#~ "Распространяемый конфигурационный файл изменяется автоматически при отправке" +#~ " в веб-интерфейсе и содержит топологию кластера и описание ролей." + +#~ msgid "" +#~ "The cluster validates any configuration change and rejects inappropriate " +#~ "ones." +#~ msgstr "" +#~ "Кластер валидирует любые изменения конфигурации и отклоняет неподходящие." + +#~ msgid "Reporting issues" +#~ msgstr "Инструкции по повышению безопасности" + +#~ msgid "" +#~ "To report a bug or submit an update request for this document, please create" +#~ " an issue in our `repository at GitLab " +#~ "`_." +#~ msgstr "" +#~ "Чтобы сообщить об ошибке или отправить запрос на обновление этого документа," +#~ " создайте задачу в нашем ` репозитории на GitLab " +#~ "`_." + +#~ msgid "" +#~ "This guide explains how to deploy and manage the Tarantool Enterprise " +#~ "cluster. For more information on managing Tarantool instances, see the " +#~ "`Tarantool User's Guide `_." +#~ msgstr "" +#~ "В данном руководстве объясняется, как развертывать кластер Tarantool " +#~ "Enterprise и управлять им. Для получения дополнительной информации об " +#~ "управлении экземплярами Tarantool см. `Руководство пользователя Tarantool " +#~ "`_." + +#~ msgid "" +#~ "Before deploying the cluster, familiarize yourself with the notion of " +#~ ":ref:`cluster roles ` and :ref:`deploy Tarantool " +#~ "instances ` according to the desired cluster " +#~ "topology." +#~ msgstr "" +#~ "Перед тем, как развертывать кластер, ознакомьтесь с понятием " +#~ ":ref:`кластерных ролей ` и :ref:`разверните " +#~ "экземпляры Tarantool ` в соответствии с " +#~ "предполагаемой топологией кластера." + +#~ msgid "Deploying the cluster" +#~ msgstr "Развертывание кластера" + +#~ msgid "" +#~ "To deploy the cluster, first, configure all the necessary replica sets " +#~ "according to the desired cluster topology, then bootstrap the cluster." +#~ msgstr "" +#~ "Чтобы развернуть кластер, сначала настройте все необходимые наборы реплик в " +#~ "соответствии с предполагаемой топологией кластера, а затем загрузите " +#~ "кластер." + +#~ msgid "" +#~ "You can do this via the Web interface which is available at " +#~ "``http://:`` (e.g., " +#~ "``http://localhost:8081``)." +#~ msgstr "" +#~ "Это можно сделать через веб-интерфейс, который доступен по адресу " +#~ "``http://<имя_хоста_экземпляра>:`` (например, " +#~ "``http://localhost:8081``)." + +#~ msgid "In the web interface, do the following:" +#~ msgstr "В веб-интерфейсе выполните следующие действия:" + +#~ msgid "Depending on the authentication state:" +#~ msgstr "В зависимости от статуса аутентификации:" + +#~ msgid "" +#~ "If enabled (in production), enter your credentials and click **Log in**:" +#~ msgstr "" +#~ "Если аутентификация включена (в эксплуатационной среде), введите свои " +#~ "учетные данные и нажмите **Log in** (Войти):" + +#~ msgid "And proceed to configuring the cluster." +#~ msgstr "Далее переходите к настройке кластера." + +#~ msgid "" +#~ "If disabled (for easier testing), simply proceed to configuring the cluster." +#~ msgstr "" +#~ "Если отключена (для удобства тестирования), просто переходите к настройке " +#~ "кластера." + +#~ msgid "" +#~ "Click **Create** next to the first unconfigured server to create the first " +#~ "replica set solely for the router (for *compute-intensive* workloads)." +#~ msgstr "" +#~ "Нажмите **Create** (Создать) рядом с первым ненастроенным сервером, чтобы " +#~ "создать первый набор реплик исключительно для роутера (для обработки " +#~ "*ресурсоемких* вычислений)." + +#~ msgid "" +#~ "In the pop-up window, check the ``vshard-router`` role -- or any custom role" +#~ " that has ``vshard-router`` as a dependent role (in this example this is a " +#~ "custom role named ``api``)." +#~ msgstr "" +#~ "Во всплывающем окне выберите роль ``vshard-router`` -- или же любую " +#~ "пользовательскую роль" + +#~ msgid "" +#~ "As described in the :ref:`built-in roles section `, it is a " +#~ "good practice to enable workload-specific cluster roles on instances running" +#~ " on physical servers with workload-specific hardware." +#~ msgstr "" +#~ "Как описано в :ref:`разделе о встроенных ролях `, " +#~ "рекомендуется включать кластерные роли в зависимости от рабочей нагрузки на " +#~ "экземпляры, которые работают на физических серверах с аппаратным " +#~ "обеспечением, предназначенным для рабочей нагрузки определенного типа." + +#~ msgid "And click **Submit**." +#~ msgstr "В конце нажмите **Submit** (Подтвердить)." + +#~ msgid "" +#~ "(Optional) If required by topology, populate the newly created replica set " +#~ "with more routers (and compute nodes in parallel):" +#~ msgstr "" +#~ "(Необязательно) Если этого требует топология, добавьте в созданный набор " +#~ "реплик дополнительные роутеры (и параллельно вычислительные узлы):" + +#~ msgid "Click **Join** next to other unconfigured instances." +#~ msgstr "" +#~ "Нажмите **Join** (Присоединить) рядом с другими ненастроенными экземплярами." + +#~ msgid "Select the first router (and compute node) and click **Submit**." +#~ msgstr "" +#~ "Выберите первый роутер (и вычислительный узел) и нажмите **Submit** " +#~ "(Подтвердить)." + +#~ msgid "The current instance will inherit cluster roles from the replica set." +#~ msgstr "Текущий экземпляр получит те же кластерные роли, что и набор реплик." + +#~ msgid "" +#~ "Create another replica set for a master storage node (for *transaction-" +#~ "intensive* workloads)." +#~ msgstr "" +#~ "Создайте еще один набор реплик для узла хранения с ролью мастера (для " +#~ "обработки *большого количества транзакций*)." + +#~ msgid "" +#~ "Check the ``vshard-storage`` role -- or any custom role that has ``vshard-" +#~ "storage`` as a dependent role (in this example this is a custom role named " +#~ "``storage``)." +#~ msgstr "" +#~ "Выберите роль ``vshard-storage`` -- или любую пользовательскую роль, для " +#~ "которой роль ``vshard-storage`` будет зависимой (в нашем примере это " +#~ "пользовательская роль под названием ``storage``)." + +#~ msgid "" +#~ "(Optional) Check a specific group, for example ``hot``. Replica sets with " +#~ "``vshard-storage`` roles can belong to different groups. In our example, " +#~ "these are ``hot`` or ``cold`` groups meant to process hot and cold data " +#~ "independently. These groups are specified in the cluster's " +#~ ":ref:`configuration file `; by default, a cluster has" +#~ " no groups." +#~ msgstr "" +#~ "(Необязательно) Выберите определенную группу, например ``hot``. Наборы " +#~ "реплик с ролью ``vshard-storage`` могут относиться к разным группам. В нашем" +#~ " примере есть группы ``hot`` и ``cold``, которые предназначены для " +#~ "независимой обработки наиболее важных \"горячих\" и редко используемых " +#~ "\"холодных\" данных соответственно. Эти группы указаны в " +#~ ":ref:`конфигурационном файле ` кластера; по " +#~ "умолчанию, в кластере групп нет." + +#~ msgid "" +#~ "(Optional) If required by topology, populate the second replica set with " +#~ "more storage nodes:" +#~ msgstr "" +#~ "(Необязательно) Если этого требует топология, добавьте во второй набор " +#~ "реплик дополнительные узлы хранения:" + +#~ msgid "" +#~ "Click **Join** next to another unconfigured server dedicated for " +#~ "*transaction-intensive* workloads." +#~ msgstr "" +#~ "Нажмите **Join** (Присоединить) рядом с другим ненастроенным сервером, " +#~ "который выделен для рабочей нагрузки с большим количеством транзакций." + +#~ msgid "" +#~ "Select the second (``vshard-storage``) replica set, and click **Submit** to " +#~ "add the server to it." +#~ msgstr "" +#~ "Выберите второй набор реплик (``vshard-storage``) и нажмите **Submit** " +#~ "(Подтвердить), чтобы добавить к нему сервер." + +#~ msgid "Depending on cluster topology:" +#~ msgstr "В зависимости от топологии кластера:" + +#~ msgid "add more instances to the first or second replica sets, or" +#~ msgstr "" +#~ "добавьте дополнительные экземпляры к первому или второму набору реплик, или " +#~ "же" + +#~ msgid "" +#~ "create more replica sets and populate them with instances meant to handle a " +#~ "specific type of workload (compute or transactions)." +#~ msgstr "" +#~ "создайте новые наборы и добавьте в них экземпляры, которые должны " +#~ "обрабатывать определенный вид нагрузки: либо вычисления, либо транзакции." + +#~ msgid "For example:" +#~ msgstr "Например:" + +#~ msgid "" +#~ "(Optional) By default, all new ``vshard-storage`` replica sets get a weight " +#~ "of ``1`` before the ``vshard``'s bootstrap in the next step." +#~ msgstr "" +#~ "(Необязательно) По умолчанию все новые наборы реплик ``vshard-storage`` " +#~ "получают вес, равный ``1``, до загрузки ``vshard`` в следующем шаге." + +#~ msgid "" +#~ "In case you add a new replica set after the bootstrap as described in the " +#~ ":ref:`topology change section `, it will get a " +#~ "weight of 0 by default." +#~ msgstr "" +#~ "Если вы добавите новый набор реплик после начальной загрузки, как описано в " +#~ ":ref:`разделе об изменении топологии `, он по " +#~ "умолчанию получит вес 0." + +#~ msgid "" +#~ "To make different replica sets store different numbers of buckets, click " +#~ "**Edit** next to a replica set, change its default weight, and click " +#~ "**Submit**:" +#~ msgstr "" +#~ "Чтобы разные наборы реплик хранили разное количество сегментов, нажмите " +#~ "**Edit** (Изменить) рядом с набором реплик, измените значение веса по " +#~ "умолчанию и нажмите **Submit** (Подтвердить):" + +#~ msgid "" +#~ "For more information on buckets and replica set's weights, see the `vshard " +#~ "module documentation " +#~ "`_." +#~ msgstr "" +#~ "Для получения дополнительной информации о сегментах и весах набора реплик " +#~ "см. `документацию по модулю vshard " +#~ "`_." + +#~ msgid "" +#~ "Bootstrap ``vshard`` by clicking the corresponding button and OK, or by " +#~ "saying ``cluster.admin.boostrap_vshard()`` over the administrative console." +#~ msgstr "" +#~ "Загрузите ``vshard``, нажав соответствующую кнопку и OK или же выполнив " +#~ "команду ``cluster.admin.boostrap_vshard()`` в административной консоли." + +#~ msgid "" +#~ "This command creates virtual buckets and distributes them among storages." +#~ msgstr "" +#~ "Эта команда создает виртуальные сегменты (бакеты) и распределяет их по " +#~ "хранилищам." + +#~ msgid "" +#~ "From now on, all the necessary cluster configuration can be done via the web" +#~ " interface." +#~ msgstr "" +#~ "С этого момента всю необходимую настройку кластера можно выполнять через " +#~ "веб-интерфейс." + +#~ msgid "Updating the configuration" +#~ msgstr "Обновление конфигурации" + +#~ msgid "" +#~ "Cluster configuration is specified in a YAML configuration file. This file " +#~ "includes cluster topology and role descriptions." +#~ msgstr "" +#~ "Конфигурация кластера хранится в конфигурационном файле в формате YAML. Этот" +#~ " файл содержит топологию кластера и описание ролей." + +#~ msgid "" +#~ "All instances in Tarantool cluster have the same configuration. To this end," +#~ " every instance stores a copy of the configuration file, and the cluster " +#~ "keeps these copies in sync: as you submit updated configuration in the Web " +#~ "interface, the cluster validates it (and rejects inappropriate changes) and " +#~ "distributes **automatically** across the cluster." +#~ msgstr "" +#~ "У всех экземпляров в кластере Tarantool одна и та же конфигурация. Для этого" +#~ " каждый экземпляр хранит копию файла конфигурации, а кластер синхронизирует " +#~ "эти копии: когда вы отправляете обновленную конфигурацию через веб-" +#~ "интерфейс, кластер проверяет ее (и отклоняет несоответствующие изменения) и " +#~ "рассылает его **автоматически** по всему кластеру." + +#~ msgid "To update the configuration:" +#~ msgstr "Чтобы обновить конфигурацию:" + +#~ msgid "" +#~ "(Optional) Click the link in \"Current configuration can be downloaded " +#~ "here\" to get hold of the current configuration file." +#~ msgstr "" +#~ "(Необязательно) Перейдите по ссылке \"Current configuration can be " +#~ "downloaded here\" (Здесь можно загрузить текущую конфигурацию), чтобы " +#~ "получить текущий конфигурационный файл." + +#~ msgid "Update the configuration file." +#~ msgstr "Обновите конфигурационный файл." + +#~ msgid "" +#~ "You can add/change/remove any sections except system ones: ``topology``, " +#~ "``vshard``, and ``vshard_groups``." +#~ msgstr "" +#~ "Можно добавлять, изменять или удалять любые разделы, кроме системных: " +#~ "``topology`` (топология), ``vshard`` и ``vshard_groups`` (группы в vshard)." + +#~ msgid "To remove a section, simply remove it from the configuration file." +#~ msgstr "Чтобы удалить раздел, просто удалите его из конфигурационного файла." + +#~ msgid "" +#~ "Compress the configuration file as a ``.zip`` archive and click **Upload " +#~ "configuration** button to upload it." +#~ msgstr "" +#~ "Выполните сжатие конфигурационного файла в архив формата ``.zip`` и нажмите " +#~ "кнопку **Upload configuration** (Выгрузить конфигурацию), чтобы отправить " +#~ "его." + +#~ msgid "" +#~ "You will see a message in the lower part of the screen saying whether " +#~ "configuration was uploaded successfully, and an error description if the new" +#~ " configuration was not applied." +#~ msgstr "" +#~ "В нижней части экрана вы увидите сообщение, если отправка конфигурации была " +#~ "выполнена успешно, или описание ошибки, если новую конфигурацию применить не" +#~ " удалось." + +#~ msgid "Managing the cluster" +#~ msgstr "Управление кластером" + +#~ msgid "This chapter explains how to:" +#~ msgstr "В данной главе описывается, как:" + +#~ msgid "change the cluster topology," +#~ msgstr "изменять топологию кластера," + +#~ msgid "enable automatic failover," +#~ msgstr "включать автоматическое восстановление после отказа," + +#~ msgid "switch the replica set's master manually," +#~ msgstr "вручную менять мастера в наборе реплик," + +#~ msgid "deactivate replica sets, and" +#~ msgstr "отключать наборы реплик," + +#~ msgid "expel instances." +#~ msgstr "исключать экземпляры." + +#~ msgid "Changing the cluster topology" +#~ msgstr "Изменение топологии кластера" + +#~ msgid "" +#~ "Upon adding a newly deployed instance to a new or existing replica set:" +#~ msgstr "" +#~ "При добавлении нового экземпляра в новый или уже существующий набор реплик:" + +#~ msgid "" +#~ "The cluster validates the configuration update by checking if the new " +#~ "instance is available using the ``membership`` module." +#~ msgstr "" +#~ "Кластер валидирует обновление конфигурации, проверяя доступность нового " +#~ "экземпляра с помощью модуля ``membership``." + +#~ msgid "" +#~ "The membership module works over the UDP protocol and can operate before the" +#~ " ``box.cfg`` function is called." +#~ msgstr "" +#~ "Модуль membership работает по протоколу UDP и может производить операции до " +#~ "вызова функции ``box.cfg``." + +#~ msgid "All the nodes in the cluster must be healthy for validation success." +#~ msgstr "" +#~ "Чтобы валидация прошла успешно, все узлы в кластере должны быть рабочими." + +#~ msgid "" +#~ "The new instance waits until another instance in the cluster receives the " +#~ "configuration update and discovers it, again, using the ``membership`` " +#~ "module. On this step, the new instance does not have a UUID yet." +#~ msgstr "" +#~ "Новый экземпляр ожидает, пока другой экземпляр в кластере не получит " +#~ "обновление конфигурации (оповещение реализовано с помощью того же модуля " +#~ "``membership``). На этом шаге у нового экземпляра еще нет своего UUID." + +#~ msgid "" +#~ "Once the instance realizes its presence is known to the cluster, it calls " +#~ "the ``box.cfg`` function and starts living its life." +#~ msgstr "" +#~ "Как только новый экземпляр понимает, что кластер знает о нем, экземпляр " +#~ "вызывает функцию ``box.cfg`` и начинает работу." + +#~ msgid "" +#~ "An optimal strategy for connecting new nodes to the cluster is to deploy a " +#~ "new zero-weight replica set instance by instance, and then increase the " +#~ "weight. Once the weight is updated and all cluster nodes are notified of the" +#~ " configuration change, buckets start migrating to new nodes." +#~ msgstr "" +#~ "Оптимальная стратегия подключения новых узлов к кластеру состоит в том, " +#~ "чтобы развертывать новые экземпляры в наборе реплик с нулевым весом для " +#~ "каждого экземпляра, а затем увеличивать вес. Как только вес обновится и все " +#~ "узлы кластера получат уведомление об изменении конфигурации, сегменты " +#~ "начинают мигрировать на новые узлы." + +#~ msgid "To populate the cluster with more nodes, do the following:" +#~ msgstr "Чтобы добавить в кластер новые узлы, выполните следующие действия:" + +#~ msgid "" +#~ "Deploy new Tarantool instances as described in the :ref:`deployment section " +#~ "`." +#~ msgstr "" +#~ "Разверните новые экземпляры Tarantool, как описано в :ref:`разделе по " +#~ "развертыванию `." + +#~ msgid "" +#~ "If new nodes do not appear in the Web interface, click **Probe server** and " +#~ "specify their URIs manually." +#~ msgstr "" +#~ "Если новые узлы не появились в веб-интерфейсе, нажмите **Probe server** " +#~ "(Найти сервер) и укажите их URI вручную." + +#~ msgid "If a node is accessible, it will appear in the list." +#~ msgstr "Если узел доступен, он появится в списке." + +#~ msgid "" +#~ "In the Web interface, click **Create** to add an unconfigured instance to a " +#~ "new replica set:" +#~ msgstr "" +#~ "В веб-интерфейсе нажмите **Create** (Создать), чтобы добавить ненастроенный " +#~ "экземпляр в новый набор реплик:" + +#~ msgid "Check the necessary roles and click **Submit**." +#~ msgstr "Выберите необходимые роли и нажмите **Submit** (Подтвердить)." + +#~ msgid "" +#~ "In case you are adding a new ``vshard-storage`` instance, remember that all " +#~ "such instances get a ``0`` weight by default after the ``vshard``'s " +#~ "bootstrap which happened during the initial cluster deployment." +#~ msgstr "" +#~ "Если вы добавляете экземпляр ``vshard-storage``, следует помнить, что вес " +#~ "всех таких экземпляров по умолчанию становится равным ``0`` после начальной " +#~ "загрузки ``vshard``, которая происходит во время первоначального " +#~ "развертывания кластера." + +#~ msgid "" +#~ "Click **Join** next to another unconfigured server, select the new replica " +#~ "set, and click **Submit**." +#~ msgstr "" +#~ "Нажмите **Join** (Присоединить) рядом с другим ненастроенным сервером, " +#~ "выберите новый набор реплик и нажмите **Submit** (Подтвердить)." + +#~ msgid "" +#~ "If necessary, repeat the above step for more instances to reach the desired " +#~ "redundancy level." +#~ msgstr "" +#~ "При необходимости повторите вышеуказанный шаг для других экземпляров, чтобы " +#~ "достичь необходимого уровня резервирования." + +#~ msgid "" +#~ "In case you are deploying a new ``vshard-storage`` replica set, populate it " +#~ "with data when you are ready." +#~ msgstr "" +#~ "Если вы развертываете новый набор реплик ``vshard-storage``, отредактируйте " +#~ "его параметры по мере необходимости." + +#~ msgid "" +#~ "Click **Edit** next to the replica set in question, increase its weight, and" +#~ " click **Submit** to start :ref:`data rebalancing `." +#~ msgstr "" +#~ "Нажмите **Edit** (Изменить) рядом с необходимым набором реплик, увеличьте " +#~ "значение веса и нажмите **Submit** (Подтвердить), чтобы начать " +#~ ":ref:`балансировку данных `." + +#~ msgid "" +#~ "As an alternative to the web interface, you can view and change cluster " +#~ "topology via GraphQL. The cluster's endpoint for serving GraphQL queries is " +#~ "``/admin/api``. You can use any third-party GraphQL client like `GraphiQL " +#~ "`_ or `Altair " +#~ "`_." +#~ msgstr "" +#~ "Как вариант, можно просматривать и изменять топологию не через веб-интерфейс, а через GraphQL. Конечная точка кластера для выполнения запросов GraphQL: ``/admin/api``. Можно использовать любой сторонний клиент GraphQL, например `GraphiQL `_ или\n" +#~ " `Altair `_." + +#~ msgid "Examples:" +#~ msgstr "Примеры:" + +#~ msgid "listing all servers in the cluster:" +#~ msgstr "вывести все серверы в кластере:" + +#~ msgid "listing all replica sets with their servers:" +#~ msgstr "вывести все наборы реплик с соответствующими серверами:" + +#~ msgid "joining a server to a new replica set with a storage role enabled:" +#~ msgstr "" +#~ "подключить сервер к новому набору реплик со включенной ролью хранилища:" + +#~ msgid "Data rebalancing" +#~ msgstr "Балансировка данных" + +#~ msgid "" +#~ "Rebalancing (resharding) is initiated periodically and upon adding a new " +#~ "replica set with a non-zero weight to the cluster. For more information, see" +#~ " the `rebalancing process section " +#~ "`_ of the ``vshard`` module documentation." +#~ msgstr "" +#~ "Балансировка (повторный шардинг) запускается регулярно, а также после " +#~ "добавления нового набора реплик с ненулевым весом в кластер. Для получения " +#~ "дополнительной информации см. `раздел о процессе балансировки " +#~ "`_ в документации по модулю ``vshard``." + +#~ msgid "" +#~ "The most convenient way to trace through the process of rebalancing is to " +#~ "monitor the number of active buckets on storage nodes. Initially, a newly " +#~ "added replica set has 0 active buckets. After a few minutes, the background " +#~ "rebalancing process begins to transfer buckets from other replica sets to " +#~ "the new one. Rebalancing continues until the data is distributed evenly " +#~ "among all replica sets." +#~ msgstr "" +#~ "Самый удобный способ мониторинга процесса балансировки заключается в том, " +#~ "чтобы отслеживать количество активных сегментов на узлах хранения. Сначала в" +#~ " новом наборе реплик 0 активных сегментов. Через некоторое время фоновый " +#~ "процесс балансировки начинает переносить сегменты из других наборов реплик в" +#~ " новый. Балансировка продолжается до тех пор, пока данные не будут " +#~ "распределены равномерно по всем наборам реплик." + +#~ msgid "" +#~ "To monitor the current number of buckets, connect to any Tarantool instance " +#~ "over the :ref:`administrative console `, and say:" +#~ msgstr "" +#~ "Чтобы отслеживать текущее количество сегментов, подключитесь к любому " +#~ "экземпляру Tarantool через :ref:`административную консоль ` и выполните команду:" + +#~ msgid "" +#~ "The number of buckets may be increasing or decreasing depending on whether " +#~ "the rebalancer is migrating buckets to or from the storage node." +#~ msgstr "" +#~ "Количество сегментов может увеличиваться или уменьшаться в зависимости от " +#~ "того, переносит ли балансировщик сегменты в узел хранения или из него." + +#~ msgid "" +#~ "For more information on the monitoring parameters, see the :ref:`monitoring " +#~ "storages section `." +#~ msgstr "" +#~ "Для получения дополнительной информации о параметрах мониторинга см. " +#~ ":ref:`раздел по мониторингу хранилищ `." + +#~ msgid "Deactivating replica sets" +#~ msgstr "Отключение наборов реплик" + +#~ msgid "" +#~ "To deactivate an entire replica set (e.g., to perform maintenance on it) " +#~ "means to move all of its buckets to other sets." +#~ msgstr "" +#~ "Под отключением всего набора реплик (например, для технического " +#~ "обслуживания) подразумевается перемещение всех его сегментов в другие наборы" +#~ " реплик." + +#~ msgid "To deactivate a set, do the following:" +#~ msgstr "Чтобы отключить набор реплик, выполните следующие действия:" + +#~ msgid "Click **Edit** next to the set in question." +#~ msgstr "Нажмите **Edit** (Изменить) рядом с необходимым набором реплик." + +#~ msgid "Set its weight to ``0`` and click **Submit**:" +#~ msgstr "Укажите ``0`` как значение веса и нажмите **Submit** (Подтвердить):" + +#~ msgid "" +#~ "Wait for the rebalancing process to finish migrating all the set's buckets " +#~ "away. You can monitor the current bucket number as described in the " +#~ ":ref:`data rebalancing section `." +#~ msgstr "" +#~ "Подождите, пока процесс балансировки не завершит перенос всех сегментов " +#~ "набора. Можно отслеживать текущее количество сегментов, как описано в " +#~ ":ref:`разделе по балансировке данных `." + +#~ msgid "Expelling instances" +#~ msgstr "Исключение экземпляра" + +#~ msgid "" +#~ "Once an instance is expelled, it can never participate in the cluster again " +#~ "as every instance will reject it." +#~ msgstr "" +#~ "После того, как экземпляр будет исключен из кластера, он не сможет снова " +#~ "участвовать в кластере, поскольку ни один экземпляр не будет принимать его." + +#~ msgid "To expel an instance, click **Expel** next to it, then **OK**:" +#~ msgstr "" +#~ "Чтобы исключить экземпляр из кластера, нажмите **Expel** (Исключить) рядом с" +#~ " ним, а затем нажмите **OK**:" + +#~ msgid "Enabling automatic failover" +#~ msgstr "Включение автоматического восстановления после отказа" + +#~ msgid "" +#~ "In a master-replica cluster configuration with automatic failover enabled, " +#~ "if the user-specified master of any replica set fails, the cluster " +#~ "automatically chooses the next replica from the priority list and grants it " +#~ "the active master role (read/write). When the failed master comes back " +#~ "online, its role is restored and the active master, again, becomes a replica" +#~ " (read-only). This works for any roles." +#~ msgstr "" +#~ "В конфигурации кластера мастер-реплика с включенным автоматическим " +#~ "восстановлением после отказа, если происходит отказ указанного пользователем" +#~ " мастера из любого набора реплик, кластер автоматически выбирает следующую " +#~ "реплику из списка приоритетов и назначает ей роль активного мастера. Когда " +#~ "вышедший из строя мастер возвращается к работе, его роль восстанавливается, " +#~ "и активный мастер снова становится репликой (только для чтения). Это " +#~ "работает для любой роли." + +#~ msgid "" +#~ "To set the priority in a replica set, click **Edit** next to the set in " +#~ "question, drag replicas to their place in the priority list, and click " +#~ "**Submit**:" +#~ msgstr "" +#~ "Чтобы установить приоритет экземпляров в наборе реплик, нажмите **Edit** " +#~ "(Изменить) рядом с необходимым набором, перенесите реплики на нужное место в" +#~ " списке приоритетов и нажмите **Submit** (Подтвердить):" + +#~ msgid "" +#~ "The failover is disabled by default. To enable it, click **Failover: " +#~ "disabled**:" +#~ msgstr "" +#~ "По умолчанию восстановление после отказа отключено. Чтобы включить его, " +#~ "нажмите **Failover: disabled** (Восстановление после отказа отключено):" + +#~ msgid "And, in the **Failover control** window, click **Enable**:" +#~ msgstr "" +#~ "И в окне **Failover control** (Управление восстановлением после отказа), " +#~ "нажмите **Enable** (Включить):" + +#~ msgid "The failover status will change to **enabled**:" +#~ msgstr "" +#~ "Статус восстановления после отказа изменится на **enabled** (включено):" + +#~ msgid "" +#~ "For more information, see the `replication section " +#~ "`_ of the Tarantool " +#~ "manual." +#~ msgstr "" +#~ "Для получения дополнительной информации см. `раздел по репликации " +#~ "`_ в руководстве по " +#~ "Tarantool." + +#~ msgid "Switching the replica set's master" +#~ msgstr "Смена мастера в наборе реплик" + +#~ msgid "" +#~ "To manually switch the master in a replica set, click the **Edit** button " +#~ "next to the replica set in question:" +#~ msgstr "" +#~ "Чтобы вручную сменить мастера в наборе реплик, нажмите кнопку **Edit** " +#~ "(Изменить) рядом с необходимой репликой:" + +#~ msgid "Select another master and click **Submit**:" +#~ msgstr "Выберите другого мастера и нажмите **Submit** (Подтвердить):" + +#~ msgid "" +#~ "The new master will automatically enter the read/write mode, while the ex-" +#~ "master will become read-only. This works for any roles." +#~ msgstr "" +#~ "Новый мастер автоматически входит в режим чтения и записи, а бывший мастер " +#~ "может использоваться только для чтения. Это работает для любых ролей." + +#~ msgid "" +#~ "The instances you see were deployed in scope of the :ref:`example cluster " +#~ "application `." +#~ msgstr "" +#~ "Отображаемые экземпляры были развернуты в рамках :ref:`примера кластерного " +#~ "приложения `." + +#~ msgid "Managing users" +#~ msgstr "Управление пользователями" + +#~ msgid "" +#~ "On the **Users** tab, you can enable/disable authentication as well as add, " +#~ "remove, edit, and view existing users who can access the web interface." +#~ msgstr "" +#~ "На вкладке **Users** (Пользователи) можно включать и отключать " +#~ "аутентификацию, а также добавлять, удалять, редактировать и просматривать " +#~ "существующих пользователей, у которых есть доступ к веб-интерфейсу." + +#~ msgid "" +#~ "Notice that the **Users** tab is available only if authorization in the web " +#~ "interface is :ref:`implemented `. Also, some features (like " +#~ "deleting users) can be disabled in the cluster configuration; this is " +#~ "regulated by the `auth_backend_name " +#~ "`_ option passed to ``cluster.cfg()``." +#~ msgstr "" +#~ "Обратите внимание, что вкладка **Users** доступна только в тех случаях, " +#~ "когда в веб-интерфейсе включена :ref:`авторизация `. Кроме " +#~ "того, некоторые функции (например, удаление пользователей) могут быть " +#~ "отключены в конфигурации кластера; это регулируется с помощью параметра " +#~ "`auth_backend_name " +#~ "`_, переданного в ``cluster.cfg()``." + +#~ msgid "Resolving conflicts" +#~ msgstr "Устранение конфликтов" + +#~ msgid "" +#~ "Tarantool has an embedded mechanism for asynchronous replication. As a " +#~ "consequence, records are distributed among the replicas with a delay, so " +#~ "conflicts can arise." +#~ msgstr "" +#~ "В Tarantool встроен механизм асинхронной репликации. Как следствие, записи " +#~ "распределяются между репликами с задержкой, поэтому могут возникнуть " +#~ "конфликты." + +#~ msgid "" +#~ "To prevent conflicts, the special trigger ``space.before_replace`` is used. " +#~ "It is executed every time before making changes to the table for which it " +#~ "was configured. The trigger function is implemented in the Lua programming " +#~ "language. This function takes the original and new values of the tuple to be" +#~ " modified as its arguments. The returned value of the function is used to " +#~ "change the result of the operation: this will be the new value of the " +#~ "modified tuple." +#~ msgstr "" +#~ "Для предотвращения конфликтов используется специальный триггер " +#~ "``space.before_replace``. Он выполняется каждый раз перед внесением " +#~ "изменений в таблицу, для которой он был настроен. Функция триггера " +#~ "реализована на языке программирования Lua. Эта функция принимает в качестве " +#~ "аргументов исходные значения изменяемого кортежа и новые значения. Функция " +#~ "возвращает значение, которое используется для изменения результата операции:" +#~ " это будет новое значение измененного кортежа." + +#~ msgid "" +#~ "For insert operations, the old value is absent, so ``nil`` is passed as the " +#~ "first argument." +#~ msgstr "" +#~ "Для операций вставки старое значение отсутствует, поэтому в качестве первого" +#~ " аргумента передается нулевое значение ``nil``." + +#~ msgid "" +#~ "For delete operations, the new value is absent, so ``nil`` is passed as the " +#~ "second argument. The trigger function can also return ``nil``, thus turning " +#~ "this operation into delete." +#~ msgstr "" +#~ "Для операций удаления отсутствует новое значение, поэтому нулевое значение " +#~ "``nil`` передается в качестве второго аргумента. Функция триггера также " +#~ "может возвращать нулевое значение ``nil``, превращая эту операцию в " +#~ "удаление." + +#~ msgid "" +#~ "This example shows how to use the ``space.before_replace`` trigger to " +#~ "prevent replication conflicts. Suppose we have a ``box.space.test`` table " +#~ "that is modified in multiple replicas at the same time. We store one payload" +#~ " field in this table. To ensure consistency, we also store the last " +#~ "modification time in each tuple of this table and set the " +#~ "``space.before_replace`` trigger, which gives preference to newer tuples. " +#~ "Below is the code in Lua:" +#~ msgstr "" +#~ "В примере ниже показано, как использовать триггер ``space.before_replace``, " +#~ "чтобы предотвратить конфликты репликации. Предположим, у нас есть таблица " +#~ "``box.space.test``, которая изменяется в нескольких репликах одновременно. В" +#~ " этой таблице мы храним одно поле полезной нагрузки. Чтобы обеспечить " +#~ "согласованность, мы также сохраняем время последнего изменения в каждом " +#~ "кортеже этой таблицы и устанавливаем триггер ``space.before_replace``, " +#~ "который отдает предпочтение новым кортежам. Ниже приведен код на Lua:" + +#~ msgid "" +#~ "Promote the new replica to a master as described in :ref:`switching the " +#~ "master ` section." +#~ msgstr "" +#~ "Переведите новую реплику в статус мастера, как описано в разделе :ref:`о " +#~ "смене мастера `." + +#~ msgid "Monitoring cluster via CLI" +#~ msgstr "Мониторинг кластера через CLI" + +#~ msgid "" +#~ "This section describes parameters you can monitor over the administrative " +#~ "console." +#~ msgstr "" +#~ "В данном разделе описываются параметры, которые можно отслеживать в " +#~ "административной консоли." + +#~ msgid "Connecting to nodes via CLI" +#~ msgstr "Подключение к узлам через CLI" + +#~ msgid "" +#~ "Each Tarantool node (``router``/``storage``) provides an administrative " +#~ "console (Command Line Interface) for debugging, monitoring, and " +#~ "troubleshooting. The console acts as a Lua interpreter and displays the " +#~ "result in the human-readable YAML format. To connect to a Tarantool instance" +#~ " via the console, say:" +#~ msgstr "" +#~ "В каждом узле Tarantool (роутер/хранилище) есть административная консоль " +#~ "(интерфейс командной строки) для отладки, мониторинга и разрешения проблем. " +#~ "Консоль выступает в качестве интерпретатора Lua и отображает результат в " +#~ "удобном для восприятия формате YAML. Чтобы подключиться к экземпляру " +#~ "Tarantool через консоль, выполните команду:" + +#~ msgid "where the ``:`` is the instance's URI." +#~ msgstr "" +#~ "где ``:`` (<имя_хоста_экземпляра>:<порт>) -- это " +#~ "URI данного экземпляра." + +#~ msgid "Monitoring storages" +#~ msgstr "Мониторинг хранилищ" + +#~ msgid "Use ``vshard.storage.info()`` to obtain information on storage nodes." +#~ msgstr "" +#~ "Для получения информации об узлах хранения данных используйте " +#~ "``vshard.storage.info()``." + +#~ msgid "Output example" +#~ msgstr "Пример вывода" + +#~ msgid "Status list" +#~ msgstr "Список состояний" + +#~ msgid "**Code**" +#~ msgstr "**Код**" + +#~ msgid "**Critical level**" +#~ msgstr "**Уровень критичности**" + +#~ msgid "**Description**" +#~ msgstr "**Описание**" + +#~ msgid "0" +#~ msgstr "0" + +#~ msgid "Green" +#~ msgstr "Зеленый" + +#~ msgid "A replica set works in a regular way." +#~ msgstr "Набор реплик работает в обычном режиме." + +#~ msgid "1" +#~ msgstr "1" + +#~ msgid "Yellow" +#~ msgstr "Желтый" + +#~ msgid "" +#~ "There are some issues, but they don’t affect a replica set efficiency (worth" +#~ " noticing, but don't require immediate intervention)." +#~ msgstr "" +#~ "Есть некоторые проблемы, но они не влияют на эффективность набора реплик (их" +#~ " стоит отметить, но они не требуют немедленного вмешательства)." + +#~ msgid "2" +#~ msgstr "2" + +#~ msgid "Orange" +#~ msgstr "Оранжевый" + +#~ msgid "A replica set is in a degraded state." +#~ msgstr "Набор реплик не восстановился после сбоя." + +#~ msgid "3" +#~ msgstr "3" + +#~ msgid "Red" +#~ msgstr "Красный" + +#~ msgid "A replica set is disabled." +#~ msgstr "Набор реплик отключен." + +#~ msgid "Potential issues" +#~ msgstr "Возможные проблемы" + +#~ msgid "``MISSING_MASTER`` — No master node in the replica set configuration." +#~ msgstr "" +#~ "``MISSING_MASTER`` — В конфигурации набора реплик отсутствует мастер-узел." + +#~ msgid "**Critical level:** Orange." +#~ msgstr "**Уровень критичности**: Оранжевый." + +#~ msgid "" +#~ "**Cluster condition:** Service is degraded for data-change requests to the " +#~ "replica set." +#~ msgstr "" +#~ "**Состояние кластера**: Ухудшение работы запросов на изменение данных к " +#~ "набору реплик." + +#~ msgid "" +#~ "**Solution:** Set the master node for the replica set in the configuration " +#~ "using API." +#~ msgstr "**Решение**: Задайте мастер-узел для набора реплик, используя API." + +#~ msgid "" +#~ "``UNREACHABLE_MASTER`` — No connection between the master and the replica." +#~ msgstr "" +#~ "``UNREACHABLE_MASTER`` — Отсутствует соединение между мастером и репликой." + +#~ msgid "**Critical level:**" +#~ msgstr "**Уровень критичности:**" + +#~ msgid "If idle value doesn’t exceed T1 threshold (1 s.) — Yellow," +#~ msgstr "Если значение бездействия не превышает порог T1 (1 с.) -- Желтый," + +#~ msgid "If idle value doesn’t exceed T2 threshold (5 s.) — Orange," +#~ msgstr "Если значение бездействия не превышает порог T2 (5 с.) -- Оранжевый," + +#~ msgid "If idle value exceeds T3 threshold (10 s.) — Red." +#~ msgstr "Если значение бездействия не превышает порог T3 (10 с.) -- Красный." + +#~ msgid "" +#~ "**Cluster condition:** For read requests to replica, the data may be " +#~ "obsolete compared with the data on master." +#~ msgstr "" +#~ "**Состояние кластера:** При запросах на чтение из реплики данные могут быть " +#~ "устаревшими по сравнению с данными на мастере." + +#~ msgid "" +#~ "**Solution:** Reconnect to the master: fix the network issues, reset the " +#~ "current master, switch to another master." +#~ msgstr "" +#~ "**Решение:** Повторно подключитесь к мастеру: устраните проблемы с сетью, " +#~ "сбросьте текущий мастер, переключитесь на другой мастер." + +#~ msgid "``LOW_REDUNDANCY`` — Master has access to a single replica only." +#~ msgstr "``LOW_REDUNDANCY`` — У мастера есть доступ только к одной реплике." + +#~ msgid "**Critical level:** Yellow." +#~ msgstr "**Уровень критичности:** Желтый." + +#~ msgid "" +#~ "**Cluster condition:** The data storage redundancy factor is equal to 2. It " +#~ "is lower than the minimal recommended value for production usage." +#~ msgstr "" +#~ "**Состояние кластера:** Коэффициент избыточности хранения данных равен 2. Он" +#~ " ниже минимального рекомендуемого значения для использования в производстве." + +#~ msgid "**Solution:** Check cluster configuration:" +#~ msgstr "**Решение:** Проверить конфигурацию кластера:" + +#~ msgid "" +#~ "If only one master and one replica are specified in the configuration, it is" +#~ " recommended to add at least one more replica to reach the redundancy factor" +#~ " of 3." +#~ msgstr "" +#~ "Если в конфигурации указан только один мастер и одна реплика, рекомендуется " +#~ "добавить хотя бы еще одну реплику, чтобы коэффициент избыточности достиг 3." + +#~ msgid "" +#~ "If three or more replicas are specified in the configuration, consider " +#~ "checking the replicas' states and network connection among the replicas." +#~ msgstr "" +#~ "Если в конфигурации указаны три или более реплик, проверьте статусы реплик и" +#~ " сетевое соединение между репликами." + +#~ msgid "" +#~ "``INVALID_REBALANCING`` — Rebalancing invariant was violated. During " +#~ "migration, a storage node can either send or receive buckets. So it " +#~ "shouldn’t be the case that a replica set sends buckets to one replica set " +#~ "and receives buckets from another replica set at the same time." +#~ msgstr "" +#~ "``INVALID_REBALANCING`` — Нарушен инвариант балансировки. Во время миграции " +#~ "узел хранения может либо отправлять сегменты, либо получать их. Поэтому не " +#~ "должно быть так, чтобы набор реплик отправлял сегменты в один набор реплик и" +#~ " одновременно получал сегменты из другого набора реплик." + +#~ msgid "**Cluster condition:** Rebalancing is on hold." +#~ msgstr "**Состояние кластера:** Балансировка приостановлена." + +#~ msgid "**Solution:** There are two possible reasons for invariant violation:" +#~ msgstr "**Решение:** Есть две возможные причины нарушения инварианта:" + +#~ msgid "The ``rebalancer`` has crashed." +#~ msgstr "Отказ балансировщика." + +#~ msgid "Bucket states were changed manually." +#~ msgstr "Статус сегмента был изменен вручную." + +#~ msgid "Either way, please contact Tarantool support." +#~ msgstr "В любом случае обратитесь в техническую поддержку Tarantool." + +#~ msgid "" +#~ "``HIGH_REPLICATION_LAG`` — Replica’s lag exceeds T1 threshold (1 sec.)." +#~ msgstr "" +#~ "``HIGH_REPLICATION_LAG`` — Отставание реплики превышает порог T1 (1 с.)." + +#~ msgid "If the lag doesn’t exceed T1 threshold (1 sec.) — Yellow;" +#~ msgstr "Если отставание не превышает порог T1 (1 с.) -- Желтый;" + +#~ msgid "If the lag exceeds T2 threshold (5 sec.) — Orange." +#~ msgstr "Если отставание не превышает порог T2 (5 с.) -- Оранжевый." + +#~ msgid "" +#~ "**Cluster condition:** For read-only requests to the replica, the data may " +#~ "be obsolete compared with the data on the master." +#~ msgstr "" +#~ "**Состояние кластера:** При запросах только на чтение из реплики данные " +#~ "могут быть устаревшими по сравнению с данными на мастере." + +#~ msgid "" +#~ "**Solution:** Check the replication status of the replica. Further " +#~ "instructions are given in the :ref:`troubleshooting guide `." +#~ msgstr "" +#~ "**Решение:** Проверьте статус репликации на реплике. Более подробные " +#~ "инструкции приведены в :ref:`руководстве по разрешению проблем `." + +#~ msgid "" +#~ "``OUT_OF_SYNC`` — Mal-synchronization occured. The lag exceeds T3 threshold " +#~ "(10 sec.)." +#~ msgstr "" +#~ "``OUT_OF_SYNC`` — Произошла рассинхронизация. Отставание превышает порог T3 " +#~ "(10 с.)." + +#~ msgid "**Critical level:** Red." +#~ msgstr "**Уровень критичности:** Красный." + +#~ msgid "" +#~ "**Solution:** Check the replication status of the replica. Further " +#~ "instructions are given in the :ref: troubleshooting guide `." +#~ msgstr "" +#~ "**Решение:** Проверьте статус репликации на реплике. Более подробные " +#~ "инструкции приведены в :ref:`руководстве по разрешению проблем `." + +#~ msgid "``UNREACHABLE_REPLICA`` — One or multiple replicas are unreachable." +#~ msgstr "``UNREACHABLE_REPLICA`` — Одна или несколько реплик недоступны." + +#~ msgid "" +#~ "**Cluster condition:** Data storage redundancy factor for the given replica " +#~ "set is less than the configured factor. If the replica is next in the queue " +#~ "for rebalancing (in accordance with the weight configuration), the requests " +#~ "are forwarded to the replica that is still next in the queue." +#~ msgstr "" +#~ "**Состояние кластера:** Коэффициент избыточности хранения данных для данного" +#~ " набора реплик меньше заданного значения. Если реплика стоит следующей в " +#~ "очереди на балансировку (в соответствии с настройками веса), запросы " +#~ "перенаправляются в реплику, которая все еще находится в очереди." + +#~ msgid "" +#~ "**Solution:** Check the error message and find out which replica is " +#~ "unreachable. If a replica is disabled, enable it. If this doesn’t help, " +#~ "consider checking the network." +#~ msgstr "" +#~ "**Решение:** Проверьте сообщение об ошибке и выясните, какая реплика " +#~ "недоступна. Если реплика отключена, включите ее. Если это не поможет, " +#~ "проверьте состояние сети." + +#~ msgid "" +#~ "``UNREACHABLE_REPLICASET`` — All replicas except for the current one are " +#~ "unreachable. **Critical level:** Red." +#~ msgstr "" +#~ "``UNREACHABLE_REPLICASET`` — Все реплики, кроме текущей, недоступны. " +#~ "**Уровень критичности:** Красный." + +#~ msgid "**Cluster condition:** The replica stores obsolete data." +#~ msgstr "**Состояние кластера:** Реплика хранит устаревшие данные." + +#~ msgid "" +#~ "**Solution:** Check if the other replicas are enabled. If all replicas are " +#~ "enabled, consider checking network issues on the master. If the replicas are" +#~ " disabled, check them first: the master might be working properly." +#~ msgstr "" +#~ "**Решение:** Проверьте, включены ли другие реплики. Если все реплики " +#~ "включены, проверьте наличие сетевых проблем на мастере. Если реплики " +#~ "отключены, сначала проверьте их: возможно, мастер работает правильно." + +#~ msgid "Monitoring routers" +#~ msgstr "Мониторинг роутеров" + +#~ msgid "Use ``vshard.router.info()`` to obtain information on the router." +#~ msgstr "" +#~ "Для получения информации о роутерах используйте ``vshard.router.info()``." + +#~ msgid "The ``router`` works in a regular way." +#~ msgstr "Роутер работает в обычном режиме." + +#~ msgid "" +#~ "Some replicas sre unreachable (affects the speed of executing read " +#~ "requests)." +#~ msgstr "" +#~ "Некоторые реплики недоступны, что влияет на скорость выполнения запросов на " +#~ "чтение." + +#~ msgid "Service is degraded for changing data." +#~ msgstr "Работа запросов на изменение данных ухудшена." + +#~ msgid "Service is degraded for reading data." +#~ msgstr "Работа запросов на изменение данных ухудшена." + +#~ msgid "" +#~ "Depending on the nature of the issue, use either the UUID of a replica, or " +#~ "the UUID of a replica set." +#~ msgstr "" +#~ "В зависимости от характера проблемы используйте либо UUID реплики, либо UUID" +#~ " набора реплик." + +#~ msgid "" +#~ "``MISSING_MASTER`` — The master in one or multiple replica sets is not " +#~ "specified in the configuration." +#~ msgstr "" +#~ "``MISSING_MASTER`` — В конфигурации одного или нескольких наборов реплик не " +#~ "указан мастер." + +#~ msgid "**Cluster condition:** Partial degrade for data-change requests." +#~ msgstr "" +#~ "**Состояние кластера:** Частичное ухудшение работы запросов на изменение " +#~ "данных." + +#~ msgid "**Solution:** Specify the master in the configuration." +#~ msgstr "**Решение:** Укажите мастера в конфигурации." + +#~ msgid "" +#~ "``UNREACHABLE_MASTER`` — The ``router`` lost connection with the master of " +#~ "one or multiple replica sets." +#~ msgstr "" +#~ "``UNREACHABLE_MASTER`` — Роутер потерял соединение с мастером одного или " +#~ "нескольких наборов реплик." + +#~ msgid "" +#~ "**Solution:** Restore connection with the master. First, check if the master" +#~ " is enabled. If it is, consider checking the network." +#~ msgstr "" +#~ "**Решение:** Восстановите соединение с мастером. Сначала проверьте, включен " +#~ "ли мастер. Если он включен, проверьте состояние сети." + +#~ msgid "" +#~ "``SUBOPTIMAL_REPLICA`` — There is a replica for read-only requests, but this" +#~ " replica is not optimal according to the configured weights. This means that" +#~ " the optimal replica is unreachable." +#~ msgstr "" +#~ "``SUBOPTIMAL_REPLICA`` — Восстановите соединение с мастером. Сначала " +#~ "проверьте, включен ли мастер. Если он включен, проверьте состояние сети." + +#~ msgid "" +#~ "**Cluster condition:** Read-only requests are forwarded to a backup replica." +#~ msgstr "" +#~ "**Состояние кластера:** Запросы только на чтение направляются на резервную " +#~ "реплику." + +#~ msgid "" +#~ "**Solution:** Check the status of the optimal replica and its network " +#~ "connection." +#~ msgstr "" +#~ "**Решение:** Проверьте статус оптимальной реплики и ее сетевого подключения." + +#~ msgid "" +#~ "``UNREACHABLE_REPLICASET`` — A replica set is unreachable for both read-only" +#~ " and data-change requests." +#~ msgstr "" +#~ "``UNREACHABLE_REPLICASET`` — Набор реплик недоступен как для запросов только" +#~ " на чтение, так и для запросов на изменение данных." + +#~ msgid "**Critical Level:** Red." +#~ msgstr "**Уровень критичности:** Красный." + +#~ msgid "" +#~ "**Cluster condition:** Partial degrade for read-only and data-change " +#~ "requests." +#~ msgstr "" +#~ "**Состояние кластера:** Частичное ухудшение работы запросов на изменение " +#~ "данных и на чтение данных." + +#~ msgid "" +#~ "**Solution:** The replica set has an unreachable master and replica. Check " +#~ "the error message to detect this replica set. Then fix the issue in the same" +#~ " way as for :ref:`UNREACHABLE_REPLICA `." +#~ msgstr "" +#~ "**Решение:** В наборе реплик недоступны мастер и реплика. Проверьте " +#~ "сообщение об ошибке, чтобы найти этот набор реплик. Исправьте ошибку, как " +#~ "описано в решении ошибки :ref:`UNREACHABLE_REPLICA `." + +#~ msgid "Troubleshooting" +#~ msgstr "Разрешение проблем" + +#~ msgid "" +#~ "Please see the `Troubleshooting guide " +#~ "`_ in the " +#~ "Tarantool manual." +#~ msgstr "" +#~ "Обратитесь к `Руководству по разрешению проблем " +#~ "`_ в руководстве " +#~ "по Tarantool." + +#~ msgid "Disaster recovery" +#~ msgstr "Аварийное восстановление" + +#~ msgid "" +#~ "Please see the section `Disaster recovery " +#~ "`_ in the " +#~ "Tarantool manual." +#~ msgstr "" +#~ "Обратитесь к `Руководству по аварийному восстановлению " +#~ "`_ в " +#~ "руководстве по Tarantool." + +#~ msgid "Backups" +#~ msgstr "Резервное копирование" + +#~ msgid "" +#~ "Please see the section `Backups " +#~ "`_ in the Tarantool " +#~ "manual." +#~ msgstr "" +#~ "Обратитесь к `Руководству по резервному копированию " +#~ "`_ в руководстве по " +#~ "Tarantool." diff --git a/locale/ru/LC_MESSAGES/enterprise/audit.po b/locale/ru/LC_MESSAGES/enterprise/audit.po new file mode 100644 index 0000000000..31cbc2cd18 --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/audit.po @@ -0,0 +1,281 @@ + +msgid "Security audit" +msgstr "Аудит безопасности" + +msgid "" +"This document will help you audit the security of a Tarantool Enterprise Edition's " +"cluster. It explains certain security aspects, their rationale, and the ways" +" to check them. For details on how to configure Tarantool Enterprise Edition and its" +" infrastructure for each aspect, refer to the :doc:`security hardening guide" +" `." +msgstr "" +"В этом документе рассказано, как провести аудит безопасности кластера Tarantool Enterprise. Здесь рассмотрены различные аспекты защиты, их смысл, а также способы проверки. Подробнее о том, как настроить Tarantool Enterprise и его инфраструктуру, вы узнаете из :doc:`инструкций по повышению безопасности\n" +"`." + +msgid "Encryption of external iproto traffic" +msgstr "Шифрование внешнего трафика iproto" + +msgid "" +"Tarantool uses the :doc:`iproto binary protocol " +"` for replicating data between " +"instances and also in the connector libraries. Iproto doesn't have built-in " +"encryption. All iproto connections between data centers must use a separate " +"encryption mechanism, such as a VPN." +msgstr "" +"В Tarantool используется :doc:`бинарный протокол iproto " +"` для репликации данных между " +"экземплярами, а также в библиотеках коннекторов. У iproto нет встроенной " +"системы шифрования. Все соединения iproto с дата-центрами должны быть " +"зашифрованы, например через отдельное VPN-соединение." + +msgid "Closed iproto ports" +msgstr "Закрытые порты iproto" + +msgid "" +"When a Tarantool cluster does not use iproto for external " +"requests, connections to the iproto ports should be allowed only between " +"Tarantool instances." +msgstr "" +"Если в кластере Tarantool не используется iproto для внешних " +"запросов, подключение к портам iproto должно разрешаться только между " +"экземплярами Tarantool." + +msgid "" +"For more details on configuring ports for iproto, see the ``advertise_uri`` " +"section in the Cartridge documentation." +msgstr "" +"Подробнее о настройке портов для iproto см. в разделе ``advertise_uri`` в " +"документации Cartridge." + +msgid "HTTPS connection termination" +msgstr "Механизм HTTPS termination" + +msgid "" +"A Tarantool instance can accept HTTP connections from external " +"services or access the administrative web UI. All such connections must " +"go through an HTTPS-providing web server, running on the same host, such as " +"nginx. This requirement is for both virtual and physical hosts. Running HTTP" +" traffic through a few separate hosts with HTTPS termination is not " +"sufficiently secure." +msgstr "" +"Экземпляр Tarantool может принимать HTTP-подключения от внешних " +"источников или при доступе к веб-интерфейсу администратора. Все такие " +"подключения должны проходить через веб-сервер с HTTPS, работающий на том же " +"хосте (например, nginx). Это требование относится как к виртуальным, так и к" +" физическим хостам. Проведение HTTP-трафика через несколько отдельных хостов" +" с механизмом HTTPS termination недостаточно безопасно." + +msgid "Closed HTTP ports" +msgstr "Закрытые HTTP-порты" + +msgid "" +"Tarantool accepts HTTP connections on a specific port, configured" +" with ``http_port: `` value (see :ref:`configuring Cartridge " +"instances `). It must be only available on the " +"same host for nginx to connect to it." +msgstr "" +"Tarantool принимает HTTP-соединения по определенному порту. Его " +"номер указывается в :ref:`конфигурации экземпляров Cartridge " +"`: ``http_port: <число>``. Порт должен быть " +"доступен только на этом хосте для подключения nginx." + +msgid "" +"Check that the configured HTTP port is closed and that the HTTPS port " +"(``443`` by default) is open." +msgstr "" +"Убедитесь, что настроенный HTTP-порт закрыт, а HTTPS-порт ( по умолчанию " +"``443``) открыт." + +msgid "Restricted access to the administrative console" +msgstr "Ограниченный доступ к административной консоли" + +msgid "" +"The :doc:`console ` module " +"provides a way to connect to a running instance and run custom Lua code. " +"This can be useful for development and administration. The following code " +"examples open connections on a TCP port and on a UNIX socket." +msgstr "" +"Модуль :doc:`console ` дает " +"возможность подключиться к рабочему экземпляру и запускать пользовательский " +"код Lua. Это полезная возможность для разработчиков и администраторов. В " +"следующих примерах показано, как открыть соединение по TCP-порту и на UNIX-" +"сокете." + +msgid "" +"Opening an administrative console through a TCP port is always unsafe. Check " +"that there are no calls like ``console.listen()`` in the code." +msgstr "" +"Открывать административную консоль через TCP-порт всегда небезопасно. " +"Убедитесь, что в коде нет вызовов формата ``console.listen()``." + +msgid "" +"Connecting through a socket requires having the write permission on the " +"``/var/lib/tarantool`` directory. Check that write permission to this " +"directory is limited to the ``tarantool`` user." +msgstr "" +"При подключении через сокет требуется право write для директории " +"``/var/lib/tarantool``. Убедитесь, что оно выдано только пользователю " +"``tarantool``." + +msgid "Limiting the guest user" +msgstr "Ограничения для пользователя guest" + +msgid "" +"Connecting to the instance with ``tarantoolctl connect`` without user " +"credentials (under the ``guest`` user) must be disabled." +msgstr "" +"Подключение к экземпляру с помощью ``tarantoolctl connect`` без учетных " +"данных (под пользователем ``guest``) необходимо отключить." + +msgid "There are two ways to check this vulnerability:" +msgstr "Есть два способа проверить эту уязвимость:" + +msgid "" +"Check that the source code doesn't grant access to the ``guest`` user. The " +"corresponding code can look like this:" +msgstr "" +"Убедитесь, что в исходном коде не предоставляются права доступа пользователю" +" ``guest``. Этот участок кода может выглядеть так:" + +msgid "" +"Besides searching for the whole code pattern, search for any entries of " +"``'universe'``." +msgstr "" +"Помимо сооветствующего фрагмента кода, ищите все вхождения значения " +"``'universe'``." + +msgid "" +"Try connecting with ``tarantoolctl connect`` to each Tarantool " +"node." +msgstr "" +"Попытайтесь подключиться с помощью ``tarantoolctl connect`` к каждому из " +"узлов Tarantool." + +msgid "" +"For more details, refer to the documentation on :doc:`access control " +"`." +msgstr "" +"Подробнее см. в разделе документации :doc:`Управление доступом " +"`." + +msgid "Authorization in the web UI" +msgstr "Авторизация в веб-интерфейсе" + +msgid "" +"Using the web interface must require logging in with a username and password. " +"See more details in the documentation on :ref:`configuring web interface " +"authorization `." +msgstr "" +"Для входа в веб-интерфейс должны требоваться имя пользователя и пароль. " +"Подробнее см. в разделе документации :ref:`Реализация авторизации в веб-" +"интерфейсе `." + +msgid "Running under the tarantool user" +msgstr "Запуск под пользователем tarantool" + +msgid "" +"All Tarantool instances should be running under the ``tarantool``" +" user." +msgstr "" +"Все экземпляры Tarantool должны работать под пользователем " +"``tarantool``." + +msgid "Limiting access to the tarantool user" +msgstr "Ограничение доступа для пользователя tarantool" + +msgid "" +"The ``tarantool`` user must be a non-privileged user without the ``sudo`` " +"permission. Also, it must not have a password set to prevent logging in via " +"SSH or ``su``." +msgstr "" +"Пользователь ``tarantool`` не должен иметь права ``sudo``. Кроме того, у " +"него не должно быть пароля, чтобы не допустить входа через SSH или ``su``." + +msgid "Keeping two or more snapshots" +msgstr "Хранение двух и более снимков данных" + +msgid "" +"In order to have a reliable backup, a Tarantool instance must " +"keep two or more latest snapshots. This should be checked on each Tarantool " +"instance." +msgstr "" +"Для надежности резервного копирования в экземпляре Tarantool " +"должны храниться минимум два последних снимка данных. Не забудьте проверить " +"каждый экземпляр." + +msgid "" +"The :ref:`snapshot_count `" +" value determines the number of kept snapshots. Configuration values are " +"primarily set in the configuration files but :doc:`can be overridden " +"` with " +"environment variables and command-line arguments. So, it's best to check " +"both the values in the configuration files and the actual values using the " +"console:" +msgstr "" +"Значение :ref:`snapshot_count ` определяет количество сохраненных снимков данных. Такие " +"параметры задаются в основном в файлах конфигурации, но :doc:`их могут " +"замещать " +"` " +"переменные окружения и аргументы в командной строке. Так что рекомендуется " +"проверить через консоль как значения в файлах конфигурации, так и " +"фактические значения:" + +msgid "Enabled write-ahead logging (WAL)" +msgstr "Включен журнал упреждающей записи (WAL)" + +msgid "" +"Tarantool records all incoming data in the write-ahead log (WAL)." +" The WAL must be enabled to ensure that data will be recovered in case of a " +"possible instance restart." +msgstr "" +"Tarantool фиксирует все входящие данные в журнале упреждающей " +"записи (WAL). WAL должен быть включен, чтобы в случае перезапуска экземпляра" +" эти данные можно было восстановить." + +msgid "Secure values of ``wal_mode`` are ``write`` and ``fsync``:" +msgstr "Безопасные значения ``wal_mode`` -- ``write`` и ``fsync``:" + +msgid "" +"An exclusion from this requirement is when the instance is processing data, " +"which can be freely rejected. For example, when Tarantool is used" +" for caching. Then WAL can be disabled to reduce i/o load." +msgstr "" +"Исключением может быть ситуация, когда экземпляр обрабатывает данные, " +"которые можно удалять: к примеру, когда Tarantool используется " +"для кэширования. В этом случае WAL можно отключить, чтобы снизить нагрузку " +"на ввод/вывод." + +msgid "" +"For more details, see the :ref:`wal_mode reference " +"`." +msgstr "" +"Подробнее см. в разделе :ref:`справки по wal_mode " +"`." + +msgid "The logging level is INFO or higher" +msgstr "Уровень ведения журнала: INFO или выше" + +msgid "" +"The logging level should be set to 5 (``INFO``), 6 (``VERBOSE``), or 7 " +"(``DEBUG``). Application logs will then have enough information to research " +"a possible security breach." +msgstr "" +"Уровень ведения журнала должен быть 5 (``INFO``), 6 (``VERBOSE``) или 7 " +"(``DEBUG``). Тогда в случае нарушения безопасности в журналах приложения " +"будет достаточно информации для расследования инцидента." + +msgid "" +"For a full list of logging levels, see the :ref:`log_level reference " +"`." +msgstr "" +"Полный список существующих уровней см. в разделе :ref:`справки по log_level " +"`." + +msgid "Logging with journald" +msgstr "Ведение журнала с помощью journald" + +msgid "Tarantool should use ``journald`` for logging." +msgstr "" +"В Tarantool для ведения журнала следует использовать " +"``journald``." diff --git a/locale/ru/LC_MESSAGES/enterprise/audit_log.po b/locale/ru/LC_MESSAGES/enterprise/audit_log.po new file mode 100755 index 0000000000..7f4dd74ebb --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/audit_log.po @@ -0,0 +1,182 @@ + +msgid "Audit module" +msgstr "Журнал аудита" + +msgid "" +"Audit log provides records on the Tarantool DBMS events in the JSON-format. " +"The following event logs are available:" +msgstr "" +"Журнал аудита содержит записи о событиях СУБД Tarantool в формате JSON. " +"Доступны следующие журналы событий:" + +msgid "successful/failed user authentication and authorization," +msgstr "пройденная/непройденная аутентификация и авторизация пользователя," + +msgid "closed connection," +msgstr "закрытое соединение," + +msgid "password change," +msgstr "изменение пароля," + +msgid "creation/deletion of a user/role," +msgstr "создание/удаление пользователя/роли," + +msgid "enabling/disabling a user," +msgstr "включение/отключение пользователя," + +msgid "changing privileges of a user/role." +msgstr "изменение прав пользователя/роли." + +msgid "Log structure" +msgstr "Структура журнала" + +msgid "Key" +msgstr "Ключ" + +msgid "Type" +msgstr "Тип" + +msgid "Description" +msgstr "Описание" + +msgid "Example" +msgstr "Пример" + +msgid "``type``" +msgstr "``type``" + +msgid "string" +msgstr "строка" + +msgid "type of event" +msgstr "тип события" + +msgid "``type_id``" +msgstr "``type_id``" + +msgid "number" +msgstr "число" + +msgid "id of event" +msgstr "идентификатор события" + +msgid "``description``" +msgstr "``description``" + +msgid "description of event" +msgstr "описание события" + +msgid "``time``" +msgstr "``time``" + +msgid "time of event" +msgstr "время события" + +msgid "``peer``" +msgstr "``peer``" + +msgid "remote client" +msgstr "удаленный клиент" + +msgid "``user``" +msgstr "``user``" + +msgid "user" +msgstr "пользователь" + +msgid "``param``" +msgstr "``param``" + +msgid "parameters of event" +msgstr "параметры события" + +msgid "see below" +msgstr "см. ниже" + +msgid "Events description" +msgstr "Описание события" + +msgid "Event" +msgstr "Событие" + +msgid "Parameters" +msgstr "Параметры" + +msgid "user authorized successfully" +msgstr "авторизация пользователя пройдена" + +msgid "``auth_ok``" +msgstr "``auth_ok``" + +msgid "user authorization failed" +msgstr "авторизация пользователя не пройдена" + +msgid "``auth_fail``" +msgstr "``auth_fail``" + +msgid "user logged out or quit the session" +msgstr "пользователь вышел из системы или завершил сеанс" + +msgid "``disconnect``" +msgstr "``disconnect``" + +msgid "" +"failed access attempts to secure data (personal records, details, " +"geolocation, etc.)" +msgstr "" +"неудачные попытки доступа к конфиденциальным данным (личные записи, данные, " +"геолокация и т. д.)" + +msgid "``access_denied``" +msgstr "``access_denied``" + +msgid "creating a user" +msgstr "создание пользователя" + +msgid "``user_create``" +msgstr "``user_create``" + +msgid "dropping a user" +msgstr "удаление пользователя" + +msgid "``user_drop``" +msgstr "``user_drop``" + +msgid "disabling a user" +msgstr "отключение пользователя" + +msgid "``user_disable``" +msgstr "``user_disable``" + +msgid "enabling a user" +msgstr "включение пользователя" + +msgid "``user_enable``" +msgstr "``user_enable``" + +msgid "granting (changing) privileges (roles, profiles, etc.) for the user" +msgstr "выдача (изменение) прав (роли, профили и т.д.) пользователю" + +msgid "``user_priv``" +msgstr "``user_priv``" + +msgid "" +"resetting password of the user (the user making changes should be specified)" +msgstr "" +"сброс пароля пользователя (должен быть указан пользователь, который вносит " +"изменения)" + +msgid "``password_change``" +msgstr "``password_change``" + +msgid "creating a role" +msgstr "создание роли" + +msgid "``role_create``" +msgstr "``role_create``" + +msgid "granting (changing) privileges for the role" +msgstr "выдача (изменение) прав для роли" + +msgid "``role_priv``" +msgstr "``role_priv``" diff --git a/locale/ru/LC_MESSAGES/enterprise/changelog.po b/locale/ru/LC_MESSAGES/enterprise/changelog.po new file mode 100644 index 0000000000..9b8f713fc6 --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/changelog.po @@ -0,0 +1,1408 @@ + +msgid "Changelog" +msgstr "Журнал изменений" + +msgid "Versioning Policy" +msgstr "Политика версионирования" + +msgid "Tarantool Enterprise SDK version consists of two parts:" +msgstr "Версия Tarantool Enterprise SDK состоит из двух частей:" + +msgid "For example: ``2.11.1-0-gc42d9735b-r589``." +msgstr "Например: ``2.11.1-0-gc42d9735b-r589``." + +msgid "" +"``TARANTOOL_BASE_VERSION`` is the Community version which the Enterprise version" +" is based on." +msgstr "" +"``TARANTOOL_BASE_VERSION`` -- это версия Community, на которой основана " +"версия Enterprise." + +msgid "" +"``REVISION`` is the SDK revision. Besides Tarantool itself, it includes " +"examples, templates, and a set of rocks." +msgstr "" +"``REVISION`` -- это версия SDK. Помимо самого Tarantool, в ней содержатся " +"примеры, шаблоны и набор библиотек rocks." + +msgid "r422" +msgstr "r422" + +msgid "" +"Added space-explorer ``v1.1.4`` rock with removed permanency flag and " +"reduced bundle size." +msgstr "" +"Добавлен модуль (rock) space-explorer ``v1.1.4`` без флага permanency и с " +"меньшим размером сборки." + +msgid "r421" +msgstr "r421" + +msgid "Updated base versions:" +msgstr "Обновлены базовые версии:" + +msgid "1.10.11-0-gf0b0e7ecf" +msgstr "1.10.11-0-gf0b0e7ecf" + +msgid "2.7.3-0-gdddf926c3" +msgstr "2.7.3-0-gdddf926c3" + +msgid "2.8.2-0-gfc96d10f5" +msgstr "2.8.2-0-gfc96d10f5" + +msgid "Fixed audit log." +msgstr "Исправлен журнал аудита." + +msgid "r419" +msgstr "r419" + +msgid "Fixed compatibility with Tarantool 2.9:" +msgstr "Исправлена проблема совместимости с Tarantool 2.9:" + +msgid "Added errors 2.2.1." +msgstr "Добавлен модуль ``errors`` 2.2.1." + +msgid "Added cartridge 2.7.1 instead of 2.7.0." +msgstr "Модуль ``cartridge`` 2.7.0 обновлен до версии 2.7.1." + +msgid "r418" +msgstr "r418" + +msgid "" +"Added cartridge 2.7.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``cartridge`` 2.7.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added membership 2.4.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``membership`` 2.4.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added ddl 1.5.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``ddl`` 1.5.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added vshard 0.1.18. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``vshard`` 0.1.18. (`Журнал изменений " +"`__)" + +msgid "" +"Added frontend-core 7.10.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``frontend-core`` 7.10.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added luatest 0.5.4. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``luatest`` 0.5.4. (`Журнал изменений " +"`__)" + +msgid "" +"Added cartridge-extensions 1.1.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``cartridge-extensions`` 1.1.0. (`Журнал изменений " +"`__)" + +msgid "r417" +msgstr "r417" + +msgid "No noticeable changes" +msgstr "Нет заметных изменений." + +msgid "r416" +msgstr "r416" + +msgid "" +"Added metrics 0.10.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``metrics`` 0.10.0. (`Журнал изменений " +"`__)" + +msgid "r415" +msgstr "r415" + +msgid "" +"Updated Cartridge CLI to v2.10.0. (`Changelog " +"`__)" +msgstr "" +"Утилита Cartridge CLI обновлена до v2.10.0. (`Журнал изменений " +"`__)" + +msgid "r414" +msgstr "r414" + +msgid "1.10.10-52-g0df29b137" +msgstr "1.10.10-52-g0df29b137" + +msgid "2.7.2-110-g51248c7d2" +msgstr "2.7.2-110-g51248c7d2" + +msgid "2.8.1-119-g1b0050564" +msgstr "2.8.1-119-g1b0050564" + +msgid "" +"The most notable change is the fix for `gh-4040 " +"`__." +msgstr "" +"Самое важное изменение: исправлена проблема, описанная в тикете `gh-4040 " +"`__." + +msgid "r413" +msgstr "r413" + +msgid "Added migrations 0.4.1." +msgstr "Добавлен модуль ``migrations`` 0.4.1." + +msgid "r412" +msgstr "r412" + +msgid "Added ldap 1.0.2 instead of 1.0.1 with a bugfix." +msgstr "Модуль ldap обновлен с версии 1.0.1 до 1.0.2, исправлены ошибки." + +msgid "r411" +msgstr "r411" + +msgid "" +"Added expirationd 1.1.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``expirationd`` 1.1.0. (`Журнал изменений " +"`__)" + +msgid "r410" +msgstr "r410" + +msgid "" +"Added crud 0.8.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``crud`` 0.8.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added luatest 0.5.3. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``luatest`` 0.5.3. (`Журнал изменений " +"`__)" + +msgid "r409" +msgstr "r409" + +msgid "" +"Added tuple-merger 0.0.2. (`Changelog `__)" +msgstr "" +"Добавлен модуль ``tuple-merger`` 0.0.2. (`Журнал изменений " +"`__)" + +msgid "r408" +msgstr "r408" + +msgid "" +"Added crud 0.7.1 instead of broken 0.7.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``crud`` 0.7.1 вместо неисправной версии 0.7.0. (`Журнал " +"изменений `__)" + +msgid "r407" +msgstr "r407" + +msgid "" +"Added crud 0.7.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``crud`` 0.7.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added tuple-keydef 0.0.2. (`Changelog `__)" +msgstr "" +"Добавлен модуль ``tuple-keydef`` 0.0.2. (`Журнал изменений " +"`__)" + +msgid "" +"Added watchdog 1.1.1 instead of 1.0.1. (`Changelog " +"`__)" +msgstr "" +"Модуль ``watchdog`` обновлен с версии 1.0.1 до 1.1.1. (`Журнал изменений " +"`__)" + +msgid "Added ldap 1.0.1 instead of 1.0.0 with several bugfixes." +msgstr "Модуль ldap обновлен с версии 1.0.0 до 1.0.1, исправлены ошибки." + +msgid "Added space-explorer 1.1.3 with fixed roles reload compatibility." +msgstr "" +"Добавлен модуль ``space-explorer`` 1.1.3 с улучшенной совместимостью при " +"перезагрузке ролей." + +msgid "r406" +msgstr "r406" + +msgid "" +"Added metrics 0.9.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``metrics`` 0.9.0. (`Журнал изменений " +"`__)" + +msgid "r405" +msgstr "r405" + +msgid "" +"Added errors 2.2.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``errors`` 2.2.0. (`Журнал изменений " +"`__)" + +msgid "r404" +msgstr "r404" + +msgid "" +"Added smtp 0.0.6. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``smtp`` 0.0.6. (`Журнал изменений " +"`__)" + +msgid "r403" +msgstr "r403" + +msgid "" +"Updated Cartridge CLI to v2.9.1. (`Changelog " +"`__)" +msgstr "" +"Утилита Cartridge CLI обновлена до v2.9.1. (`Журнал изменений " +"`__)" + +msgid "r402" +msgstr "r402" + +msgid "" +"Added odbc 1.0.1. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``odbc`` 1.0.1. (`Журнал изменений " +"`__)" + +msgid "r401" +msgstr "r401" + +msgid "Added tools for collecting crash artifacts:" +msgstr "Добавлены инструменты для сбора артефактов сбоев:" + +msgid "``tools/gdb.sh``" +msgstr "``tools/gdb.sh``" + +msgid "``tools/tarabrt.sh``" +msgstr "``tools/tarabrt.sh``" + +msgid "Also moved luajit gdb extension:" +msgstr "Также перемещено расширение LuaJIT gdb:" + +msgid "``tools/luajit-gdb.py``" +msgstr "``tools/luajit-gdb.py``" + +msgid "r400" +msgstr "r400" + +msgid "" +"Updated Cartridge CLI to v2.9.0. (`Changelog " +"`__)" +msgstr "" +"Утилита Cartridge CLI обновлена до v2.9.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added cartridge v2.6.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``cartridge`` 2.6.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added ddl v1.4.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``ddl`` v1.4.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added vshard v0.1.17 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``vshard`` v0.1.17. (`Журнал изменений " +"`__)" + +msgid "" +"Added membership v2.3.2 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``membership`` v2.3.2. (`Журнал изменений " +"`__)" + +msgid "" +"Added frontend-core v7.7.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``frontend-core`` 7.7.0. (`Журнал изменений " +"`__)" + +msgid "" +"Added graphql v0.1.1 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``graphql`` v0.1.1. (`Журнал изменений " +"`__)" + +msgid "r399" +msgstr "r399" + +msgid "1.10.10-0-gaea7ae77a" +msgstr "1.10.10-0-gaea7ae77a" + +msgid "2.6.3-0-gcd487a2c5" +msgstr "2.6.3-0-gcd487a2c5" + +msgid "2.7.2-0-g4d8c06890" +msgstr "2.7.2-0-g4d8c06890" + +msgid "2.8.1-0-ge2a1ec0c2" +msgstr "2.8.1-0-ge2a1ec0c2" + +msgid "r398" +msgstr "r398" + +msgid "" +"Added metrics 0.8.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``metrics`` v0.8.0. (`Журнал изменений " +"`__)" + +msgid "r397" +msgstr "r397" + +msgid "" +"Added queue 1.1.0. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``queue`` 1.1.0. (`Журнал изменений " +"`__)" + +msgid "r396" +msgstr "r396" + +msgid "r395" +msgstr "r395" + +msgid "" +"Added task v0.8.4 rock. (:doc:`Changelog " +"`)" +msgstr "" +"Добавлен модуль task v.0.8.4. (:doc:`Журнал изменений " +"`)" + +msgid "r394" +msgstr "r394" + +msgid "" +"Updated Cartridge CLI to v2.8.0. (`Changelog " +"`__)" +msgstr "" +"Утилита Cartridge CLI обновлена до v2.8.0. (`Журнал изменений " +"`__)" + +msgid "r392" +msgstr "r392" + +msgid "" +"Added crud v0.6.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``crud`` v0.6.0. (`Журнал изменений " +"`__)" + +msgid "r391" +msgstr "r391" + +msgid "" +"Added cartridge v2.5.1 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``cartridge`` v2.5.1. (`Журнал изменений " +"`__)" + +msgid "" +"Added cartridge-cli-extensions v1.1.1 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``cartridge-cli-extensions`` v1.1.1. (`Журнал изменений " +"`__)" + +msgid "" +"Added errors v2.1.5 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``errors`` v2.1.5. (`Журнал изменений " +"`__)" + +msgid "" +"Updated Cartridge CLI to v2.7.2. (`Changelog " +"`__)" +msgstr "" +"Утилита Cartridge CLI обновлена до v2.7.2. (`Журнал изменений " +"`__)" + +msgid "r390" +msgstr "r390" + +msgid "Updated 2.6 version to ``2.6.2-124-g2c3b91439``." +msgstr "Базовая версия 2.6 обновлена до ``2.6.2-124-g2c3b91439``." + +msgid "" +"Added metrics v0.7.1. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``metrics`` 0.7.1. (`Журнал изменений " +"`__)" + +msgid "Added watchdog 1.1.0 with a new option to enable core dumps." +msgstr "" +"Добавлен модуль ``watchdog`` 1.1.0 с новой возможностью совершать дампы " +"памяти." + +msgid "Bundle luajit gdb extension." +msgstr "Расширение LuaJIT gdb упаковано." + +msgid "r389" +msgstr "r389" + +msgid "Fixed OpenSSL certificates lookup." +msgstr "Исправлен поиск сертификатов OpenSSL." + +msgid "Fixed smtp module compatibility (tarantool 2.6, 2.7 only)." +msgstr "Исправлена совместимость модуля smtp (только Tarantool 2.6, 2.7)." + +msgid "r388" +msgstr "r388" + +msgid "" +"Updated Cartridge CLI to v2.7.1. (`Changelog " +"`__)" +msgstr "" +"Утилита Cartridge CLI обновлена до v2.7.1. (`Журнал изменений " +"`__)" + +msgid "r387" +msgstr "r387" + +msgid "Added odbc v1.0.0 rock." +msgstr "Добавлен модуль ``odbc`` v1.0.0." + +msgid "r386" +msgstr "r386" + +msgid "" +"Updated Cartridge CLI to v2.7.0. (`Changelog " +"`__)" +msgstr "" +"Утилита Cartridge CLI обновлена до v2.7.0. (`Журнал изменений " +"`__)" + +msgid "r385" +msgstr "r385" + +msgid "" +"Added crud v0.5.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``crud`` v0.5.0. (`Журнал изменений " +"`__)" + +msgid "r384" +msgstr "r384" + +msgid "Added cartridge v2.5.0 rock." +msgstr "Добавлен модуль ``cartridge`` v2.5.0." + +msgid "Added frontend-core v7.5.0 rock (a cartridge dependency)." +msgstr "Добавлен модуль ``frontend-core`` v7.5.0 (зависимость Cartridge)." + +msgid "Updated luarapidxml rock: added v2.0.2, removed v2.0.1." +msgstr "Модуль luarapidxml обновлен с 2.0.1 до 2.0.2." + +msgid "r383" +msgstr "r383" + +msgid "Added luagraphqlparser v0.1.0 rock." +msgstr "Добавлен модуль ``luagraphqlparser`` v0.1.0." + +msgid "Added graphql v0.1.0 rock." +msgstr "Добавлен модуль ``graphql`` v0.1.0." + +msgid "r382" +msgstr "r382" + +msgid "" +"Updated Cartridge CLI to v2.6.0. (`Changelog " +"`__)" +msgstr "" +"Утилита Cartridge CLI обновлена до v2.6.0. (`Журнал изменений " +"`__)" + +msgid "r381" +msgstr "r381" + +msgid "Add ``space-explorer`` v1.1.2 rock with fixed styles." +msgstr "Добавлен модуль ``space-explorer`` v1.1.2 с исправленными стилями." + +msgid "r380" +msgstr "r380" + +msgid "Add ``metrics`` v0.7.0 rock." +msgstr "Добавлен модуль ``metrics`` v0.7.0." + +msgid "r376" +msgstr "r376" + +msgid "Add ``migrations`` v0.4.0 rock." +msgstr "Добавлен модуль ``migrations`` v0.4.0." + +msgid "r375" +msgstr "r375" + +msgid "Update base versions:" +msgstr "Обновлены базовые версии:" + +msgid "1.10.9-0-g720ffdd23" +msgstr "1.10.9-0-g720ffdd23" + +msgid "2.5.3-0-gf93e48013" +msgstr "2.5.3-0-gf93e48013" + +msgid "2.6.2-0-g34d504d7d" +msgstr "2.6.2-0-g34d504d7d" + +msgid "2.7.1-0-g3ac498c9f" +msgstr "2.7.1-0-g3ac498c9f" + +msgid "r372" +msgstr "r372" + +msgid "Add ``frontend-core`` v7.4.0 rock (a Cartridge dependency)." +msgstr "Добавлен модуль ``frontend-core`` v7.4.0 (зависимость Cartridge)." + +msgid "" +"Add ``metrics`` v0.6.1 rock. (`Changelog " +"`__)." +msgstr "" +"Добавлен модуль ``metrics`` v0.6.1. (`Журнал изменений " +"`__)." + +msgid "" +"Add ``kafka`` v1.3.1 rock. (`Changelog " +"`__)." +msgstr "" +"Добавлен модуль ``kafka`` v1.3.1. (`Журнал изменений " +"`__)." + +msgid "r371" +msgstr "r371" + +msgid "" +"Add ``ddl`` v1.3.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``ddl`` v1.3.0. (`Журнал изменений " +"`__)" + +msgid "r370" +msgstr "r370" + +msgid "" +"Add ``cartridge`` v2.4.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``cartridge`` v2.4.0. (`Журнал изменений " +"`__)" + +msgid "" +"Add ``metrics`` v0.6.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``metrics`` v0.6.0. (`Журнал изменений " +"`__)" + +msgid "" +"Update Cartridge CLI to v2.5.0. (`Changelog " +"`__)" +msgstr "" +"Утилита Cartridge CLI обновлена до v2.5.0. (`Журнал изменений " +"`__)" + +msgid "" +"Add ``cartridge-cli-extensions`` 1.1.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``cartridge-cli-extensions`` v1.1.0. (`Журнал изменений " +"`__)" + +msgid "" +"Add ``crud`` 0.4.0 rock. (`Changelog " +"`__)" +msgstr "" +"Добавлен модуль ``crud`` v0.4.0. (`Журнал изменений " +"`__)" + +msgid "r369" +msgstr "r369" + +msgid "Update ``luarapidxml`` rock: added v2.0.1, removed v2.0.0" +msgstr "Модуль ``luarapidxml`` обновлен с версии 2.0.0 до 2.0.1." + +msgid "r368" +msgstr "r368" + +msgid "Update ``migrations`` rock: added v0.3.1" +msgstr "Модуль ``migrations`` обновлен до версии 0.3.1." + +msgid "r366" +msgstr "r366" + +msgid "" +"Update ``kafka`` rock: added v1.3.0, removed v1.2.0 and earlier, critical " +"fix." +msgstr "" +"Модуль ``kafka`` обновлен до версии 1.3.0. Версии 1.2.0 и более ранние " +"удалены, исправлена критическая ошибка." + +msgid "r363" +msgstr "r363" + +msgid "Update ``oracle`` rock: added v1.3.2, removed v1.3.0, critical fix." +msgstr "" +"Модуль ``oracle`` обновлен с версии 1.3.0 до 1.3.2, исправлена критическая " +"ошибка." + +msgid "r360" +msgstr "r360" + +msgid "1.10.8-0-g2f18757b7" +msgstr "1.10.8-0-g2f18757b7" + +msgid "2.4.3-0-g5180d98f1" +msgstr "2.4.3-0-g5180d98f1" + +msgid "2.5.2-0-g05730d326" +msgstr "2.5.2-0-g05730d326" + +msgid "2.6.1-0-gcfe0d1a55" +msgstr "2.6.1-0-gcfe0d1a55" + +msgid "1.10.6-16, 2.2.2-56, 2.3.1-143 and 2.4.2-8" +msgstr "1.10.6-16, 2.2.2-56, 2.3.1-143 и 2.4.2-8" + +msgid "Changed:" +msgstr "Изменения:" + +msgid "**Tarantool 1.10** version updated to 1.10.6-16-g4764acd68" +msgstr "Версия **Tarantool 1.10** обновлена до 1.10.6-16-g4764acd68." + +msgid "**Tarantool 2.2** version updated to 2.2.2-56-g62efd9cf6" +msgstr "Версия **Tarantool 2.2** обновлена до 2.2.2-56-g62efd9cf6." + +msgid "**Tarantool 2.3** version (2.3.1-143-g8124538b8) added" +msgstr "Добавлена версия **Tarantool 2.3** (2.3.1-143-g8124538b8)." + +msgid "**Tarantool 2.4** version (2.4.2-8-ge56224b) added" +msgstr "Добавлена версия **Tarantool 2.4** (2.4.2-8-ge56224b)." + +msgid "Update ``cartridge-cli`` to v2.4.0" +msgstr "Утилита ``cartridge-cli`` обновлена до v2.4.0." + +msgid "All ``cartridge-cli`` rocks are removed" +msgstr "Удалены все модули ``cartridge-cli``." + +msgid "Update ``vshard-zookeeper`` rock" +msgstr "Обновлен модуль ``vshard-zookeeper``." + +msgid "Added:" +msgstr "Добавлено:" + +msgid "Add ``kafka`` rock v1.2.0" +msgstr "Модуль ``kafka`` v1.2.0." + +msgid "Add ``task`` rock v0.8.3" +msgstr "Модуль ``task`` v0.8.3." + +msgid "Add ``kafka`` rock v1.1.0" +msgstr "Модуль ``kafka`` v1.1.0." + +msgid "Add ``vshard`` rock v0.1.15" +msgstr "Модуль ``vshard`` v0.1.15." + +msgid "Add ``odbc`` rock v0.5.0, v0.6.4, v0.7.2, v0.7.3" +msgstr "Модуль ``odbc`` v0.5.0, v0.6.4, v0.7.2, v0.7.3." + +msgid "Add ``cartridge`` rock v2.1.2" +msgstr "Модуль ``cartridge`` v2.1.2." + +msgid "Add ``cartridge`` rock v2.2.1" +msgstr "Модуль ``cartridge`` v2.2.1." + +msgid "Add ``cartridge`` rock v2.3.0" +msgstr "Модуль ``cartridge`` v2.3.0." + +msgid "Add ``icu-date`` rock v1.3.3" +msgstr "Модуль ``icu-date`` v1.3.3." + +msgid "Add ``ddl`` rock v1.1.0" +msgstr "Модуль ``ddl`` v1.1.0." + +msgid "Add ``errors`` rock v2.1.3" +msgstr "Модуль ``errors`` v2.1.3." + +msgid "Add ``errors`` rock v2.1.4" +msgstr "Модуль ``errors`` v2.1.4." + +msgid "Add ``frontend-core`` rock v6.5.1" +msgstr "Модуль ``frontend-core`` v6.5.1." + +msgid "Add ``frontend-core`` rock v7.1.0" +msgstr "Модуль ``frontend-core`` v7.1.0." + +msgid "Add ``luatest`` rock v0.5.2" +msgstr "Модуль ``luatest`` v0.5.2." + +msgid "Add ``metrics`` rock v0.3.0" +msgstr "Модуль ``metrics`` v0.3.0." + +msgid "Add ``metrics`` rock v0.4.0" +msgstr "Модуль ``metrics`` v0.4.0." + +msgid "Add ``metrics`` rock v0.5.0" +msgstr "Модуль ``metrics`` v0.5.0." + +msgid "Add ``http`` rock v2.1.0" +msgstr "Модуль ``http`` v2.1.0." + +msgid "Add ``luacheck`` rock v0.26.0" +msgstr "Модуль ``luacheck`` v0.26.0." + +msgid "Add ``luacov-reporters`` rock v0.1.0 -- collection of LuaCov reporters." +msgstr "Модуль ``luacov-reporters`` v0.1.0 -- генераторы отчетов LuaCov." + +msgid "Add ``migrations`` rock v0.3.0" +msgstr "Модуль ``migrations`` v0.3.0." + +msgid "Add ``checks`` rock v3.1.0" +msgstr "Модуль ``checks`` v3.1.0." + +msgid "Add ``crud`` rock v0.3.0" +msgstr "Модуль ``crud`` v0.3.0." + +msgid "Add ``cartridge-cli-extensions`` rock v1.0.0" +msgstr "Модуль ``cartridge-cli-extensions`` v1.0.0." + +msgid "Removed:" +msgstr "Удалено:" + +msgid "Remove ``quickfix`` rock v1.0.0" +msgstr "Модуль ``quickfix`` v1.0.0." + +msgid "1.10.5-12 / 2.1.3-1 / 2.2.2-3" +msgstr "1.10.5-12 / 2.1.3-1 / 2.2.2-3" + +msgid "Release date: 2020-02-07" +msgstr "Дата релиза: 2020-02-07" + +msgid "" +"Since this release, we also deliver Enterprise bundles based on Tarantool " +"Community version 2.2. It supports decimals, multikey indexes, functional " +"indexes, ``key_def`` module, partial core dumps, tuple format over " +"``netbox``, parallel applier, etc." +msgstr "" +"Начиная с этого релиза, мы выпускаем сборки Enterprise на основе Tarantool " +"Community 2.2. В этих сборках поддерживаются числовой тип decimal, " +"многозначные (multikey) индексы, функциональные индексы, модуль ``key_def``," +" частичные дампы памяти, передача формата кортежей по ``netbox``, " +"параллельный applier и т. д." + +msgid "The underlying Tarantool Community version upgraded to:" +msgstr "Базовая версия Tarantool Community обновлена до:" + +msgid "1.10.5-15-gcfd9d54ae" +msgstr "1.10.5-15-gcfd9d54ae" + +msgid "2.1.3-16-g7dd5910" +msgstr "2.1.3-16-g7dd5910" + +msgid "2.2.2-29-g5c8a435df" +msgstr "2.2.2-29-g5c8a435df" + +msgid "" +"``cartridge-cli`` module v1.4.0 with local cluster start, colored logs, " +"packer for docker images and dev packages, updated templates, and many " +"smaller improvements." +msgstr "" +"Модуль ``cartridge-cli`` v1.4.0: локальный запуск кластера, цветные логи, " +"упаковка docker-образов и dev-пакетов, обновленные шаблоны и многое другое." + +msgid "``cartridge-cli`` module v1.3.2." +msgstr "Модуль ``cartridge-cli`` v1.3.2." + +msgid "" +"``cartridge`` module v2.0.1 with dramatic improvements in failover, cluster-" +"wide DDL and configuration editor, and many smaller improvements." +msgstr "" +"Модуль ``cartridge`` v2.0.1: значительные улучшения в работе восстановления " +"после сбоев, общекластерные DDL-схема и редактор конфигурации, а также много" +" мелких изменений." + +msgid "" +"``task`` module v0.7.1 with sharded mode support and the ability to define " +"task arguments, default configuration, recurrence strategy and anonymous " +"tasks." +msgstr "" +"Модуль ``task`` v0.7.1: поддержка режима шардирования, возможность указывать" +" аргументы задач, конфигурацию по умолчанию, стратегию повторов и анонимные " +"задачи." + +msgid "" +"``luatest`` module v0.5.0 with automatic coverage builds, colored logs, and " +"many smaller improvements." +msgstr "" +"Модуль ``luatest`` v0.5.0: сборки с автоматическим покрытием тестами, " +"цветные логи и много мелких улучшений." + +msgid "``luatest`` module v0.4.0." +msgstr "Модуль ``luatest`` v0.4.0." + +msgid "" +"``ddl`` module v1.0.0, a cluster-wide DDL schema used in ``cartridge`` " +"v2.0.0." +msgstr "" +"Модуль ``ddl`` v1.0.0: общекластерная DDL-схема, которая используется в " +"``cartridge`` v2.0.0." + +msgid "``luacov`` module v0.13.0, a code coverage analyzer for Lua." +msgstr "Модуль ``luacov`` v0.13.0: анализатор покрытия кода для Lua." + +msgid "``odbc`` module v0.4.1." +msgstr "Модуль ``odbc`` v0.4.1." + +msgid "``avro-schema`` module v3.0.4." +msgstr "Модуль ``avro-schema`` v3.0.4." + +msgid "``vshard`` module v0.1.14." +msgstr "Модуль ``vshard`` v0.1.14." + +msgid "``tracing`` module v0.1.1." +msgstr "Модуль ``tracing`` v0.1.1." + +msgid "``oracle`` module v1.3.0." +msgstr "Модуль ``oracle`` v1.3.0." + +msgid "``watchdog`` module v1.0.2." +msgstr "Модуль ``watchdog`` v1.0.2." + +msgid "``metrics`` module v0.1.7 and v0.1.8." +msgstr "Модуль ``metrics`` v0.1.7 и v0.1.8." + +msgid "``queue`` module v1.0.5." +msgstr "Модуль ``queue`` v1.0.5." + +msgid "``membership`` module v2.2.0." +msgstr "Модуль ``membership`` v2.2.0." + +msgid "1.10.4-1 / 2.1.2-109" +msgstr "1.10.4-1 / 2.1.2-109" + +msgid "Release date: 2019-10-23" +msgstr "Дата релиза: 2019-10-23" + +msgid "Major news:" +msgstr "Главные новости:" + +msgid "" +"The framework for developing cluster applications (:doc:`Tarantool Cartridge" +" `) has gone open source as two modules: " +":doc:`cartridge ` (successor of ``cluster`` " +"rock) and :doc:`cartridge-cli " +"` (successor of " +"``tarantoolapp`` utility)." +msgstr "" +"Фреймворк для разработки кластерных приложений (:doc:`Tarantool Cartridge " +"`) стал частью Tarantool с открытым кодом. " +"Теперь Cartridge представлен двумя модулями: :doc:`cartridge " +"` (вместо модуля ``cluster``) и " +":doc:`cartridge-cli ` (вместо " +"утилиты ``tarantoolapp``)." + +msgid "" +"We added another open source module named `luacheck " +"`_ -- a static analyzer and linter " +"for Lua, preconfigured for Tarantool." +msgstr "" +"Добавлен новый открытый модуль `luacheck " +"`__ -- статический анализатор кода " +"для Lua, предконфигурированный под Tarantool." + +msgid "" +"We added :doc:`documentation ` for all closed source modules." +msgstr "" +"Для всех модулей с закрытым кодом добавлена :doc:`документация `." + +msgid "Meet the redesigned administrative web interface!" +msgstr "Обновлен дизайн веб-интерфейса администратора." + +msgid "1.10.4-21-g9349237" +msgstr "1.10.4-21-g9349237" + +msgid "2.1.2-206-g2499a73" +msgstr "2.1.2-206-g2499a73" + +msgid "``vshard-zookeeper`` module updated." +msgstr "Обновлен модуль ``vshard-zookeeper``." + +msgid "``quickfix`` module v1.0.0." +msgstr "Модуль ``quickfix`` v1.0.0." + +msgid "``luarapidxml`` module v2.0.0." +msgstr "Модуль ``luarapidxml`` v2.0.0." + +msgid "``cartridge`` module v1.0.0, successor of ``cluster`` module." +msgstr "Модуль ``cartridge`` v1.0.0 (вместо модуля ``cluster``)." + +msgid "" +"``cartridge-cli`` module v1.0.0-1, successor of ``tarantoolapp`` utility." +msgstr "Модуль ``cartridge-cli`` v1.0.0-1 (вместо утилиты ``tarantoolapp``)." + +msgid "``task`` module v0.4.0." +msgstr "Модуль ``task`` v0.4.0." + +msgid "" +"``membership`` module v2.1.2 with improved stability on large clusters." +msgstr "" +"Модуль ``membership`` v2.1.2, улучшение стабильности на больших кластерах." + +msgid "``membership`` module v2.1.4." +msgstr "Модуль ``membership`` v2.1.4." + +msgid "``odbc`` module v0.3.0." +msgstr "Модуль ``odbc`` v0.3.0." + +msgid "``cluster`` module v0.10.0." +msgstr "Модуль ``cluster`` v0.10.0." + +msgid "``task`` module v0.3.0." +msgstr "Модуль ``task`` v0.3.0." + +msgid "``odbc`` module v0.4.0." +msgstr "Модуль ``odbc`` v0.4.0." + +msgid "``kafka`` module v1.0.2." +msgstr "Модуль ``kafka`` v1.0.2." + +msgid "``frontend-core`` module v6.0.1." +msgstr "Модуль ``frontend-core`` v6.0.1." + +msgid "``space-explorer`` module v1.1.0." +msgstr "Модуль ``space-explorer`` v1.1.0." + +msgid "``oracle`` module v1.2.2." +msgstr "Модуль ``oracle`` v1.2.2." + +msgid "``http`` module v1.1.0." +msgstr "Модуль ``http`` v1.1.0." + +msgid "``avro-schema`` module v3.0.3." +msgstr "Модуль ``avro-schema`` v3.0.3." + +msgid "``vshard`` module v0.1.12." +msgstr "Модуль ``vshard`` v0.1.12." + +msgid "``icu-date`` module v1.3.1." +msgstr "Модуль ``icu-date`` v1.3.1." + +msgid "``luatest`` module v0.2.2." +msgstr "Модуль ``luatest`` v0.2.2." + +msgid "``metrics`` module v0.1.6." +msgstr "Модуль ``metrics`` v0.1.6." + +msgid "``queue`` module v1.0.4." +msgstr "Модуль ``queue`` v1.0.4." + +msgid "``tarantoolapp`` utility." +msgstr "Утилита ``tarantoolapp``." + +msgid "1.10.3-71 / 2.1.2-63" +msgstr "1.10.3-71 / 2.1.2-63" + +msgid "Release date: 2019-07-12" +msgstr "Дата релиза: 2019-07-12" + +msgid "1.10.3-89-g412e943" +msgstr "1.10.3-89-g412e943" + +msgid "2.1.2-127-gcb2f5e4" +msgstr "2.1.2-127-gcb2f5e4" + +msgid "" +"Unit / integration test templates for a Tarantool cluster; available via " +"``tarantoolctl rocks test``." +msgstr "" +"Шаблоны юнит-тестов и интеграционных тестов для кластера Tarantool, " +"доступные через ``tarantoolctl rocks test``." + +msgid "" +"``.tarantoolapp.ignore`` files to exclude specific resources from build." +msgstr "" +"При сборке проекта теперь можно исключать ресурсы с помощью файлов " +"``.tarantoolapp.ignore``." + +msgid "``kafka`` module v1.0.1 (Apache Kafka connector for Tarantool)." +msgstr "Модуль ``kafka`` v1.0.1 (коннектор Apache Kafka для Tarantool)." + +msgid "" +"``tracing`` module v0.1.0 (for debugging performance issues in applications;" +" based on OpenTracing/Zipkin)." +msgstr "" +"Модуль ``tracing`` v0.1.0 для отладки производительности приложения. " +"Реализован на базе OpenTracing/Zipkin." + +msgid "" +"``task`` module v0.2.0 (for managing background tasks in cluster " +"applications)." +msgstr "" +"Модуль ``task`` v0.2.0 для работы с фоновыми задачами в кластерных " +"приложениях." + +msgid "``odbc`` module v0.1.0 (outgoing ODBC connector for Tarantool)." +msgstr "Модуль ``odbc`` v0.1.0 (исходящий ODBC-коннектор для Tarantool)." + +msgid "``luatest`` module v0.2.0 (testing framework for Tarantool)." +msgstr "Модуль ``luatest`` v0.2.0 (тестовый фреймворк для Tarantool)." + +msgid "``checks`` module v3.0.1." +msgstr "Модуль ``checks`` v3.0.1." + +msgid "``errors`` module v2.1.1." +msgstr "Модуль ``errors`` v2.1.1." + +msgid "``frontend-core`` module v5.0.2." +msgstr "Модуль ``frontend-core`` v5.0.2." + +msgid "``metrics`` module v0.1.5." +msgstr "Модуль ``metrics`` v0.1.5." + +msgid "``oracle`` module v1.1.6." +msgstr "Модуль ``oracle`` v1.1.6." + +msgid "``cluster`` module v0.9.2 with new features:" +msgstr "Модуль ``cluster`` v0.9.2 с новыми функциональными возможностями:" + +msgid "" +"**Users**, a new tab in the web interface for managing cluster admin users." +msgstr "" +"**Users**, новая вкладка веб-интерфейса для управления пользователями-" +"администраторами кластера." + +msgid "" +"Multiple isolated groups for storage replica sets in a single cluster, e.g. " +"``hot`` or ``cold`` groups to process hot and cold data independently." +msgstr "" +"Для наборов реплик storage в одном кластере можно задавать группы (например," +" группы ``hot`` и ``cold`` для независимой обработки горячих и холодных " +"данных)." + +msgid "Integration tests helpers for ``luatest``." +msgstr "Вспомогательные утилиты для интеграционных тестов на ``luatest``." + +msgid "``cluster`` module v0.2.0, v0.3.0." +msgstr "Модуль ``cluster`` v0.2.0, v0.3.0." + +msgid "``oracle`` module v1.0.0, v1.1.0." +msgstr "Модуль ``oracle`` v1.0.0, v1.1.0." + +msgid "``vshard`` module v0.1.5, v0.1.6." +msgstr "Модуль ``vshard`` v0.1.5, v0.1.6." + +msgid "1.10.3-29 / 2.1.2-21" +msgstr "1.10.3-29 / 2.1.2-21" + +msgid "Release date: 2019-05-28" +msgstr "Дата релиза: 2019-05-28" + +msgid "" +"Since this release, we also deliver Enterprise bundles based on Tarantool " +"Community version 2.1." +msgstr "" +"Начиная с этого релиза, мы выпускаем сборки Enterprise на основе Tarantool " +"Community 2.1." + +msgid "2.1.2-85-g6b01fa0" +msgstr "2.1.2-85-g6b01fa0" + +msgid "1.10.3-57-gd2efb0d" +msgstr "1.10.3-57-gd2efb0d" + +msgid "``tarantoolapp pack`` now puts VERSION file inside of packed project." +msgstr "" +"Команда ``tarantoolapp pack`` теперь добавляет в упакованный проект файл " +"VERSION." + +msgid "Ability to set up logging level per route." +msgstr "" +"Возможность задавать уровень детализации записей журнала для каждого " +"маршрута." + +msgid "" +"``http`` module v0.1.6 with a new feature: setting up logging level per " +"route." +msgstr "" +"Модуль ``http`` v0.1.6 с новой возможностью определять уровень детализации " +"записей журнала для каждого маршрута." + +msgid "``space-explorer`` module v1.0.2." +msgstr "Модуль ``space-explorer`` v1.0.2." + +msgid "``cron-parser`` module v1.0.0." +msgstr "Модуль ``cron-parser`` v1.0.0." + +msgid "``argon2`` module v3.0.1 with PCI DSS grade hashing algorithms." +msgstr "Модуль ``argon2`` v3.0.1 с алгоритмами хеширования класса PCI DSS." + +msgid "``metrics`` module v0.1.3." +msgstr "Модуль ``metrics`` v0.1.3." + +msgid "``vshard`` module v0.1.9" +msgstr "Модуль ``vshard`` v0.1.9." + +msgid "``oracle`` module v1.1.5." +msgstr "Модуль ``oracle`` v1.1.5." + +msgid "``frontend-core`` module v5.0.0, v5.0.1" +msgstr "Модуль ``frontend-core`` v5.0.0, v5.0.1." + +msgid "``cluster`` module v0.8.0 with some bug fixes and new features:" +msgstr "" +"Модуль ``cluster`` v0.8.0 с исправленными ошибками и новыми возможностями:" + +msgid "role dependencies;" +msgstr "зависимостями для ролей;" + +msgid "cluster cookies;" +msgstr "кластерными cookies;" + +msgid "labels for servers." +msgstr "метками для серверов." + +msgid "1.10.3-5" +msgstr "1.10.3-5" + +msgid "Release date: 2019-04-05" +msgstr "Дата релиза: 2019-04-05" + +msgid "" +"The underlying Tarantool Community version upgraded to 1.10.3-6-gfbf53b9." +msgstr "Базовая версия Tarantool Community обновлена до 1.10.3-6-gfbf53b9." + +msgid "The following features added:" +msgstr "Добавлены следующие функциональные возможности:" + +msgid "Failover priority configuration via the web interface." +msgstr "Настройка приоритета восстановления после сбоев через веб-интерфейс." + +msgid "RPC module (remote calls between cluster instances)." +msgstr "Модуль RPC (удаленные вызовы между экземплярами кластера)." + +msgid "Space explorer via the web interface." +msgstr "Space-explorer в веб-интерфейсе." + +msgid "OpenLDAP client for Tarantool." +msgstr "Клиент OpenLDAP для Tarantool." + +msgid "" +"Instance restart now triggers configuration validation before the roles " +"initialization." +msgstr "" +"При перезапуске экземпляра конфигурация теперь проверяется до инициализации " +"ролей." + +msgid "The web interface design has been updated." +msgstr "Обновлен дизайн веб-интерфейса." + +msgid "1.10.2-41" +msgstr "1.10.2-41" + +msgid "Release date: 2019-02-08" +msgstr "Дата релиза: 2019-02-08" + +msgid "" +"The underlying Tarantool Community version has been upgraded to " +"1.10.2-131-g6f96bfe." +msgstr "Базовая версия Tarantool Community обновлена до 1.10.2-131-g6f96bfe." + +msgid "" +"The cluster template has been updated to allow the application to operate " +"across several hosts (virtual machines)." +msgstr "" +"Обновлен шаблон кластера, чтобы приложение могло работать на нескольких " +"хостах (виртуальных машинах)." + +msgid "" +"The following closed-source modules of latest versions have been added: " +"``queue``, ``front``, ``errors``, ``membership``, ``cluster``, and " +"``oracle``. These rocks include:" +msgstr "" +"Добавлены последние версии следующих модулей с закрытым исходным кодом: " +"``queue``, ``front``, ``errors``, ``membership``, ``cluster`` и ``oracle``. " +"Эти модули rocks включают в себя:" + +msgid "a new front-end core with cosmetic changes;" +msgstr "новое ядро фронтенда с косметическими изменениями;" + +msgid "active master indication during failover;" +msgstr "индикатор активного мастера во время восстановления после сбоев;" + +msgid "" +"the ability to disable the ``vshard-storage`` role after the end of the " +"rebalancing process;" +msgstr "" +"возможность отключить роль ``vshard-storage`` по окончании процесса " +"балансировки;" + +msgid "dependencies updates and minor improvements." +msgstr "обновление зависимостей и незначительные улучшения." + +msgid "1.10.2-15" +msgstr "1.10.2-15" + +msgid "Release date: 2018-12-13" +msgstr "Дата релиза: 2018-12-13" + +msgid "" +"The underlying Tarantool Community version has been upgraded to " +"1.10.2-84-g19d471bd4." +msgstr "Базовая версия Tarantool Community обновлена до 1.10.2-84-g19d471bd4." + +msgid "The ``checks`` module has been updated in the bundle." +msgstr "Обновлена сборка модуля ``checks``." + +msgid "" +"The custom (user-defined) cluster roles API has been added to the " +"``cluster`` module." +msgstr "" +"В модуль ``cluster`` добавлены пользовательские API для кластерных ролей." + +msgid "The ``vshard`` replica set's weight parameter is now supported." +msgstr "Добавлена поддержка параметра веса для наборов реплик в ``vshard``." + +msgid "1.10.2-4" +msgstr "1.10.2-4" + +msgid "Release date: 2018-10-31" +msgstr "Дата релиза: 2018-10-31" + +msgid "" +"Sample applications demonstrating how to run Tarantool in Docker and a " +"write-through cache to PostgreSQL have been added." +msgstr "" +"Добавлены примеры приложений, демонстрирующих запуск Tarantool в Docker и " +"использование кэша со сквозной записью для PostgreSQL." + +msgid "" +"The abilities to manually switch the replica set's master and enable " +"automatic failover have been added to Web interface." +msgstr "" +"В веб-интерфейсе добавлена возможность переключать мастер в наборе реплик " +"вручную, а также включить автоматическое восстановление после сбоев." + +msgid "" +"The ``tarantoolapp`` utility that helps set up a development environment and" +" pack the application in an environment-independent way has been added." +msgstr "" +"Добавлена утилита ``tarantoolapp``, которая помогает настроить среду " +"разработки и упаковать приложение независимо от среды разработки." + +msgid "1.10.1-29" +msgstr "1.10.1-29" + +msgid "Release date: 2018-10-04" +msgstr "Дата релиза: 2018-10-04" + +msgid "" +"The sample application is now cluster-based and the cluster is orchestrated " +"via a Web interface." +msgstr "" +"Приложение-пример теперь кластерное, а оркестрация кластера выполняется " +"через веб-интерфейс." + +msgid "" +"Tarantool Enterprise release comes in an archive that includes an offline " +"rocks repository from which you can install all necessary modules." +msgstr "" +"Релиз Tarantool Enterprise представляет собой архив. Он включает в себя " +"автономный репозиторий, из которого можно установить все необходимые модули." + +msgid "" +"Oracle connector is now included in the rocks repository. With this package," +" Lua applications can access Oracle databases." +msgstr "" +"В репозиторий с модулями добавлен коннектор для Oracle. Теперь Lua-" +"приложения могут получать доступ к базам данных Oracle." + +msgid "1.10.1" +msgstr "1.10.1" + +msgid "Release date: 2018-04-09" +msgstr "Дата релиза: 2018-04-09" + +msgid "" +"The Tarantool build is now static: all dependencies are linked into a static" +" binary. This simplifies deploy of Tarantool in the Linux environment." +msgstr "" +"Теперь у Tarantool статическая сборка: все зависимости скомпонованы в " +"статический бинарный файл. Это упрощает развертывание Tarantool в среде " +"Linux." + +msgid "" +"The underlying Tarantool Community version has been upgraded to 1.10.1. For " +"all new features and bugfixes of the Community version please refer to " +"https://github.com/tarantool/tarantool/releases." +msgstr "" +"Базовая версия Tarantool Community обновлена до 1.10.1. Описание новых " +"возможностей и исправленных ошибок в версии Community доступно по ссылке " +"https://github.com/tarantool/tarantool/releases." + +msgid "" +"The modules required for integration with ZooKeeper and orchestrator are now" +" deprecated and no longer supported." +msgstr "" +"Модули, необходимые для интеграции с ZooKeeper и orchestrator, объявлены " +"устаревшими и больше не поддерживаются." diff --git a/locale/ru/LC_MESSAGES/enterprise/deprecated.po b/locale/ru/LC_MESSAGES/enterprise/deprecated.po new file mode 100755 index 0000000000..05efef6b2f --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/deprecated.po @@ -0,0 +1,146 @@ + +msgid "Deprecated features" +msgstr "Устаревшие функции" + +msgid "" +"The ZooKeeper along with ``orchestrator`` are no longer supported. However, " +"they still can be used, if necessary." +msgstr "" +"Прекращена поддержка ZooKeeper и ``orchestrator``. Тем не менее, при " +"необходимости их можно использовать." + +msgid "The following sections describe the corresponding functionality." +msgstr "" +"В следующих разделах описаны соответствующие функциональные возможности." + +msgid "Controlling the cluster via API" +msgstr "Управление кластером по API" + +msgid "" +"To control the cluster, use the ``orchestrator`` included in the delivery " +"package. The ``orchestrator`` uses ZooKeeper to store and distribute the " +"configuration. The ``orchestrator`` provides the REST API for controlling " +"the cluster. Configurations in the ZooKeeper are changed as a result of " +"calling the ``orchestrator``'s API-functions, which in turn leads to changes" +" in configurations of the Tarantool nodes." +msgstr "" +"Для управления кластером используйте оркестратор ``orchestrator``, " +"включенный в комплект поставки. ``orchestrator`` использует ZooKeeper для " +"хранения и передачи конфигурации. Для управления кластером в " +"``orchestrator`` есть REST API. Изменение конфигураций в ZooKeeper " +"осуществляется в результате вызова API-функций из ``orchestrator``, что, в " +"свою очередь, приводит к изменениям конфигурации узлов Tarantool." + +msgid "" +"We recommend using a **curl** command line interface to call the API-" +"functions of the ``orchestrator``." +msgstr "" +"Мы рекомендуем использовать интерфейс командной строки **curl** для вызова " +"API-функций из ``orchestrator``." + +msgid "" +"The following example shows how to register a new availability zone (DC):" +msgstr "" +"В следующем примере показано, как зарегистрировать новую зону доступности " +"(DC):" + +msgid "" +"To check whether the DC registration was successful, try the following " +"instruction. It retrieves the list of all registered nodes in the JSON " +"format:" +msgstr "" +"Чтобы проверить, была ли выполнена регистрация DC, попробуйте использовать " +"следующую команду. Результатом будет список всех зарегистрированных узлов в " +"формате JSON:" + +msgid "" +"To apply the new configuration directly on the Tarantool nodes, increase the" +" configuration version number after calling the API function. To do this, " +"use the POST request to ``/api/v1/version``:" +msgstr "" +"Чтобы применить новую конфигурацию непосредственно к узлам Tarantool, " +"увеличьте номер версии конфигурации после вызова API-функции. Для этого " +"используйте запрос POST к ``/api/v1/version``:" + +msgid "Altogether, to update the cluster configuration:" +msgstr "В целом, чтобы обновить конфигурацию кластера:" + +msgid "Call the ``POST/PUT`` method of the ``orchestrator``." +msgstr "Вызовите метод ``POST/PUT`` в ``orchestrator``." + +msgid "" +"As a result, the ZooKeeper nodes are updated, and a subsequent update of the" +" Tarantool nodes is initiated." +msgstr "" +"В результате будут обновлены узлы в ZooKeeper, а также будет инициировано " +"последующее обновление узлов Tarantool." + +msgid "" +"Update the configuration version using the ``POST`` request to " +"``/api/v1/version``." +msgstr "" +"Обновите версию конфигурации, используя запрос ``POST`` к " +"``/api/v1/version``." + +msgid "As a result, the configuration is applied to the Tarantool nodes." +msgstr "В результате конфигурация применится к узлам Tarantool." + +msgid "" +"See the :ref:`Orchestrator API reference ` for the detailed orchestrator " +"API." +msgstr "" +"Для получения дополнительной информации об API оркестратора см. " +":ref:`Справочник по Orchestrator API `." + +msgid "Setting up geo redundancy" +msgstr "Настройка геодублирования" + +msgid "" +"Logically, cluster nodes can belong to some availability zone. Physically, " +"an availability zone is a separate DC, or a rack inside a DC. You can " +"specify a matrix of weights (distances) for the availability zones." +msgstr "" +"По логике узлы кластера могут относиться к некоторой зоне доступности. " +"Физически же зона доступности -- это отдельный DC или стойка внутри DC. " +"Можно задать матрицу весов (расстояний) для зон доступности." + +msgid "" +"New zones are added by calling a corresponding API method of the " +"orchestrator." +msgstr "" +"Новые зоны добавляются путем вызова соответствующего метода API " +"оркестратора." + +msgid "" +"By default, the matrix of weights (distances) for the zones is not " +"configured, and geo-redundancy for such configurations works as follows:" +msgstr "" +"По умолчанию матрица весов (расстояний) для зон не настроена, а " +"геодублирование для таких конфигураций работает следующим образом:" + +msgid "Data is always written to the master." +msgstr "Данные всегда записываются на мастер." + +msgid "If the master is available, then it is used for reading." +msgstr "Если мастер доступен, то он используется для чтения." + +msgid "" +"If the master is unavailable, then any available replica is used for " +"reading." +msgstr "" +"Если мастер недоступен, то любая доступная реплика используется для чтения." + +msgid "" +"When you define a matrix of weights (distances) by calling " +"``/api/v1/zones/weights``, the automatic scale-out system of the Tarantool " +"DBMS finds a replica which is the closest to the specified router in terms " +"of weights, and starts using this replica for reading. If this replica is " +"not available, then the next nearest replica is selected, taking into " +"account the distances specified in the configuration." +msgstr "" +"Когда вы задаете матрицу весов (расстояний), вызывая " +"``/api/v1/zones/weights``, система автоматического масштабирования СУБД " +"Tarantool находит реплику, которая ближе всех к указанному роутеру по весам," +" и начинает использовать эту реплику для чтения. Если эта реплика " +"недоступна, то выбирается следующая ближайшая реплика с учетом расстояний, " +"указанных в конфигурации." diff --git a/locale/ru/LC_MESSAGES/enterprise/deprecated/orchestrator_api.po b/locale/ru/LC_MESSAGES/enterprise/deprecated/orchestrator_api.po new file mode 100755 index 0000000000..e1071a4e97 --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/deprecated/orchestrator_api.po @@ -0,0 +1,279 @@ + +msgid "Orchestrator API reference" +msgstr "Справочник по Orchestrator API" + +msgid "Configuring the zones" +msgstr "Configuring the zones" + +msgid ":ref:`POST /api/v1/zone `" +msgstr ":ref:`POST /api/v1/zone `" + +msgid ":ref:`GET /api/v1/zone/ `" +msgstr ":ref:`GET /api/v1/zone/ `" + +msgid ":ref:`PUT /api/v1/zone/ `" +msgstr ":ref:`PUT /api/v1/zone/ `" + +msgid ":ref:`DELETE /api/v1/zone/ `" +msgstr ":ref:`DELETE /api/v1/zone/ `" + +msgid "Create a new zone." +msgstr "Создание новой зоны." + +msgid "**Request**" +msgstr "**Запрос**" + +msgid "**Response**" +msgstr "**Ответ**" + +msgid "**Potential errors**" +msgstr "**Возможные ошибки**" + +msgid "``zone_exists`` - the specified zone already exists" +msgstr "``zone_exists`` -- указанная зона уже существует" + +msgid "Return information on the specified zone or on all the zones." +msgstr "Возврат информации об указанной зоне или обо всех зонах." + +msgid "``zone_not_found`` - the specified zone is not found" +msgstr "``zone_not_found`` -- указанная зона не обнаружена" + +msgid "Update information on the zone." +msgstr "Обновление информации о зоне." + +msgid "**Body**" +msgstr "**Тело**" + +msgid "Delete a zone if it doesn’t store any nodes." +msgstr "Удаление зоны, если в ней нет узлов." + +msgid "``zone_in_use`` - the specified zone stores at least one node" +msgstr "``zone_in_use`` -- в указанной зоне есть хотя бы один узел" + +msgid "Configuring the zone weights" +msgstr "Настройка веса зоны" + +msgid ":ref:`GET /api/v1/zones/weights `" +msgstr ":ref:`GET /api/v1/zones/weights `" + +msgid ":ref:`POST /api/v1/zones/weights `" +msgstr ":ref:`POST /api/v1/zones/weights `" + +msgid "Set the zone weights configuration." +msgstr "Конфигурация веса зоны." + +msgid "``zones_weights_error`` - configuration error" +msgstr "``zones_weights_error`` -- ошибка конфигурации" + +msgid "Return the zone weights configuration." +msgstr "Возврат конфигурации веса зоны." + +msgid "Configuring registry" +msgstr "Настройка реестра" + +msgid ":ref:`GET /api/v1/registry/nodes/new `" +msgstr ":ref:`GET /api/v1/registry/nodes/new `" + +msgid "" +":ref:`POST /api/v1/registry/node `" +msgstr "" +":ref:`POST /api/v1/registry/node `" + +msgid ":ref:`PUT /api/v1/registry/node/ `" +msgstr ":ref:`PUT /api/v1/registry/node/ `" + +msgid ":ref:`GET /api/v1/registry/node/ `" +msgstr ":ref:`GET /api/v1/registry/node/ `" + +msgid ":ref:`DELETE /api/v1/registry/node/ `" +msgstr ":ref:`DELETE /api/v1/registry/node/ `" + +msgid "Return all the detected nodes." +msgstr "Возврат всех обнаруженных узлов." + +msgid "Register the detected node." +msgstr "Регистрация обнаруженного узла." + +msgid "``node_already_registered`` - the specified node is already registered" +msgstr "``node_already_registered`` -- указанный узел уже зарегистрирован" + +msgid "``node_not_discovered`` - the specified node is not detected" +msgstr "``node_not_discovered`` -- указанный узел не обнаружен" + +msgid "Update the registered node parameters." +msgstr "Обновление параметров зарегистрированного узла." + +msgid "Pass only those parameters that need to be updated." +msgstr "Передача только обновляемых параметров." + +msgid "``node_not_registered`` - the specified node is not registered" +msgstr "``node_not_registered`` -- указанный узел не зарегистрирован" + +msgid "" +"Return information on the nodes in a cluster. If ``node_uuid`` is passed, " +"information on this node only is returned." +msgstr "" +"Возврат информации об узлах в кластере. Если передать ``node_uuid``, " +"вернется информация только по данному узлу." + +msgid "Delete the node if it doesn’t belong to any replica set." +msgstr "Удаление узла, если он не относится ни к одному набору реплик." + +msgid "``node_in_use`` - the specified node is in use by a replica set" +msgstr "``node_in_use`` -- указанный узел используется в наборе реплик" + +msgid "Routers API" +msgstr "API по роутерам" + +msgid ":ref:`GET /api/v1/routers `" +msgstr ":ref:`GET /api/v1/routers `" + +msgid ":ref:`POST /api/v1/routers `" +msgstr ":ref:`POST /api/v1/routers `" + +msgid ":ref:`DELETE /api/v1/routers/{uuid} `" +msgstr "" +":ref:`DELETE /api/v1/routers/{uuid} `" + +msgid "Return the list of all nodes that constitute the router." +msgstr "Возврат списка всех узлов, которые представляют собой роутер." + +msgid "Assign the router role to the node." +msgstr "Присвоение узлу роли роутера." + +msgid "Release the router role from the node." +msgstr "Снятие роли роутера с узла." + +msgid "Configuring replica sets" +msgstr "Настройка наборов реплик" + +msgid ":ref:`POST /api/v1/replicaset `" +msgstr ":ref:`POST /api/v1/replicaset `" + +msgid ":ref:`PUT /api/v1/replicaset/ `" +msgstr ":ref:`PUT /api/v1/replicaset/ `" + +msgid ":ref:`GET /api/v1/replicaset/ `" +msgstr ":ref:`GET /api/v1/replicaset/ `" + +msgid ":ref:`DELETE /api/v1/replicaset/ `" +msgstr "" +":ref:`DELETE /api/v1/replicaset/ `" + +msgid "" +":ref:`POST /api/v1/replicaset/{replicaset_uuid}/master `" +msgstr "" +":ref:`POST /api/v1/replicaset/{replicaset_uuid}/master `" + +msgid "" +":ref:`POST /api/v1/replicaset/{replicaset_uuid}/node `" +msgstr "" +":ref:`POST /api/v1/replicaset/{replicaset_uuid}/node `" + +msgid "Create a replica set containing all the registered nodes." +msgstr "Создание набора реплик со всеми зарегистрированными узлами." + +msgid "``replicaset_exists`` – the specified replica set already exists" +msgstr "``replicaset_exists`` -- указанный набор реплик уже существует" + +msgid "" +"``replicaset_empty`` – the specified replica set doesn’t contain any nodes" +msgstr "" +"``replicaset_empty`` -- указанный набор реплик не содержит ни одного узла" + +msgid "``node_not_registered`` – the specified node is not registered" +msgstr "``node_not_registered`` -- указанный узел не зарегистрирован" + +msgid "``node_in_use`` – the specified node is in use by another replica set" +msgstr "``node_in_use`` -- указанный узел используется в другом наборе реплик" + +msgid "Update the replica set parameters." +msgstr "Обновление параметров набора реплик." + +msgid "``replicaset_not_found`` – the specified replica set is not found" +msgstr "``replicaset_not_found`` -- указанный набор реплик не обнаружен" + +msgid "" +"Return information on all the cluster components. If ``replicaset_uuid`` is " +"passed, information on this replica set only is returned." +msgstr "" +"Возврат информации обо всех компонентах кластера. Если передать " +"``replicaset_uuid``, вернется информация только по данному набору реплик." + +msgid "Delete a replica set." +msgstr "Удаление набора реплик." + +msgid "``replicaset_not_found`` - the specified replica set is not found" +msgstr "``replicaset_not_found`` -- указанный набор реплик не обнаружен" + +msgid "Switch the master in the replica set." +msgstr "Смена мастера в наборе реплик." + +msgid "" +"``node_not_in_replicaset`` – the specified node is not in the specified " +"replica set" +msgstr "" +"``node_not_in_replicaset`` -- указанный узел находится не в указанном наборе" +" реплик" + +msgid "Add a node to the replica set." +msgstr "Добавление узла в набор реплик." + +msgid "Return statistics on the cluster." +msgstr "Возврат статистики по кластеру." + +msgid "Setting up configuration versions" +msgstr "Настройка версии конфигурации" + +msgid ":ref:`POST /api/v1/version `" +msgstr ":ref:`POST /api/v1/version `" + +msgid ":ref:`GET /api/v1/version `" +msgstr ":ref:`GET /api/v1/version `" + +msgid "Set the configuration version." +msgstr "Настройка версии конфигурации." + +msgid "``cfg_error`` - configuration error" +msgstr "``cfg_error`` -- ошибка конфигурации" + +msgid "Return the configuration version." +msgstr "Возврат версии конфигурации." + +msgid "Configuring sharding" +msgstr "Конфигурация шардинга" + +msgid ":ref:`POST /api/v1/sharding/cfg `" +msgstr ":ref:`POST /api/v1/sharding/cfg `" + +msgid ":ref:`GET /api/v1/sharding/cfg `" +msgstr ":ref:`GET /api/v1/sharding/cfg `" + +msgid "Add a new sharding configuration." +msgstr "Добавление новой конфигурации шардинга." + +msgid "Return the current sharding configuration." +msgstr "Возврат текущей конфигурации шардинга." + +msgid "Resetting cluster configuration" +msgstr "Сброс конфигурации кластера" + +msgid ":ref:`POST /api/v1/clean/cfg `" +msgstr ":ref:`POST /api/v1/clean/cfg `" + +msgid ":ref:`POST /api/v1/clean/all `" +msgstr ":ref:`POST /api/v1/clean/all `" + +msgid "Reset the cluster configuration." +msgstr "Сброс конфигурации кластера." + +msgid "" +"Reset the cluster configuration and delete information on the cluster nodes " +"from the ZooKeeper catalogues." +msgstr "" +"Сброс конфигурации кластера и удаление информации об узлах кластера из " +"каталогов ZooKeeper." diff --git a/locale/ru/LC_MESSAGES/enterprise/dev.po b/locale/ru/LC_MESSAGES/enterprise/dev.po new file mode 100755 index 0000000000..d169757af8 --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/dev.po @@ -0,0 +1,2066 @@ + +msgid "Developer's guide" +msgstr "Руководство для разработчика" + +msgid "" +"To develop an application, use the Tarantool Cartridge framework that is " +":ref:`installed ` as part of Tarantool Enterprise." +msgstr "" +"Для разработки приложений используйте среду Tarantool Cartridge, которая " +":ref:`установлена ` как компонент Tarantool Enterprise." + +msgid "Here is a summary of the commands you need:" +msgstr "Ниже приведен список необходимых команд:" + +msgid "Create a cluster-aware application from the template:" +msgstr "Создайте приложение с поддержкой кластеров из шаблона:" + +msgid "Develop your application:" +msgstr "Разработайте приложение:" + +msgid "Package your application:" +msgstr "Упакуйте приложение:" + +msgid "Deploy your application:" +msgstr "Разверните приложение:" + +msgid "For ``rpm`` package:" +msgstr "Для пакета ``rpm``:" + +msgid "Upload the package to all servers dedicated to Tarantool." +msgstr "Загрузите пакет на все серверы, выделенные для Tarantool." + +msgid "Install the package:" +msgstr "Установите пакет:" + +msgid "Launch the application." +msgstr "Запустите приложение." + +msgid "For ``tgz`` archive:" +msgstr "Для архива ``tgz``:" + +msgid "Upload the archive to all servers dedicated to Tarantool." +msgstr "Загрузите архив на все серверы, выделенные для Tarantool." + +msgid "Unpack the archive:" +msgstr "Распакуйте архив:" + +msgid "Launch the application" +msgstr "Запустите приложение" + +msgid "" +"For details and examples, consult the following " +"documentation:" +msgstr "" +"Более подробную информацию с примерами см. на следующих " +"страницах:" + +msgid "" +"a `getting started guide `_ that walks you " +"through developing and deploying a simple clustered application using " +"Tarantool Cartridge," +msgstr "" +"`руководство для начинающих `_, в котором " +"пошагово разбирается разработка и развертывание простого кластерного " +"приложения с помощью Tarantool Cartridge," + +msgid "" +"a `detailed manual `_ " +"on creating and managing clustered Tarantool applications using Tarantool " +"Cartridge." +msgstr "" +"`подробное руководство " +"`_ по созданию и " +"управлению кластерными приложениями Tarantool с помощью Tarantool Cartridge." + +msgid "" +"Further on, this guide focuses on Enterprise-specific developer features " +"available on top of Tarantool Community Edition with the Tarantool " +"Cartridge framework:" +msgstr "" +"Кроме того, в этом руководстве особое внимание уделяется функциям " +"разработчика, специфичным для Enterprise-версии, которые доступны в " +"дополнение к Tarantool Community Edition в среде Tarantool " +"Cartridge:" + +msgid ":ref:`LDAP authorization in the web interface `," +msgstr "" +":ref:`авторизация с использованием LDAP в веб-интерфейсе `," + +msgid "" +":ref:`environment-independent applications `," +msgstr "" +":ref:`независимые от среды приложения `," + +msgid "" +":ref:`sample applications with Enterprise flavors `." +msgstr "" +":ref:`примеры приложений, которые подходят для Enterprise-версии " +"`." + +msgid "Implementing LDAP authorization in the web interface" +msgstr "Реализация авторизации с использованием LDAP в веб-интерфейсе" + +msgid "" +"If you run an LDAP server in your organization, you can connect Tarantool " +"Enterprise to it and let it handle the authorization. In this case, follow " +"the `general recipe " +"`_ where in the first step add the " +"``ldap`` module to the ``.rockspec`` file as a dependency and consider " +"implementing the ``check_password`` function the following way:" +msgstr "" +"Если в вашей организации есть сервер LDAP, можно подключить к нему Tarantool" +" Enterprise для обработки авторизации. В этом случае следуйте `общим " +"рекомендациям " +"`_ " +"`_ , где на первом шаге необходимо " +"добавить модуль ``ldap`` в файл ``.rockspec`` в качестве зависимости; " +"рекомендуется также реализовать функцию ``check_password`` следующим " +"образом:" + +msgid "Delivering environment-independent applications" +msgstr "Формирование независимых от среды приложений" + +msgid "" +"Tarantool Enterprise Edition allows you to build environment-independent " +"applications." +msgstr "" +"Tarantool Enterprise позволяет создавать независимые от среды приложения." + +msgid "" +"An environment-independent application is an assembly (in one directory) of:" +msgstr "" +"Независимое от среды приложение представляет собой сборку следующих " +"компонентов (в одной директории):" + +msgid "files with Lua code," +msgstr "файлы с кодом на Lua," + +msgid "``tarantool`` executable," +msgstr "исполняемый файл ``tarantool``," + +msgid "plugged external modules (if necessary)." +msgstr "подключенные внешние модули (при необходимости)." + +msgid "" +"When started by the ``tarantool`` executable, the application provides a " +"service." +msgstr "" +"Запущенное с помощью исполняемого файла tarantool приложение обеспечивает " +"работу сервиса." + +msgid "" +"The modules are Lua rocks installed into a virtual environment (under the " +"application directory) similar to Python's ``virtualenv`` and Ruby's " +"bundler." +msgstr "" +"Модули -- это сторонние библиотеки на Lua, установленные в виртуальную среду" +" (в директории приложения), которая аналогична ``virtualenv`` в Python и " +"bundler в Ruby." + +msgid "" +"Such an application has the same structure both in development and " +"production-ready phases. All the application-related code resides in one " +"place, ready to be packed and copied over to any server." +msgstr "" +"Структура такого приложения остается неизменной как на стадии разработки, " +"так и на стадии производственной эксплуатации. Весь связанный с приложением " +"код находится в одном месте, готов к упаковке и копированию на любой сервер." + +msgid "Packaging applications" +msgstr "Упаковка приложений" + +msgid "" +"Once custom cluster role(s) are defined and the application is developed, " +"pack it and all its dependencies (module binaries) together with the " +"``tarantool`` executable." +msgstr "" +"После определения пользовательских кластерных ролей и разработки приложения " +"упакуйте его со всеми зависимостями (бинарные файлы модулей) и с исполняемым" +" файлом ``tarantool``." + +msgid "" +"This will allow you to upload, install, and run your application on any " +"server in one go." +msgstr "" +"Это позволит вам легко загружать, устанавливать и запускать приложение на " +"любом сервере." + +msgid "To pack the application, say:" +msgstr "Чтобы упаковать приложение, выполните команду:" + +msgid "" +"where specify a path to your development environment -- the Git repository " +"containing your application code, -- and one of the following build options:" +msgstr "" +"где укажите путь к вашей среде разработки (репозиторию Git, который содержит" +" код приложения), а также один из параметров сборки:" + +msgid "``rpm`` to build an RPM package (recommended), or" +msgstr "``rpm`` для сборки RPM-пакета (рекомендуется), или" + +msgid "" +"``tgz`` to build a ``tar + gz`` archive (choose this option only if you do " +"not have root privileges on servers dedicated for Tarantool Enterprise)." +msgstr "" +"``tgz`` для сборки архива ``tar + gz`` (выберите этот параметр, только если " +"у вас нет прав уровня root на серверах, выделенных для Tarantool " +"Enterprise)." + +msgid "" +"This will create a package (or compressed archive) named " +"``--`` (e.g., " +"``myapp-1.2.1-12.rpm``) containing your environment-independent application." +msgstr "" +"В результате будет создан пакет (или сжатый архив) с именем " +"``<имя_приложения>-<версия_тег>-<количество_коммитов>`` (например, " +"``myapp-1.2.1-12.rpm``), который будет хранить ваше приложение в не " +"зависимом от среды виде." + +msgid "" +"Next, proceed to deploying :ref:`packaged applications ` (or :ref:`archived ones `) on your servers." +msgstr "" +"Далее переходите к развертыванию :ref:`пакетных ` " +"(или же :ref:`архивированных `) приложений на " +"серверах." + +msgid "Deploying packaged applications" +msgstr "Развертывание пакетных приложений" + +msgid "" +"To deploy your packaged application, do the following on every server " +"dedicated for Tarantool Enterprise:" +msgstr "" +"Чтобы развернуть пакетное приложение, выполните следующие действия на каждом" +" сервере, выделенном для Tarantool Enterprise:" + +msgid "" +"Upload the package created in the :ref:`previous step `." +msgstr "" +"Загрузите локально пакет, созданный на :ref:`предыдущем шаге `." + +msgid "Install:" +msgstr "Установите приложение:" + +msgid "" +"Start one or multiple Tarantool instances with the corresponding services as" +" described below." +msgstr "" +"Запустите один или несколько экземпляров Tarantool с соответствующими " +"сервисами, как описано ниже." + +msgid "A single instance:" +msgstr "Отдельный экземпляр:" + +msgid "" +"This will start an instantiated ``systemd`` service that will listen to port" +" ``3301``." +msgstr "" +"Это запустит экземпляр сервиса ``systemd`` с прослушиванием по порту " +"``3301``." + +msgid "Multiple instances on one or multiple servers:" +msgstr "Несколько экземпляров на одном или нескольких серверах:" + +msgid "" +"where ``@instance_`` is the instantiated service name for " +"``systemd`` with an incremental ```` (unique for every instance) to " +"be added to the ``3300`` port the instance will listen to (e.g., ``3301``, " +"``3302``, etc.)." +msgstr "" +"где ``@instance_`` (<имя_приложения>@экземпляр_<число>) --" +" это имя экземпляра сервиса ``systemd`` с инкрементным числом ```` " +"(уникальным для каждого экземпляра), которое следует добавить к порту " +"``3300`` для настройки прослушивания (например, ``3301``, ``3302`` и т.д.)." + +msgid "" +"In case it is a cluster-aware application, proceed to `deploying the cluster" +" " +"`_." +msgstr "" +"Если это приложение с поддержкой кластеров, далее переходите к " +"`развертыванию кластера " +"`_." + +msgid "" +"To stop all services on a server, use the ``systemctl stop`` command and " +"specify instance names one by one. For example:" +msgstr "" +"Чтобы остановить все сервисы на сервере, используйте команду ``systemctl " +"stop`` и укажите имена экземпляров по одному. Например:" + +msgid "Deploying archived applications" +msgstr "Развертывание архивированных приложений" + +msgid "" +"While the RPM package places your application to " +"``/usr/share/tarantool/`` on your server by default, the ``tar + " +"gz`` archive does not enforce any structure apart from just the " +"``/`` directory, so you are responsible for placing it " +"appropriately." +msgstr "" +"Тогда как пакет RPM по умолчанию помещает ваше приложение в " +"``/usr/share/tarantool/<имя_приложения>`` на вашем сервере, архив ``tar + " +"gz`` не создает какую-либо структуру, помимо директории " +"``<имя_приложения>/``, поэтому вы сами несете ответственность за " +"правильность размещения приложения." + +msgid "" +"RPM packages are recommended for deployment. Deploy archives only if you do " +"not have root privileges." +msgstr "" +"Для развертывания рекомендуется использовать RPM-пакеты. Развертывайте " +"архивы, только если у вас нет прав уровня root." + +msgid "" +"To place and deploy the application, do the following on every server " +"dedicated for Tarantool Enterprise:" +msgstr "" +"Чтобы разместить и развернуть приложение, выполните следующие действия на " +"каждом сервере, выделенном для Tarantool Enterprise:" + +msgid "" +"Upload the archive, decompress, and extract it to the ``/home//apps`` " +"directory:" +msgstr "" +"Загрузите архив, распакуйте его и извлеките содержимое в директорию " +"``/home//apps``:" + +msgid "Start Tarantool instances with the corresponding services." +msgstr "Запустите экземпляры Tarantool с соответствующими сервисами." + +msgid "" +"To manage instances and configuration, use tools like ``ansible``, " +"``systemd``, and ``supervisord``." +msgstr "" +"Для управления и конфигурации экземпляров используйте такие средства, как " +"``ansible``, ``systemd`` и ``supervisord``." + +msgid "Upgrading code" +msgstr "Обновление кода" + +msgid "" +"All instances in the cluster are to run the same code. This includes all the" +" components: custom roles, applications, module binaries, ``tarantool``, and " +"``tt`` (if necessary) executables." +msgstr "" +"Все экземпляры в кластере должны использовать один и тот же код. Это " +"относится ко всем компонентам: пользовательским ролям, приложениям, бинарным" +" файлам модулей, исполняемым файлам ``tarantool`` и ``tt`` (при " +"необходимости)." + +msgid "" +"Pay attention to possible backward incompatibility that any component may " +"introduce. This will help you choose a scenario for an :ref:`upgrade in " +"production `. Keep in mind that you are " +"responsible for code compatibility and handling conflicts should " +"inconsistencies occur." +msgstr "" +"Обратите внимание на возможную обратную совместимость, которую может " +"принести с собой любой компонент. Это поможет вам выбрать сценарий для " +":ref:`обновления в эксплуатационной среде `. " +"Имейте в виду, что вы несете ответственность за совместимость кода и " +"обработку конфликтов в случае возникновения несоответствий." + +msgid "" +"To upgrade any of the components, prepare a new version of the package " +"(archive):" +msgstr "" +"Чтобы обновить любой из компонентов, подготовьте новую версию пакета " +"(архива):" + +msgid "" +"Update the necessary files in your development environment (directory):" +msgstr "Обновите необходимые файлы в вашей среде разработки (директории):" + +msgid "Your own source code: custom roles and/or applications." +msgstr "" +"Ваш собственный исходный код: пользовательские роли и / или приложения." + +msgid "Module binaries." +msgstr "Бинарные файлы модулей." + +msgid "Executables. Replace them with ones from the new bundle." +msgstr "Исполняемые файлы. Замените их на файлы из нового комплекта." + +msgid "" +"Increment the version as described in `application versioning " +"`_." +msgstr "" +"Увеличьте версию, как описано в разделе по `управлению версиями приложения " +"`_." + +msgid "" +"Repack the updated files as described in :ref:`packaging applications " +"`." +msgstr "" +"Повторно упакуйте обновленные файлы, как описано в разделе по :ref:`упаковке" +" приложений `." + +msgid "" +"Choose an upgrade scenario as described in the :ref:`Upgrading in production " +"` section." +msgstr "" +"Выберите сценарий обновления, как описано в разделе по :ref:`обновлению в " +"эксплуатационной среде `." + +msgid "Running sample applications" +msgstr "Запуск примеров приложений" + +msgid "" +"The Enterprise distribution package includes sample applications in the " +"``examples/`` directory that showcase basic Tarantool functionality." +msgstr "" +"Дистрибутив Enterprise включает в себя примеры приложений в директории " +"``examples/``, которые демонстрируют основные функциональные возможности " +"Tarantool." + +msgid "Sample applications:" +msgstr "Примеры приложений:" + +msgid "Write-through cache application for PostgreSQL" +msgstr "Приложение кэширования со сквозной записью в PostgreSQL" + +msgid "" +"The example in ``pg_writethrough_cache/`` shows how Tarantool can cache data" +" written *through* it to a PostgreSQL database to speed up the reads." +msgstr "" +"Пример в ``pg_writethrough_cache/`` показывает, как Tarantool может " +"кэшировать данные, записанные через него в базу данных PostgreSQL для " +"ускорения запросов на чтение." + +msgid "" +"The sample application requires a deployed PostgreSQL database and the " +"following rock modules:" +msgstr "" +"Для примера приложения требуется развернутая база данных PostgreSQL и " +"следующие модули сторонних библиотек:" + +msgid "" +"Look through the code in the files to get an understanding of what the " +"application does." +msgstr "Просмотрите код в файлах, чтобы понять, что может делать приложение." + +msgid "To run the application for a local PostgreSQL database, say:" +msgstr "" +"Чтобы запустить приложение для локальной базы данных PostgreSQL, выполните " +"команду:" + +msgid "Write-behind cache application for Oracle" +msgstr "Приложение кэширования с отложенной записью в Oracle" + +msgid "" +"The example in ``ora-writebehind-cache/`` shows how Tarantool can cache " +"writes and queue them to an Oracle database to speed up both writes and " +"reads." +msgstr "" +"Пример в ``ora-writebehind-cache/`` показывает, как Tarantool может " +"кэшировать записи и помещать их в базу данных Oracle для ускорения как " +"записи, так и чтения." + +msgid "Application requirements" +msgstr "Требования приложения" + +msgid "The sample application requires:" +msgstr "Для примера приложения необходимы:" + +msgid "deployed Oracle database;" +msgstr "развернутая база данных Oracle;" + +msgid "" +"Oracle tools: `Instant Client and SQL Plus " +"`_, " +"both of version 12.2;" +msgstr "" +"инструменты Oracle: `Instant Client and SQL Plus " +"`_, " +"оба версии 12.2;" + +msgid "" +"In case the Oracle Instant Client errors out on ``.so`` files (Oracle's " +"dynamic libraries), put them to some directory and add it to the " +"``LD_LIBRARY_PATH`` environment variable." +msgstr "" +"Если Oracle Instant Client выдает ошибки в файлах с расширением ``.so`` " +"(динамические библиотеки Oracle), поместите их в какую-либо директорию и " +"добавьте ее в переменную окружения ``LD_LIBRARY_PATH``." + +msgid "" +"For example: ``export " +"LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/``" +msgstr "" +"Например: ``export " +"LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/<путь_к_файлам_so>``" + +msgid "rock modules listed in the ``rockspec`` file." +msgstr "модули сторонних библиотек, перечисленные в файле ``rockspec``." + +msgid "" +"To install the modules, run the following command in the " +"``examples/ora_writebehind_cache`` directory:" +msgstr "" +"Чтобы установить модули, выполните следующую команду в директории " +"``examples/ora_writebehind_cache``:" + +msgid "" +"If you do not have a deployed Oracle instance at hand, run a dummy in a " +"Docker container:" +msgstr "" +"Если у вас нет развернутого экземпляра Oracle под рукой, запустите пустой " +"объект в контейнере Docker:" + +msgid "" +"In the browser, log in to `Oracle container registry `_, click **Database**, and accept the Oracle's " +"Enterprise Terms and Restrictions." +msgstr "" +"В браузере войдите в `Реестр контейнеров Oracle `_, выберите **Database** (База данных) и примите " +"«Корпоративные условия и ограничения Oracle»." + +msgid "" +"In the ``ora-writebehind-cache/`` directory, log in to the repository under " +"the Oracle account, pull, and run an image using the prepared scripts:" +msgstr "" +"В директории ``ora-writebehind-cache/`` войдите в репозиторий под учетной " +"записью Oracle, получите данные и запустите образ с помощью подготовленных " +"скриптов" + +msgid "When all is set and done, run the example application." +msgstr "Когда всё будет готово, запустите пример приложения." + +msgid "Running write-behind cache" +msgstr "Запуск кэширования с отложенной записью" + +msgid "" +"To launch the application, run the following in the " +"``examples/ora_writebehind_cache`` directory:" +msgstr "" +"Чтобы запустить приложение, выполните следующую команду в директории " +"``examples/ora_writebehind_cache``:" + +msgid "The application supports the following requests:" +msgstr "Данное приложение поддерживает следующие запросы:" + +msgid "Get: ``GET http://:/account/id``;" +msgstr "Получение данных: ``GET http://:/account/id``;" + +msgid "" +"Add: ``POST http://:/account/`` with the following data:" +msgstr "" +"Добавление: ``POST http://:/account/`` со следующими " +"данными:" + +msgid "" +"Update: ``POST http://:/account/id`` with the same data as " +"in the add request;" +msgstr "" +"Обновление: ``POST http://:/account/id`` с теми же данными," +" что и в запросе на добавление;" + +msgid "" +"Remove: ``DELETE http://:/account/id`` where ``id`` is an " +"account identifier." +msgstr "" +"Удаление: ``DELETE http://:/account/id``,где ``id`` -- это " +"идентификатор учетной записи." + +msgid "" +"Look for sample CURL scripts in the " +"``examples/ora_writebehind_cache/testing`` directory and check " +"``README.md`` for more information on implementation." +msgstr "" +"Взгляните на примеры скриптов CURL в директории " +"``examples/ora_writebehind_cache/testing`` и просмотрите файл ``README.md`` " +"для получения дополнительной информации об их использовании." + +msgid "Hello-world application in Docker" +msgstr "Простейшее приложение в Docker" + +msgid "" +"The example in the ``docker/`` directory contains a hello-world application " +"that you can pack in a Docker container and run on CentOS 7." +msgstr "" +"Пример в директории ``docker/`` содержит простейшее приложение, которое " +"можно упаковать в контейнер Docker и запустить на CentOS 7." + +msgid "" +"The ``hello.lua`` file is the entry point and it is very bare-bones, so you " +"can add your code here." +msgstr "" +"Файл ``hello.lua`` представляет собой элементарную точку входа в приложение," +" поэтому вы можете добавить туда собственный код." + +msgid "To build the container, say:" +msgstr "Чтобы создать контейнер, выполните команду:" + +msgid "To run it:" +msgstr "Чтобы запустить его:" + +#~ msgid "" +#~ "Implement some setters (and getters, if necessary) using the " +#~ "``cluster.confapplier`` public API functions: ``get_readonly(section)``, " +#~ "``get_deepcopy(section)``, and ``patch_clusterwide({section = " +#~ "section_cfg})``." +#~ msgstr "" +#~ "Использовать некоторые сеттеры (и геттеры, если необходимо), с помощью " +#~ "функций общедоступного API ``cluster.confapplier``: " +#~ "``get_readonly(section)``, ``get_deepcopy(section)`` и " +#~ "``patch_clusterwide({section = section_cfg})``." + +#~ msgid "" +#~ "Define, first, the ``validate_config(conf_new, conf_old)``, then the " +#~ "``apply_config(conf, opts)`` functions." +#~ msgstr "" +#~ "Сначала определить ``validate_config(conf_new, conf_old)``, затем функции " +#~ "``apply_config(conf, opts)``." + +#~ msgid "" +#~ "These functions both take two Lua tables as arguments: the ones dubbed with " +#~ "``conf`` are configuration tables as you might have guessed, and ``opts`` " +#~ "includes a boolean ``is_master`` flag described later." +#~ msgstr "" +#~ "Обе эти функции принимают в качестве аргументов две Lua-таблицы: в ``conf`` " +#~ "передаются таблицы конфигурации, а в ``opts`` -- логический флаг " +#~ "``is_master``, описанный ниже." + +#~ msgid "Once the application is developed, pack it as described below." +#~ msgstr "После разработки приложения, упакуйте его, как описано ниже." + +#~ msgid "where specify one of the following options:" +#~ msgstr "где укажите один из следующих параметров:" + +#~ msgid "(Recommended) ``rpm`` to create an RPM package." +#~ msgstr "(Рекомендованный) ``rpm`` для создания RPM-пакета." + +#~ msgid "" +#~ "This guide explains how to develop environment-independent applications -- " +#~ "either cluster-aware or not -- and run sample applications provided by the " +#~ "distribution." +#~ msgstr "" +#~ "В данном руководстве описывается, как разрабатывать независимые от среды " +#~ "приложения – как с поддержкой кластеров, так и без нее -- и запускать " +#~ "примеры приложений, включенные в дистрибутив." + +#~ msgid "" +#~ "To develop and run an application, in short, you need to go through the " +#~ "following steps:" +#~ msgstr "" +#~ "Итак, чтобы разработать и запустить приложение, вам необходимо выполнить " +#~ "следующие шаги:" + +#~ msgid "Set up a development environment from a template for the application." +#~ msgstr "Настройте среду разработки из шаблона для приложения." + +#~ msgid "" +#~ "Develop the application. In case it is a cluster-aware application, " +#~ "implement it in a custom cluster role to initialize the database in a " +#~ "cluster environment." +#~ msgstr "" +#~ "Разработайте приложение. Если это приложение с поддержкой кластеров, " +#~ "реализуйте его в виде отдельной кластерной роли, чтобы инициализировать базу" +#~ " данных в кластерной среде." + +#~ msgid "Plug all the necessary rock modules." +#~ msgstr "Подключите все необходимые модули из сторонних библиотек." + +#~ msgid "" +#~ "Pack the application and module binaries together with the ``tarantool`` " +#~ "executable." +#~ msgstr "" +#~ "Упакуйте бинарные файлы приложения и модулей вместе с исполняемым файлом " +#~ "``tarantool``." + +#~ msgid "" +#~ "Upload, install, and start corresponding instantiated services on every " +#~ "server dedicated for Tarantool Enterprise." +#~ msgstr "" +#~ "Загрузите, установите и запустите соответствующие экземпляры сервисов на " +#~ "каждом сервере, выделенном для Tarantool Enterprise." + +#~ msgid "The following sections provide details for each of these steps." +#~ msgstr "В следующих разделах подробно описывается каждый из этих шагов." + +#~ msgid "Setting up development environments from templates" +#~ msgstr "В следующих разделах подробно описывается каждый из этих шагов." + +#~ msgid "" +#~ "Tarantool Enterprise provides you with templates to help set up your " +#~ "application development environment for both cluster-aware and plain (e.g., " +#~ "Tarantool as a proxy to third-party databases) application use cases." +#~ msgstr "" +#~ "В Tarantool Enterprise включены шаблоны, которые помогут вам настроить среду" +#~ " для разработки приложений как с поддержкой кластеров, так и без нее " +#~ "(например, для использования Tarantool в качестве прокси для сторонних баз " +#~ "данных)." + +#~ msgid "To set up a development environment, in any directory say:" +#~ msgstr "" +#~ "Чтобы настроить среду разработки, в любой директории выполните команду:" + +#~ msgid "where specify:" +#~ msgstr "где укажите:" + +#~ msgid "" +#~ "the ``plain`` template to develop an application for single or multiple " +#~ "independent Tarantool instances; or" +#~ msgstr "" +#~ "шаблон ``plain`` для разработки приложения для одного или нескольких " +#~ "независимых экземпляров Tarantool; или же" + +#~ msgid "the ``cluster`` template to develop a cluster-aware application." +#~ msgstr "шаблон ``cluster`` для разработки приложений с поддержкой кластеров." + +#~ msgid "" +#~ "The script will automatically set up a Git repository in a new " +#~ "``/`` directory, tag it with version ``0.1.0``, and put the " +#~ "necessary files into it." +#~ msgstr "" +#~ "Скрипт автоматически установит Git-репозиторий в новую директорию " +#~ "``<имя_приложения>/``, проставит тег версии 0.1.0 и поместит в него " +#~ "необходимые файлы." + +#~ msgid "" +#~ "In this Git repository, you can develop the application, plug the necessary " +#~ "modules, and then easily pack everything to deploy on your server(s)." +#~ msgstr "" +#~ "В этом Git-репозитории можно разработать приложение, подключить необходимые " +#~ "модули, а затем с легкостью упаковать все для развертывания на своих " +#~ "серверах." + +#~ msgid "" +#~ "This section describes templates, default files they provide, and introduces" +#~ " the notion of cluster roles that allow you to segregate functionality " +#~ "between instances." +#~ msgstr "" +#~ "В этом разделе описываются шаблоны, включенные в них по умолчанию файлы, и " +#~ "вводится понятие кластерных ролей, которые позволяют распределять функции " +#~ "экземпляров." + +#~ msgid "" +#~ "To start developing an application, simply edit the default files provided " +#~ "by the template selected in the :ref:`previous step `." +#~ msgstr "" +#~ "Чтобы начать разработку приложения, просто отредактируйте файлы, включенные " +#~ "по умолчанию в шаблон, который был выбран на :ref:`предыдущем шаге " +#~ "`." + +#~ msgid "" +#~ "During development, keep track of the :ref:`application version `." +#~ msgstr "" +#~ "Во время разработки следите за изменением :ref:`версии приложения " +#~ "`." + +#~ msgid "Plain template" +#~ msgstr "Шаблон plain" + +#~ msgid "" +#~ "The plain template creates the ``/`` directory with the following " +#~ "contents:" +#~ msgstr "" +#~ "Шаблон plain создает директорию ``<имя_приложения>/``, которая содержит " +#~ "следующее:" + +#~ msgid "" +#~ "``-scm-1.rockspec`` file where you can specify the application " +#~ "dependencies." +#~ msgstr "" +#~ "файл ``<имя_приложения>-scm-1.rockspec``, где можно указать зависимости " +#~ "приложения." + +#~ msgid "" +#~ "``deps.sh`` script that resolves dependencies from the ``.rockspec`` file." +#~ msgstr "" +#~ "скрипт ``deps.sh``, который решает проблемы с зависимостями из файла " +#~ "``.rockspec``." + +#~ msgid "``init.lua`` file which is the entry point for your application." +#~ msgstr "файл ``init.lua``, который является точкой входа в ваше приложение." + +#~ msgid "``.git`` file necessary for a Git repository." +#~ msgstr "файл ``.git``, необходимый для Git-репозитория." + +#~ msgid "``.gitignore`` file to ignore the unnecessary files." +#~ msgstr "файл ``.gitignore``, чтобы не учитывать ненужные файлы." + +#~ msgid "Cluster template" +#~ msgstr "Шаблон cluster" + +#~ msgid "" +#~ "In addition to the files listed in the plain template section, the cluster " +#~ "template contains the following:" +#~ msgstr "" +#~ "Помимо файлов, перечисленных в разделе о шаблоне plain, шаблон cluster " +#~ "содержит следующее:" + +#~ msgid "" +#~ "``env.lua`` file that sets common rock paths so that the application can be " +#~ "started from any directory." +#~ msgstr "" +#~ "файл ``env.lua``, который устанавливает общие пути для модулей, чтобы " +#~ "приложение можно было запустить из любой директории." + +#~ msgid "" +#~ "``custom-role.lua`` file that is a placeholder for a user-defined cluster " +#~ "role described in the :ref:`next section `." +#~ msgstr "" +#~ "файл ``custom-role.lua`` , который представляет собой объект-заглушку для " +#~ "определяемой пользователем кластерной роли, описанной в :ref:`следующем " +#~ "разделе `." + +#~ msgid "" +#~ "The entry point file (``init.lua``) of the cluster template differs from the" +#~ " plain one. Among other things, it loads the ``cluster`` module and calls " +#~ "its initialization function:" +#~ msgstr "" +#~ "Файл входа в приложение (``init.lua``) в шаблоне cluster отличается от " +#~ "аналогичного файла в шаблоне plain. Помимо прочего, он загружает модуль " +#~ "``cluster`` и вызывает его функцию инициализации:" + +#~ msgid "" +#~ "The ``cluster.cfg()`` call renders the instance operable via the " +#~ "administrative console but does not call ``box.cfg()`` to configure " +#~ "instances." +#~ msgstr "" +#~ "Вызов ``cluster.cfg()`` позволяет управлять экземпляром через " +#~ "административную консоль, но не вызывает ``box.cfg()`` для настройки " +#~ "экземпляров." + +#~ msgid "Calling the ``box.cfg()`` function is forbidden." +#~ msgstr "Запрещается вызывать функцию ``box.cfg()``." + +#~ msgid "The cluster itself will do it for you when it is time to:" +#~ msgstr "Сам кластер сделает это за вас, когда придет время:" + +#~ msgid "bootstrap the current instance once you:" +#~ msgstr "загрузить текущий экземпляр, когда вы:" + +#~ msgid "run ``cluster.bootstrap()`` via the administrative console, or" +#~ msgstr "выполните ``cluster.bootstrap()`` в административной консоли, или" + +#~ msgid "click **Create** in the web interface;" +#~ msgstr "нажмете **Create** (Создать) в веб-интерфейсе;" + +#~ msgid "join the instance to an existing cluster once you:" +#~ msgstr "присоединить экземпляр к существующему кластеру, когда вы:" + +#~ msgid "" +#~ "run ``cluster.join_server({uri = 'other_instance_uri'})`` via the console, " +#~ "or" +#~ msgstr "" +#~ "выполните ``cluster.join_server({uri = ''uri_другого_экземпляра'})`` в " +#~ "консоли, или" + +#~ msgid "" +#~ "click **Join** (an existing replica set) or **Create** (a new replica set) " +#~ "in the web interface." +#~ msgstr "" +#~ "нажмете **Join** (Присоединить -- к уже существующему набору реплик) или " +#~ "**Create** (Создать -- для нового набора реплик) в веб-интерфейсе." + +#~ msgid "" +#~ "Notice that you can specify a cookie for the cluster (``cluster_cookie`` " +#~ "parameter) if you need to run several clusters in the same network. The " +#~ "cookie can be any string value." +#~ msgstr "" +#~ "Обратите внимание, что для кластера можно указать cookie (параметр " +#~ "``cluster_cookie``), если необходимо запустить несколько кластеров в одной " +#~ "сети. Указать можно любое строковое значение." + +#~ msgid "" +#~ "Before developing a cluster-aware application, familiarize yourself with the" +#~ " notion of cluster roles described in the :ref:`next section ` and make sure to define a custom role to initialize the " +#~ "database for the cluster application." +#~ msgstr "" +#~ "Перед тем как разрабатывать приложение с поддержкой кластеров, ознакомьтесь " +#~ "с понятием кластерных ролей в :ref:`следующем разделе ` и обязательно определите специальную роль для инициализации базы " +#~ "данных для кластерного приложения." + +#~ msgid "Defining custom cluster roles" +#~ msgstr "Определение пользовательских кластерных ролей" + +#~ msgid "" +#~ "Tarantool Enterprise cluster segregates instance functionality in a role-" +#~ "based way. **Cluster roles** are Lua modules that implement some instance-" +#~ "specific functions and/or logic." +#~ msgstr "" +#~ "Кластер Tarantool Enterprise распределяет функции экземпляров на основе " +#~ "ролей. **Кластерные роли** -- это Lua-модули, которые реализуют некоторые " +#~ "заданные для экземпляра функции и/или логику." + +#~ msgid "" +#~ "Since all instances running cluster applications use the same source code " +#~ "and are aware of all the defined roles (and plugged modules), multiple " +#~ "different roles can be dynamically enabled and disabled on any number of " +#~ "instances without restarts even during cluster operation." +#~ msgstr "" +#~ "Поскольку все экземпляры, на которых запущены кластерные приложения, " +#~ "используют один и тот же исходный код и знают обо всех определенных ролях (и" +#~ " подключенных модулях), вы можете динамически включать и отключать несколько" +#~ " разных ролей на любом количестве экземпляров без перезапуска даже во время " +#~ "работы кластера." + +#~ msgid "Built-in roles" +#~ msgstr "Встроенные роли" + +#~ msgid "" +#~ "The cluster module comes with two built-in roles that implement automatic " +#~ "sharding:" +#~ msgstr "" +#~ "В модуль cluster входят две встроенные роли, которые реализуют " +#~ "автоматический шардинг:" + +#~ msgid "" +#~ "``vshard-router`` that handles the ``vshard``'s *compute-intensive* " +#~ "workload: routes requests to storage nodes." +#~ msgstr "" +#~ "``vshard-router`` обрабатывает *ресурсоемкие* вычисления в ``vshard``: " +#~ "направляет запросы к узлам хранения данных." + +#~ msgid "" +#~ "``vshard-storage`` that handles the ``vshard``'s *transaction-intensive* " +#~ "workload: stores and manages a subset of a dataset." +#~ msgstr "" +#~ "``vshard-storage`` работает с *большим количеством транзакций* в ``vshard``:" +#~ " хранит подмножество набора данных и управляет им." + +#~ msgid "" +#~ "For more information on sharding, see the `vshard module documentation " +#~ "`_." +#~ msgstr "" +#~ "Для получения дополнительной информации о шардинге см. `документацию по " +#~ "модулю vshard " +#~ "`_." + +#~ msgid "" +#~ "With the built-in and custom roles, Tarantool Enterprise allows you to " +#~ "develop applications with separated compute and transaction handling. Later," +#~ " the relevant workload-specific roles can be enabled on different instances " +#~ "running on physical servers with workload-dedicated hardware." +#~ msgstr "" +#~ "Благодаря встроенным и пользовательским ролям, Tarantool Enterprise " +#~ "позволяет разрабатывать приложения, где вычисления отделены от обработки " +#~ "транзакций. Позже соответствующие роли в зависимости от рабочей нагрузки " +#~ "можно включить на разных экземплярах, которые работают на физических " +#~ "серверах с оборудованием, выделенным для рабочей нагрузки." + +#~ msgid "" +#~ "Neither ``vshard-router`` nor ``vshard-storage`` manage spaces, indexes, or " +#~ "formats. To start developing an application, edit the ``custom-role.lua`` " +#~ "placeholder file: add a ``box.schema.space.create()`` call to your first " +#~ "cluster role." +#~ msgstr "" +#~ "Ни ``vshard-router``, ни ``vshard-storage`` не управляют спейсами, индексами" +#~ " и форматами. Чтобы начать разработку приложения, отредактируйте файл-" +#~ "заглушку ``custom-role.lua``: добавьте вызов ``box.schema.space.create()`` в" +#~ " свою первую кластерную роль." + +#~ msgid "Additionally, you can implement several such roles to:" +#~ msgstr "Кроме того, можно реализовать несколько таких ролей, чтобы:" + +#~ msgid "define stored procedures;" +#~ msgstr "определить хранимые процедуры;" + +#~ msgid "implement functionality on top of ``vshard``;" +#~ msgstr "реализовать функции поверх ``vshard``;" + +#~ msgid "go without ``vshard`` at all;" +#~ msgstr "полностью обойтись без ``vshard``;" + +#~ msgid "" +#~ "implement one or multiple supplementary services such as e-mail notifier, " +#~ "replicator, etc." +#~ msgstr "" +#~ "реализовать один или несколько дополнительных сервисов, таких как средство " +#~ "уведомления по электронной почте, репликатор и т.д." + +#~ msgid "Implementing and registering custom roles" +#~ msgstr "Реализация и регистрация пользовательских ролей" + +#~ msgid "To implement a custom cluster role, do the following:" +#~ msgstr "" +#~ "Чтобы реализовать пользовательскую кластерную роль, выполните следующие " +#~ "действия:" + +#~ msgid "" +#~ "Register the new role in the cluster by modifying the ``cluster.cfg()`` call" +#~ " in the ``init.lua`` entry point file:" +#~ msgstr "" +#~ "Зарегистрируйте новую роль в кластере, изменив вызов ``cluster.cfg()`` в " +#~ "файле входа в приложение ``init.lua``:" + +#~ msgid "where ``custom-role`` is the name of the Lua module to be loaded." +#~ msgstr "" +#~ "где ``custom-role`` (пользовательская роль) -- это название загружаемого " +#~ "Lua-модуля." + +#~ msgid "" +#~ "Implement the role in a file with the appropriate name (``custom-" +#~ "role.lua``). For example:" +#~ msgstr "" +#~ "Поместите роль в файл с соответствующим именем (``custom-role.lua``). " +#~ "Например:" + +#~ msgid "" +#~ "Where the ``role_name`` may differ from the module name passed to the " +#~ "``cluster.cfg()`` function. If the ``role_name`` variable is not specified, " +#~ "the module name is the default value." +#~ msgstr "" +#~ "Где имя роли ``role_name`` может отличаться от имени модуля, переданного в " +#~ "функции ``cluster.cfg()``. Если не указать переменную ``role_name``, по " +#~ "умолчанию будет использовано имя модуля." + +#~ msgid "" +#~ "Role names must be unique as it is impossible to register multiple roles " +#~ "with the same name." +#~ msgstr "" +#~ "Имена ролей должны быть уникальными, поскольку невозможно зарегистрировать " +#~ "несколько ролей с одним именем." + +#~ msgid "" +#~ "The role module does not have required functions but the cluster may execute" +#~ " the following ones during the role's life cycle:" +#~ msgstr "" +#~ "В модуле роли нет обязательных функций, но в течение жизненного цикла роли " +#~ "кластер может выполнять следующие функции:" + +#~ msgid "``init()`` is the role's *initialization* function." +#~ msgstr "``init()`` -- это функция *инициализации* роли." + +#~ msgid "" +#~ "Inside the function's body you can call any ``box`` functions: create " +#~ "spaces, indexes, grant permissions, etc. Here is what the initialization " +#~ "function may look like:" +#~ msgstr "" +#~ "В теле функции можно вызывать любые функции из ``box``: создавать спейсы, " +#~ "индексы, выдавать права и т.д. Вот как может выглядеть функция " +#~ "инициализации:" + +#~ msgid "" +#~ "The function's body is wrapped in a conditional statement that lets you call" +#~ " ``box`` functions on masters only. This protects against replication " +#~ "collisions as data propagates to replicas automatically." +#~ msgstr "" +#~ "Тело функции заключено в условный оператор, который позволяет вызывать " +#~ "функции ``box`` только на мастерах. Это предотвращает конфликты репликации, " +#~ "так как данные автоматически передаются на реплики." + +#~ msgid "" +#~ "``stop()`` is the role's *termination* function. Implement it if " +#~ "initialization starts a fiber that has to be stopped or does any job that " +#~ "has to be undone on termination." +#~ msgstr "" +#~ "``stop()`` это функция *завершения работы* роли. Используйте ее, если " +#~ "инициализация запускает файбер, который необходимо остановить, или же " +#~ "выполняет любую задачу, которую следует отменить при завершении работы." + +#~ msgid "" +#~ "``validate_config()`` and ``apply_config()`` are *validation* and " +#~ "*application* functions that make custom roles configurable. Implement them " +#~ "if some configuration data has to be stored cluster-wide." +#~ msgstr "" +#~ "``validate_config()`` и ``apply_config()`` -- это функции *валидации* и " +#~ "*применения конфигурации* соответственно, которые обеспечивают возможность " +#~ "настройки ролей. Используйте их, если некоторые настройки должны храниться " +#~ "на уровне кластера." + +#~ msgid "" +#~ "Next, get a grip on the :ref:`role's life cycle ` to" +#~ " implement the necessary functions." +#~ msgstr "" +#~ "Затем изучите :ref:`жизненный цикл роли `, чтобы " +#~ "реализовать необходимые функции." + +#~ msgid "Defining role dependencies" +#~ msgstr "Определение зависимостей ролей" + +#~ msgid "" +#~ "You can instruct the cluster to apply some other roles if your custom role " +#~ "is enabled." +#~ msgstr "" +#~ "Можно настроить кластер таким образом, чтобы при включении пользовательской " +#~ "роли применялись также другие роли." + +#~ msgid "For example:" +#~ msgstr "Например:" + +#~ msgid "" +#~ "Here ``vshard-router`` role will be initialized automatically for every " +#~ "instance with ``custom-role`` enabled." +#~ msgstr "" +#~ "В данном примере роль ``vshard-router`` будет инициализирована " +#~ "автоматически для каждого экземпляра со включенной ролью ``custom-role``." + +#~ msgid "Using multiple vshard storage groups" +#~ msgstr "Использование нескольких групп хранилищ" + +#~ msgid "" +#~ "Replica sets with ``vshard-storage`` roles can belong to different *groups*." +#~ " For example, ``hot`` or ``cold`` groups meant to independently process hot " +#~ "and cold data." +#~ msgstr "" +#~ "Наборы реплик с ролью ``vshard-storage`` могут относиться к различным " +#~ "*группам*. Например, группы ``hot`` (горячие) и ``cold`` (холодные) " +#~ "независимо друг от друга обрабатывают наиболее важные \"горячие\" и редко " +#~ "используемые \"холодные\" данные соответственно." + +#~ msgid "Groups are specified in the cluster's configuration:" +#~ msgstr "Группы указаны в конфигурации кластера:" + +#~ msgid "" +#~ "If no groups are specified, the cluster assumes that all replica sets belong" +#~ " to the ``default`` group." +#~ msgstr "" +#~ "Если группы не указаны, кластер предполагает, что все наборы реплик входят в" +#~ " группу ``default`` (по умолчанию)." + +#~ msgid "" +#~ "With multiple groups enabled, every replica set with a ``vshard-storage`` " +#~ "role enabled must be assigned to a particular group. The assignment can " +#~ "never be changed." +#~ msgstr "" +#~ "Если включены несколько группы, каждый набор реплик с включенной ролью " +#~ "``vshard-storage`` должен быть назначен в определенную группу. Эту настройку" +#~ " нельзя изменить впоследствии." + +#~ msgid "" +#~ "Another limitation is that you cannot add groups dynamically (will become " +#~ "available in future)." +#~ msgstr "" +#~ "Есть еще одно ограничение -- нельзя добавлять группы динамически (такая " +#~ "возможность появится в будущих версиях)." + +#~ msgid "" +#~ "Finally, mind the new syntax for router access. Every instance with a " +#~ "``vshard-router`` role enabled initializes multiple routers. All of them are" +#~ " accessible through the role:" +#~ msgstr "" +#~ "Наконец, обратите внимание на новый синтаксис для доступа к роутеру. Каждый " +#~ "экземпляр со включенной ролью ``vshard-router`` инициализирует несколько " +#~ "роутеров. Доступ к ним можно получить через роль:" + +#~ msgid "" +#~ "If you have no roles specified, you can access a static router as before:" +#~ msgstr "" +#~ "Если роли не указаны, доступ к статическому роутеру можно получить, как и " +#~ "прежде:" + +#~ msgid "" +#~ "However, when using the new API, you must call a static router with a colon:" +#~ msgstr "" +#~ "Тем не менее, при использовании нового API следует вызывать статический " +#~ "роутер при помощи двоеточия:" + +#~ msgid "Role's life cycle and the order of function execution" +#~ msgstr "Жизненный цикл роли и порядок выполнения функций" + +#~ msgid "" +#~ "The cluster displays all custom role names along with the built-in " +#~ "``vshard`` ones in the web interface. Cluster administrators can enable and " +#~ "disable them for particular instances either via the web interface or " +#~ "cluster public API. For example:" +#~ msgstr "" +#~ "Кластер отображает все имена пользовательских ролей вместе с именами " +#~ "встроенных ролей из ``vshard`` в веб-интерфейсе. Администраторы кластера " +#~ "могут включать и отключать их для определенных экземпляров либо через веб-" +#~ "интерфейс, либо через общедоступный API кластера. Например:" + +#~ msgid "" +#~ "If multiple roles are enabled on an instance at the same time, the cluster " +#~ "first initializes the built-in roles (if any) and then the custom ones (if " +#~ "any) in the order the latter were listed in ``cluster.cfg()``." +#~ msgstr "" +#~ "Если несколько ролей одновременно включены на экземпляре, кластер сначала " +#~ "инициализирует встроенные роли (если они есть), а затем пользовательские " +#~ "(если они есть) в том порядке, в котором последние были перечислены в " +#~ "``cluster.cfg()``." + +#~ msgid "" +#~ "If a custom role has dependent roles, the dependencies are registered and " +#~ "validated first, prior to the role itself." +#~ msgstr "" +#~ "Если у пользовательской роли есть зависимые роли, сначала происходит " +#~ "регистрация и валидация зависимостей, а затем уже самой роли." + +#~ msgid "The cluster calls the role's functions in the following circumstances:" +#~ msgstr "Кластер вызывает функции роли в следующих случаях:" + +#~ msgid "" +#~ "The ``init()`` function, typically, once: either when the role is enabled by" +#~ " the administrator or at the instance restart. Enabling a role once is " +#~ "normally enough." +#~ msgstr "" +#~ "Функция ``init()`` обычно выполняется один раз: либо когда администратор " +#~ "включает роль, либо при перезапуске экземпляра. Как правило, достаточно один" +#~ " раз включить роль." + +#~ msgid "" +#~ "The ``stop()`` function -- only when the administrator disables the role, " +#~ "not on instance termination." +#~ msgstr "" +#~ "Функция ``stop()`` -- только когда администратор отключает роль, а не во " +#~ "время завершения работы экземпляра." + +#~ msgid "" +#~ "The ``validate_config()`` function, first, before the automatic " +#~ "``box.cfg()`` call (database initialization), then -- upon every " +#~ "configuration update." +#~ msgstr "" +#~ "Функция ``validate_config()``: сначала до автоматического вызова box.cfg() " +#~ "(инициализация базы данных), а затем при каждом обновлении конфигурации." + +#~ msgid "The ``apply_config()`` function upon every configuration update." +#~ msgstr "Функция ``apply_config()`` -- при каждом обновлении конфигурации." + +#~ msgid "" +#~ "Hence, if the cluster is tasked with performing the following actions, it " +#~ "will execute the functions listed in the following order:" +#~ msgstr "" +#~ "Таким образом, если поставить для кластера задачу выполнить следующие " +#~ "действия, он будет выполнять перечисленные функции в следующем порядке:" + +#~ msgid "Join an instance or create a replica set, both with an enabled role:" +#~ msgstr "" +#~ "Присоединение экземпляра или создание набора реплик (в обоих случаях с " +#~ "включенной ролью):" + +#~ msgid "``validate_config()``" +#~ msgstr "``validate_config()``" + +#~ msgid "``init()``" +#~ msgstr "``init()``" + +#~ msgid "``apply_config()``" +#~ msgstr "``apply_config()``" + +#~ msgid "Restart an instance with an enabled role:" +#~ msgstr "Перезапуск экземпляра с включенной ролью:" + +#~ msgid "Disable role: ``stop()``." +#~ msgstr "Отключение роли: ``stop()``." + +#~ msgid "Upon the ``cluster.confapplier.patch_clusterwide()`` call:" +#~ msgstr "При вызове ``cluster.confapplier.patch_clusterwide()``:" + +#~ msgid "Upon a triggered failover:" +#~ msgstr "При запущенном восстановлении после отказа:" + +#~ msgid "Considering the described behavior:" +#~ msgstr "Учитывая вышеописанное поведение:" + +#~ msgid "The ``init()`` function may:" +#~ msgstr "Функция ``init()`` может:" + +#~ msgid "Call ``box`` functions." +#~ msgstr "Вызывать функции ``box``." + +#~ msgid "" +#~ "Start a fiber and, in this case, the ``stop()`` function should take care of" +#~ " the fiber's termination." +#~ msgstr "" +#~ "Запускать файбер, и в таком случае функция ``stop()`` должна позаботиться о " +#~ "завершении работы файбера." + +#~ msgid "Configure the built-in :ref:`HTTP server `." +#~ msgstr "Настраивать встроенный :ref:`HTTP-сервер `." + +#~ msgid "Execute any code related to the role's initialization." +#~ msgstr "Выполнять любой код, связанный с инициализацией роли." + +#~ msgid "" +#~ "The ``stop()`` functions must undo any job that has to be undone on role's " +#~ "termination." +#~ msgstr "" +#~ "Функции ``stop()`` должны отменять любую задачу, которую необходимо отменить" +#~ " при завершении работы роли." + +#~ msgid "" +#~ "The ``validate_config()`` function must validate any configuration change." +#~ msgstr "" +#~ "Функция ``validate_config()`` должна валидировать любые изменения " +#~ "конфигурации." + +#~ msgid "" +#~ "The ``apply_config()`` function may execute any code related to a " +#~ "configuration change, e.g., take care of an ``expirationd`` fiber." +#~ msgstr "" +#~ "Функция ``apply_config()`` может выполнять любой код, связанный с изменением" +#~ " конфигурации, например следить за файбером ``expirationd``." + +#~ msgid "" +#~ "The validation and application functions together allow you to customize the" +#~ " cluster-wide configuration as described in the :ref:`next section `." +#~ msgstr "" +#~ "Функции валидации и применения конфигурации вместе позволяют настраивать " +#~ "конфигурацию всего кластера, как описано в :ref:`следующем разделе `." + +#~ msgid "Configuring custom roles" +#~ msgstr "Конфигурация пользовательских ролей" + +#~ msgid "You can:" +#~ msgstr "Вы можете:" + +#~ msgid "" +#~ "Store your custom roles as sections in cluster-wide configuration, for " +#~ "example:" +#~ msgstr "" +#~ "Хранить пользовательские роли в виде разделов в конфигурации на уровне " +#~ "кластера, например:" + +#~ msgid "" +#~ "Download and upload cluster-wide configuration using :ref:`cluster UI " +#~ "` or API (via GET/PUT queries to ``admin/config`` " +#~ "endpoint like ``curl localhost:8081/admin/config`` and ``curl -X PUT -d " +#~ "\"{'my_parameter': 'value'}\" localhost:8081/admin/config``)." +#~ msgstr "" +#~ "Загружать и выгружать конфигурацию всего кластера через :ref:`веб-интерфейс " +#~ "кластера ` или с помощью API (запросы GET/PUT к " +#~ "конечной точке ``admin/config``: ``curl localhost:8081/admin/config`` и " +#~ "``curl -X PUT -d \"{'my_parameter': 'value'}\" " +#~ "localhost:8081/admin/config``)." + +#~ msgid "Utilize it in your role ``apply_config()`` function." +#~ msgstr "Использовать ее в своей функции ``apply_config()``." + +#~ msgid "" +#~ "Every instance in the cluster stores a copy of the configuration file in its" +#~ " working directory (configured by ``cluster.cfg({workdir = ...})``):" +#~ msgstr "" +#~ "Каждый экземпляр в кластере хранит копию конфигурационного файла в своей " +#~ "рабочей директории (которую можно задать с помощью ``cluster.cfg({workdir = " +#~ "...})``):" + +#~ msgid "" +#~ "``/var/lib/tarantool//config.yml`` for instances deployed " +#~ "from RPM packages and managed by ``systemd``." +#~ msgstr "" +#~ "``/var/lib/tarantool//config.yml`` для экземпляров, " +#~ "развернутых из RPM-пакетов, под управлением ``systemd``." + +#~ msgid "" +#~ "``/home//tarantool_state/var/lib/tarantool/config.yml`` for " +#~ "instances deployed from archives." +#~ msgstr "" +#~ "``/home//tarantool_state/var/lib/tarantool/config.yml`` для " +#~ "экземпляров, развернутых из архивов." + +#~ msgid "" +#~ "The cluster's configuration is a Lua table, downloaded and uploaded as YAML." +#~ " If some application-specific configuration data, e.g., a database schema as" +#~ " defined by DDL (data definition language), has to be stored on every " +#~ "instance in the cluster, you can implement your own API by adding a custom " +#~ "section to the table. The cluster will help you spread it safely across all " +#~ "instances." +#~ msgstr "" +#~ "Конфигурация кластера представляет собой Lua-таблицу, загружаемую и " +#~ "выгружаемую в формате YAML. Если некоторые данные конфигурации для " +#~ "конкретного приложения (например, схему базы данных, описанную с помощью " +#~ "языка определения данных DDL) необходимо хранить в каждом экземпляре " +#~ "кластера, можно использовать свой собственный API, добавив в таблицу " +#~ "специальный раздел. Кластер поможет вам безопасно передать его всем " +#~ "экземплярам." + +#~ msgid "" +#~ "Such section goes in parallel (in the same file) with the topology-specific " +#~ "and ``vshard``-specific ones the cluster automatically generates. Unlike the" +#~ " generated, the custom section's modification, validation, and application " +#~ "logic has to be defined." +#~ msgstr "" +#~ "Такой раздел создается параллельно (в одном файле) с разделами о топологии и" +#~ " о ``vshard``, которые кластер генерирует автоматически. В отличие от " +#~ "сгенерированных разделов, логику изменения, проверки и применения " +#~ "конфигурации в специальном разделе необходимо определять вручную." + +#~ msgid "The common way is to define two functions:" +#~ msgstr "" +#~ "Самый распространенный способ определения двух функций заключается в " +#~ "следующем:" + +#~ msgid "" +#~ "``validate_config(conf_new, conf_old)`` to validate changes made in the new " +#~ "configuration (``conf_new``) versus the old configuration (``conf_old``)." +#~ msgstr "" +#~ "``validate_config(conf_new, conf_old)`` для валидации изменений, сделанных в" +#~ " новой конфигурации (``conf_new``) по отношению к старой конфигурации " +#~ "(``conf_old``)." + +#~ msgid "" +#~ "``apply_config(conf, opts)`` to execute any code related to a configuration " +#~ "change. As input, this function takes the configuration to apply (``conf``, " +#~ "which is actually the new configuration that you validated earlier with " +#~ "``validate_config()``) and options (the ``opts`` argument that includes " +#~ "``is_master``, a Boolean flag described later)." +#~ msgstr "" +#~ "``apply_config(conf, opts)`` для выполнения любого кода, связанного с " +#~ "изменениями конфигурации. Входными данными для этой функции будут " +#~ "применяемая конфигурация (``conf``, которая и есть новая конфигурация, " +#~ "проверенная чуть ранее с помощью ``validate_config()``), а также параметры " +#~ "(аргумент ``opts`` включает в себя описываемый ниже логический флаг " +#~ "``is_master`` )." + +#~ msgid "" +#~ "The ``validate_config()`` function must detect all configuration problems " +#~ "that may lead to ``apply_config()`` errors. For more information, see the " +#~ ":ref:`next section `." +#~ msgstr "" +#~ "Функция ``validate_config()`` должна обнаружить все проблемы конфигурации, " +#~ "которые могут привести к ошибкам ``apply_config()``. Для получения " +#~ "дополнительной информации см. :ref:`следующий раздел `." + +#~ msgid "" +#~ "When implementing validation and application functions that call ``box`` " +#~ "ones for some reason, the following precautions apply:" +#~ msgstr "" +#~ "При реализации функций валидации и применения конфигурации, которые по " +#~ "какой-либо причине вызывают функции ``box``, следует принять следующие меры " +#~ "предосторожности:" + +#~ msgid "" +#~ "Due to the :ref:`role's life cycle `, the cluster " +#~ "does not guarantee an automatic ``box.cfg()`` call prior to calling " +#~ "``validate_config()``." +#~ msgstr "" +#~ ":ref:`Жизненный цикл роли ` не предполагает, что " +#~ "кластер автоматически вызовет ``box.cfg()`` до вызова ``validate_config()``." + +#~ msgid "" +#~ "If the validation function is to call any ``box`` functions (e.g., to check " +#~ "a format), make sure the calls are wrapped in a protective conditional " +#~ "statement that checks if ``box.cfg()`` has already happened:" +#~ msgstr "" +#~ "Если функция валидации должна вызвать какие-либо функции из ``box`` " +#~ "(например, для проверки формата), убедитесь, что вызовы заключены в защитный" +#~ " условный оператор, который проверяет, произошел ли уже вызов ``box.cfg()``:" + +#~ msgid "" +#~ "Unlike the validation and similar to initialization function, " +#~ "``apply_config()`` can call ``box`` functions freely as the cluster applies " +#~ "custom configuration after the automatic ``box.cfg()`` call." +#~ msgstr "" +#~ "В отличие от функции валидации, как и в случае с функцией инициализации, " +#~ "``apply_config()`` может свободно вызывать функции из ``box``, поскольку " +#~ "кластер применяет пользовательскую конфигурацию после автоматического вызова" +#~ " ``box.cfg()``." + +#~ msgid "" +#~ "However, creating spaces, users, etc., can cause replication collisions when" +#~ " performed on both master and replica instances simultaneously. The " +#~ "appropriate way is to call such ``box`` functions on masters only and let " +#~ "the changes propagate to replicas automatically." +#~ msgstr "" +#~ "Однако создание спейсов, пользователей и т.п. может привести к конфликтам " +#~ "репликации при одновременном выполнении на мастере и на реплике. Оптимальный" +#~ " способ заключается в том, чтобы вызывать такие функции из ``box`` только на" +#~ " мастерах и автоматически передавать изменения на реплики." + +#~ msgid "" +#~ "Upon the ``apply_config(conf, opts)`` execution, the cluster passes an " +#~ "``is_master`` flag in the ``opts`` table which you can use to wrap " +#~ "collision-inducing ``box`` functions in a protective conditional statement:" +#~ msgstr "" +#~ "По выполнении ``apply_config(conf, opts)`` кластер передает флаг " +#~ "``is_master`` в таблице ``opts``, который можно использовать для заключения " +#~ "функций из ``box`` в защитный условный оператор, если они могут вызвать " +#~ "конфликт:" + +#~ msgid "Custom configuration example" +#~ msgstr "Пример пользовательской конфигурации" + +#~ msgid "" +#~ "Consider the following code as part of the role's module (``custom-" +#~ "role.lua``) implementation:" +#~ msgstr "" +#~ "Рассмотрим следующий код как часть реализации модуля роли (``custom-" +#~ "role.lua``):" + +#~ msgid "Once the configuration is customized, do one of the following:" +#~ msgstr "После настройки конфигурации выполните одно из следующих действий:" + +#~ msgid "" +#~ "continue developing your application and pay attention to its " +#~ ":ref:`versioning `;" +#~ msgstr "" +#~ "продолжите разработку приложения, обращая особое внимание на " +#~ ":ref:`управление версиями `;" + +#~ msgid "" +#~ "(optional) :ref:`enable authorization ` in the web interface." +#~ msgstr "" +#~ "(необязательно) :ref:`включите авторизацию ` в веб-интерфейсе." + +#~ msgid "" +#~ "in case the cluster is already deployed, :ref:`apply the configuration " +#~ "` cluster-wide." +#~ msgstr "" +#~ "если кластер уже развернут, :ref:`примените конфигурацию ` для всего кластера." + +#~ msgid "Applying custom role's configuration" +#~ msgstr "Применение конфигурации пользовательской роли" + +#~ msgid "" +#~ "With the implementation showed by the :ref:`example `, you can call the ``set_secret()`` function to apply the new " +#~ "configuration via the administrative console or an HTTP endpoint if the role" +#~ " exports one." +#~ msgstr "" +#~ "В :ref:`примере ` реализации можно вызвать " +#~ "функцию ``set_secret()``, чтобы применить новую конфигурацию с помощью " +#~ "административной консоли или конечной точки HTTP, если роль экспортирует " +#~ "таковую." + +#~ msgid "" +#~ "The ``set_secret()`` function calls " +#~ "``cluster.confapplier.patch_clusterwide()`` which performs a two-phase " +#~ "commit:" +#~ msgstr "" +#~ "Функция ``set_secret()`` вызывает " +#~ "``cluster.confapplier.patch_clusterwide()``, которая производит двухфазную " +#~ "фиксацию транзакций:" + +#~ msgid "" +#~ "It patches the active configuration in memory: copies the table and replaces" +#~ " the ``\"custom-role\"`` section in the copy with the one given by the " +#~ "``set_secret()`` function." +#~ msgstr "" +#~ "Исправляет активную конфигурацию в памяти: копирует таблицу и заменяет " +#~ "раздел ``\"custom-role\"`` в копии на раздел, который задан функцией " +#~ "``set_secret()``." + +#~ msgid "" +#~ "The cluster checks if the new configuration can be applied on all instances " +#~ "except disabled and expelled. All instances subject to update must be " +#~ "healthy and ``alive`` according to the :ref:`membership module `." +#~ msgstr "" +#~ "Кластер проверяет, можно ли применить новую конфигурацию ко всем " +#~ "экземплярам, кроме отключенных и исключенных. Все обновляемые экземпляры " +#~ "должны быть исправными и рабочими в соответствии с требованиями :ref:`модуля" +#~ " membership `." + +#~ msgid "" +#~ "(**Preparation phase**) The cluster propagates the patched configuration. " +#~ "Every instance validates it with the ``validate_config()`` function of every" +#~ " registered role. Depending on the validation's result:" +#~ msgstr "" +#~ "(**Фаза подготовки**) Кластер передает исправленную конфигурацию. Каждый " +#~ "экземпляр валидирует ее с помощью функции ``validate_config()`` каждой " +#~ "зарегистрированной роли. В зависимости от результата валидации:" + +#~ msgid "" +#~ "If successful (i.e., returns ``true``), the instance saves the new " +#~ "configuration to a temporary file named ``config.prepare.yml`` within the " +#~ "working directory." +#~ msgstr "" +#~ "В случае успеха (то есть возврата значения ``true``) экземпляр сохраняет " +#~ "новую конфигурацию во временный файл с именем ``config.prepare.yml`` в " +#~ "рабочей директории." + +#~ msgid "" +#~ "(**Abort phase**) Otherwise, the instance reports an error and all other " +#~ "instances roll back the update: remove the file they may have already " +#~ "prepared." +#~ msgstr "" +#~ "(**Фаза отмены**) В противном случае экземпляр сообщает об ошибке, а все " +#~ "остальные экземпляры откатывают обновление: удаляют файл, который они, " +#~ "возможно, уже подготовили." + +#~ msgid "" +#~ "(**Commit phase**) Upon successful preparation of all instances, the cluster" +#~ " commits the changes. Every instance:" +#~ msgstr "" +#~ "(**Фаза фиксации**) После успешной подготовки всех экземпляров кластер " +#~ "фиксирует изменения. Каждый экземпляр:" + +#~ msgid "Creates the active configuration's hard-link." +#~ msgstr "Создает жесткую ссылку активной конфигурации." + +#~ msgid "" +#~ "Atomically replaces the active one with the prepared. The atomic replacement" +#~ " is indivisible -- it can either succeed or fail entirely, never partially." +#~ msgstr "" +#~ "Атомарно заменяет активную на подготовленную. Атомарная замена неделима, то " +#~ "есть она может быть либо выполнена, либо не выполнена полностью, но не " +#~ "частично." + +#~ msgid "Calls the ``apply_config()`` function of every registered role." +#~ msgstr "Вызывает функцию ``apply_config()`` каждой зарегистрированной роли." + +#~ msgid "" +#~ "If any of these steps fail, an error pops up in the web interface next to " +#~ "the corresponding instance. The cluster does not handle such errors " +#~ "automatically, they require manual repair." +#~ msgstr "" +#~ "Если любой из этих шагов не будет выполнен, в веб-интерфейсе появится ошибка" +#~ " рядом с соответствующим экземпляром. Кластер не обрабатывает такие ошибки " +#~ "автоматически, их необходимо исправлять вручную." + +#~ msgid "" +#~ "You will avoid the repair if the ``validate_config()`` function can detect " +#~ "all configuration problems that may lead to ``apply_config()`` errors." +#~ msgstr "" +#~ "Такого рода исправлений можно избежать, если функция ``validate_config()`` " +#~ "сможет обнаружить все проблемы конфигурации, которые могут привести к " +#~ "ошибкам в ``apply_config()``." + +#~ msgid "Using the built-in HTTP server" +#~ msgstr "Использование встроенного HTTP-сервера" + +#~ msgid "" +#~ "The cluster launches an ``httpd`` server instance during initialization " +#~ "(``cluster.cfg()``). You can bind a port to the instance via an " +#~ "environmental variable:" +#~ msgstr "" +#~ "Кластер запускает экземпляр ``httpd``-сервера во время инициализации " +#~ "(``cluster.cfg()``). Можно привязать порт к экземпляру через переменную " +#~ "окружения:" + +#~ msgid "" +#~ "To make use of the ``httpd`` instance, access it and configure routes inside" +#~ " the ``init()`` function of some role, e.g. a role that exposes API over " +#~ "HTTP:" +#~ msgstr "" +#~ "Чтобы использовать ``httpd``-экземпляр, получите к нему доступ и настройте " +#~ "маршруты в рамках функции ``init()`` для какой-либо роли (например, для " +#~ "роли, которая предоставляет API через HTTP):" + +#~ msgid "" +#~ "For more information on the usage of Tarantool's HTTP server, see `its " +#~ "documentation `_." +#~ msgstr "" +#~ "Для получения дополнительной информации об использовании HTTP-сервера " +#~ "Tarantool обратитесь к `соответствующей документации " +#~ "`_." + +#~ msgid "" +#~ "To implement authorization in the web interface of every instance in " +#~ "Tarantool cluster:" +#~ msgstr "" +#~ "Чтобы реализовать авторизацию в веб-интерфейсе каждого экземпляра в кластере" +#~ " Tarantool:" + +#~ msgid "" +#~ "Implement a new, say, ``auth`` module with a ``check_password`` function. It" +#~ " should check the credentials of any user trying to log in to the web " +#~ "interface." +#~ msgstr "" +#~ "Используйте модуль, к примеру, ``auth`` с функцией ``check_password``. " +#~ "Данная функция проверяет учетные данные любого пользователя, который " +#~ "пытается войти в веб-интерфейс." + +#~ msgid "" +#~ "The ``check_password`` function accepts a username and password and returns " +#~ "an authentication success or failure." +#~ msgstr "" +#~ "Функция ``check_password`` принимает имя пользователя и пароль и возвращает " +#~ "результат аутентификации: пройдена или нет." + +#~ msgid "" +#~ "Pass the implemented ``auth`` module name as a parameter to " +#~ "``cluster.cfg()``, so the cluster can use it:" +#~ msgstr "" +#~ "Передайте имя используемого модуля ``auth`` в качестве параметра для " +#~ "``cluster.cfg()``, чтобы кластер мог использовать его:" + +#~ msgid "" +#~ "This adds a **Log in** button to the upper right corner of the web interface" +#~ " but still lets the unsigned users interact with the interface. This is " +#~ "convenient for testing." +#~ msgstr "" +#~ "Это добавит кнопку **Log in** (Войти) в верхний правый угол в веб-" +#~ "интерфейсе, но все же позволит неавторизованным пользователям " +#~ "взаимодействовать с интерфейсом, что удобно для тестирования." + +#~ msgid "" +#~ "Also, to authorize requests to cluster API, you can use the HTTP basic " +#~ "authorization header." +#~ msgstr "" +#~ "Кроме того, для авторизации запросов к API кластера можно использовать " +#~ "базовый заголовок HTTP для авторизации." + +#~ msgid "" +#~ "To require the authorization of every user in the web interface even before " +#~ "the cluster bootstrap, add the following line:" +#~ msgstr "" +#~ "Чтобы требовать авторизацию каждого пользователя в веб-интерфейсе даже до " +#~ "начальной загрузки кластера, добавьте следующую строку:" + +#~ msgid "" +#~ "With the authentication enabled and the ``auth`` module implemented, the " +#~ "user will not be able to even bootstrap the cluster without logging in. " +#~ "After the successful login and bootstrap, the authentication can be enabled " +#~ "and disabled cluster-wide in the web interface and the ``auth_enabled`` " +#~ "parameter is ignored." +#~ msgstr "" +#~ "С включенной аутентификацией при использовании модуля ``auth`` пользователь " +#~ "не сможет даже загрузить кластер без входа в систему. После успешного входа " +#~ "в систему и начальной загрузки можно включить и отключить аутентификацию для" +#~ " всего кластера в веб-интерфейсе, а параметр ``auth_enabled`` игнорируется." + +#~ msgid "Application versioning" +#~ msgstr "Управление версиями приложения" + +#~ msgid "" +#~ "Tarantool Enterprise understands semantic versioning as described at " +#~ "`semver.org `_. When developing an application, create " +#~ "new Git branches and tag them appropriately. These tags are used to " +#~ "calculate version increments for subsequent packaging." +#~ msgstr "" +#~ "В Tarantool Enterprise семантическое управление версиями осуществляется так," +#~ " как описано на сайте `semver.org `_. При разработке " +#~ "приложения создайте новые ветки Git и пометьте их соответствующими тегами. " +#~ "Эти теги используются для расчета увеличения значения версий для последующей" +#~ " упаковки." + +#~ msgid "" +#~ "For example, if your application has version 1.2.1, tag your current branch " +#~ "with ``1.2.1`` (annotated or not)." +#~ msgstr "" +#~ "Например, если версия вашего приложения -- 1.2.1, пометьте текущую ветку " +#~ "тегом ``1.2.1`` (с аннотациями или без них)." + +#~ msgid "To retrieve the current version from Git, say:" +#~ msgstr "Чтобы получить значение текущей версии из Git, выполните команду:" + +#~ msgid "" +#~ "This output shows that we are 12 commits after the version 1.2.1. If we are " +#~ "to package the application at this point, it will have a full version of " +#~ "``1.2.1-12`` and its package will be named ``-1.2.1-12.rpm``." +#~ msgstr "" +#~ "Вывод показывает, что после версии 1.2.1 было 12 коммитов. Если мы соберемся" +#~ " упаковать приложение на данном этапе, его полная версия будет ``1.2.1-12``," +#~ " а пакет будет называться ``<имя_приложения>-1.2.1-12.rpm``." + +#~ msgid "" +#~ "Non-semantic tags are prohibited. You will not be able to create a package " +#~ "from a branch with the latest tag being non-semantic." +#~ msgstr "" +#~ "Запрещается использовать не семантические теги. Вы не сможете создать пакет " +#~ "из ветки, если последний тег не будет семантическим." + +#~ msgid "" +#~ "Once you :ref:`package ` your application, the " +#~ "version is saved in a ``VERSION`` file in the package root." +#~ msgstr "" +#~ "После :ref:`упаковки ` приложения его версия " +#~ "сохраняется в файл ``VERSION`` в корневой каталог пакета." + +#~ msgid "Using .tarantoolapp.ignore files" +#~ msgstr "Использование файлов .tarantoolapp.ignore" + +#~ msgid "" +#~ "You can add a ``.tarantoolapp.ignore`` file to your application repository " +#~ "to exclude particular files and/or directories from package builds." +#~ msgstr "" +#~ "В репозиторий приложения можно добавить файл ``.tarantoolapp.ignore``, чтобы" +#~ " не включать определенные файлы и/или директории в сборки пакета." + +#~ msgid "" +#~ "For the most part, the logic is similar to that of ``.gitignore`` files. The" +#~ " major difference is that in ``.tarantoolapp.ignore`` files the order of " +#~ "exceptions relative to the rest of the templates does not matter, while in " +#~ "``.gitignore`` files the order does matter." +#~ msgstr "" +#~ "По большей части логика похожа на логику файлов ``.gitignore``. Основное " +#~ "отличие состоит в том, что в файлах ``.tarantoolapp.ignore`` порядок " +#~ "исключения относительно остальных шаблонов не имеет значения, а в файлах " +#~ "``.gitignore`` -- имеет." + +#~ msgid "**.tarantoolapp.ignore** entry" +#~ msgstr "запись в **.tarantoolapp.ignore**" + +#~ msgid "ignores every..." +#~ msgstr "игнорирует все..." + +#~ msgid "``target/``" +#~ msgstr "``target/``" + +#~ msgid "**folder** (due to the trailing ``/``) named ``target``, recursively" +#~ msgstr "" +#~ "**папки** (поскольку в конце стоит ``/``) под названием ``target`` " +#~ "рекурсивно" + +#~ msgid "``target``" +#~ msgstr "``target``" + +#~ msgid "**file or folder** named ``target``, recursively" +#~ msgstr "**файлы или папки** под названием ``target`` рекурсивно" + +#~ msgid "``/target``" +#~ msgstr "``/target``" + +#~ msgid "" +#~ "**file or folder** named ``target`` in the top-most directory (due to the " +#~ "leading ``/``)" +#~ msgstr "" +#~ "**файлы или папки** под названием ``target`` в самой верхней директории " +#~ "(поскольку в начале стоит ``/``)" + +#~ msgid "``/target/``" +#~ msgstr "``/target/``" + +#~ msgid "" +#~ "**folder** named ``target`` in the top-most directory (leading and trailing " +#~ "``/``)" +#~ msgstr "" +#~ "**папки** под названием ``target`` в самой верхней директории (в начале и в " +#~ "конце стоит ``/``)" + +#~ msgid "``*.class``" +#~ msgstr "``*.class``" + +#~ msgid "every **file or folder** ending with ``.class``, recursively" +#~ msgstr "**файлы или папки**, оканчивающиеся на ``.class``, рекурсивно" + +#~ msgid "``#comment``" +#~ msgstr "``#comment``" + +#~ msgid "nothing, this is a comment (the first character is a ``#``)" +#~ msgstr "ничего, это комментарий (первый символ -- ``#``)" + +#~ msgid "``\\#comment``" +#~ msgstr "``\\#comment``" + +#~ msgid "every **file or folder** with name ``#comment`` (``\\`` for escaping)" +#~ msgstr "**файлы или папки** под названием ``#comment`` (``\\`` для выделения)" + +#~ msgid "``target/logs/``" +#~ msgstr "``target/logs/``" + +#~ msgid "" +#~ "every **folder** named ``logs`` which is a subdirectory of a folder named " +#~ "``target``" +#~ msgstr "" +#~ "**папки** под названием ``logs``, которые представляют собой поддиректорию " +#~ "папки под названием ``target``" + +#~ msgid "``target/*/logs/``" +#~ msgstr "``target/*/logs/``" + +#~ msgid "" +#~ "every **folder** named ``logs`` two levels under a folder named ``target`` " +#~ "(``*`` doesn’t include ``/``)" +#~ msgstr "" +#~ "**папки** под названием ``logs`` на два уровня ниже папки под названием " +#~ "``target`` (``*`` не включает ``/``)" + +#~ msgid "``target/**/logs/``" +#~ msgstr "``target/**/logs/``" + +#~ msgid "" +#~ "every **folder** named ``logs`` somewhere under a folder named ``target`` " +#~ "(``**`` includes ``/``)" +#~ msgstr "" +#~ "**папки** под названием ``logs`` где угодно в пределах папки ``target`` " +#~ "(``**`` включает ``/``)" + +#~ msgid "``*.py[co]``" +#~ msgstr "``*.py[co]``" + +#~ msgid "" +#~ "every **file or folder** ending in ``.pyc`` or ``.pyo``; however, it doesn’t" +#~ " match ``.py!``" +#~ msgstr "" +#~ "**файлы или папки**, оканчивающиеся на ``.pyc`` или ``.pyo``, но не на " +#~ "``.py!``" + +#~ msgid "``*.py[!co]``" +#~ msgstr "``*.py[!co]``" + +#~ msgid "every **file or folder** ending in anything other than ``c`` or ``o``" +#~ msgstr "" +#~ "**файлы или папки**, оканчивающиеся на что угодно, кроме ``c`` или ``o``" + +#~ msgid "``*.file[0-9]``" +#~ msgstr "``*.file[0-9]``" + +#~ msgid "every **file or folder** ending in digit" +#~ msgstr "**файлы или папки**, оканчивающиеся на цифру" + +#~ msgid "``*.file[!0-9]``" +#~ msgstr "``*.file[!0-9]``" + +#~ msgid "every **file or folder** ending in anything other than digit" +#~ msgstr "**файлы или папки**, оканчивающиеся на что угодно, кроме цифры" + +#~ msgid "``*``" +#~ msgstr "``*``" + +#~ msgid "**every**" +#~ msgstr "**всё**" + +#~ msgid "``/*``" +#~ msgstr "``/*``" + +#~ msgid "**everything** in the top-most directory (due to the leading ``/``)" +#~ msgstr "**всё** в самой верхней директории (поскольку в начале стоит ``/``)" + +#~ msgid "``**/*.tar.gz``" +#~ msgstr "``**/*.tar.gz``" + +#~ msgid "" +#~ "every ``*.tar.gz`` file or folder which is **one or more** levels under the " +#~ "starting folder" +#~ msgstr "" +#~ "every ``*.tar.gz`` file or folder which is **one or more** levels under the " +#~ "starting folder" + +#~ msgid "``!file``" +#~ msgstr "``!file``" + +#~ msgid "" +#~ "every **file or folder** will be ignored even if it matches other patterns" +#~ msgstr "" +#~ "every **file or folder** will be ignored even if it matches other patterns" + +#~ msgid "" +#~ "Take the ``tarantoolctl`` binary from the SDK and upload it anywhere on the " +#~ "server. If you do not have root privileges, a good place is ``$HOME/bin``. " +#~ "Add this path to your ``~/.bash_profile``:" +#~ msgstr "" +#~ "Возьмите бинарный файл ``tarantoolctl`` из SDK и загрузите его в любое место" +#~ " на сервере. Если у вас нет прав уровня root, оптимально будет поместить его" +#~ " в ``$HOME/bin``. Добавьте этот путь в ``~/.bash_profile``:" + +#~ msgid "" +#~ "Configure ``tarantoolctl`` to look for Tarantool instances in a certain " +#~ "place. For example, add the following lines to " +#~ "``~/.config/tarantool/tarantool``:" +#~ msgstr "" +#~ "Настройте ``tarantoolctl`` для поиска экземпляров Tarantool в определенном " +#~ "месте. Например, добавьте следующие строки в " +#~ "``~/.config/tarantool/tarantool``:" + +#~ msgid "" +#~ "where ```` is the username of an account without root privileges, the " +#~ "``instance_dir`` is the directory to unpack applications to, and the rest " +#~ "are state directories." +#~ msgstr "" +#~ "где ```` (пользователь) -- это имя пользователя учетной записи без " +#~ "прав уровня root, ``instance_dir`` -- это директория для распаковки " +#~ "приложений, а прочее -- это директории состояния." + +#~ msgid "" +#~ "where ```` is the incremental number (unique for every instance) to " +#~ "be added to the ``3300`` port the instance will listen to (e.g., ``3301``, " +#~ "``3302``, etc.)." +#~ msgstr "" +#~ "где ```` (число) -- это инкрементное число (уникальное для каждого " +#~ "экземпляра), которое следует добавить к порту ``3300`` для настройки " +#~ "прослушивания (например, ``3301``, ``3302`` и т.д.)." + +#~ msgid "" +#~ "This starts several instances from the same directory " +#~ "``/home//apps/`` but their state files differ depending on " +#~ "the suffix after ``@``. For example, the log file of the first instance will" +#~ " have the following path:" +#~ msgstr "" +#~ "Это запускает несколько экземпляров из одной директории " +#~ "``/home/<пользователь>/apps/<имя_приложения>``, но файлы состояния будут " +#~ "отличаться в зависимости от суффикса после @. Например, путь к файлу журнала" +#~ " первого экземпляра будет следующим:" + +#~ msgid "" +#~ "To stop all instances on a server, run the following command for every " +#~ "instance:" +#~ msgstr "" +#~ "Чтобы остановить все экземпляры сервера, выполните следующую команду для " +#~ "каждого экземпляра:" + +#~ msgid "" +#~ "The example in the ``cluster/`` directory showcases a simple cluster-aware " +#~ "application. It consists of the following files:" +#~ msgstr "" +#~ "Пример в директории ``cluster/`` представляет собой простое приложение с " +#~ "поддержкой кластеров. Он состоит из следующих файлов:" + +#~ msgid "" +#~ "``init.lua`` -- module containing the ``cluster.cfg()`` initialization " +#~ "function." +#~ msgstr "" +#~ "``init.lua`` -- модуль, который содержит функцию инициализации " +#~ "``cluster.cfg()``." + +#~ msgid "" +#~ "``app.lua`` -- role module to contain your stored procedures and API calls." +#~ msgstr "" +#~ "``app.lua`` -- модуль роли, который содержит хранимые процедуры и вызовы " +#~ "API." + +#~ msgid "``storage.lua`` -- role module defining functions for the database." +#~ msgstr "" +#~ "``storage.lua`` -- модуль роли, который определяет функции для базы данных." + +#~ msgid "" +#~ "``deps.sh`` -- script to resolve rocks dependencies from an offline " +#~ "repository included in the archive." +#~ msgstr "" +#~ "``deps.sh`` -- скрипт для решения проблем с зависимостями сторонних " +#~ "библиотек из автономного репозитория, который включен в данный архив." + +#~ msgid "``start.sh`` -- script to start several Tarantool instances." +#~ msgstr "``start.sh`` -- скрипт для запуска нескольких экземпляров Tarantool." + +#~ msgid "``assemble.sh`` -- script to assemble the cluster." +#~ msgstr "``assemble.sh`` -- скрипт для сборки кластера." + +#~ msgid "" +#~ "``test.py`` -- health check test showing how to put and get data from the " +#~ "running application." +#~ msgstr "" +#~ "``test.py`` -- проверка работоспособности, которая показывает, как поместить" +#~ " и получить данные из запущенного приложения." + +#~ msgid "``clean.sh`` -- script to clean the data." +#~ msgstr "``clean.sh`` -- скрипт для очистки данных." + +#~ msgid "To start the sample application, do the following:" +#~ msgstr "Чтобы запустить пример приложения, выполните следующие действия:" + +#~ msgid "Start several instances:" +#~ msgstr "Запустите несколько экземпляров:" + +#~ msgid "" +#~ "Assemble the cluster by assigning roles to instances in the web interface or" +#~ " simply run:" +#~ msgstr "" +#~ "Соберите кластер путем назначения ролей для экземпляров в веб-интерфейсе или" +#~ " просто выполните команду:" + +#~ msgid "To check if all the instances are up and running, say:" +#~ msgstr "" +#~ "Чтобы удостовериться, что все экземпляры запущены и работают, выполните " +#~ "команду:" + +#~ msgid "" +#~ "To run a basic sanity check on the application, use the provided test " +#~ "script:" +#~ msgstr "" +#~ "Чтобы запустить базовую проверку работоспособности приложения, используйте " +#~ "предоставленный тестовый скрипт:" + +#~ msgid "To clean the data after, say:" +#~ msgstr "Чтобы после этого выполнить очистку данных, выполните команду:" + +#~ msgid "To stop the application, say:" +#~ msgstr "Чтобы остановить приложение, выполните команду:" diff --git a/locale/ru/LC_MESSAGES/enterprise/migration.po b/locale/ru/LC_MESSAGES/enterprise/migration.po new file mode 100644 index 0000000000..83e1775748 --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/migration.po @@ -0,0 +1,78 @@ + +msgid "Migration from Tarantool Cartridge" +msgstr "Миграция с Tarantool Cartridge" + +msgid "" +"If your company uses a service based on Tarantool Community Edition and " +"Tarantool Cartridge, follow the steps below to update these components to " +"Tarantool Enterprise Edition." +msgstr "" +"Если в вашей организации развернут сервис, разработанный с использованием " +"Tarantool Community Edition и фреймворка Tarantool Cartridge, вы можете " +"легко обновить его так, чтобы вместо этого использовалась версия Tarantool " +"Enterprise. Для этого выполните шаги ниже." + +msgid "" +"As a reference, the instructions below use a template service created with " +"``cartridge-cli``, namely with ``cartridge create --name myapp .``." +msgstr "" +"Инструкции приводятся для шаблонного сервиса, созданного с помощью утилиты " +"``cartridge-cli`` командой ``cartridge create —name myapp .``." + +msgid "Service build pipeline" +msgstr "Пайплайн сборки сервиса" + +msgid "" +"Get access to the source code and build pipeline of your service. Here is an" +" example of what the service build pipeline might look like for CentOS/RHEL " +"7:" +msgstr "" +"Получите доступ к исходному коду сервиса и пайплайну его сборки. Для " +"простоты предположим, что пайплайн сборки сервиса выглядит так (для " +"CentOS/RHEL 7):" + +msgid "Update the pipeline" +msgstr "Внесите изменения в пайплайн" + +msgid "" +"In the installation section of your pipeline, replace open-source " +"``tarantool`` packages with Tarantool Enterprise SDK:" +msgstr "" +"Замените в пайплайне установку open-source-пакетов ``tarantool`` на " +"установку Tarantool Enterprise SDK:" + +msgid "" +"Now the pipeline will produce a new service artifact, which includes " +"Tarantool Enterprise." +msgstr "" +"Теперь в результате исполнения пайплайна получится новый артефакт сервиса, " +"уже включающий в себя ядро Tarantool Enterprise." + +msgid "Update the service" +msgstr "Обновите сервис" + +msgid "" +"Update your service to the new version like you usually update Tarantool in " +"your organization. You don't have to interrupt access to the service. To " +"learn how to do it with ``ansible-cartridge``, `check this example " +"`__." +msgstr "" +"Обновите сервис на новую версию, используя стандартные подходы к обновлению " +"версий Tarantool в вашей организации. Это может быть сделано без прерывания " +"доступности. `Посмотрите `__, как это сделать с помощью " +"инструмента ``ansible-cartridge``." + +msgid "That's it!" +msgstr "Готово!" + +msgid "" +"You can now use Tarantool Enterprise Edition's features in your installation. For " +"example, to enable the audit log, :ref:`set up the audit_log parameter in " +"your node configuration `." +msgstr "" +"Теперь вы можете использовать функциональные возможности Tarantool " +"Enterprise в своей инсталляции. К примеру, чтобы включить журнал аудита, " +"достаточно задать в конфигурации узлов параметр ``audit_log``, как описано " +":ref:`в инструкции `." diff --git a/locale/ru/LC_MESSAGES/enterprise/rocksref.po b/locale/ru/LC_MESSAGES/enterprise/rocksref.po new file mode 100755 index 0000000000..01017a00b1 --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/rocksref.po @@ -0,0 +1,1007 @@ + +msgid "Modules reference" +msgstr "Справочник по модулям" + +msgid "" +"This section covers open and closed source Lua modules for Tarantool " +"Enterprise Edition included in the distribution as an offline rocks repository." +msgstr "" +"В данной главе рассматриваются Lua-модули с открытым и закрытым исходным " +"кодом для Tarantool Enterprise, которые включены в дистрибутив в качестве " +"автономного репозитория сторонних библиотек." + +msgid "Open source modules" +msgstr "Модули с открытым исходным кодом:" + +msgid "" +"`avro-schema `_ is an assembly of `Apache Avro " +"`_ schema tools;" +msgstr "" +"`avro-schema `_ -- набор инструментов для схемы `Apache Avro" +" `_;" + +msgid "" +"`cartridge `_ is a high-" +"level cluster management interface that contains several modules:" +msgstr "" +"`cartridge `_ -- это " +"высокоуровневый интерфейс управления кластером, который содержит несколько " +"модулей:" + +msgid "" +"``rpc`` implements remote procedure calls between cluster instances and " +"allows roles running on some instances to interact with other roles on other" +" instances." +msgstr "" +"``rpc`` обеспечивает удаленные вызовы процедур между экземплярами кластера и" +" позволяет ролям, запущенным на некоторых экземплярах, взаимодействовать с " +"другими ролями в других экземплярах." + +msgid "" +"``service-registry`` implements inter-role interaction and allows different " +"roles to interact with each other in the scope of one instance." +msgstr "" +"``service-registry`` обеспечивает взаимодействие между ролями и позволяет " +"различным ролям взаимодействовать друг с другом в рамках одного экземпляра." + +msgid "" +"``confapplier`` implements cluster-wide configuration validation and " +"application via a two-phase commit." +msgstr "" +"``confapplier`` обеспечивает валидацию и применение конфигурации в масштабе " +"всего кластера с помощью двухфазной фиксации." + +msgid "``auth`` manages authentication." +msgstr "``auth`` управляет аутентификацией." + +msgid "``pool`` reuses Tarantool's ``net.box`` connections." +msgstr "``pool`` повторно использует соединения ``net.box`` в Tarantool." + +msgid "``admin`` implements administration functions." +msgstr "``admin`` обеспечивает функции администрирования." + +msgid "" +"`cartridge-cli " +"`_ is the command-line interface for the ``cartridge`` module." +msgstr "" +"`cartridge-cli " +"`_ -- это интерфейс командной строки для модуля ``cartridge``." + +msgid "" +"`checks `_ is a " +"type checker of functional arguments. This library that declares a " +"``checks()`` function and ``checkers`` table that allow to check the " +"parameters passed to a Lua function in a fast and unobtrusive way." +msgstr "" +"`checks `_ -- это" +" модуль контроля типов функциональных аргументов. Эта библиотека объявляет " +"функцию ``checks()`` и таблицу ``checkers``, которые позволяют быстро и " +"незаметно проверять параметры, передаваемые в Lua-функцию." + +msgid "" +"`http `_ is an on-" +"board HTTP-server, which comes in addition to Tarantool's out-of-the-box " +"HTTP client, and must be installed as described in the :ref:`installation " +"section `." +msgstr "" +"`http `_ -- это " +"встроенный HTTP-сервер, который дополняет стандартный HTTP-клиент и требует " +"установки, как описано в :ref:`разделе по установке `." + +msgid "" +"`icu-date `_ is" +" a date-and-time formatting library for Tarantool based on International " +"Components for Unicode;" +msgstr "" +"`icu-date `_ --" +" библиотека форматирования даты и времени для Tarantool, которая основана на" +" библиотеке для работы с Unicode (International Components for Unicode);" + +msgid "" +"`kafka `_ is a " +"full-featured high-performance ``kafka`` library for Tarantool based on " +"``librdkafka``;" +msgstr "" +"`kafka `_ -- это " +"полноценная высокопроизводительная библиотека ``kafka`` для Tarantool на " +"основе ``librdkafka``;" + +msgid "" +"`luacheck `_ is a static analyzer and" +" linter for Lua, preconfigured for Tarantool." +msgstr "" + +msgid "" +"`luarapidxml " +"`_ is a fast" +" XML parser." +msgstr "" +"`luarapidxml " +"`_ -- " +"быстрый анализатор XML." + +msgid "" +"`luatest `_ is a" +" Tarantool test framework written in Lua." +msgstr "" +"`luatest `_ -- " +"среда тестирования Tarantool, которая написана на Lua." + +msgid "" +"`membership " +"`_" +" builds a mesh from multiple Tarantool instances based on gossip protocol. " +"The mesh monitors itself, helps members discover everyone else in the group " +"and get notified about their status changes with low latency. It is built " +"upon the ideas from Consul or, more precisely, the SWIM algorithm." +msgstr "" +"`membership " +"`_" +" создает сеть из нескольких экземпляров Tarantool на основе протокола " +"gossip. Сеть сама контролирует себя, помогает участникам обнаружить всех " +"остальных в группе и получать уведомления об изменениях своего статуса с " +"низкой задержкой. Модуль основан на концепциях из Consul или, точнее, " +"алгоритма SWIM." + +msgid "" +":doc:`metrics ` is a " +"collection of useful monitoring metrics." +msgstr "" +":doc:`metrics ` -- набор " +"полезных метрик для мониторинга." + +msgid "" +"`vshard " +"`_ is" +" an automatic sharding system that enables horizontal scaling for Tarantool " +"DBMS instances." +msgstr "" +"`vshard " +"`_ --" +" автоматическая система шардинга для горизонтального масштабирования " +"экземпляров СУБД Tarantool." + +msgid "Closed source modules" +msgstr "Модули с закрытым исходным кодом" + +msgid "" +"`ldap `_ " +"allows you to authenticate in a LDAP server and perform searches." +msgstr "" +"`ldap `_ " +"позволяет осуществлять аутентификацию на сервере LDAP и выполнять поиск." + +msgid "" +"`odbc `_ " +"is an ODBC connector for Tarantool based on unixODBC." +msgstr "" +"`odbc `_ " +"-- коннектор ODBC для Tarantool на основе unixODBC." + +msgid "" +"`oracle " +"`_ is " +"an Oracle connector for Lua applications through which they can send and " +"receive data to and from Oracle databases. The advantage of the Tarantool-" +"Oracle integration is that anyone can handle all the tasks with Oracle DBMSs" +" (control, manipulation, storage, access) with the same high-level language " +"(Lua) and with minimal delay." +msgstr "" +"`oracle " +"`_ -- " +"коннектор Oracle для Lua-приложений, с помощью которого они могут обращаться" +" к базам данных Oracle. Преимущество интеграции Tarantool-Oracle состоит в " +"том, что любой может выполнять задачи по работе с СУБД Oracle (управление, " +"обработка, хранение, доступ) на одном языке высокого уровня (Lua) с " +"минимальной задержкой." + +msgid "" +"`task `_ is a " +"module for managing background tasks in a Tarantool cluster." +msgstr "" +"`task `_ -- " +"модуль для управления фоновыми задачами в Tarantool-кластере." + +msgid "" +"`tracing `_" +" is a module for debugging performance issues." +msgstr "" +"`tracing `_" +" -- модуль для отладки проблем с производительностью." + +msgid "" +"`space-explorer " +"`_ is a module for exploring Tarantool spaces in " +"``cartridge``." +msgstr "" +"`space-explorer " +"`_ -- модуль для просмотра спейсов Tarantool в ``cartridge``." + +msgid "Installing and using modules" +msgstr "Установка и использование модулей" + +msgid "To use a module, install the following:" +msgstr "Чтобы использовать модуль, установите следующие элементы:" + +msgid "" +"All the necessary third-party software packages (if any). See the module's " +"prerequisites for the list." +msgstr "" +"Все необходимые сторонние пакеты программного обеспечения (при " +"необходимости). Список программ см. в требованиях модуля." + +msgid "The module itself on every Tarantool instance:" +msgstr "Сам модуль на каждый экземпляр Tarantool:" + +msgid "" +"See also other useful `tarantoolctl commands " +"`_ for managing Tarantool modules." +msgstr "" +"Для получения информации об управлении модулями Tarantool см. также другие " +"важные `команды tarantoolctl " +"`_." + +#~ msgid "" +#~ "The ``membership`` module works over UDP protocol and can operate even " +#~ "before the ``box.cfg`` initialization." +#~ msgstr "" +#~ "Модуль ``membership`` работает по протоколу UDP и может производить операции" +#~ " даже до инициализации ``box.cfg``." + +#~ msgid "Member data structure" +#~ msgstr "Структура членов данных" + +#~ msgid "A member is represented by the table with the following fields:" +#~ msgstr "Члены-данные представлены в виде таблиц со следующими полями:" + +#~ msgid "``uri`` (string) is a Uniform Resource Identifier." +#~ msgstr "``uri`` (строка) -- это унифицированный идентификатор ресурса." + +#~ msgid "``status`` (string) is a string that takes one of the values below." +#~ msgstr "" +#~ "``status`` (строка) -- это строка, которая принимает одно из следующих " +#~ "значений." + +#~ msgid "" +#~ "``alive``: a member that replies to ping-messages is ``alive`` and well." +#~ msgstr "" +#~ "``alive``: член группы, который отвечает на сообщения проверки связи, " +#~ "работоспособен в статусе ``alive``." + +#~ msgid "" +#~ "``suspect``: if any member in the group cannot get a reply from any other " +#~ "member, the first member asks three other ``alive`` members to send a ping-" +#~ "message to the member in question. If there is no response, the latter " +#~ "becomes a ``suspect``." +#~ msgstr "" +#~ "``suspect``: если какой-либо член группы не может получить ответ от какого-" +#~ "либо другого участника, первый член группы просит трех других активных " +#~ "членов группы в статусе ``alive`` отправить сообщение проверки связи " +#~ "соответствующему участнику. Если ответа нет, последний получает статус " +#~ "сомнительного, то есть ``suspect``." + +#~ msgid "``dead``: a ``suspect`` becomes ``dead`` after a timeout." +#~ msgstr "" +#~ "``dead``: член группы в статусе ``suspect`` получает статус вышедшего из " +#~ "строя ``dead`` по истечении времени ожидания.." + +#~ msgid "" +#~ "``left``: a member gets the ``left`` status after executing the " +#~ ":ref:`leave() ` function." +#~ msgstr "" +#~ "``left``: член группы получает статус выбывшего ``left`` после выполнения " +#~ "функции :ref:`leave() `." + +#~ msgid "" +#~ "The gossip protocol guarantees that every member in the group becomes aware " +#~ "of any status change in two communication cycles." +#~ msgstr "" +#~ "Протокол gossip гарантирует, что каждый член группы узнает о любом изменении" +#~ " статуса в двух циклах связи." + +#~ msgid "" +#~ "``incarnation`` (number) is a value incremented every time the instance is " +#~ "becomes a ``suspect``, ``dead``, or updates its payload." +#~ msgstr "" +#~ "``incarnation`` (число) -- это значение, которое увеличивается каждый раз, " +#~ "когда экземпляр получает статус ``suspect``, ``dead`` или обновляет полезную" +#~ " нагрузку." + +#~ msgid "" +#~ "``payload`` (table) is auxiliary data that can be used by various modules." +#~ msgstr "" +#~ "``payload`` (таблица) -- это вспомогательные данные, которыми могут " +#~ "воспользоваться различные модули." + +#~ msgid "``timestamp`` (number) is a value of ``fiber.time64()`` which:" +#~ msgstr "``timestamp`` (число) -- это значение ``fiber.time64()``, которое:" + +#~ msgid "corresponds to the last update of ``status`` or ``incarnation``;" +#~ msgstr "" +#~ "соответствует последнему обновлению параметра ``status`` или " +#~ "``incarnation``;" + +#~ msgid "is always local;" +#~ msgstr "всегда локально;" + +#~ msgid "does not depend on other members' clock setting." +#~ msgstr "не зависит от настроек часов других членов группы." + +#~ msgid "Below is an example of the table:" +#~ msgstr "Ниже приведен пример таблицы:" + +#~ msgid "" +#~ "Below is a list of ``membership``'s common, encryption, subscription " +#~ "functions, and options." +#~ msgstr "" +#~ "Ниже приведен список простых функций, функций шифрования, подписки и " +#~ "параметры модуля ``membership``." + +#~ msgid "Common functions" +#~ msgstr "Простые функции" + +#~ msgid ":ref:`init(advertise_host, port) `" +#~ msgstr ":ref:`init(advertise_host, port) `" + +#~ msgid "Initialize the ``membership`` module." +#~ msgstr "Инициализация модуля ``membership``." + +#~ msgid ":ref:`myself() `" +#~ msgstr ":ref:`myself() `" + +#~ msgid "Get the member data structure of the current instance." +#~ msgstr "Получение структуры данных текущего экземпляра." + +#~ msgid ":ref:`get_member(uri) `" +#~ msgstr ":ref:`get_member(uri) `" + +#~ msgid "Get the member data structure for a given URI." +#~ msgstr "Получение структуры данных для указанного URI." + +#~ msgid ":ref:`members() `" +#~ msgstr ":ref:`members() `" + +#~ msgid "Obtain a table with all members known to the current instance." +#~ msgstr "" +#~ "Получение таблицы со всеми членами группы, известными текущему экземпляру." + +#~ msgid ":ref:`pairs() `" +#~ msgstr ":ref:`pairs() `" + +#~ msgid "Shorthand for ``pairs(membership.members())``." +#~ msgstr "Сокращение для ``pairs(membership.members())``." + +#~ msgid ":ref:`add_member(uri) `" +#~ msgstr ":ref:`add_member(uri) `" + +#~ msgid "Add a member to the group." +#~ msgstr "Добавление члена в группу." + +#~ msgid ":ref:`probe_uri(uri) `" +#~ msgstr ":ref:`probe_uri(uri) `" + +#~ msgid "Check if the member is in the group." +#~ msgstr "Проверка принадлежности члена к группе." + +#~ msgid ":ref:`broadcast() `" +#~ msgstr ":ref:`broadcast() `" + +#~ msgid "Discover members in LAN by sending a UDP broadcast message." +#~ msgstr "" +#~ "Обнаружение участников в локальной сети путем отправки широковещательного " +#~ "сообщения UDP." + +#~ msgid ":ref:`set_payload(key, value) `" +#~ msgstr ":ref:`set_payload(key, value) `" + +#~ msgid "Update ``myself().payload`` and disseminate it." +#~ msgstr "Обновление ``myself().payload`` и распространение информации." + +#~ msgid ":ref:`leave() `" +#~ msgstr ":ref:`leave() `" + +#~ msgid "Gracefully leave the group." +#~ msgstr "Корректное исключение из группы." + +#~ msgid ":ref:`is_encrypted() `" +#~ msgstr ":ref:`is_encrypted() `" + +#~ msgid "Check if encryption is enabled." +#~ msgstr "Проверка, включено ли шифрование." + +#~ msgid "Encryption functions" +#~ msgstr "Функции шифрования" + +#~ msgid ":ref:`set_encryption_key(key) `" +#~ msgstr ":ref:`set_encryption_key(key) `" + +#~ msgid "Set the key for low-level message encryption." +#~ msgstr "Установка ключа для низкоуровневого шифрования сообщений." + +#~ msgid ":ref:`get_encryption_key() `" +#~ msgstr ":ref:`get_encryption_key() `" + +#~ msgid "Retrieve the encryption key in use." +#~ msgstr "Получение используемого ключа шифрования." + +#~ msgid "Subscription functions" +#~ msgstr "Функции подписки" + +#~ msgid ":ref:`subscribe() `" +#~ msgstr ":ref:`subscribe() `" + +#~ msgid "Subscribe for the members table updates." +#~ msgstr "Подписка на обновления членов таблицы." + +#~ msgid ":ref:`unsubscribe() `" +#~ msgstr ":ref:`unsubscribe() `" + +#~ msgid "Remove the subscription." +#~ msgstr "Удаление подписки." + +#~ msgid "Options" +#~ msgstr "Параметры" + +#~ msgid ":ref:`PROTOCOL_PERIOD_SECONDS `" +#~ msgstr ":ref:`PROTOCOL_PERIOD_SECONDS `" + +#~ msgid "Direct ping period." +#~ msgstr "Время отправки сообщений проверки связи напрямую." + +#~ msgid ":ref:`ACK_TIMEOUT_SECONDS `" +#~ msgstr ":ref:`ACK_TIMEOUT_SECONDS `" + +#~ msgid "ACK message wait time." +#~ msgstr "Время ожидания сообщения подтверждения." + +#~ msgid "" +#~ ":ref:`ANTI_ENTROPY_PERIOD_SECONDS `" +#~ msgstr "" +#~ ":ref:`ANTI_ENTROPY_PERIOD_SECONDS `" + +#~ msgid "Anti-entropy synchronization period." +#~ msgstr "Период синхронизации во избежание энтропии." + +#~ msgid ":ref:`SUSPECT_TIMEOUT_SECONDS `" +#~ msgstr ":ref:`SUSPECT_TIMEOUT_SECONDS `" + +#~ msgid "Timeout to mark a ``suspect`` ``dead``." +#~ msgstr "" +#~ "Время ожидания, чтобы перевести члена группы из статуса ``suspect`` в " +#~ "``dead``." + +#~ msgid "" +#~ ":ref:`NUM_FAILURE_DETECTION_SUBGROUPS `" +#~ msgstr "" +#~ ":ref:`NUM_FAILURE_DETECTION_SUBGROUPS `" + +#~ msgid "Number of members to ping a ``suspect`` indirectly." +#~ msgstr "" +#~ "Число членов группы, которые отправляют сообщения проверки связи члену " +#~ "группы в статусе ``suspect``." + +#~ msgid "Common functions:" +#~ msgstr "Простые функции:" + +#~ msgid "" +#~ "Initialize the ``membership`` module. This binds a UDP socket to " +#~ "``0.0.0.0:``, sets the ``advertise_uri`` parameter to " +#~ "``:``, and ``incarnation`` to ``1``." +#~ msgstr "" +#~ "Инициализация модуля ``membership``. Привязывает UDP-сокет к " +#~ "``0.0.0.0:``, задает значение параметра ``advertise_uri`` = " +#~ "``:`` (передаваемый хост, порт) и значение параметра " +#~ "``incarnation`` = ``1``." + +#~ msgid "" +#~ "The ``init()`` function can be called several times, the old socket will be " +#~ "closed and a new one opened." +#~ msgstr "" +#~ "Функцию ``init()`` можно вызвать несколько раз, старый сокет будет закрыт, " +#~ "откроется новый сокет." + +#~ msgid "" +#~ "If the ``advertise_uri`` changes during the next ``init()``, the old URI is " +#~ "considered ``DEAD``. In order to leave the group gracefully, use the " +#~ ":ref:`leave() ` function." +#~ msgstr "" +#~ "Если значение параметра ``advertise_uri`` изменится во время очередного " +#~ "выполнения ``init()``, старый URI считается недоступным со статусом " +#~ "``DEAD``. Чтобы корректно исключить члена из группы, используйте функцию " +#~ ":ref:`leave() `." + +#~ msgid "a hostname or IP address to advertise to other members" +#~ msgstr "имя хоста или IP-адрес, передаваемый другим членам группы" + +#~ msgid "a UDP port to bind" +#~ msgstr "привязываемый UDP-порт" + +#~ msgid "``true``" +#~ msgstr "``true``" + +#~ msgid "raises" +#~ msgstr "вызывает" + +#~ msgid "socket bind error" +#~ msgstr "ошибка привязки сокета" + +#~ msgid "" +#~ "the :ref:`member data structure ` of the " +#~ "current instance." +#~ msgstr "" +#~ ":ref:`структура данных члена группы ` для " +#~ "текущего экземпляра." + +#~ msgid "the given member's ``advertise_uri``" +#~ msgstr "``advertise_uri`` для указанного члена группы" + +#~ msgid "" +#~ "the :ref:`member data structure ` of the " +#~ "instance with the given URI." +#~ msgstr "" +#~ ":ref:`структура данных ` экземпляра с " +#~ "указанным URI." + +#~ msgid "Obtain all members known to the current instance." +#~ msgstr "Получение всех членов группы, известных текущему экземпляру." + +#~ msgid "Editing this table has no effect." +#~ msgstr "Редактирование этой таблицы ни на что не влияет." + +#~ msgid "" +#~ "a table with URIs as keys and corresponding :ref:`member data structures " +#~ "` as values." +#~ msgstr "" +#~ "таблица с URI в качестве ключей и :ref:`структурой данных члена группы " +#~ "` в качестве значений." + +#~ msgid "A shorthand for ``pairs(membership.members())``." +#~ msgstr "Сокращение для ``pairs(membership.members())``." + +#~ msgid "Lua iterator" +#~ msgstr "Lua-итератор" + +#~ msgid "It can be used in the following way:" +#~ msgstr "Можно использовать следующим образом:" + +#~ msgid "" +#~ "Add a member with the given URI to the group and propagate this event to " +#~ "other members. Adding a member to a single instance is enough as everybody " +#~ "else in the group will receive the update with time. It does not matter who " +#~ "adds whom." +#~ msgstr "" +#~ "Добавление в группу члена с указанным URI и передача информации об этом " +#~ "событии другим членам группы. Достаточно добавить члена группы в один " +#~ "экземпляр, так как все остальные экземпляры в группе со временем получат " +#~ "информацию об этом. Не имеет значения, кто кого добавляет." + +#~ msgid "the ``advertise_uri`` of the member to add" +#~ msgstr "параметр ``advertise_uri`` добавляемого члена группы" + +#~ msgid "``true`` or ``nil`` in case of an error" +#~ msgstr "``true`` (правда) или нулевое значение ``nil`` в случае ошибки" + +#~ msgid "parse error if the URI cannot be parsed" +#~ msgstr "ошибка анализа, если URI нельзя проанализировать" + +#~ msgid "" +#~ "Send a message to a member to make sure it is in the group. If the member is" +#~ " ``alive`` but not in the group, it is added. If it already is in the group," +#~ " nothing happens." +#~ msgstr "" +#~ "Отправка сообщения члену группы, чтобы убедиться, что он включен в группу. " +#~ "Если экземпляр активен со статусом ``alive``, но не включен в группу, " +#~ "происходит его добавление. Если он уже включен в группу, ничего не " +#~ "происходит." + +#~ msgid "the ``advertise_uri`` of the member to ping" +#~ msgstr "" +#~ "параметр ``advertise_uri`` члена группы, которому отправляются сообщения " +#~ "проверки связи" + +#~ msgid "" +#~ "``true`` if the member responds within 0.2 seconds, otherwise ``no " +#~ "response``" +#~ msgstr "" +#~ "``true`` (правда), если ответ возвращается в течение 0,2 секунды, в " +#~ "остальных случаях ``no response`` (нет ответа)" + +#~ msgid "``ping was not sent`` if the hostname could not be resolved" +#~ msgstr "" +#~ "``ping was not sent`` (сообщение проверки связи не отправлено), если имя " +#~ "хоста не разрешено" + +#~ msgid "" +#~ "Discover members in local network by sending a UDP broadcast message to all " +#~ "networks discovered by a ``getifaddrs()`` C call." +#~ msgstr "" +#~ "Обнаружение членов группы в локальной сети путем отправки широковещательного" +#~ " сообщения UDP во все сети, обнаруженные с помощью вызова ``getifaddrs()`` " +#~ "на языке C." + +#~ msgid "``true`` if broadcast was sent, ``false`` if ``getaddrinfo()`` fails." +#~ msgstr "" +#~ "``true`` (правда), если сообщение отправлено, ``false`` (ложь), если " +#~ "``getaddrinfo()`` не выполнена." + +#~ msgid "" +#~ "Update ``myself().payload`` and disseminate it along with the member status." +#~ msgstr "" +#~ "Обновление ``myself().payload`` и распространение соответствующей информации" +#~ " вместе со статусом члена группы." + +#~ msgid "Increments ``incarnation``." +#~ msgstr "Увеличивает значение параметра ``incarnation``." + +#~ msgid "a key to set in payload table" +#~ msgstr "ключ, задаваемый в таблице payload " + +#~ msgid "auxiliary data" +#~ msgstr "дополнительные данные" + +#~ msgid "" +#~ "Gracefully leave the ``membership`` group. The node will be marked with the " +#~ "``left`` status and no other members will ever try to reconnect it." +#~ msgstr "" +#~ "Корректное исключение из группы ``membership``. Узел получает статус " +#~ "выбывшего ``left``, другие члены группы не будут пытаться снова подключить " +#~ "его." + +#~ msgid "``true`` if encryption is enabled, ``false`` otherwise." +#~ msgstr "" +#~ "``true`` (правда), если шифрование включено, ``false`` в противном случае." + +#~ msgid "Encryption functions:" +#~ msgstr "Функции шифрования:" + +#~ msgid "" +#~ "Set the key used for low-level message encryption. The key is either trimmed" +#~ " or padded automatically to be exactly 32 bytes. If the ``key`` value is " +#~ "``nil``, the encryption is disabled." +#~ msgstr "" +#~ "Установка ключа, который используется для низкоуровневого шифрования " +#~ "сообщений. Ключ автоматически обрезается или дополняется до 32 байтов. Если " +#~ "значения ключа ``key`` нулевое ``nil``, шифрование будет отключено." + +#~ msgid "" +#~ "The encryption is handled by the ``crypto.cipher.aes256.cbc`` Tarantool " +#~ "module." +#~ msgstr "Модуль Tarantool ``crypto.cipher.aes256.cbc`` занимается шифрованием." + +#~ msgid "" +#~ "For proper communication, all members must be configured to use the same " +#~ "encryption key. Otherwise, members report either ``dead`` or ``non-" +#~ "decryptable`` in their status." +#~ msgstr "" +#~ "Чтобы обеспечить правильную связь, все члены группы должны быть настроены на" +#~ " использование одного и того же ключа шифрования. В противном случае члены " +#~ "группы получат статус либо ``dead``, либо ``non-decryptable`` (невозможно " +#~ "расшифровать)." + +#~ msgid "encryption key" +#~ msgstr "ключ шифрования" + +#~ msgid "``nil``." +#~ msgstr "``nil``." + +#~ msgid "Retrieve the encryption key that is currently in use." +#~ msgstr "Получение используемого ключа шифрования." + +#~ msgid "encryption key or ``nil`` if the encryption is disabled." +#~ msgstr "" +#~ "ключ шифрования или нулевое значение ``nil``, если шифрование отключено." + +#~ msgid "Subscription functions:" +#~ msgstr "Функции подписки:" + +#~ msgid "Subscribe for updates in the members table." +#~ msgstr "Подписка на обновления членов таблицы." + +#~ msgid "" +#~ "a ``fiber.cond`` object broadcasted whenever the members table changes." +#~ msgstr "" +#~ "объект ``fiber.cond``, который передается при каждом изменении таблицы." + +#~ msgid "" +#~ "Remove subscription on ``cond`` obtained by the :ref:`subscribe() function " +#~ "`." +#~ msgstr "" +#~ "Удаление подписки на ``cond``, получаемый с помощью функции " +#~ ":ref:`subscribe() `." + +#~ msgid "The ``cond``'s validity is not checked." +#~ msgstr "Достоверность ``cond`` не проверяется." + +#~ msgid "" +#~ "the ``fiber.cond`` object obtained from :ref:`subscribe() `" +#~ msgstr "" +#~ "объект ``fiber.cond``, получаемый с помощью функции :ref:`subscribe() " +#~ "`" + +#~ msgid "Below is a list of ``membership`` options. They can be set as follows:" +#~ msgstr "" +#~ "Ниже приведен перечень параметров ``membership``. Их можно задать следующим " +#~ "образом:" + +#~ msgid "" +#~ "Period of sending direct pings. Denoted as ``T'`` in the SWIM protocol." +#~ msgstr "" +#~ "Период отправки сообщение проверки связи напрямую. Обозначается как ``T'`` в" +#~ " протоколе SWIM." + +#~ msgid "" +#~ "Time to wait for ACK message after a ping. If a member is late to reply, the" +#~ " indirect ping algorithm is invoked." +#~ msgstr "" +#~ "Время ожидания сообщения подтверждения после отправки сообщения проверки " +#~ "связи. Если ответ запаздывает, вызывается алгоритм косвенной проверки связи." + +#~ msgid "" +#~ "Period to perform the anti-entropy synchronization algorithm of the SWIM " +#~ "protocol." +#~ msgstr "" +#~ "Период выполнения алгоритма синхронизации во избежание энтропии из протокола" +#~ " SWIM." + +#~ msgid "Timeout to mark ``suspect`` members as ``dead``." +#~ msgstr "" +#~ "Время ожидания, чтобы перевести члена группы из статуса ``suspect`` в " +#~ "``dead``." + +#~ msgid "" +#~ "Number of members to try pinging a ``suspect`` indirectly. Denoted as ``k`` " +#~ "in the SWIM protocol." +#~ msgstr "" +#~ "Число членов группы, которые пытаются отправить сообщения проверки связи " +#~ "члену группы в статусе ``suspect``. Обозначается как ``k`` в протоколе SWIM." + +#~ msgid "``checks`` is a type checker of functional arguments;" +#~ msgstr "``checks`` -- модуль контроля типов для аргументов функций;" + +#~ msgid "``http`` is an on-board HTTP-server;" +#~ msgstr "``http`` -- встроенный HTTP-сервер;" + +#~ msgid "``ldecnumber`` is the decimal arithmetic library;" +#~ msgstr "``ldecnumber`` -- библиотека для десятичной арифметики;" + +#~ msgid "``luarapidxml`` is a fast XML parser;" +#~ msgstr "``luarapidxml`` -- быстрый анализатор XML;" + +#~ msgid "``membership`` is a mesh of instances based on gossip protocol;" +#~ msgstr "``membership`` -- это сеть экземпляров на основе протокола gossip;" + +#~ msgid "" +#~ "``vshard`` is an automatic sharding system for Tarantool DBMS instances." +#~ msgstr "" +#~ "``vshard`` -- автоматическая система шардинга для экземпляров СУБД " +#~ "Tarantool;" + +#~ msgid "" +#~ ":ref:`oracle ` is an Oracle connector for Lua " +#~ "applications through which they can access Oracle databases;" +#~ msgstr "" +#~ "``oracle`` -- это коннектор Oracle для Lua-приложений, с помощью которого " +#~ "они могут обращаться к базам данных Oracle." + +#~ msgid "Consult the module's API documentation:" +#~ msgstr "Документацию по API модуля:" + +#~ msgid "Or read the module's reference to get a grasp on how to use it:" +#~ msgstr "" +#~ "Или прочтите справочник по модулю, чтобы понять, как его использовать." + +#~ msgid "Module `membership`" +#~ msgstr "Модуль `membership`" + +#~ msgid "" +#~ "This module is a ``membership`` library for Tarantool based on a gossip " +#~ "protocol." +#~ msgstr "" +#~ "Этот модуль представляет собой библиотеку ``membership`` для Tarantool на " +#~ "основе протокола gossip." + +#~ msgid "" +#~ "This library builds a mesh from multiple Tarantool instances. The mesh " +#~ "monitors itself, helps members discover everyone else in the group and get " +#~ "notified about their status changes with low latency. It is built upon the " +#~ "ideas from Consul or, more precisely, the SWIM algorithm." +#~ msgstr "" +#~ "Эта библиотека создает сеть из нескольких экземпляров Tarantool. Сеть сама " +#~ "контролирует себя, помогает участникам обнаружить всех остальных в группе и " +#~ "получать уведомления об изменениях своего статуса с низкой задержкой. Модуль" +#~ " основан на концепциях из Consul или, точнее, алгоритма SWIM." + +#~ msgid "" +#~ "For more information, see the `membership module documentation " +#~ "`_." +#~ msgstr "" +#~ "Для получения дополнительной информации см. `документацию по модулю vshard " +#~ "`_." + +#~ msgid "Module `vshard`" +#~ msgstr "Модуль `vshard`" + +#~ msgid "" +#~ "The ``vshard`` module introduces the sharding feature that enables " +#~ "horizontal scaling in Tarantool." +#~ msgstr "" +#~ "В модуле ``vshard`` реализована новая функция шардинга (сегментирования), " +#~ "которая позволяет осуществлять горизонтальное масштабирование в Tarantool." + +#~ msgid "" +#~ "For more information, see the `vshard module documentation " +#~ "`_." +#~ msgstr "" +#~ "Для получения дополнительной информации см. `документацию по модулю vshard " +#~ "`_." + +#~ msgid "Module `http`" +#~ msgstr "Модуль `http`" + +#~ msgid "" +#~ "In addition to the out-of-the-box HTTP client, this module includes an HTTP " +#~ "server but the latter has to be installed as described in the " +#~ ":ref:`installation section `." +#~ msgstr "" +#~ "В дополнение к стандартному HTTP-клиенту этот модуль включает в себя HTTP-" +#~ "сервер, но последний необходимо установить, как описано в :ref:`разделе по " +#~ "установке `." + +#~ msgid "" +#~ "For more information, see the `HTTP README file " +#~ "`_ in Tarantool's " +#~ "GitHub repository." +#~ msgstr "" +#~ "Для получения дополнительной информации см. `файл HTTP README " +#~ "`_ в репозитории " +#~ "Tarantool на GitHub." + +#~ msgid "Module `checks`" +#~ msgstr "Модуль `checks`" + +#~ msgid "" +#~ "For more information, see the `checks README file " +#~ "`_ in Tarantool's" +#~ " GitHub repository." +#~ msgstr "" +#~ "Для получения дополнительной информации см. `файл checks README " +#~ "`_ в репозитории " +#~ "Tarantool на GitHub." + +#~ msgid "Module `oracle`" +#~ msgstr "Модуль `oracle`" + +#~ msgid "" +#~ "The ``oracle`` module is an Oracle connector for Tarantool. With this " +#~ "package, Lua applications can send and receive data to and from Oracle " +#~ "databases." +#~ msgstr "" +#~ "Модуль ``oracle`` представляет собой коннектор Oracle для Tarantool. С " +#~ "помощью данного пакета Lua-приложения могут отправлять данные в базы данных " +#~ "Oracle и получать данные из них." + +#~ msgid "" +#~ "The advantage of the Tarantool-Oracle integration is that anyone can handle " +#~ "all the tasks with Oracle DBMSs (control, manipulation, storage, access) " +#~ "with the same high-level language (Lua) and with minimal delay." +#~ msgstr "" +#~ "Преимущество интеграции Tarantool и Oracle состоит в том, что любой может " +#~ "выполнять все задачи в СУБД Oracle (управление, манипулирование, хранение, " +#~ "доступ) на одном высокоуровневом языке программирования (Lua) и с " +#~ "минимальной задержкой." + +#~ msgid "Prerequisites" +#~ msgstr "Предварительные условия" + +#~ msgid "" +#~ "The ``oracle`` module requires the Instant Client Package (ICP) from Oracle." +#~ " To install it via CLI, say:" +#~ msgstr "" +#~ "Для модуля ``oracle`` требуется Instant Client Package (ICP) от Oracle. " +#~ "Чтобы установить его с помощью CLI, выполните команду:" + +#~ msgid "" +#~ "Or get the package at `oracle.com " +#~ "`_ " +#~ "and install it the same way." +#~ msgstr "" +#~ "Или получите пакет из `oracle.com " +#~ "`_ и " +#~ "установите его таким же образом." + +#~ msgid "Please, note the version is 12.2." +#~ msgstr "Обратите внимание, что необходима версия 12.2." + +#~ msgid "Quick start" +#~ msgstr "Краткое руководство" + +#~ msgid "Start Tarantool in the interactive mode and do the following:" +#~ msgstr "" +#~ "Запустите Tarantool в интерактивном режиме и выполните следующие действия:" + +#~ msgid "Connect to an Oracle database:" +#~ msgstr "Подключитесь к базе данных Oracle:" + +#~ msgid "Create a table and put some data into it:" +#~ msgstr "Создайте таблицу и поместите в нее некоторые данные:" + +#~ msgid "Retrieve the result:" +#~ msgstr "Получите результат:" + +#~ msgid "API reference" +#~ msgstr "Справочник по API" + +#~ msgid "Below is a list of ``oracle`` functions." +#~ msgstr "Ниже приведен перечень функций ``oracle``." + +#~ msgid "Name" +#~ msgstr "Имя" + +#~ msgid "Use" +#~ msgstr "Использование" + +#~ msgid ":ref:`:exec('sql') `" +#~ msgstr ":ref:`:exec('sql') `" + +#~ msgid "Execute an SQL request or raise an error." +#~ msgstr "Выполнение SQL-запроса или вывод ошибки." + +#~ msgid ":ref:`:version() `" +#~ msgstr ":ref:`:version() `" + +#~ msgid "Get version string." +#~ msgstr "Получение строки с версией." + +#~ msgid "Executes an SQL request or raises an error." +#~ msgstr "Выполнение SQL-запроса или вывод ошибки." + +#~ msgid "Parameters" +#~ msgstr "Параметры" + +#~ msgid "SQL statement with the appropriate syntax." +#~ msgstr "Оператор SQL с соответствующим синтаксисом." + +#~ msgid "Returns" +#~ msgstr "Возвращается" + +#~ msgid "" +#~ "* ``0`` in case of success; additionally, data and its size in case it was" +#~ " a ``SELECT`` request. * ``1`` in case of an ``ORA``-error and the " +#~ "corresponding error message." +#~ msgstr "" +#~ "* ``0`` если выполнена; плюс данные и их размер, если это запрос выборки " +#~ "``SELECT``. * ``1`` в случае ошибки типа ``ORA`` плюс соответствующее " +#~ "сообщение об ошибке." + +#~ msgid "" +#~ "``0`` in case of success; additionally, data and its size in case it was a " +#~ "``SELECT`` request." +#~ msgstr "" +#~ "``0`` если выполнена; плюс данные и их размер, если это запрос выборки " +#~ "``SELECT``." + +#~ msgid "``1`` in case of an ``ORA``-error and the corresponding error message." +#~ msgstr "" +#~ "``1`` в случае ошибки типа ``ORA`` плюс соответствующее сообщение об ошибке." + +#~ msgid "**Examples**" +#~ msgstr "**Примеры**" + +#~ msgid "versions of both the connector and OCI." +#~ msgstr "версии коннектора и OCI." + +#~ msgid "Return type" +#~ msgstr "Тип возвращаемого значения" + +#~ msgid "**Example**" +#~ msgstr "**Пример**" diff --git a/locale/ru/LC_MESSAGES/enterprise/security.po b/locale/ru/LC_MESSAGES/enterprise/security.po new file mode 100755 index 0000000000..90fe0bb1bc --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/security.po @@ -0,0 +1,403 @@ + +msgid "Security hardening guide" +msgstr "Инструкции по повышению безопасности" + +msgid "" +"This guide explains how to enhance security in your Tarantool Enterprise Edition's " +"cluster using built-in features and provides general recommendations on " +"security hardening." +msgstr "" +"В данном руководстве объясняется, как обеспечить безопасность в кластере " +"Tarantool Enterprise, используя встроенные функции, и даются общие " +"рекомендации по повышению безопасности." + +msgid "" +"Tarantool Enterprise Edition does not provide a dedicated API for security control. " +"All the necessary configuration can be done via an administrative console or" +" initialization code." +msgstr "" +"В Tarantool Enterprise нет выделенного API для контроля безопасности. Все " +"необходимые настройки можно выполнить через административную консоль или код" +" инициализации." + +msgid "Built-in security features" +msgstr "Встроенные средства безопасности" + +msgid "Tarantool Enterprise Edition has the following built-in security features:" +msgstr "" +"В Tarantool Enterprise есть следующие встроенные средства безопасности:" + +msgid "authentication," +msgstr "аутентификация," + +msgid "access control," +msgstr "управление доступом," + +msgid "audit log;" +msgstr "журнал аудита;" + +msgid "And backup functionality:" +msgstr "А также функции резервного копирования:" + +msgid "" +"`snapshotting `_ " +"(physical)," +msgstr "" +"`создание снимков `_ " +"(физическое)," + +msgid "`dumping `_ (logical)." +msgstr "`создание дампов `_ (логическое)." + +msgid "" +"The following sections describe the features and provide links to detailed " +"documentation." +msgstr "" +"В следующих разделах описаны эти функции и приведены ссылки на подробную " +"документацию." + +msgid "Authentication" +msgstr "Аутентификация" + +msgid "" +"Tarantool Enterprise Edition supports password-based authentication and allows for " +"two types of connections:" +msgstr "" +"Tarantool Enterprise поддерживает аутентификацию на основе паролей и " +"допускает два типа соединений:" + +msgid "" +"via an `administrative console " +"`_ " +"and" +msgstr "" +"через `административную консоль " +"`_ и" + +msgid "" +"over a binary port for read and write operations and procedure invocation." +msgstr "через двоичный порт для операций чтения / записи и вызова процедур." + +msgid "" +"For more information on authentication and connection types, see the " +"`security section of the Tarantool manual " +"`_." +msgstr "" +"Для получения дополнительной информации об аутентификации и типах соединений" +" см. `раздел по безопасности в руководстве по Tarantool " +"`_." + +msgid "In addition, Tarantool provides the following functionality:" +msgstr "" +"Кроме того, Tarantool предоставляет следующие функциональные возможности:" + +msgid "" +"`sessions " +"`_ -- states which associate connections with users and make " +"Tarantool API available to them after authentication," +msgstr "" +"`сеансы `_ -- состояния, которые связывают соединения с пользователями " +"и предоставляют доступ к API Tarantool после аутентификации," + +msgid "" +"authentication `triggers " +"`_ which execute " +"actions on authentication events." +msgstr "" +"`триггеры `_ " +"аутентификации, которые выполняют действия при событиях аутентификации." + +msgid "" +"third-party (external) authentication protocols and services such as LDAP or" +" Active Directory -- supported in the web interface, but unavailable on the " +"binary-protocol level." +msgstr "" +"сторонние (внешние) протоколы и службы аутентификации, такие как LDAP или " +"Active Directory, поддерживаются в веб-интерфейсе, но недоступны на уровне " +"бинарного протокола." + +msgid "Access control" +msgstr "Управление доступом" + +msgid "" +"Tarantool Enterprise Edition provides the means for administrators to prevent " +"unauthorized access to the database and to certain functions." +msgstr "" +"Для администраторов Tarantool Enterprise предоставляет средства " +"предотвращения несанкционированного доступа к базе данных и к определенным " +"функциям." + +msgid "Tarantool recognizes:" +msgstr "Tarantool различает:" + +msgid "different users (guests and administrators)," +msgstr "разных пользователей (гостей и администраторов)," + +msgid "**privileges** associated with users," +msgstr "**права**, связанные с пользователями," + +msgid "**roles** (containers for privileges) granted to users;" +msgstr "**роли** (контейнеры для ролей), выданные пользователям;" + +msgid "And divides system space into:" +msgstr "И хранит информацию о доступе в системных спейсах:" + +msgid "" +"``_user`` space to store usernames and hashed passwords for authentication," +msgstr "" +"спейс ``_user`` для хранения имен пользователей и хеш-паролей для " +"аутентификации," + +msgid "``_priv`` space to store privileges for access control." +msgstr "спейс ``_priv`` для хранения прав доступа." + +msgid "" +"For more information, see the `access control section of the Tarantool " +"manual " +"`_." +msgstr "" +"Для получения дополнительной информации см. `раздел по управлению доступом в" +" руководстве по Tarantool " +"`_." + +msgid "" +"Users who create **objects** (spaces, indexes, users, roles, sequences, and " +"functions) in the database become their **owners** and automatically acquire" +" privileges for what they create. For more information, see the `owners and " +"privileges section of the Tarantool manual " +"`_." +msgstr "" +"Пользователи, которые создают **объекты** (спейсы, индексы, пользователей, " +"роли, последовательности и функции) в базе данных становятся их " +"**владельцами** и автоматически получают права на то, что они создают. Для " +"получения дополнительной информации см. `раздел о владельцах и правах в " +"руководстве по Tarantool " +"`_." + +msgid "Audit log" +msgstr "Журнал аудита" + +msgid "" +"Tarantool Enterprise Edition has a built-in audit log that records events such as:" +msgstr "" +"В Tarantool Enterprise есть встроенный журнал аудита, в котором записываются" +" такие события, как:" + +msgid "authentication successes and failures;" +msgstr "пройденная и непройденная аутентификации;" + +msgid "connection closures;" +msgstr "закрытие подключения;" + +msgid "creation, removal, enabling, and disabling of users;" +msgstr "создание, удаление, включение и отключение пользователей;" + +msgid "changes of passwords, privileges, and roles;" +msgstr "изменение паролей, прав и ролей;" + +msgid "denials of access to database objects;" +msgstr "отказ в доступе к объектам базы данных;" + +msgid "Audit log contains:" +msgstr "В журнале аудита указываются:" + +msgid "timestamps," +msgstr "отметки времени," + +msgid "usernames of users who performed actions," +msgstr "имена пользователей, которые выполняли действия," + +msgid "" +"event types (e.g. ``user_create``, ``user_enable``, ``disconnect``, etc)," +msgstr "" +"типы событий (например, ``user_create``, ``user_enable``, ``disconnect`` и " +"т.д.)," + +msgid "descriptions." +msgstr "описание." + +msgid "Audit log has two configuration parameters:" +msgstr "Есть два конфигурационных параметра для настройки журнала аудита:" + +msgid "" +"``audit_log = `` which is similar to the `log " +"`_ parameter; it tells Tarantool to record audit events to a specific " +"file;" +msgstr "" +"``audit_log = ``, аналог параметра `log " +"`_; если данный параметр задан, то Tarantool записывает события, " +"подлежащие аудиту, в указанный файл;" + +msgid "" +"``audit_nonblock`` which is similar to the `log_nonblock " +"`_ parameter." +msgstr "" +"``audit_nonblock``, аналог параметра `log_nonblock " +"`_." + +msgid "For more information on logging, see the following:" +msgstr "" +"Для получения дополнительной информации о журналировании см. следующие " +"разделы:" + +msgid "" +"`logs section of the Tarantool manual " +"`_," +msgstr "" +"`раздел о журналах в руководстве по Tarantool " +"`_," + +msgid "" +"`logging section of the configuration reference " +"`_," +msgstr "" +"`раздел по журналированию в справочнике по настройке " +"`_," + +msgid ":ref:`Audit module ` in this document." +msgstr ":ref:`Журнал аудита ` данного документа." + +msgid "" +"Access permissions to audit log files can be set up as to any other Unix " +"file system object -- via ``chmod``." +msgstr "" +"Права доступа к файлам журнала можно настроить, как для любого другого " +"объекта файловой системы Unix -- через ``chmod``." + +msgid "Recommendations on security hardening" +msgstr "Рекомендации по повышению безопасности" + +msgid "" +"This section lists recommendations that can help you harden the cluster's " +"security." +msgstr "" +"В этом разделе даны рекомендации, которые могут помочь вам повысить " +"безопасность кластера." + +msgid "Traffic encryption" +msgstr "Криптографическая защита трафика" + +msgid "" +"Tarantool Enterprise does not encrypt traffic over binary connections (i.e.," +" between servers in the cluster). To secure such connections, consider:" +msgstr "" +"Tarantool Enterprise не шифрует трафик, проходящий через двоичные соединения" +" (т.е. между серверами в кластере). Чтобы защитить такие соединения, " +"рекомендуется:" + +msgid "setting up connection tunneling, or" +msgstr "настроить туннелирование соединения или" + +msgid "encrypting the actual data stored in the database." +msgstr "зашифровать сами данные, которые хранятся в базе." + +msgid "" +"For more information on data encryption, see the `crypto module reference " +"`_." +msgstr "" +"Для получения дополнительной информации см. `справочник по модулю crypto " +"`_." + +msgid "" +"The `HTTP server module `_ provided by " +"rocks does not support the HTTPS protocol. To set up a secure connection for" +" a client (e.g., REST service), consider hiding the Tarantool instance " +"(router if it is a cluster of instances) behind a Nginx server and setting " +"up an SSL certificate for it." +msgstr "" +"`Модуль HTTP-сервера `_ из сторонних " +"библиотек не поддерживает протокол HTTPS. Чтобы установить безопасное " +"соединение для клиента (например, REST-сервис), рекомендуется скрыть " +"экземпляр Tarantool (роутер, если это кластер экземпляров) за сервером Nginx" +" и настроить для него сертификат SSL." + +msgid "" +"To make sure that no information can be intercepted 'from the wild', run " +"Nginx on the same physical server as the instance and set up their " +"communication over a Unix socket. For more information, see the `socket " +"module reference " +"`_." +msgstr "" +"Чтобы убедиться, что никакая информация не может быть перехвачена извне, " +"запустите Nginx на том же физическом сервере, что и экземпляр, и настройте " +"их связь по Unix-сокету. Для получения дополнительной информации см. " +"`справочник по модулю socket " +"`_." + +msgid "Firewall configuration" +msgstr "Настройка брандмауэра" + +msgid "" +"To protect the cluster from any unwanted network activity 'from the wild', " +"configure the firewall on each server to allow traffic on ports listed in " +":ref:`network requirements `." +msgstr "" +"Чтобы защитить кластер от нежелательной сетевой активности извне, настройте " +"брандмауэр на каждом сервере, чтобы разрешить трафик через порты, " +"перечисленные в :ref:`сетевых требованиях `." + +msgid "" +"If you are using static IP addresses, whitelist them, again, on each server " +"as the cluster has a full mesh network topology. Consider blacklisting all " +"the other addresses on all servers except the router (running behind the " +"Nginx server)." +msgstr "" +"Если вы используете статические IP-адреса, повторно внесите их в белый " +"список на каждом сервере, поскольку кластер работает на принципах " +"полносвязной топологии (full mesh topology). Рекомендуется внести в черный " +"список всех остальные адреса на всех серверах, кроме роутера (работающего за" +" сервером Nginx)." + +msgid "" +"Tarantool Enterprise does not provide defense against DoS or DDoS attacks. " +"Consider using third-party software instead." +msgstr "" +"Tarantool Enterprise не предоставляет защиту от DoS-атак или DDoS-атак. Для " +"этих целей рекомендуется использовать сторонние программы." + +msgid "Data integrity" +msgstr "Целостность данных" + +msgid "" +"Tarantool Enterprise does not keep checksums or provide the means to control" +" data integrity. However, it ensures data persistence using a write ahead " +"log, regularly snapshots the entire data set to disk, and checks the data " +"format whenever it reads the data back from the disk. For more information, " +"see the `data persistence section of the Tarantool manual " +"`_." +msgstr "" +"Tarantool Enterprise не хранит контрольные суммы и не предоставляет " +"инструменты для контроля целостности данных. Тем не менее, он обеспечивает " +"персистентность данных с помощью журнала упреждающей записи, регулярно " +"делает снимок всего набора данных на диск и проверяет формат данных всякий " +"раз, когда считывает данные с диска. Для получения дополнительной информации" +" см. `раздел о персистентности данных в руководстве по Tarantool " +"`_." + +#~ msgid "" +#~ "``audit_log = `` which tells Tarantool to record audit events " +#~ "to a specific file and is similar to the ``log`` parameter," +#~ msgstr "" +#~ "``audit_log = <ПУТЬ_К_ФАЙЛУ>``, если он задан, то Tarantool записывает " +#~ "события в указанный файл, аналогичен параметру ``log``," + +#~ msgid "" +#~ "and ``audit_nonblock`` which is similar to the ``log_nonblock`` parameter." +#~ msgstr "и ``audit_nonblock``, который аналогичен параметру ``log_nonblock``." + +#~ msgid "" +#~ "Tarantool Enterprise does not support third-party (external) authentication " +#~ "protocols or services such as LDAP or Active Directory." +#~ msgstr "" +#~ "Tarantool Enterprise не поддерживает сторонние (внешние) протоколы или " +#~ "сервисы аутентификации, такие как LDAP или Active Directory." diff --git a/locale/ru/LC_MESSAGES/enterprise/setup.po b/locale/ru/LC_MESSAGES/enterprise/setup.po new file mode 100755 index 0000000000..ca31d40a27 --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/setup.po @@ -0,0 +1,346 @@ + +msgid "Setup" +msgstr "Настройка" + +msgid "" +"This chapter explains how to download and set up Tarantool Enterprise and " +"run a sample application provided with it." +msgstr "" +"В этой главе объясняется, как загрузить и настроить Tarantool Enterprise, а " +"также запустить пример приложения." + +msgid "System requirements" +msgstr "Системные требования" + +msgid "" +"The recommended system requirements for running Tarantool Enterprise are as " +"follows." +msgstr "" +"Ниже представлены рекомендуемые системные требования для запуска Tarantool " +"Enterprise." + +msgid "Hardware requirements" +msgstr "Требования к аппаратному обеспечению" + +msgid "" +"To fully ensure the fault tolerance of a distributed data storage system, at" +" least **three** physical computers or virtual servers are required." +msgstr "" +"Чтобы обеспечить полную отказоустойчивость системы распределенного хранения " +"данных, необходимы как минимум **три** физических компьютера или виртуальных" +" сервера." + +msgid "" +"For testing/development purposes, the system can be deployed using a smaller" +" number of servers; however, it is not recommended to use such " +"configurations for production." +msgstr "" +"Для целей тестирования или разработки систему можно развернуть, используя " +"меньшее количество серверов. Тем не менее, не рекомендуется использовать " +"такие конфигурации в производственной среде." + +msgid "Software requirements" +msgstr "Требования к программному обеспечению" + +msgid "" +"As host operating systems, Tarantool Enterprise Edition supports **Red Hat " +"Enterprise Linux** and **CentOS** versions 7.5 and higher." +msgstr "" +"Tarantool Enterprise поддерживает операционные системы **Red Hat Enterprise " +"Linux** и **CentOS** версии 7.5 и выше." + +msgid "" +"Tarantool Enterprise can run on other ``systemd``-based Linux distributions " +"but it is not tested on them and may not work as expected." +msgstr "" +"Tarantool Enterprise может работать на других дистрибутивах Linux на основе " +"``systemd``, но тестирование на них не проводится, поэтому корректная работа" +" не гарантирована." + +msgid "" +"``glibc`` 2.17-260.el7_6.6 and higher is required. Take care to check and " +"update, if needed:" +msgstr "" +"Требуется ``glibc`` версии 2.17-260.el7_6.6 и выше. Необходимо проверить " +"текущую версию и обновить в случае необходимости:" + +msgid "Network requirements" +msgstr "Сетевые требования" + +msgid "" +"Hereinafter, **\"storage servers\"** or **\"Tarantool servers\"** are the " +"computers used to store and process data, and **\"administration server\"** " +"is the computer used by the system operator to install and configure the " +"product." +msgstr "" +"Здесь и далее по тексту под **серверами хранения данных** или **серверами " +"Tarantool** понимаются компьютеры, которые используются для хранения и " +"обработки данных, а под **сервером администрирования** понимается компьютер," +" с помощью которого оператор устанавливает и настраивает систему." + +msgid "" +"The Tarantool cluster has a full mesh topology, therefore all Tarantool " +"servers should be able to communicate and send traffic from and to TCP/UDP " +"ports used by the cluster's instances (see ``advertise_uri: :`` " +"and ``config: advertise_uri: ':'`` in " +"``/etc/tarantool/conf.d/*.yml`` for each instance). For example:" +msgstr "" +"Кластер Tarantool работает по принципам полносвязной топологии (full mesh " +"topology), поэтому все серверы Tarantool должны поддерживать прием и " +"передачу данных по TCP и UDP на всех портах, которые используются " +"экземплярами кластера (см. настройки ``advertise_uri: :`` и " +"``config: advertise_uri: ':'`` в файле " +"``/etc/tarantool/conf.d/*.yml`` для каждого экземпляра). Например:" + +msgid "" +"To configure remote monitoring or to connect via the administrative console," +" the administration server should be able to access the following TCP ports " +"on Tarantool servers:" +msgstr "" +"Чтобы настроить удаленный мониторинг или подключиться по административной " +"консоли, сервер администрирования должен иметь доступ к следующим TCP-портам" +" на серверах Tarantool:" + +msgid "22 to use the SSH protocol," +msgstr "22 -- чтобы использовать SSH-протокол;" + +msgid "" +"ports specified in `instance configuration " +"`_ (``http_port`` parameter) to monitor the HTTP-metrics." +msgstr "" +"к портам, указанным в `конфигурации экземпляра " +"`_ (параметр ``http_port``), для мониторинга HTTP-метрик." + +msgid "" +"Additionally, it is recommended to apply the following settings for " +"``sysctl`` on all Tarantool servers:" +msgstr "" +"Кроме того, рекомендуется применить следующие настройки для ``sysctl`` на " +"всех серверах Tarantool:" + +msgid "" +"This optional setup of the Linux network stack helps speed up the " +"troubleshooting of network connectivity when the server physically fails. To" +" achieve maximum performance, you may also need to configure other " +"network stack parameters that are not specific to the Tarantool DBMS. For " +"more information, please refer to the `Network Performance Tuning Guide " +"`_" +" section of the RHEL7 user documentation." +msgstr "" +"Эта необязательная настройка сетевого стека Linux помогает ускорить решение " +"проблем с сетевым подключением при физическом отказе сервера. Для достижения" +" максимальной производительности может также потребоваться настройка других " +"параметров сетевого стека, которые не относятся к СУБД Tarantool. Для " +"получения дополнительной информации обратитесь к разделу Руководство по " +"оптимизации сетевой производительности (`Network Performance Tuning Guide " +"`_)" +" в пользовательской документации по RHEL7." + +msgid "Package contents" +msgstr "Комплектация" + +msgid "" +"The latest release packages of Tarantool Enterprise are available in the " +"`customer zone " +"`_. " +"at Tarantool website. Please contact ``support@tarantool.io`` for access." +msgstr "" +"Последние версии пакетов Tarantool Enterprise доступны в `разделе для " +"клиентов " +"` _ " +"на веб-сайте Tarantool. Для получения доступа обратитесь в " +"``support@tarantool.io``." + +msgid "" +"Each package is distributed as a ``tar + gzip`` archive and includes the " +"following components and features:" +msgstr "" +"Каждый пакет представляет собой архив ``tar + gzip`` и включает в себя " +"следующие компоненты и функции:" + +msgid "" +"static Tarantool binary for simplified deployment in Linux environments," +msgstr "" +"статический бинарный файл Tarantool, чтобы упростить развертывание в средах " +"Linux," + +msgid "selection of open and closed source modules," +msgstr "набор модулей с открытым и закрытым исходным кодом," + +msgid "sample application walking you through all included modules." +msgstr "пример приложения, чтобы рассмотреть все включенные модули." + +msgid "Archive contents:" +msgstr "Содержимое архива:" + +msgid "``tarantool`` is the main executable of Tarantool." +msgstr "``tarantool`` -- основной исполняемый файл Tarantool." + +msgid "" +"``tarantoolctl`` is the utility script for installing supplementary modules " +"and connecting to the administrative console." +msgstr "" +"``tarantoolctl`` -- служебный скрипт для установки вспомогательных модулей и" +" подключения к административной консоли." + +msgid "" +"``cartridge`` is the utility script to help you set up a development " +"environment for applications and pack them for easy deployment." +msgstr "" +"``cartridge`` -- служебный скрипт, который помогает настроить среду " +"разработки для приложений и упаковать их с целью упростить развертывание." + +msgid "``examples/`` is the directory containing sample applications:" +msgstr "``examples/`` -- директория, которая содержит примеры приложений:" + +msgid "" +"``pg_writethrough_cache/`` is an application showcasing how Tarantool can " +"cache data written to, for example, a PostgreSQL database;" +msgstr "" +"``pg_writethrough_cache/`` -- приложение, которое наглядно показывает, как " +"Tarantool может кэшировать данные, например, записанные в базу данных " +"PostgreSQL;" + +msgid "" +"``ora_writebehind_cache/`` is an application showcasing how Tarantool can " +"cache writes and queue them to, for example, an Oracle database;" +msgstr "" +"``ora_writebehind_cache/`` -- приложение, которое наглядно показывает, как " +"Tarantool может кэшировать вставки и ставить их в очередь, например, в базу " +"данных Oracle;" + +msgid "" +"``docker/`` is an application designed to be easily packed into a Docker " +"container;" +msgstr "" +"``docker/`` -- приложение, предназначенное для простой упаковки в Docker-" +"контейнер;" + +msgid "" +"``rocks/`` is the directory containing a selection of additional open and " +"closed source modules included in the distribution as an offline rocks " +"repository. See the :ref:`rocks reference ` for details." +msgstr "" +"``rocks/`` -- директория, которая содержит набор дополнительных модулей с " +"открытым и закрытым исходным кодом, включенных в дистрибутив в качестве " +"автономного репозитория сторонних библиотек. Для получения более подробной " +"информации см. :ref:`справочник по сторонним библиотекам `." + +msgid "" +"``templates/`` is the directory containing template files for your " +"application development environment." +msgstr "" +"``templates/`` -- директория, которая содержит файлы шаблонов для среды " +"разработки приложений." + +msgid "" +"``deprecated/`` is a set of modules that are no longer supported:" +msgstr "" +"``deprecated/`` -- это набор модулей, которые больше не поддерживаются:" + +msgid "" +"``vshard-zookeeper-orchestrator`` is a Python application for launching " +"``orchestrator``," +msgstr "" +"``vshard-zookeeper-orchestrator`` -- это приложение на Python для запуска " +"orchestrator," + +msgid "" +"``zookeeper-scm`` files are the ZooKeeper integration modules (require " +"``usr/`` libraries)." +msgstr "" +"файлы ``zookeeper-scm`` представляют собой модули для интеграции с ZooKeeper" +" (требуются библиотеки ``usr/``)." + +msgid "Installation" +msgstr "Установка" + +msgid "" +"The delivered ``tar + gzip`` archive should be uploaded to a server and " +"unpacked:" +msgstr "" +"Готовый архив ``tar + gzip`` необходимо загрузить на сервер и распаковать:" + +msgid "" +"No further installation is required as the unpacked binaries are almost " +"ready to go. Go to the directory with the binaries (``tarantool-" +"enterprise``) and add them to the executable path by running the script " +"provided by the distribution:" +msgstr "" +"Дополнительная установка не требуется, поскольку распакованные бинарные " +"файлы практически готовы к работе. Перейдите в каталог с бинарными файлами " +"(``tarantool-enterprise``) и добавьте их в путь для поиска исполняемых " +"файлов, запустив скрипт из дистрибутива:" + +msgid "" +"Make sure you have enough privileges to run the script and that the file is " +"executable. Otherwise, try ``chmod`` and ``chown`` commands to adjust it." +msgstr "" +"Убедитесь, что вы можете запускать данный скрипт, а также что файл со " +"скриптом является исполняемым. В противном случае задайте разрешения в " +"помощью команд ``chmod`` и ``chown``." + +msgid "" +"Next, set up your development environment as described in :ref:`the " +"developer's guide `." +msgstr "" +"Затем настройте среду разработки, как описано в :ref:`руководстве для " +"разработчика `." + +#~ msgid "" +#~ "Tarantool Enterprise supports **Red Hat Enterprise Linux 7** and **CentOS " +#~ "7** as host operating systems." +#~ msgstr "" +#~ "Tarantool Enterprise поддерживает **Red Hat Enterprise Linux 7** и **CentOS " +#~ "7** в качестве операционных систем на хосте." + +#~ msgid "" +#~ "Python and Python connector to Tarantool are required to launch out-of-the-" +#~ "box tests provided for the sample application. To install them, e.g., on " +#~ "CentOS, say:" +#~ msgstr "" +#~ "Для запуска готовых тестов, предоставляемых для примера приложения, " +#~ "необходимы Python и коннектор Python для Tarantool. Чтобы установить их, " +#~ "например, на CentOS, выполните команды:" + +#~ msgid "8080 to monitor the HTTP-metrics." +#~ msgstr "8080 -- чтобы контролировать HTTP-метрики." + +#~ msgid "Additional network configuration recommendations" +#~ msgstr "Дополнительные рекомендации по настройке сети" + +#~ msgid "" +#~ "The latest release package of Tarantool Enterprise is available in the `S3 " +#~ "repository " +#~ "`_." +#~ " Please contact ``support@tarantool.io`` for the details." +#~ msgstr "" +#~ "Последняя версия пакета Tarantool Enterprise доступна в `репозитории S3 " +#~ "`_." +#~ " Для получения дополнительной информации обратитесь в " +#~ "``support@tarantool.io``." + +#~ msgid "built-in audit log," +#~ msgstr "встроенный журнал аудита," + +#~ msgid "" +#~ "``cluster/`` is an application designed to demonstrate key features and " +#~ "modules included in the distribution;" +#~ msgstr "" +#~ "``cluster/`` -- приложение, которое демонстрирует основные функции и модули," +#~ " включенные в дистрибутив;" + +#~ msgid "Unpacking the archive" +#~ msgstr "Распаковка архива" + +#~ msgid "" +#~ "The Tarantool cluster has a full mesh topology, therefore all Tarantool " +#~ "servers should be able to communicate and send traffic from any TCP port to " +#~ "TCP ports 3000:4000." +#~ msgstr "" +#~ "Кластер Tarantool работает по принципам полносвязной топологии (full mesh " +#~ "topology), поэтому все серверы Tarantool должны поддерживать обмен и " +#~ "передачу данных с любого TCP-порта на TCP-порты 3000:4000." diff --git a/locale/ru/LC_MESSAGES/enterprise/system_metrics.po b/locale/ru/LC_MESSAGES/enterprise/system_metrics.po new file mode 100755 index 0000000000..fa58a6ea22 --- /dev/null +++ b/locale/ru/LC_MESSAGES/enterprise/system_metrics.po @@ -0,0 +1,271 @@ + +msgid "Monitoring system metrics" +msgstr "Метрики системы мониторинга" + +msgid "Option" +msgstr "Параметр" + +msgid "SNMP type" +msgstr "Тип по SNMP" + +msgid "Units of measure" +msgstr "Единицы измерения" + +msgid "Threshold" +msgstr "Предел" + +msgid "Version" +msgstr "Version" + +msgid "Tarantool version" +msgstr "Версия Tarantool" + +msgid "DisplayString" +msgstr "DisplayString" + +msgid "IsAlive" +msgstr "IsAlive" + +msgid "instance availability indicator" +msgstr "Показатель доступности экземпляра" + +msgid "Integer" +msgstr "Integer" + +msgid "(listing)" +msgstr "(список)" + +msgid "0 - unavailable" +msgstr "0 - недоступен" + +msgid "1 - available" +msgstr "1 - доступен" + +msgid "MemoryLua" +msgstr "MemoryLua" + +msgid "storage space used by Lua" +msgstr "объем памяти, занятый Lua" + +msgid "Gauge32" +msgstr "Gauge32" + +msgid "Mbyte" +msgstr "МБайт" + +msgid "900" +msgstr "900" + +msgid "MemoryData" +msgstr "MemoryData" + +msgid "storage space used for storing data" +msgstr "объем, используемый для хранения данных" + +msgid "set the value manually" +msgstr "значение задается вручную" + +msgid "MemoryNet" +msgstr "MemoryNet" + +msgid "storage space used for network I/O" +msgstr "объем, используемый для сетевого ввода-выводы" + +msgid "1024" +msgstr "1024" + +msgid "MemoryIndex" +msgstr "MemoryIndex" + +msgid "storage space used for storing indexes" +msgstr "объем, используемый для хранения индексов" + +msgid "MemoryCache" +msgstr "MemoryCache" + +msgid "storage space used for storing caches (for vinyl engine only)" +msgstr "объем, используемый для хранения кэша (только для vinyl)" + +msgid "ReplicationLag" +msgstr "ReplicationLag" + +msgid "" +"lag time since the last sync between (the maximum value in case there are " +"multiple fibers)" +msgstr "" +"время задержки с момента последней синхронизации (максимальное значение, " +"если есть несколько файберов)" + +msgid "Integer32" +msgstr "Integer32" + +msgid "sec." +msgstr "сек." + +msgid "5" +msgstr "5" + +msgid "FiberCount" +msgstr "FiberCount" + +msgid "number of fibers" +msgstr "количество файберов" + +msgid "pc." +msgstr "шт." + +msgid "1000" +msgstr "1000" + +msgid "CurrentTime" +msgstr "CurrentTime" + +msgid "current time, in seconds, starting at January, 1st, 1970" +msgstr "текущее время в секундах, с 1 января 1970г." + +msgid "Unsigned32" +msgstr "Unsigned32" + +msgid "Unix timestamp, in sec." +msgstr "временная отметка Unix в сек." + +msgid "StorageStatus" +msgstr "StorageStatus" + +msgid "status of a replica set" +msgstr "статус набора реплик" + +msgid "listing" +msgstr "список" + +msgid "> 1" +msgstr "> 1" + +msgid "StorageAlerts" +msgstr "StorageAlerts" + +msgid "number of alerts for storage nodes" +msgstr "количество " + +msgid ">= 1" +msgstr ">= 1" + +msgid "StorageTotalBkts" +msgstr "StorageTotalBkts" + +msgid "total number of buckets in the storage" +msgstr "общее количество сегментов в хранилище" + +msgid "< 0" +msgstr "< 0" + +msgid "StorageActiveBkts" +msgstr "StorageActiveBkts" + +msgid "number of buckets in the ACTIVE state" +msgstr "количество сегментов в статусе ACTIVE" + +msgid "StorageGarbageBkts" +msgstr "StorageGarbageBkts" + +msgid "number of buckets in the GARBAGE state" +msgstr "количество сегментов в статусе GARBAGE" + +msgid "StorageReceivingBkts" +msgstr "StorageReceivingBkts" + +msgid "number of buckets in the RECEIVING state" +msgstr "количество сегментов в статусе RECEIVING" + +msgid "StorageSendingBkts" +msgstr "StorageSendingBkts" + +msgid "number of buckets in the SENDING state" +msgstr "количество сегментов в статусе SENDING" + +msgid "RouterStatus" +msgstr "RouterStatus" + +msgid "status of the ``router``" +msgstr "статус роутера" + +msgid "RouterAlerts" +msgstr "RouterAlerts" + +msgid "number of alerts for the router" +msgstr "количество предупреждений для роутера" + +msgid "RouterKnownBkts" +msgstr "RouterKnownBkts" + +msgid "number of buckets within the known destination replica sets" +msgstr "количество сегментов в известных наборах реплик" + +msgid "RouterUnknownBkts" +msgstr "RouterUnknownBkts" + +msgid "number of buckets that are unknown to the ``router``" +msgstr "количество реплик, неизвестных роутеру" + +msgid "RequestCount" +msgstr "RequestCount" + +msgid "total number of requests" +msgstr "общее количество запросов" + +msgid "Counter64" +msgstr "Counter64" + +msgid "InsertCount" +msgstr "InsertCount" + +msgid "total number of insert requests" +msgstr "общее количество запросов вставки" + +msgid "DeleteCount" +msgstr "DeleteCount" + +msgid "total number of delete requests" +msgstr "общее количество запросов на удаление" + +msgid "ReplaceCount" +msgstr "ReplaceCount" + +msgid "total number of replace requests" +msgstr "общее количество запросов замены" + +msgid "UpdateCount" +msgstr "UpdateCount" + +msgid "total number of update requests" +msgstr "общее количество запросов на обновление" + +msgid "SelectCount" +msgstr "SelectCount" + +msgid "total number of select requests" +msgstr "общее количество запросов выборки" + +msgid "EvalCount" +msgstr "EvalCount" + +msgid "number of calls made via Eval" +msgstr "количество вызовов через Eval" + +msgid "CallCount" +msgstr "CallCount" + +msgid "number of calls made via ``call``" +msgstr "количество вызовов через ``call``" + +msgid "ErrorCount" +msgstr "ErrorCount" + +msgid "number of errors in Tarantool" +msgstr "количество ошибок в Tarantool" + +msgid "AuthCount" +msgstr "AuthCount" + +msgid "number of completed authentication operations" +msgstr "количество завершенных операций по аутентификации" diff --git a/locale/ru/LC_MESSAGES/how-to/app/creating_app.po b/locale/ru/LC_MESSAGES/how-to/app/creating_app.po index 084e02d7a6..598cb88c83 100644 --- a/locale/ru/LC_MESSAGES/how-to/app/creating_app.po +++ b/locale/ru/LC_MESSAGES/how-to/app/creating_app.po @@ -239,11 +239,11 @@ msgstr "" msgid "" "First you need to `install " -"`_ " +"`_ " "the module with ``tarantoolctl rocks install avro-schema``." msgstr "" "Для начала необходимо `установить " -"`_ " +"`_ " "модуль с помощью команды ``tarantoolctl rocks install avro-schema``." msgid "Further usage is quite straightforward:"