OIOFS Node Installation

Tip

oio-fs is part of our paid plans.

Get in touch with the team or visit the page describing our plans.

Requirements

Licence

  • A login and a password provided by OpenIO Support

Hardware

  • Storage drive: A storage device for cache

Operating system

  • Centos 7
  • Ubuntu 16.04 (Server)

System

  • Root privileges are required (using sudo).
  • SELinux or AppArmor are disabled (managed at deployment).
  • The system must be up to date.
# RedHat
sudo yum update -y
sudo reboot
# Ubuntu
sudo apt update -y
sudo apt upgrade -y
sudo reboot

Network

  • This node connected to the same OIOSDS’s lan.

SDS

  • The conscience IP address.
  • The namespace used.
  • The redis sentinels addresses and the redis cluster name.

Setup

You only need to perform this setup on one of the nodes in the cluster (or your laptop).

# RedHat
sudo yum install git -y
# Ubuntu
sudo apt install git -y
  • Clone the OpenIO ansible playbook deployment repository.
git clone https://github.com/open-io/ansible-playbook-openio-deployment.git oiofs && cd oiosds/products/oiofs

Architecture

This playbook will deploy an oiofs mount connected to a SDS cluster as shown below:

    +---------+
    |         |
    |   +---------+                                                     +---------+
    |   |     |   |                                                     |         |
    |   |   +---------+                                                 |         |
    |   |   | |   |   |          Provide file-oriented access           |         |
    |   |   | |   |   |                                                 |         |
    |   |   | |   |   | <---------------------------------------------> |         |
    |   |   | |   |   |                                                 |         |
    |   |   | |   |   |          on an object storage backend           |         |
    +---------+   |   |                                                 |         |
        |   |     |   |                                                 |         |
        +---------+   |                                                 +---------+
OpenIO SDS  |         |                                                  OpenIO FS
(N-nodes)   +---------+

Installation

First, fill the inventory according to your environment:

  • Edit the inventories/01_oiofs.ini file and adapt the IP addresses and SSH user (sample here: inventory).

    [oiofs]
    node_oiofs ansible_host=10.0.0.1 ansible_user=root # Change it with the IP of the server
    ...
    

You can check that everything is configured correctly using this command:

ansible all -i inventories -bv -m ping

Run these commands:

  • To download and install requirements:
./requirements_install.sh
  • To deploy:

    ansible-playbook -i inventories main.yml
    

Post-install Checks

The node is configured and the filesystem is mounted.

Run these commands on the node: gridinit_cmd status and df -h.

Sample output:

root@node1:/# gridinit_cmd status
KEY                                            STATUS      PID GROUP
OPENIO-ecd-0                                   UP         8383 OPENIO,ecd,0
OPENIO-oiofs-mnt_oiofs_MY_CONTAINER_MY_ACCOUNT UP        10503 OPENIO,oiofs,mnt_oiofs_MY_CONTAINER_MY_ACCOUNT
OPENIO-oioproxy-1                              UP         9148 OPENIO,oioproxy,1

root@node1:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
[...]
oiofs-fuse       16E     0   16E   0% /mnt/oiofs-MY_CONTAINER-MY_ACCOUNT

Custom your deployment

Credentials

You can set your credentials in the oiofs.yml file.

oiofs.yml
---
# Login provided by OPENIO
openio_oiofs_customer_login: foo
# Password provided by OPENIO
openio_oiofs_customer_password: bar
...

SDS informations

You can set all your SDS information in the oiofs.yml file.

By default, an ecd and an oioproxy are deployed on the target node and binded the default IP address.

oiofs.yml
---
# Conscience SDS
openio_sds_conscience_address: 172.17.0.4
# Proxy SDS (deployed on oiofs nodes)
openio_sds_oioproxy_address: "{{ ansible_default_ipv4.address }}"
# Erasure Coding Daemon (deployed on oiofs nodes)
openio_sds_ecd_address: "{{ ansible_default_ipv4.address }}"
# Redis Cluster SDS
openio_sds_sentinels_name: "{{ openio_sds_namespace }}-master-1"
openio_sds_sentinels_addresses:
  - 172.17.0.2:6012
  - 172.17.0.3:6012
  - 172.17.0.4:6012
...

Manage mounts

All mounts are defined in the oiofs.yml file and customized by host in the node_oiofs.yml file.

oiofs.yml
---
# List of oiofs mounts
oiofs_mounts:
  - path: /mnt/oiofs-MY_CONTAINER-MY_ACCOUNT
    account: MY_ACCOUNT
    container: MY_CONTAINER
    retry_delay: 1000
    sds_retry_delay: 1000
    fuse_max_retries: 200
    max_flush_thread: "{{ ansible_processor_vcpus / 2 | int }}"
...

The node_oiofs.yml matches information defined in the oiofs.yml.

node_oiofs.yml
---
oiofs_mountpoints:
    # this path to be define in 'oiofs_mounts'
  - path: /mnt/oiofs-MY_CONTAINER-MY_ACCOUNT
    cache_directory: /mnt/oiofs-MY_CONTAINER-MY_ACCOUNT.cache
    container: "{{ oiofs_mounts | selectattr('path', 'equalto', '/mnt/oiofs-MY_CONTAINER-MY_ACCOUNT') | map(attribute='container') | join }}"
    account: "{{ oiofs_mounts | selectattr('path', 'equalto', '/mnt/oiofs-MY_CONTAINER-MY_ACCOUNT') | map(attribute='account') | join }}"
    oioproxy_host: "{{ openio_sds_oioproxy_address }}"
    ecd_host: "{{ openio_sds_ecd_address }}"
    redis_sentinel_servers: '{{ openio_sds_sentinels_addresses | string | safe }}'
    redis_sentinel_name: "{{ openio_sds_sentinels_name }}"
    state: present
...