Git Product home page Git Product logo

nbase-arc's Introduction

Introduction

nbase-arc (n-base-ARC) is an open source distributed memory store based on Redis. It provides a zone of clusters where each cluster is composed of synchronously replicated Redis server groups that can scale-in/out without service interruption. Overview

Features

  • Multi-cluster zone
    • You can make multiple clusters within a single zone. Each cluster is distinguished by its name.
    • Configuration master manages all cluster information safely. Configuration master also does failure detection and automatic fail-over of the cluster components
  • A Cluster is a single big Redis server
    • Clients access Redis servers indirectly via gateways. A cluster acts like a single big Redis server instance with multiple access points.
    • Gateway is a Redis proxy that accepts Redis requests from client.
  • High availability and consistency
    • Unlike Redis replication which is asynchronous and can lose changes when a master crashes, nbase-arc implements synchronous replication layer that supports both high availability and consistency. Changes replied to clients are durable even when the master side of the replication is crashed.
  • Service without interruption
    • All cluster management operations can be performed without service interruption. You can even upgrade gateways (client access directly) transparently if you use nbase-arc C/Java client libraries.

Quick start

Documents

Discussions

Related Projects

License

Copyright 2015 Naver Corp.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

nbase-arc's People

Contributors

beanmilk avatar bohyunjung avatar cl9200 avatar dependabot[bot] avatar hyunjongl avatar jaehong-kim avatar jlleitschuh avatar khcheon avatar kimmj avatar koojanghoi avatar kswoo3740 avatar lichking-lee avatar lynix94 avatar sanitysoon avatar voyageth avatar weirdjh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nbase-arc's Issues

gw 의 slot state 가 이상한 값으로 설정되는 경우

live migration 테스트 중 delay 명령이
-ERR Slot is out of range or can't be blocked 에러를 나는 경우가 발생하였다.

해당 에러는 check_delay_cmd 에서 발생하는데, slot from, to 가 잘못되거나, conf->slot_state 가 NORMAL 이 아닌경우 발생한다.

확인결과 아래의 값과 같이 slot_state[0] 의 값이 0, 1, 2 (NORMAL, BLOCKING, BLOCKED) 가 아니라 garbage 값으로 되어 있으며 다른 slot_state 들도 마찬가지 이다.

이로 인해 delay 명령이 실패했다.

live migration 시험 중에는 cluster_info, pgs_add, pg_add, delay, redirect 명령을 사용하였으며 이 명령들이 무작위로 실행되던 중 아래와 같은 현상이 나타났다. (아래 현상이 나타나기 전에는 정상동작했음)

