أنا من لوكسوفت.
وفقًا لـ 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
التحقق من حالة الكتلة على 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
عرض مساحة القرص من خلال عميل 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 عقد التخزين.
إخراج حالة 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
لا يكفي عقد التخزين. ستظهر لك حالة 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