تثبيت LeoFS مرفق تخزين آمنة من الفشل متوافق مع العملاء الذين يستخدمون S3 ، NFS

أنا من لوكسوفت.
وفقًا لـ Opennet : LeoFS هي منشأة تخزين متسامحة مع الأعطال لكائنات LeoFS ، ومتوافقة مع العملاء الذين يستخدمون Amazon S3 API و REST-API ، وأيضًا تدعم وضع التشغيل كخادم NFS. هناك تحسينات لتخزين الكائنات الصغيرة والكبيرة جدًا على حد سواء ، وهناك آلية التخزين المؤقت المضمنة ، وتكرار المخازن بين مراكز البيانات ممكن. من بين أهداف المشروع تحقيق موثوقية 99.9999999 ٪ بسبب التكرار المفرط للتكرارات والقضاء على نقطة واحدة من الفشل. رمز المشروع مكتوب بلغة إرلانج.


يتكون LeoFS من ثلاثة مكونات:


  • التخزين LeoFS - خدمات عمليات إضافة واسترداد وحذف الكائنات والبيانات التعريفية ، هي المسؤولة عن النسخ المتماثل واستعادة طلبات الانتظار.
  • LeoFS Gateway - يخدم طلبات HTTP ويعيد توجيه الاستجابات للعملاء باستخدام REST-API أو S3-API ، ويوفر التخزين المؤقت لأكثر البيانات المطلوبة في الذاكرة وعلى القرص.
  • برنامج LeoFS Manager - يراقب تشغيل عقدتي LeoFS Gateway و LeoFS Storage ، ويراقب حالة العقد ويتحقق من المجموع الاختباري. يضمن سلامة البيانات وتوافر تخزين عالية.

في هذا المنشور ، قم بتثبيت Leofs باستخدام ansible-playbook ، واختبار S3 ، NFS.


إذا حاولت تثبيت LeoFS باستخدام قواعد اللعب الرسمية ، فثمة أخطاء مختلفة في انتظارك: 1 ، 2 . في هذا المنشور سأكتب ما يجب القيام به لتجنب هذه الأخطاء.


حيث ستقوم بتشغيل ansible-playbook ، ستحتاج إلى تثبيت netcat.


مثال المخزون


مثال المخزون (في مستودع hosts.sample):
# Please check roles/common/vars/leofs_releases for available versions [all:vars] leofs_version=1.4.3 build_temp_path="/tmp/leofs_builder" build_install_path="/tmp/" build_branch="master" source="package" #[builder] #172.26.9.177 # nodename of leo_manager_0 and leo_manager_1 are set at group_vars/all [leo_manager_0] 172.26.9.176 # nodename of leo_manager_0 and leo_manager_1 are set at group_vars/all [leo_manager_1] 172.26.9.178 [leo_storage] 172.26.9.179 leofs_module_nodename=S0@172.26.9.179 172.26.9.181 leofs_module_nodename=S0@172.26.9.181 172.26.9.182 leofs_module_nodename=S0@172.26.9.182 172.26.9.183 leofs_module_nodename=S0@172.26.9.183 [leo_gateway] 172.26.9.180 leofs_module_nodename=G0@172.26.9.180 172.26.9.184 leofs_module_nodename=G0@172.26.9.184 [leofs_nodes:children] leo_manager_0 leo_manager_1 leo_gateway leo_storage 

إعداد الخادم


تعطيل سيلينو. آمل أن ينشئ المجتمع سياسات Selinux لـ LeoFS.


  - name: Install libselinux as prerequisite for SELinux Ansible module yum: name: "{{item}}" state: latest with_items: - libselinux-python - libsemanage-python - name: Disable SELinux at next reboot selinux: state: disabled - name: Set SELinux in permissive mode until the machine is rebooted command: setenforce 0 ignore_errors: true changed_when: false 

تثبيت netcat و redhat-lsb-core . هناك حاجة إلى netcat لـ leofs-adm ، redhat-lsb-core حاجة إلى redhat-lsb-core لتحديد إصدار نظام التشغيل هنا .


  - name: Install Packages yum: name={{ item }} state=present with_items: - nmap-ncat - redhat-lsb-core 

إنشاء مستخدم مكافئ وإضافته إلى مجموعة العجلات


  - name: Create user leofs group: name: leofs state: present - name: Allow 'wheel' group to have passwordless sudo lineinfile: dest: /etc/sudoers state: present regexp: '^%wheel' line: '%wheel ALL=(ALL) NOPASSWD: ALL' validate: 'visudo -cf %s' - name: Add the user 'leofs' to group 'wheel' user: name: leofs groups: wheel append: yes 

تثبيت Erlang


  - name: Remote erlang-20.3.8.23-1.el7.x86_64.rpm install with yum yum: name=https://github.com/rabbitmq/erlang-rpm/releases/download/v20.3.8.23/erlang-20.3.8.23-1.el7.x86_64.rpm 

