Added Redis Sentinel support documentation
This commit is contained in:
parent
32bb421195
commit
a5c1e2e55e
2 changed files with 108 additions and 1 deletions
|
@ -22,7 +22,7 @@ production:
|
||||||
# http://redis.io/topics/sentinel
|
# http://redis.io/topics/sentinel
|
||||||
#
|
#
|
||||||
# You must specify a list of a few sentinels that will handle client connection
|
# You must specify a list of a few sentinels that will handle client connection
|
||||||
# please read here for more information: https://github.com/redis/redis-rb#sentinel-support
|
# please read here for more information: https://docs.gitlab.com/ce/administration/high_availability/redis.html
|
||||||
##
|
##
|
||||||
# url: redis://master:6379
|
# url: redis://master:6379
|
||||||
# sentinels:
|
# sentinels:
|
||||||
|
|
|
@ -3,6 +3,113 @@
|
||||||
You can choose to install and manage Redis yourself, or you can use GitLab
|
You can choose to install and manage Redis yourself, or you can use GitLab
|
||||||
Omnibus packages to help.
|
Omnibus packages to help.
|
||||||
|
|
||||||
|
## Experimental Redis Sentinel support
|
||||||
|
|
||||||
|
Since 8.10 release, you can configure a list of Redis Sentinel servers that
|
||||||
|
will monitor a group of Redis servers to provide you with a standard failover
|
||||||
|
support.
|
||||||
|
|
||||||
|
There is currently one exception to the Sentinel support: **mail_room**, the
|
||||||
|
component that process incoming emails.
|
||||||
|
|
||||||
|
It doesn't support Sentinel yet, but we hope to integrate a future release
|
||||||
|
that does support it.
|
||||||
|
|
||||||
|
To get a better understanding on how to correctly setup Sentinel, please read
|
||||||
|
[Redis Sentinel documentation](http://redis.io/topics/sentinel) first, as
|
||||||
|
faling to configure it correctly can lead to data-loss.
|
||||||
|
|
||||||
|
### Redis setup
|
||||||
|
|
||||||
|
You must have at least 2 Redis servers: 1 Master, 1 or more Slaves.
|
||||||
|
They should be configured the same way and with similar server specs, as
|
||||||
|
in a failover situation, any Slave can be elected as the new Master by
|
||||||
|
the Sentinels servers.
|
||||||
|
|
||||||
|
In a minimal setup, the only required change for the slaves in `redis.conf`
|
||||||
|
is the addition of a `slaveof` line pointing to the initial master like this:
|
||||||
|
|
||||||
|
```conf
|
||||||
|
slaveof 192.168.1.1 6379
|
||||||
|
```
|
||||||
|
|
||||||
|
You can increase the security by defining a `requirepass` configuration in
|
||||||
|
the master:
|
||||||
|
|
||||||
|
```conf
|
||||||
|
requirepass "<password>
|
||||||
|
```
|
||||||
|
|
||||||
|
and adding this line to all the slave servers:
|
||||||
|
|
||||||
|
```conf
|
||||||
|
masterauth "<password>"
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note** This setup is not safe to be used by a machine accessible by the
|
||||||
|
internet. Use it in combination with tight firewall rules.
|
||||||
|
|
||||||
|
### Sentinel setup
|
||||||
|
|
||||||
|
The support for Sentinel in ruby have some [caveats](https://github.com/redis/redis-rb/issues/531).
|
||||||
|
While you can give any name for the `master-group-name` part of the
|
||||||
|
configuration, as in this example:
|
||||||
|
|
||||||
|
```conf
|
||||||
|
sentinel monitor <master-group-name> <ip> <port> <quorum>`
|
||||||
|
```
|
||||||
|
|
||||||
|
For it to work in ruby, you have to use the "hostname" of the master redis
|
||||||
|
server otherwhise you will get an error message like this one:
|
||||||
|
`Redis::CannotConnectError: No sentinels available.`.
|
||||||
|
|
||||||
|
|
||||||
|
Here is an example configuration file (`sentinel.conf`) for a Sentinel node:
|
||||||
|
|
||||||
|
```conf
|
||||||
|
port 26379
|
||||||
|
sentinel monitor master-redis.example.com 10.10.10.10 6379 1
|
||||||
|
sentinel down-after-milliseconds master-redis.example.com 10000
|
||||||
|
sentinel config-epoch master-redis.example.com 0
|
||||||
|
sentinel leader-epoch locmaster-redis.example.comalhost 0
|
||||||
|
```
|
||||||
|
|
||||||
|
### GitLab setup
|
||||||
|
|
||||||
|
You can enable or disable sentinel support at any time in new or existing
|
||||||
|
installs. From the GitLab application perspective, all it requires is
|
||||||
|
the correct credentials for the Master redis and for a few Sentinels nodes.
|
||||||
|
|
||||||
|
It doesn't require a list of all sentinel nodes, as in case of a failure,
|
||||||
|
the application will need to query only one of them.
|
||||||
|
|
||||||
|
For a source based install, you must change `/home/git/gitlab/config/resque.yml`,
|
||||||
|
following the example in `/home/git/gitlab/config/resque.yml.example` and
|
||||||
|
uncommenting the sentinels line, changing to the correct server credentials,
|
||||||
|
and resstart GitLab.
|
||||||
|
|
||||||
|
For a Omnibus install you have to add/change this lines from the
|
||||||
|
`/etc/gitlab/gitlab.rb` configuration file:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
gitlab['gitlab-rails']['redis_host'] = "master-redis.example.com"
|
||||||
|
gitlab['gitlab-rails']['redis_port'] = 6379
|
||||||
|
gitlab['gitlab-rails']['redis_password'] = "redis-secure-password-here"
|
||||||
|
gitlab['gitlab-rails']['redis_socket'] = nil
|
||||||
|
gitlab['gitlab-rails']['redis_sentinels'] = [
|
||||||
|
{'host' => '10.10.10.1', 'port' => 26379},
|
||||||
|
{'host' => '10.10.10.2', 'port' => 26379},
|
||||||
|
{'host' => '10.10.10.3', 'port' => 26379}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
After the change run the reconfigure command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo gitlab-ctl reconfigure
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
## Configure your own Redis server
|
## Configure your own Redis server
|
||||||
|
|
||||||
If you're hosting GitLab on a cloud provider, you can optionally use a
|
If you're hosting GitLab on a cloud provider, you can optionally use a
|
||||||
|
|
Loading…
Reference in a new issue