RethinkDB provides a web interface which lets you manage your entire server cluster, from controlling sharding and replication to running ReQL queries (in JavaScript), with editing and history support. In addition, you can perform administration tasks using scriptable ReQL commands.
Once RethinkDB is running, you can connect to it at http://localhost:8080, assuming you’ve kept the default port (8080) and it’s running on your local machine.
By default, RethinkDB binds the web interface to localhost
for security reasons. If you need to be able to access it from another server, use the --bind all
parameter when starting RethinkDB. Read how to Start a RethinkDB server and Start RethinkDB at system startup.
With the appropriate client driver installed you can use a supported language to perform all administration tasks, either from the language’s REPL or as a script. There are ReQL commands for configuring sharding and replication, rebalancing shards and more. In addition, you can query system tables to get information about your cluster and to change many of its operational characteristics.
These examples use Python, but there’s equivalent functionality in Ruby, and any other scripting language with a RethinkDB driver updated for version 1.16 or later. Read the API documentation for more information on specific commands along with descriptions of their return values.
Load python
(or ipython) and set up a connection to your database:
from rethinkdb import RethinkDB
r = RethinkDB()
r.connect('localhost', 28015).repl()
Now, you can use ReQL commands to query system tables and perform reconfiguration commands. To return the server status, you can query the server_status
system table in the special rethinkdb
database.
list(r.db('rethinkdb').table('server_status').run())
[{u'network': { u'canonical_addresses': [{u'host': u'127.0.0.1', u'port':
29015}, {u'host': u'::1', u'port': 29015}], u'http_admin_port': 8080,
u'hostname': u'companion-cube', u'cluster_port': 29015, u'reql_port': 28015,
u'time_connected': datetime.datetime(2015, 06, 12, 22, 43, 56, 651000,
tzinfo=<rethinkdb.ast.RqlTzinfo object at 0x10c13d1d0>)}, u'process': {
u'version': u'rethinkdb 2.1.0-xxx (CLANG 3.4 (tags/RELEASE_34/final))',
u'pid': 69596, u'cache_size_mb': 100, u'argv': [u'/usr/bin/rethinkdb'],
u'time_started': datetime.datetime(2015, 06, 12, 22, 43, 56, 651000,
tzinfo=<rethinkdb.ast.RqlTzinfo object at 0x10c13d1d0>)}, u'id':
u'6dbc31fe-8f78-4128-af76-cdac43bcc195', u'name': u'rethinkdb'}]
To return the status on a specific table, you can use the status command.
r.table('superheroes').status().run()
And reconfiguring a table can be done the reconfigure command.
r.table('a').reconfigure(shards=2, replicas=2).run()
r.table('b').reconfigure(shards=2, replicas={'us_east':2, 'us_west':2,
'london':2}, primary_replica_tag='us_east').run()
The Data Explorer in the web administration UI is itself a JavaScript REPL, with syntax highlighting and history. (The article on ReQL data exploration goes into some detail on how to use the Data Explorer.) The advantage of scripting languages with ReQL comes into play when writing administration scripts.
By using ReQL with a language like Python, it becomes easy to script administrative and configuration tasks with RethinkDB. If you have complex table configurations that might need to be repeated for new tables or tweaked for the whole database, you can store them in a script.
from rethinkdb import RethinkDB
r = RethinkDB()
conn = r.connect('localhost', 28015)
# Configure the entire database
r.db('database').reconfigure(shards=2, replicas=3).run(conn)
# Configure a set of specific tables
tables = ['users', 'posts', 'comments']
for table in tables:
r.table(table).reconfigure(shards=3, replicas=2).run(conn)
# Configure all tables that are not related to logging
tables = [t for t in r.table_list().run() if 'log_' not in t]
for table in tables:
r.table(table).reconfigure(shards=2, replicas=3).run(conn)
# Retrieve the current configuration of all the tables
# This uses the table_config system table
configs = r.db('rethinkdb').table('table_config').run()
# Restore the configuration of tables saved in 'configs'
for config in configs:
r.db('rethinkdb').table('table_config').get(
config['id']).update(config).run(conn)
Scripting is also the only way to access some advanced features such as server tags, which let you group servers together for replication purposes (such as associating them with physical data centers). For more information, read the “Advanced configuration” section of Sharding and replication.