يمكن العثور على النسخة الكاملة من قواعد اللعبة التي تم تصحيحها من هنا: https://github.com/patsevanton/leofs_ansible


التثبيت ، التكوين ، البداية


بعد ذلك ، نفذ كما هو مكتوب في https://github.com/leo-project/leofs_ansible دون build_leofs.yml


 ## Install LeoFS $ ansible-playbook -i hosts install_leofs.yml ## Config LeoFS $ ansible-playbook -i hosts config_leofs.yml ## Start LeoFS $ ansible-playbook -i hosts start_leofs.yml 

التحقق من حالة الكتلة على LeoManager الأساسي


 leofs-adm status 

الابتدائي والثانوي يمكن أن ينظر إليه في سجلات ansible- playbook




الاستنتاج سيكون شيء مثل هذا
  [System Confiuration] -----------------------------------+---------- Item | Value -----------------------------------+---------- Basic/Consistency level -----------------------------------+---------- system version | 1.4.3 cluster Id | leofs_1 DC Id | dc_1 Total replicas | 2 number of successes of R | 1 number of successes of W | 1 number of successes of D | 1 number of rack-awareness replicas | 0 ring size | 2^128 -----------------------------------+---------- Multi DC replication settings -----------------------------------+---------- [mdcr] max number of joinable DCs | 2 [mdcr] total replicas per a DC | 1 [mdcr] number of successes of R | 1 [mdcr] number of successes of W | 1 [mdcr] number of successes of D | 1 -----------------------------------+---------- Manager RING hash -----------------------------------+---------- current ring-hash | a0314afb previous ring-hash | a0314afb -----------------------------------+---------- [State of Node(s)] -------+----------------------+--------------+---------+----------------+----------------+---------------------------- type | node | state | rack id | current ring | prev ring | updated at -------+----------------------+--------------+---------+----------------+----------------+---------------------------- S | S0@172.26.9.179 | running | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000 S | S0@172.26.9.181 | running | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000 S | S0@172.26.9.182 | running | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000 S | S0@172.26.9.183 | attached | | | | 2019-12-05 10:33:58 +0000 G | G0@172.26.9.180 | running | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000 G | G0@172.26.9.184 | running | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000 -------+----------------------+--------------+---------+----------------+----------------+---------------------------- 

إنشاء مستخدم


إنشاء مكافآت المستخدم:


 leofs-adm create-user leofs leofs access-key-id: 9c2615f32e81e6a1caf5 secret-access-key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb 

قائمة المستخدمين:


 leofs-adm get-users user_id | role_id | access_key_id | created_at ------------+---------+------------------------+--------------------------- _test_leofs | 9 | 05236 | 2019-12-02 06:56:49 +0000 leofs | 1 | 9c2615f32e81e6a1caf5 | 2019-12-02 10:43:29 +0000 

إنشاء دلو


صنع دلو


 leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5 OK 

قائمة دلو:


  leofs-adm get-buckets cluster id | bucket | owner | permissions | created at -------------+----------+--------+------------------+--------------------------- leofs_1 | leofs | leofs | Me(full_control) | 2019-12-02 10:44:02 +0000 

تكوين s3cmd


في حقل HTTP Proxy server name ، حدد عنوان IP لخادم Gateway


 s3cmd --configure Enter new values or accept defaults in brackets with Enter. Refer to user manual for detailed description of all options. Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables. Access Key [9c2615f32e81e6a1caf5]: Secret Key [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]: Default Region [US]: Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3. S3 Endpoint [s3.amazonaws.com]: Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used if the target S3 system supports dns based buckets. DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: leofs Encryption password is used to protect your files from reading by unauthorized persons while in transfer to S3 Encryption password: Path to GPG program [/usr/bin/gpg]: When using secure HTTPS protocol all communication with Amazon S3 servers is protected from 3rd party eavesdropping. This method is slower than plain HTTP, and can only be proxied with Python 2.7 or newer Use HTTPS protocol [No]: On some networks all internet access must go through a HTTP proxy. Try setting it here if you can't connect to S3 directly HTTP Proxy server name [172.26.9.180]: HTTP Proxy server port [8080]: New settings: Access Key: 9c2615f32e81e6a1caf5 Secret Key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb Default Region: US S3 Endpoint: s3.amazonaws.com DNS-style bucket+hostname:port template for accessing a bucket: leofs Encryption password: Path to GPG program: /usr/bin/gpg Use HTTPS protocol: False HTTP Proxy server name: 172.26.9.180 HTTP Proxy server port: 8080 Test access with supplied credentials? [Y/n] Y Please wait, attempting to list all buckets... Success. Your access key and secret key worked fine :-) Now verifying that encryption works... Not configured. Never mind. Save settings? [y/N] y Configuration saved to '/home/user/.s3cfg' 