개발 중 위 명령들이 무작위로 실행되는 도중 slot_state 가 침범되는 상황이 발생한 것으로 보인다.

   │135     check_delay_cmd (cluster_conf * conf, long long slot_from, long long slot_to)                           │
   │136     {                                                                                                       │
   │137       block_range *range;                                                                                   │
   │138       int i;                                                                                                │
B+ │139       if (slot_from < 0 || slot_to >= conf->nslot || slot_from > slot_to)                                   │
   │140         {                                                                                                   │
   │141           return ERR;                                                                                       │
   │142         }                                                                                                   │
   │143       for (i = slot_from; i <= slot_to; i++)                                                                │
   │144         {                                                                                                   │
  >│145           if (conf->slot_state[i] != SLOT_STATE_NORMAL)                                                     │
   │146             {                                                                                               │
   │147               return ERR;                                                                                   │
   │148             }                                                                                               │
   │149         }                         
(gdb) p	conf->slot_state[0]   
$23 = 971088048

[solved]cluster create error because of '<version>'

when I try to create cluster. there were problem about version

2017-12-05 7 39 53

but this error is solved by correcting version in these files

  • nbase-arc/confmaster/confmaster-{version}
  • nbase-arc/bin/*-{version}
  • nbase-arc/mgmt/config/conf_dnode.py
    • REDIS_VERSION = "{version}"
    • GW_VERSION = "{version}"
    • SMR_VERSION = "{version}"

It is like below picture

2017-12-05 8 18 48

And cluster can be created

2017-12-05 7 42 27

Is 1.5.0 version of Java-client available in maven?

Is 1.5.0 version of Java-client available?
I followed the instructions in "Readme.md"
And It says to use version 1.5.0.
However, version 1.5.0 did not exist at "mavenrepository.com", and an error appeared during the installation process.
Is this a mistake in this process or is there no 1.5.0 version?

<dependencies>
    <dependency>
        <groupId>com.navercorp</groupId>
        <artifactId>nbase-arc-java-client</artifactId>
        <version>1.5.0</version>
    </dependency>
</dependencies>

default

default

Make listen address configurable for local_proxy

Hello. I think it would be great if local_proxy supports configuring listen address which is now fixed to the value INADDR_ANY.
The reason is that we want to restrict access to the local proxy only from the localhost for security reason. Since local_proxy does not have any authentication, it could be dangerous to accept requests from any client.
What do you think?

cluster create error

system : centos 7.1 x64 / Linux redis1 3.10.0-327.22.2.el7.x86_64 #1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

fab main

#4 cluster create

Cluster name : cluster
PG count : 4
Replication number : 2
PGS Physical Machine list([["PM_NAME PM_IP", "PM_NAME PM_IP"], ["PM_NAME PM_IP", "PM_NAME PM_IP"], ...]) [["redis1 10.0.0.151", "redis2 10.0.0.152"]]
Gateway Physical Machine list([PM_NAME PM_IP, PM_NAME PM_IP, ...]) ["redis1 10.0.0.151", "redis2 10.0.0.152"]
Cronsave number 2
[[email protected]] Executing task 'get_ports'

[[email protected]] Get using ports
[[email protected]] Login password for 'user':
[[email protected]] Executing task 'get_ports'

[[email protected]] Get using ports
[[email protected]] Executing task 'get_ports'

[[email protected]] Get using ports
[[email protected]] Executing task 'get_ports'

[[email protected]] Get using ports

Print script? [Y/n]

[SCRIPT]
CLUSTER:
cluster_add cluster 0:1

GW:
cluster 1 redis1 10.0.0.151 6000
cluster 2 redis2 10.0.0.152 6000

PG:
pg_add cluster 0
pg_add cluster 1
pg_add cluster 2
pg_add cluster 3

PN PG MAP:
slot_set_pg cluster 0:2047 0
slot_set_pg cluster 2048:4095 1
slot_set_pg cluster 4096:6143 2
slot_set_pg cluster 6144:8191 3

PGS:
cluster 0 0 redis1 10.0.0.151 7000
cluster 50 0 redis2 10.0.0.152 7000
cluster 1 1 redis1 10.0.0.151 7010
cluster 51 1 redis2 10.0.0.152 7010
cluster 2 2 redis1 10.0.0.151 7020
cluster 52 2 redis2 10.0.0.152 7020
cluster 3 3 redis1 10.0.0.151 7030
cluster 53 3 redis2 10.0.0.152 7030

Print configuration? [Y/n]

[GW INFORMATION]
+-------+------------------------------------------+--------+
| GW_ID | PM | PORT |
+-------+------------------------------------------+--------+
| 1 | ['redis1', '10.0.0.151'] | 6000 |
| 2 | ['redis2', '10.0.0.152'] | 6000 |
+-------+------------------------------------------+--------+

[PG INFORMATION]
+-------+--------------+-----------+
| PG_ID | SLOT | SLOT SIZE |
+-------+--------------+-----------+
| 0 | 0 2047 | 2048 |
| 1 | 2048 4095 | 2048 |
| 2 | 4096 6143 | 2048 |
| 3 | 6144 8191 | 2048 |
+-------+--------------+-----------+

[PGS INFORMATION]
+-------+--------+------------------------------------------+--------+
| PG_ID | PGS_ID | PM | PORT |
+-------+--------+------------------------------------------+--------+
| 0 | 0 | ['redis1', '10.0.0.151'] | 7000 |
| 0 | 50 | ['redis2', '10.0.0.152'] | 7000 |
| 1 | 1 | ['redis1', '10.0.0.151'] | 7010 |
| 1 | 51 | ['redis2', '10.0.0.152'] | 7010 |
| 2 | 2 | ['redis1', '10.0.0.151'] | 7020 |
| 2 | 52 | ['redis2', '10.0.0.152'] | 7020 |
| 3 | 3 | ['redis1', '10.0.0.151'] | 7030 |
| 3 | 53 | ['redis2', '10.0.0.152'] | 7030 |
+-------+--------+------------------------------------------+--------+

[PGS INFORMATION, After Arranging locations of masters]
+-------+--------+------------------------------------------+--------+
| PG_ID | PGS_ID | PM | PORT |
+-------+--------+------------------------------------------+--------+
| 0 | 0 | ['redis1', '10.0.0.151'] | 7000 |
| 0 | 50 | ['redis2', '10.0.0.152'] | 7000 |
| 1 | 51 | ['redis2', '10.0.0.152'] | 7010 |
| 2 | 2 | ['redis1', '10.0.0.151'] | 7020 |
| 2 | 52 | ['redis2', '10.0.0.152'] | 7020 |
| 3 | 53 | ['redis2', '10.0.0.152'] | 7030 |
| 1 | 1 | ['redis1', '10.0.0.151'] | 7010 |
| 3 | 3 | ['redis1', '10.0.0.151'] | 7030 |
+-------+--------+------------------------------------------+--------+

[MASTER COUNT]
10.0.0.152 : 2
10.0.0.151 : 2

Create PGS, Continue? [Y/n]
Confirm Mode? [Y/n]

Warning: PM Add fail. cmd:pm_add redis1 10.0.0.151, ret:{"state":"error","msg":"-ERR required state is 2, but 1"}

confmaster error

2016/07/12 10:25:43.836 ERR 016 CM Exception occur while handle request. length: 30, message: "pm_add redis1 10.0.0.151"... com.navercorp.nbasearc.confmaster.ConfMasterException$MgmtStateNotSatisfiedException: -ERR required state is 2, but

How to do stress test for nbase

I want to know how much progress there is (nbasev1.2.5 -> nbasev1.4.0) ,but i cannot do a test(stress test or performance tests) use “arc-cli-*”,so i ask this question for your help,could you please help me?

Newer version of redis

Hi
If I understood well, your architecture depends on a modified redis version 2.8.8. Are there plans to upgrade your base redis to a more recent version? This hard dependency is quite unfortunate.

compilation error while make test

From #77

@drawhan asked an error about 'make test'

cc: error: ../../smr/smr/libsmr.a: No such file or directory
make[2]: *** [redis-server] Error 1
make[2]: Leaving directory /home/ttp/src/nbase-arc/redis-2.8.8/src'
make[1]: *** [test] Error 2
make[1]: Leaving directory/home/ttp/src/nbase-arc/redis-2.8.8'
make: *** [test] Error 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.