diff options
Diffstat (limited to 'doc/administration/high_availability/redis_source.md')
-rw-r--r-- | doc/administration/high_availability/redis_source.md | 173 |
1 files changed, 106 insertions, 67 deletions
diff --git a/doc/administration/high_availability/redis_source.md b/doc/administration/high_availability/redis_source.md index 1660e26c784..e7a8f47355d 100644 --- a/doc/administration/high_availability/redis_source.md +++ b/doc/administration/high_availability/redis_source.md @@ -24,14 +24,16 @@ the Omnibus Redis HA documentation. **Table of Contents** - [Configuring your own Redis server](#configuring-your-own-redis-server) + - [Prerequisites](#prerequisites) - [Step 1. Configuring the master Redis instance](#step-1-configuring-the-master-redis-instance) - [Step 2. Configuring the slave Redis instances](#step-2-configuring-the-slave-redis-instances) - [Step 3. Configuring the Redis Sentinel instances](#step-3-configuring-the-redis-sentinel-instances) - [Step 4. Configuring the GitLab application](#step-4-configuring-the-gitlab-application) - [Example of minimal configuration with 1 master, 2 slaves and 3 Sentinels](#example-of-minimal-configuration-with-1-master-2-slaves-and-3-sentinels) - - [Configuring Redis Master](#configuring-redis-master) - - [Configuring Redis Slaves](#configuring-redis-slaves) - - [Configuring Redis Sentinel](#configuring-redis-sentinel) + - [Example configuration for Redis master and Sentinel 1](#example-configuration-for-redis-master-and-sentinel-1) + - [Example configuration for Redis slave 1 and Sentinel 2](#example-configuration-for-redis-slave-1-and-sentinel-2) + - [Example configuration for Redis slave 2 and Sentinel 3](#example-configuration-for-redis-slave-2-and-sentinel-3) + - [Example configuration of the GitLab application](#example-configuration-of-the-gitlab-application) - [Troubleshooting](#troubleshooting) <!-- END doctoc generated TOC please keep comment here to allow auto update --> @@ -121,8 +123,8 @@ starting with `sentinel` prefix. Assuming that the Redis Sentinel is installed on the same instance as Redis master with IP `10.0.0.1` (some settings might overlap with the master): -1. [Install Redis](../../install/installation.md#6-redis) -1. Edit `/etc/redis/redis.conf`: +1. [Install Redis Sentinel](http://redis.io/topics/sentinel) +1. Edit `/etc/redis/sentinel.conf`: ```conf ## Define a `bind` address pointing to a local IP that your other machines @@ -191,8 +193,24 @@ which ideally should not have Redis or Sentinels in the same machine for a HA setup: 1. Edit `/home/git/gitlab/config/resque.yml` following the example in - `/home/git/gitlab/config/resque.yml.example`, and uncomment the sentinels - lines, pointing to the correct server credentials. + [resque.yml.example][resque], and uncomment the Sentinel lines, pointing to + the correct server credentials: + + ```yaml + # resque.yaml + production: + url: redis://:redi-password-goes-here@gitlab-redis/ + sentinels: + - + host: 10.0.0.1 + port: 26379 # point to sentinel, not to redis port + - + host: 10.0.0.2 + port: 26379 # point to sentinel, not to redis port + - + host: 10.0.0.3 + port: 26379 # point to sentinel, not to redis port + ``` 1. [Restart GitLab][restart] for the changes to take effect. @@ -206,14 +224,16 @@ In a real world usage, you would also setup firewall rules to prevent unauthorized access from other machines, and block traffic from the outside ([Internet][it]). -We will use the same `3` nodes with **Redis** + **Sentinel** topology -discussed in the [Configuring Redis for GitLab HA](redis.md) documentation. +For this example, **Sentinel 1** will be configured in the same machine as the +**Redis Master**, **Sentinel 2** and **Sentinel 3** in the same machines as the +**Slave 1** and **Slave 2** respectively. Here is a list and description of each **machine** and the assigned **IP**: * `10.0.0.1`: Redis Master + Sentinel 1 * `10.0.0.2`: Redis Slave 1 + Sentinel 2 * `10.0.0.3`: Redis Slave 2 + Sentinel 3 +* `10.0.0.4`: GitLab application Please note that after the initial configuration, if a failover is initiated by the Sentinel nodes, the Redis nodes will be reconfigured and the **Master** @@ -224,81 +244,100 @@ The same thing will happen with `sentinel.conf` that will be overridden after th initial execution, after any new sentinel node starts watching the **Master**, or a failover promotes a different **Master** node. -### Configuring Redis Master +### Example configuration for Redis master and Sentinel 1 -**Example configation for Redis Master - `redis.conf`:** +1. In `/etc/redis/redis.conf`: -```conf -bind 10.0.0.1 -port 6379 -requirepass redis-password-goes-here -masterauth redis-password-goes-here -``` + ```conf + bind 10.0.0.1 + port 6379 + requirepass redis-password-goes-here + masterauth redis-password-goes-here + ``` + +1. In `/etc/redis/sentinel.conf`: -### Configuring Redis Slaves + ```conf + bind 10.0.0.1 + port 26379 + sentinel auth-pass gitlab-redis redis-password-goes-here + sentinel monitor gitlab-redis 10.0.0.1 6379 2 + sentinel down-after-milliseconds gitlab-redis 10000 + sentinel failover_timeout 30000 + ``` -**Example configation for Slave 1 - `redis.conf`:** +1. Restart the Redis service for the changes to take effect. -```conf -bind 10.0.0.2 -port 6379 -requirepass redis-password-goes-here -masterauth redis-password-goes-here +### Example configuration for Redis slave 1 and Sentinel 2 -# IP and port of the master Redis server -slaveof 10.0.0.1 6379 -``` +1. In `/etc/redis/redis.conf`: -**Example configation for Slave 2 - `redis.conf`:** + ```conf + bind 10.0.0.2 + port 6379 + requirepass redis-password-goes-here + masterauth redis-password-goes-here + slaveof 10.0.0.1 6379 + ``` -```conf -bind 10.0.0.3 -port 6379 -requirepass redis-password-goes-here -masterauth redis-password-goes-here +1. In `/etc/redis/sentinel.conf`: -# IP and port of the master Redis server -slaveof 10.0.0.1 6379 -``` + ```conf + bind 10.0.0.2 + port 26379 + sentinel auth-pass gitlab-redis redis-password-goes-here + sentinel monitor gitlab-redis 10.0.0.1 6379 2 + sentinel down-after-milliseconds gitlab-redis 10000 + sentinel failover_timeout 30000 + ``` -### Configuring Redis Sentinel +1. Restart the Redis service for the changes to take effect. -For this example, **Sentinel 1** will be configured in the same machine as the -**Redis Master**, **Sentinel 2** and **Sentinel 3** in the same machines as the -**Slave 1** and **Slave 2** respectively. +### Example configuration for Redis slave 2 and Sentinel 3 -**Example configation for Sentinel 1 - `sentinel.conf`:** +1. In `/etc/redis/redis.conf`: -```conf -bind 10.0.0.1 -port 26379 -sentinel auth-pass gitlab-redis redis-password-goes-here -sentinel monitor gitlab-redis 10.0.0.1 6379 2 -sentinel down-after-milliseconds gitlab-redis 10000 -sentinel failover_timeout 30000 -``` + ```conf + bind 10.0.0.3 + port 6379 + requirepass redis-password-goes-here + masterauth redis-password-goes-here + slaveof 10.0.0.1 6379 + ``` -**Example configation for Sentinel 2 - `sentinel.conf`:** +1. In `/etc/redis/sentinel.conf`: -```conf -bind 10.0.0.2 -port 26379 -sentinel auth-pass gitlab-redis redis-password-goes-here -sentinel monitor gitlab-redis 10.0.0.1 6379 2 -sentinel down-after-milliseconds gitlab-redis 10000 -sentinel failover_timeout 30000 -``` + ```conf + bind 10.0.0.3 + port 26379 + sentinel auth-pass gitlab-redis redis-password-goes-here + sentinel monitor gitlab-redis 10.0.0.1 6379 2 + sentinel down-after-milliseconds gitlab-redis 10000 + sentinel failover_timeout 30000 + ``` -**Example configation for Sentinel 3 - `sentinel.conf`:** +1. Restart the Redis service for the changes to take effect. -```conf -bind 10.0.0.3 -port 26379 -sentinel auth-pass gitlab-redis redis-password-goes-here -sentinel monitor gitlab-redis 10.0.0.1 6379 2 -sentinel down-after-milliseconds gitlab-redis 10000 -sentinel failover_timeout 30000 -``` +### Example configuration of the GitLab application + +1. Edit `/home/git/gitlab/config/resque.yml`: + + ```yaml + production: + url: redis://:redi-password-goes-here@gitlab-redis/ + sentinels: + - + host: 10.0.0.1 + port: 26379 # point to sentinel, not to redis port + - + host: 10.0.0.2 + port: 26379 # point to sentinel, not to redis port + - + host: 10.0.0.3 + port: 26379 # point to sentinel, not to redis port + ``` + +1. [Restart GitLab][restart] for the changes to take effect. ## Troubleshooting |