إذا تلقيت خطأ ، خطأ S3: 403 (AccessDenied): تم رفض الوصول:


 s3cmd put test.py s3://leofs/ upload: 'test.py' -> 's3://leofs/test.py' [1 of 1] 382 of 382 100% in 0s 3.40 kB/s done ERROR: S3 error: 403 (AccessDenied): Access Denied 

ثم تحتاج إلى تصحيح signature_v2 في True s3cmd config. التفاصيل في هذه المسألة .


إذا كان signature_v2 False ، فسيحدث خطأ كهذا:


 WARNING: Retrying failed request: /?delimiter=%2F (getaddrinfo() argument 2 must be integer or string) WARNING: Waiting 3 sec... WARNING: Retrying failed request: /?delimiter=%2F (getaddrinfo() argument 2 must be integer or string) WARNING: Waiting 6 sec... ERROR: Test failed: Request failed for: /?delimiter=%2F 

اختبار التمهيد


إنشاء ملف 1GB


 fallocate -l 1GB 1gb 

قم بتحميله إلى Leofs


 time s3cmd put 1gb s3://leofs/ real 0m19.099s user 0m7.855s sys 0m1.620s 

إحصائيات


leofs-adm du لـ 1 عقدة:


 leofs-adm du S0@172.26.9.179 active number of objects: 156 total number of objects: 156 active size of objects: 602954495 total size of objects: 602954495 ratio of active size: 100.0% last compaction start: ____-__-__ __:__:__ last compaction end: ____-__-__ __:__:__ 

نرى أن الاستنتاج ليس غني بالمعلومات.


دعونا نرى أين يقع هذا الملف.
leofs-adm حيث هو leofs / 1GB


 leofs-adm whereis leofs/1gb -------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+---------------------------- del? | node | ring address | size | checksum | has children | total chunks | clock | when -------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+---------------------------- | S0@172.26.9.181 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | true | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000 | S0@172.26.9.182 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | true | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000 

تفعيل NFS


نقوم بتنشيط NFS على خادم Leo Gateway 172.26.9.184.


على الخادم والعميل ، قم بتثبيت nfs-utils


 sudo yum install nfs-utils 

وفقًا للتعليمات ، سنصلح ملف التكوين / /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf


 protocol = nfs 

على الخادم 172.26.9.184 ، قم بتشغيل rpcbind و leofs-gateway


 sudo service rpcbind start sudo service leofs-gateway restart 

على الخادم حيث يتم تشغيل leo_manager ، قم بإنشاء دلو لـ NFS وإنشاء مفتاح للاتصال بـ NFS


 leofs-adm add-bucket test 05236 leofs-adm gen-nfs-mnt-key test 05236 ip--nfs- 

الاتصال NFS


 sudo mkdir /mnt/leofs ## for Linux - "sudo mount -t nfs -o nolock <host>:/<bucket>/<token> <dir>" sudo mount -t nfs -o nolock ip--nfs-------gateway:/bucket/access_key_id/---gen-nfs-mnt-key /mnt/leofs sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofs 

عرض مساحة القرص من خلال عميل NFS


مساحة القرص مع الأخذ في الاعتبار أن كل عقدة تخزين بها قرص سعة 40 جيجابايت (3 عقد تشغيل ، عقدة واحدة متصلة):


 df -hP Filesystem Size Used Avail Use% Mounted on 172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 60G 3.6G 57G 6% /mnt/leofs 

تثبيت LeoFS مع 6 عقد التخزين.


جرد (بدون باني):
 # Please check roles/common/vars/leofs_releases for available versions [all:vars] leofs_version=1.4.3 build_temp_path="/tmp/leofs_builder" build_install_path="/tmp/" build_branch="master" source="package" # nodename of leo_manager_0 and leo_manager_1 are set at group_vars/all [leo_manager_0] 172.26.9.177 # nodename of leo_manager_0 and leo_manager_1 are set at group_vars/all [leo_manager_1] 172.26.9.176 [leo_storage] 172.26.9.178 leofs_module_nodename=S0@172.26.9.178 172.26.9.179 leofs_module_nodename=S0@172.26.9.179 172.26.9.181 leofs_module_nodename=S0@172.26.9.181 172.26.9.182 leofs_module_nodename=S0@172.26.9.182 172.26.9.183 leofs_module_nodename=S0@172.26.9.183 172.26.9.185 leofs_module_nodename=S0@172.26.9.185 [leo_gateway] 172.26.9.180 leofs_module_nodename=G0@172.26.9.180 172.26.9.184 leofs_module_nodename=G0@172.26.9.184 [leofs_nodes:children] leo_manager_0 leo_manager_1 leo_gateway leo_storage 

إخراج حالة Leofs-adm


