RCStor
is a distributed object storage system designed to utilize regenerating codes.
We need to switch to the root user. On Ubuntu, run sudo su
.
Install golang-1.14:
wget https://dl.google.com/go/go1.14.10.linux-amd64.tar.gz
tar -xvf go1.14.10.linux-amd64.tar.gz -C /usr/local/
Set environmental variable:
echo 'export GOROOT=/usr/local/go' >> ~/.profile
echo 'export GOPATH=$HOME/go' >> ~/.profile
echo 'export PATH=$GOPATH/bin:$GOROOT/bin:/usr/local/bin:$PATH' >> ~/.profile
source ~/.profile
Install rcstor
:
git clone https://github.com/rcstor/rcstor.git
cd rcstor
make install
We only need to install rcstor
on one server. All binaries will be distributed to other machines through ssh automatically.
We need to start SSH services on every machine and copy the key of each server to every other servers.
apt update
apt install openssh-client openssh-server
systemctl start sshd
ssh-keygen
ssh-copy-id root@<IP of all machines>
We need to run the above commands on all servers.
Run the following command to start directory service.
rcdir start
We need to create a json file to specify all the parameters needed to create a volume:
- The IPs of all servers
- The paths of all disks
- Layout (e.g. Geometric, Stripe)
- Layout parameter
- Disk type (i.e. HDD or SSD)
- The exposed port of HTTP server.
Refer to Geo-1M.json
and Con-1M.json
as the example for volume json file.
Run the following command on directory server to create and start the volume.
rccli create <JsonFileName>
rccli start <VolumeName>
Run rccli list
to check the status of the volume.
We can put/get an object from any server. We need to specify an unused object id to put the object into rcstor
.
PUT: wget --post-file=<filename> http://<ServerIP>:<HTTPPort>/put/<objectID>
GET: wget http://<ServerIP>:<HTTPPort>/get/<objectID>
We need to run rccli genParity <VolumeName>
to generate the parity before testing degraded read.
We can find the running result in /usr/local/var/log/rcdir.log
. We can proceed only after we find that the operation has completed from the log.
Then, we can run the following command to test the degraded time to read an object, rcstor
will assume one disk is broken and repair the object.
DGET: wget http://<ServerIP>:<HTTPPort>/dget/<objectID>
We need to make sure the volume is clean (no object has been put yet) before importing.
Run rccli tracePuts <VolumeName>
to generate random data sampled from the trace.
This may take very long time and involve writing a very large amount of data. We need to check the log to make sure this operation has been completed before moving foward.
Then, we need to run rccli genParity <VolumeName>
to generate parity for the imported data.
Run rccli recovery <VolumeName>
, rcstor
will think one of the disk is broken and begin to recover. Then we can start to see the recovery procedure in the log.
Run rccli traceDgets <VolumeName>
, then we can see the result of degraded read in the log.
Run rccli foregroundTraceGets <VolumeName>
to start foreground requests, then we run rccli traceDgets <VolumeName>
to test degraded read time. We can stop the volume by running rccli stop <VolumeName>
afterwards.
Run rccli drop <VolumeName>
, then we can delete the data for that volume.
We can use huge pages to improve the performance of rcstor
.
Run echo 1000 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages