Redis 叢集搭建及使用Golang示例
Redis 在3.x版本之後,自身支援了叢集模式。Redis的叢集主要是 master-slave的形式。叢集定義了
16384個hash slot
。這些hash slot
分佈在所有master上。we simply take the CRC16 of the key modulo 16384
將key計算得到對應的hash slot
的值,然後看這個hash slot
在哪個redis服務上,這個key就會儲存在對應的這個redis服務。和Elasticsearch、MongoDB不一樣,redis通過這種方式進行sharding。不能不說這是一種簡單,但對redis來說是有效的一種叢集方式。能夠最大限度的保留原有redis的屬性。
[Document]
下面是部署過程的例子。
有三臺伺服器 A、B、C。外網ip分別為 A_IP,B_IP,C_IP。
三臺伺服器先解除安裝原有redis版本,安裝最新的redis版本
$ wget http://download.redis.io/relea ... ar.gz
$ tar xzf redis-4.0.6.tar.gz
$ cd redis-4.0.6
$ make
cd /src
cp redis-server /usr/bin/
cp redis-cli /usr/bin/
cp redis-trib.rb /usr/bin/
mkdir redis-cluster
cd redis-cluster
mkdir 7000
mkdir 7100
進入7000,新建redis.conf 檔案,編寫配置檔案
cd 7000
vim redis.conf
配置內容為
port 7000 # 繫結的埠
bind A_IP # 繫結的IP,如果你要開放出去,需要使用外網IP
cluster-enabled yes # 是否啟用叢集模式
cluster-config-file nodes.conf # 節點配置檔案
cluster-node-timeout 5000 # 超時設定
appendonly yes # appendonly 配置 持久化設定
cluster-require-full-coverage no
cluster-require-full-coverage
預設是yes。如果某個redis掛了,沒有對應的slave升級為master,這時候,整個redis叢集不可用。
所以建議設為no, 這樣某個redis掛了,只是影響這一部分的hash slot
查詢有問題,不影響叢集的其他redis的讀寫。
同理完成 7100的redis.conf配置檔案內容。將三臺機器都安裝上述進行安裝配置。
在A、B、C機器上
cd 7000
redis-server redis.conf
cd 7001
redis-server redis.conf
到A機器上, 執行
redis-trib.rb create --replicas 1 A_IP:7000 B_IP:7000 \
C_IP:7000 A_IP:7100 B_IP:7100 C_IP:7100
之後會提示輸入yes,執行完後。
redis-cli -p 7000 -h A_IP cluster nodes
檢視叢集狀態,會得到類似這樣的資訊。
aedabb4bd830978905d68ab8d88a94a031b515fe A_IP:7000@17000 master - 0 1513840545000 2 connected 5461-10922
861ff3beac7a6a3023424a64446f1101f8193d9d A_IP:7100@17100 slave 3d9e37599f6547387503e165d21838556435bac4 0 1513840544011 4 connected
3d9e37599f6547387503e165d21838556435bac4 B_IP:7000@17000 myself,master - 0 1513840545000 1 connected 0-5460
3ef82f387086931dbdedbd24b379671b8bd03289 C_IP:7000@17000 master - 0 1513840544411 3 connected 10923-16383
27764a4a521e4e5bd8e2e108c472ef6ed51645cd B_IP:7100@17100 slave aedabb4bd830978905d68ab8d88a94a031b515fe 0 1513840543912 5 connected
7f6ef6f05968ee869359c0771d42d768243e4ca1 C_IP:7100@17100 slave 3ef82f387086931dbdedbd24b379671b8bd03289 0 1513840545414 6 connected
Bingo~ redis叢集服務就跑起來了。 三臺機器,每臺機器一個master,一個slave
redis叢集增加節點或Resharding操作是使用redis-trib指令碼命令,這個指令碼是Ruby寫的。每個node有一個node ID,比如: aedabb4bd830978905d68ab8d88a94a031b515fe
Golang 程式碼示例
package redis
import (
"time"
"github.com/go-redis/redis"
)
// redis資料超時時間
var Timeout = 5 * time.Hour
var Client = GetClusterClient()
func GetClusterClient() *redis.ClusterClient {
var client *redis.ClusterClient
client = redis.NewClusterClient(&redis.ClusterOptions{
Addrs: []string{"A_IP:7000", "B_IP:7000", "C_IP:7000","A_IP:7100", "B_IP:7100", "C_IP:7100"},
})
err := client.Ping().Err()
if err == nil {
log.Info("Redis cluster OK")
} else {
log.Error("Redis cluster wrong")
}
return client
}
redis.Client.Set("word", "Hello World", redis.Timeout)
str, _ := rediscluster.Client.Get("word").Result()
fmt.Println(str) // => "Hello World"
相關文章
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- Docker 容器搭建及 Redis 叢集原理DockerRedis
- redis叢集搭建Redis
- 搭建 Redis 叢集Redis
- Redis叢集搭建與簡單使用Redis
- Redis(5.0) 叢集搭建Redis
- redis叢集的搭建Redis
- 搭建Redis原生叢集Redis
- Redis--叢集搭建Redis
- Docker搭建Redis叢集DockerRedis
- 搭建redis cluster叢集Redis
- Redis操作及叢集搭建以及高可用配置Redis
- zookeeper叢集及kafka叢集搭建Kafka
- 一文輕鬆搞懂redis叢集原理及搭建與使用Redis
- redis 4.0.11 叢集搭建Redis
- 使用redis-trib.rb工具快速搭建redis叢集Redis
- 基於Dokcer搭建Redis叢集(主從叢集)Redis
- redis主從叢集搭建及容災部署(哨兵sentinel)Redis
- centos7搭建redis叢集CentOSRedis
- Docker Redis 5.0 叢集(cluster)搭建DockerRedis
- CentOS7 搭建 Redis 叢集CentOSRedis
- Redis 5.02官方叢集搭建Redis
- Redis主從同步叢集搭建Redis主從同步
- Redis5.0.10叢集搭建Redis
- Redis4.0.12叢集搭建Redis
- Jedis操作單節點redis,叢集及redisTemplate操作redis叢集(一)Redis
- Redis叢集搭建 三主三從Redis
- Redis-cluster叢集搭建部署Redis
- Redis叢集環境搭建實踐Redis
- Redis叢集搭建(三主三從)Redis
- Redis叢集搭建採坑總結Redis
- 12. Redis叢集環境搭建Redis
- Redis單機及其叢集的搭建Redis
- Redis 叢集原理與使用Redis
- 搭建分散式 Redis Cluster 叢集與 Redis 入門分散式Redis
- Redis學習之 Redis3.0.x 叢集搭建RedisS3
- redis原理及叢集主從配置Redis
- Redis面試題及分散式叢集Redis面試題分散式