إخراج حالة Leofs-adm
  [System Confiuration] -----------------------------------+---------- Item | Value -----------------------------------+---------- Basic/Consistency level -----------------------------------+---------- system version | 1.4.3 cluster Id | leofs_1 DC Id | dc_1 Total replicas | 2 number of successes of R | 1 number of successes of W | 1 number of successes of D | 1 number of rack-awareness replicas | 0 ring size | 2^128 -----------------------------------+---------- Multi DC replication settings -----------------------------------+---------- [mdcr] max number of joinable DCs | 2 [mdcr] total replicas per a DC | 1 [mdcr] number of successes of R | 1 [mdcr] number of successes of W | 1 [mdcr] number of successes of D | 1 -----------------------------------+---------- Manager RING hash -----------------------------------+---------- current ring-hash | d8ff465e previous ring-hash | d8ff465e -----------------------------------+---------- [State of Node(s)] -------+----------------------+--------------+---------+----------------+----------------+---------------------------- type | node | state | rack id | current ring | prev ring | updated at -------+----------------------+--------------+---------+----------------+----------------+---------------------------- S | S0@172.26.9.178 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000 S | S0@172.26.9.179 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000 S | S0@172.26.9.181 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:30 +0000 S | S0@172.26.9.182 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000 S | S0@172.26.9.183 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000 S | S0@172.26.9.185 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000 G | G0@172.26.9.180 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000 G | G0@172.26.9.184 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000 -------+----------------------+--------------+---------+----------------+----------------+---------------------------- 

مساحة القرص ، مع الأخذ في الاعتبار أن كل عقدة تخزين بها قرص سعة 40 جيجابايت (6 عقد تشغيل):


 df -hP Filesystem Size Used Avail Use% Mounted on 172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 120G 3.6G 117G 3% /mnt/leofs 

إذا تم استخدام 5 عقد التخزين


 [leo_storage] 172.26.9.178 leofs_module_nodename=S0@172.26.9.178 172.26.9.179 leofs_module_nodename=S1@172.26.9.179 172.26.9.181 leofs_module_nodename=S2@172.26.9.181 172.26.9.182 leofs_module_nodename=S3@172.26.9.182 172.26.9.183 leofs_module_nodename=S4@172.26.9.183 

 df -hP 172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 100G 3.0G 97G 3% /mnt/leofs 

السجلات


توجد سجلات في الدلائل /usr/local/leofs/current/*/log


إذا قمت بتثبيت / تهيئة Leofs يدويًا ، فقد تواجه الأخطاء التالية.


[خطأ] Mnesia غير متوفر

بدء تشغيل خدمة systemctl بدء leofs-manager-master


 leofs-adm status [ERROR] Mnesia is not available 

تحتاج إلى بدء systemctl بدء تشغيل leofs-manager-slave على leo_manager_1


Leofs التخزين لا يبدأ.

من الضروري أن تعمل حالة leofs-manager-master و leofs-manager-slave و leofs-adm لإظهار الحالة.


العقد المرفقة أقل من # من النسخ المتماثلة

عند بدء تشغيل leofs-adm ، تحصل على هذا الخطأ:


 leofs-adm start [ERROR] Attached nodes less than # of replicas 

لا يكفي عقد التخزين. ستظهر لك حالة leofs-adm أقل من عقدتي تخزين. الحد الأدنى المطلوب لعدد عقد التخزين 2.


تظهر حالة leofs-adm المرفقة ، والباقي قيد التشغيل.

تحتاج إلى إعادة التوازن العقد


 leofs-adm rebalance 

بعد بدء تشغيل بوابة leofs ، لا ترى عقدة Gateway في حالة leofs-adm

تحتاج إلى بدء لوفس- adm


 leofs-adm start 

لا يمكن الاتصال بـ LeoFS Manager على عقدة Slave

(بشكل افتراضي ، لا يعمل leofs-adm على عقدة الرقيق!) ( Https://leo-project.net/leofs/docs/issues/documentation-issues/ )


اختبار الحمل


يتم الاختبار في العقدتين مع التكوين:


 CPU: Single Core Intel Core (Broadwell) (-MCP-) speed: 2295 MHz Kernel: 3.10.0-862.3.2.el7.x86_64 x86_64 Up: 1h 08m Mem: 1023.8/1999.6 MiB (51.2%) Storage: 10.00 GiB (43.5% used) Procs: 98 Shell: bash 4.2.46 inxi: 3.0.37 

للاختبار ، خذ قرصًا صغيرًا
على كلا العقدتين نرى 9.4G و 5.9 G قرص مساحة حرة.


 df -hP Filesystem Size Used Avail Use% Mounted on /dev/vda1 9.4G 5.9G 3.1G 66% / 

قناة Telegram: SDS و Cluster FS

Source: https://habr.com/ru/post/ar478990/


All Articles