How to load configuration for Cequel Gem for Ruby without Rails

You can use this method:

Cequel::Record.establish_connection

Example:


# Load config from yaml:
config = YAML.load_file('config/cequel.yml')['development']

# Now you can initialize connection:
Cequel.Record.establish_connection(
  host: config[:host],
  port: config[:port],
  keyspace: config[:keyspace]
)

Как добавить ноду в кластер Cassandra

В примере рассмотрен процесс добавления новой ноды в кластер Cassandra с endpoint_snitch == PropertyFileSnitch (мульти-датацентровая конфигурация с описанием нод в cassandra-topology.properies). Все команды тестировались на CentOS 6.6.

Делаем всё на новой ноде по порядку:

  1. Удаляем содержимое директории с данными:
    rm -rf /var/lib/cassandra/data/*
  2. Ставим корректные права:
    chown -R cassandra:cassandra /var/lib/cassandra
  3. Прописываем в файл cassandra.yaml следующую строку (это важно!):
    auto_bootstrap: true
  4. Затем туда же добавляем listen_address и прочие нодо-специфические значения (вам тут виднее будет, я не знаю вашу сетку).
  5. В seeds этого же файла указываем IP ответственной ноды в вашем ДЦ.

На абсолютно всех подключенных нодах редактирую файл cassandra-topology.properties и в нужный DC/RAC добавляю свою новую ноду. У меня это выглядит так:

10.200.0.100=DC1:DC_APP_STAGING01

После этого запускаем базу данных на новой ноде:

service cassandra start

Всё, спустя несколько минут (или часов) данные размажутся на вашу новую ноду и она будет в строю как и все остальные. Проверяем через nodetool status на любой ноде.

Как вставить значение в UUID-поле в Cassandra

Возникла необходимость заполнить таблицу двумя миллионами тестовых записей. Одно из полей имеет тип TIMEUUID. Мне было необходимо вставить случайные значения в это поле, в зависимости от сгенерированного времени. Скажу, что это была таблица логов и к ней писался пейджинатор (которого, как известно, для Кассандры не существует).

Устанавливаем и подключаем gem simple_uuid.

Сам процесс создания выглядит очень просто:

time = Time.now-(70000*rand())
uuid = SimpleUUID::UUID.new(time)
$db.execute("INSERT INTO Logs (id, timestamp, message) VALUES (?, ?, ?)", uuid, time, "Запись лога #{counter}")

В первой строке мы создаём случайный таймстамп.
Затем генерируем случайный UUID на основании этой метки. И вставляем в базу 🙂

Установка Apache Cassandra на CentOS 6.5

Обновим систему и пакеты до самых последних версий:

# yum update
# yum upgrade

Теперь необходимо добавить новый репозиторий для установки Cassandra:

# vi /etc/yum.repos.d/datastax.repo

Добавляем в него следующий код и сохраняем:

[datastax]
name= DataStax Repo for Apache Cassandra
baseurl=http://rpm.datastax.com/community
enabled=1
gpgcheck=0

Затем ищем последнюю доступную версию базы данных:

# yum search dsc

Будет выведено нечто подобное:

[root@localhost gruz0]# yum search dsc
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: centos-mirror.rbc.ru
 * extras: centos-mirror.rbc.ru
 * updates: centos-mirror.rbc.ru
===================================================================== N/S Matched: dsc ======================================================================
dsc.noarch : Meta RPM for installation of the DataStax DSC platform
dsc1.1.noarch : Meta RPM for installation of the DataStax DSC platform
dsc12.noarch : Meta RPM for installation of the DataStax DSC platform
dsc20.noarch : Meta RPM for installation of the DataStax DSC platform

Name and summary matches only, use "search all" for everything.

Нам нужна версия dsc20, установим её:

# yum install dsc20

Всё 😉