I want to use Redis as distributed cache in my application. One of the demands is to have Active Active availability meaning that I have one data center in one place and another one somewhere else. If one data center fails I want my user to feel nothing and to be able to have all the data from the first data center in the second site and continue working - to have a master on the second site as well. Is it possible?
Using Redis Replication on different machines (multi master)
6.8k views Asked by Dennis Nerush At
1
There are 1 answers
Related Questions in REDIS
- How to Socket.IO Multithreading on a Raspberry Pi?
- How to get the session ID returned by cookie with spring-session-data-redis
- Cannot serialize (Spring Boot)
- JEDIS/REDIS 'ON' Keyword or broken query?
- Quart_Sessions Redis deletes keys and create backups instead
- Docker builds redis, mounts the host network and uses 192.168.*.* to access the redis server and is denied
- Need a script to fetch the redis latency values over 20 seconds and store the results in a file
- Service in Docker Compose not connecting to Redis container in docker, Failed to connect to any host resolved for DNS name
- Install redis vector database on GCP in a GKE cluster
- how to avoid while loop while waiting for future complete?
- Is it possible to append the data in Redis command
- Not able to inject RedisCache/SyncCache/StatefulRedisConnection beans in micronaut 4.2.1 version
- RedisConnectionFailureException intermittently
- using redis timeseries in aredes error =>Error handling publish event: [ErrorReply: ERR TSDB: invalid value]
- HttpResponseMessage caching using redis
Related Questions in MULTI-MASTER-REPLICATION
- cockroachdb data not replicating
- Postgres 15 Multi-Master Replication
- Serverless PostgreSQL replication
- Rails' DelayedJob for a multi-master setup
- PostgreSQL multi-master replication between AWS RDS and GCP Cloud SQL
- MySQL slave replication not writing binlog file
- ldap_sasl_bind_s failed (-1)
- Can we create a SQL Server RDS in AWS Active/Active?
- Node3 is not getting involved in mutli-master-replication of 3nodes using symmetric-ds 3.10.0
- How to effectively use Galera Load Balancer with JDBC URL?
- Is there any trustable enterprise grade master to master (bi directional) replication option available in PostgreSQL
- Debezium for large multi master replication?
- AWS RDS multi master writes in multiple regions
- Mysql ID Duplication issue in Replication
- reading from config file in a sql script
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
You're asking for an Active-Active, a.k.a. multi master, solution but your question suggests you may not need it.
If you only require one of the databases to be available for writes, i.e. all writes always go it, you can achieve that with Redis's standard master-slave replication. Direct your application to use the master for writes and (potentially) have your slave serve some of the reads as well. If the master fails, promote the slave in the 2ndary DC to be the new master and redirect your application/clients to use it. Monitoring and promoting can be achieved with Redis' Sentinel.
There are a few things you'll have to take into consideration when implementing this type of setup. First note that Redis' replication is asynchronous so depending on your master's load, the volume of writes and the replication's network link quality, you could loose some of the recent updates in case of a failover. Secondly and on the same topic, an inter-DC network link could be prone to limited bandwidth and increased latency - you should configure Redis to handle this and perhaps use compression for that traffic (e.g. via an SSH tunnel). Lastly, to accurately detect failures you'll want to have at least 3 Sentinels in different locations. But despite these challenges, that's all doable.
That said, a multi master setup in which writes can be arbitrarily done against any database isn't supported by Redis at the moment. If that's actually what you need, consider using a different solution.
Note: depending on your exact requirements, if you can guarantee that writes to different DCs are mutually exclusive (i.e. each DC gets writes only to a distinct subset of keys that's not shared by the other DC), you can use two databases with a master in each DC and the slave in the other one.