diff --git a/config/redis.yml b/config/redis.yml index 1c7293509..d64b16705 100644 --- a/config/redis.yml +++ b/config/redis.yml @@ -1,11 +1,14 @@ address: [localhost:16379] username: password: openIM123 -clusterMode: false +# redis Mode, including "standalone","cluster","sentinel" +redisMode: "sentinel" db: 0 maxRetry: 10 poolSize: 100 +# Sentinel configuration (only used when redisMode is "sentinel") sentinelMode: - enable: false masterName: "redis-master" sentinelsAddrs: ["127.0.0.1:26379", "127.0.0.1:26380", "127.0.0.1:26381"] + routeByLatency: true + routeRandomly: true diff --git a/docker-compose-redis-sentinel.yml b/docker-compose-redis-sentinel.yml deleted file mode 100644 index 5a705be6e..000000000 --- a/docker-compose-redis-sentinel.yml +++ /dev/null @@ -1,208 +0,0 @@ -networks: - openim: - driver: bridge - -services: - redis: - image: "${REDIS_IMAGE}" - container_name: redis - ports: - - "16379:6379" - volumes: - - "${DATA_DIR}/components/redis/data:/data" - - "${DATA_DIR}/components/redis/config/redis.conf:/usr/local/redis/config/redis.conf" - environment: - TZ: Asia/Shanghai - restart: always - sysctls: - net.core.somaxconn: 1024 - command: redis-server /usr/local/redis/config/redis.conf --requirepass openIM123 --appendonly yes - healthcheck: - test: ["CMD", "redis-cli", "-a", "openIM123", "ping"] - interval: 10s - timeout: 3s - retries: 3 - start_period: 30s - networks: - - openim - - redis-slave-1: - image: "${REDIS_IMAGE}" - container_name: redis-slave-1 - ports: - - "16380:6379" - volumes: - - "${DATA_DIR}/components/redis/slave1:/data" - environment: - TZ: Asia/Shanghai - REDIS_MASTER_HOST: redis - REDIS_MASTER_PORT: 6379 - REDIS_MASTER_PASSWORD: openIM123 - REDIS_SLAVE_PASSWORD: openIM123 - restart: always - command: > - bash -c ' - echo "port 6379" > /data/redis-slave.conf && - echo "replicaof $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT}" >> /data/redis-slave.conf && - echo "masterauth $${REDIS_MASTER_PASSWORD}" >> /data/redis-slave.conf && - echo "requirepass $${REDIS_SLAVE_PASSWORD}" >> /data/redis-slave.conf && - echo "appendonly yes" >> /data/redis-slave.conf && - echo "replica-read-only yes" >> /data/redis-slave.conf && - redis-server /data/redis-slave.conf - ' - depends_on: - - redis - networks: - - openim - - redis-slave-2: - image: "${REDIS_IMAGE}" - container_name: redis-slave-2 - ports: - - "16381:6379" - volumes: - - "${DATA_DIR}/components/redis/slave2:/data" - environment: - TZ: Asia/Shanghai - REDIS_MASTER_HOST: redis - REDIS_MASTER_PORT: 6379 - REDIS_MASTER_PASSWORD: openIM123 - REDIS_SLAVE_PASSWORD: openIM123 - restart: always - command: > - bash -c ' - echo "port 6379" > /data/redis-slave.conf && - echo "replicaof $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT}" >> /data/redis-slave.conf && - echo "masterauth $${REDIS_MASTER_PASSWORD}" >> /data/redis-slave.conf && - echo "requirepass $${REDIS_SLAVE_PASSWORD}" >> /data/redis-slave.conf && - echo "appendonly yes" >> /data/redis-slave.conf && - echo "replica-read-only yes" >> /data/redis-slave.conf && - redis-server /data/redis-slave.conf - ' - depends_on: - - redis - networks: - - openim - - redis-sentinel-1: - image: "${REDIS_IMAGE}" - container_name: redis-sentinel-1 - ports: - - "26379:26379" - volumes: - - "${DATA_DIR}/components/redis/sentinel1:/data" - environment: - TZ: Asia/Shanghai - SENTINEL_PORT: 26379 - REDIS_MASTER_NAME: redis-master - REDIS_MASTER_HOST: 127.0.0.1 - REDIS_MASTER_PORT: 16379 - REDIS_MASTER_PASSWORD: openIM123 - SENTINEL_QUORUM: 2 - SENTINEL_DOWN_AFTER: 30000 - SENTINEL_PARALLEL_SYNCS: 1 - SENTINEL_FAILOVER_TIMEOUT: 180000 - restart: always - command: > - bash -c ' - echo "port $${SENTINEL_PORT}" > /data/sentinel.conf && - echo "sentinel monitor $${REDIS_MASTER_NAME} $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT} $${SENTINEL_QUORUM}" >> /data/sentinel.conf && - echo "sentinel auth-pass $${REDIS_MASTER_NAME} $${REDIS_MASTER_PASSWORD}" >> /data/sentinel.conf && - echo "sentinel down-after-milliseconds $${REDIS_MASTER_NAME} $${SENTINEL_DOWN_AFTER}" >> /data/sentinel.conf && - echo "sentinel parallel-syncs $${REDIS_MASTER_NAME} $${SENTINEL_PARALLEL_SYNCS}" >> /data/sentinel.conf && - echo "sentinel failover-timeout $${REDIS_MASTER_NAME} $${SENTINEL_FAILOVER_TIMEOUT}" >> /data/sentinel.conf && - echo "sentinel resolve-hostnames yes" >> /data/sentinel.conf && - echo "sentinel announce-hostnames yes" >> /data/sentinel.conf && - redis-sentinel /data/sentinel.conf - ' - depends_on: - redis: - condition: service_healthy - redis-slave-1: - condition: service_started - redis-slave-2: - condition: service_started - networks: - - openim - - redis-sentinel-2: - image: "${REDIS_IMAGE}" - container_name: redis-sentinel-2 - ports: - - "26380:26379" - volumes: - - "${DATA_DIR}/components/redis/sentinel2:/data" - environment: - TZ: Asia/Shanghai - SENTINEL_PORT: 26379 - REDIS_MASTER_NAME: redis-master - REDIS_MASTER_HOST: 127.0.0.1 - REDIS_MASTER_PORT: 16379 - REDIS_MASTER_PASSWORD: openIM123 - SENTINEL_QUORUM: 2 - SENTINEL_DOWN_AFTER: 30000 - SENTINEL_PARALLEL_SYNCS: 1 - SENTINEL_FAILOVER_TIMEOUT: 180000 - restart: always - command: > - bash -c ' - echo "port $${SENTINEL_PORT}" > /data/sentinel.conf && - echo "sentinel monitor $${REDIS_MASTER_NAME} $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT} $${SENTINEL_QUORUM}" >> /data/sentinel.conf && - echo "sentinel auth-pass $${REDIS_MASTER_NAME} $${REDIS_MASTER_PASSWORD}" >> /data/sentinel.conf && - echo "sentinel down-after-milliseconds $${REDIS_MASTER_NAME} $${SENTINEL_DOWN_AFTER}" >> /data/sentinel.conf && - echo "sentinel parallel-syncs $${REDIS_MASTER_NAME} $${SENTINEL_PARALLEL_SYNCS}" >> /data/sentinel.conf && - echo "sentinel failover-timeout $${REDIS_MASTER_NAME} $${SENTINEL_FAILOVER_TIMEOUT}" >> /data/sentinel.conf && - echo "sentinel resolve-hostnames yes" >> /data/sentinel.conf && - echo "sentinel announce-hostnames yes" >> /data/sentinel.conf && - redis-sentinel /data/sentinel.conf - ' - depends_on: - redis: - condition: service_healthy - redis-slave-1: - condition: service_started - redis-slave-2: - condition: service_started - networks: - - openim - - redis-sentinel-3: - image: "${REDIS_IMAGE}" - container_name: redis-sentinel-3 - ports: - - "26381:26379" - volumes: - - "${DATA_DIR}/components/redis/sentinel3:/data" - environment: - TZ: Asia/Shanghai - SENTINEL_PORT: 26379 - REDIS_MASTER_NAME: redis-master - REDIS_MASTER_HOST: 127.0.0.1 - REDIS_MASTER_PORT: 16379 - REDIS_MASTER_PASSWORD: openIM123 - SENTINEL_QUORUM: 2 - SENTINEL_DOWN_AFTER: 30000 - SENTINEL_PARALLEL_SYNCS: 1 - SENTINEL_FAILOVER_TIMEOUT: 180000 - restart: always - command: > - bash -c ' - echo "port $${SENTINEL_PORT}" > /data/sentinel.conf && - echo "sentinel monitor $${REDIS_MASTER_NAME} $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT} $${SENTINEL_QUORUM}" >> /data/sentinel.conf && - echo "sentinel auth-pass $${REDIS_MASTER_NAME} $${REDIS_MASTER_PASSWORD}" >> /data/sentinel.conf && - echo "sentinel down-after-milliseconds $${REDIS_MASTER_NAME} $${SENTINEL_DOWN_AFTER}" >> /data/sentinel.conf && - echo "sentinel parallel-syncs $${REDIS_MASTER_NAME} $${SENTINEL_PARALLEL_SYNCS}" >> /data/sentinel.conf && - echo "sentinel failover-timeout $${REDIS_MASTER_NAME} $${SENTINEL_FAILOVER_TIMEOUT}" >> /data/sentinel.conf && - echo "sentinel resolve-hostnames yes" >> /data/sentinel.conf && - echo "sentinel announce-hostnames yes" >> /data/sentinel.conf && - redis-sentinel /data/sentinel.conf - ' - depends_on: - redis: - condition: service_healthy - redis-slave-1: - condition: service_started - redis-slave-2: - condition: service_started - networks: - - openim diff --git a/go.mod b/go.mod index 6b85eb89a..0ecd3a113 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/mitchellh/mapstructure v1.5.0 github.com/openimsdk/protocol v0.0.73-alpha.12 - github.com/openimsdk/tools v0.0.50-alpha.87 + github.com/openimsdk/tools v0.0.50-alpha.91 github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.18.0 github.com/stretchr/testify v1.9.0 diff --git a/go.sum b/go.sum index f179f7ecf..d8eb07f80 100644 --- a/go.sum +++ b/go.sum @@ -349,8 +349,8 @@ github.com/openimsdk/gomake v0.0.15-alpha.5 h1:eEZCEHm+NsmcO3onXZPIUbGFCYPYbsX5b github.com/openimsdk/gomake v0.0.15-alpha.5/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= github.com/openimsdk/protocol v0.0.73-alpha.12 h1:2NYawXeHChYUeSme6QJ9pOLh+Empce2WmwEtbP4JvKk= github.com/openimsdk/protocol v0.0.73-alpha.12/go.mod h1:WF7EuE55vQvpyUAzDXcqg+B+446xQyEba0X35lTINmw= -github.com/openimsdk/tools v0.0.50-alpha.87 h1:42jaKZZ5874o+1qup9KKHYmCQJWO7ibOKppxr8rhIS0= -github.com/openimsdk/tools v0.0.50-alpha.87/go.mod h1:n2poR3asX1e1XZce4O+MOWAp+X02QJRFvhcLCXZdzRo= +github.com/openimsdk/tools v0.0.50-alpha.91 h1:4zXtTwwCIUawet1VDvnD3C/1E4N4ostDfh+RfL5nz90= +github.com/openimsdk/tools v0.0.50-alpha.91/go.mod h1:n2poR3asX1e1XZce4O+MOWAp+X02QJRFvhcLCXZdzRo= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 9d9f500a1..619571064 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -327,7 +327,7 @@ type Redis struct { Address []string `yaml:"address"` Username string `yaml:"username"` Password string `yaml:"password"` - ClusterMode bool `yaml:"clusterMode"` + RedisMode string `yaml:"redisMode"` DB int `yaml:"db"` MaxRetry int `yaml:"maxRetry"` PoolSize int `yaml:"poolSize"` @@ -335,9 +335,10 @@ type Redis struct { } type Sentinel struct { - Enable bool `yaml:"enable"` - MasterName string `yaml:"masterName"` - SentinelAddrs []string `yaml:"sentinelsAddrs"` + MasterName string `yaml:"masterName"` + SentinelAddrs []string `yaml:"sentinelsAddrs"` + RouteByLatency bool `yaml:"routeByLatency"` + RouteRandomly bool `yaml:"routeRandomly"` } type BeforeConfig struct { @@ -494,17 +495,18 @@ func (m *Mongo) Build() *mongoutil.Config { func (r *Redis) Build() *redisutil.Config { return &redisutil.Config{ - ClusterMode: r.ClusterMode, - Address: r.Address, - Username: r.Username, - Password: r.Password, - DB: r.DB, - MaxRetry: r.MaxRetry, - PoolSize: r.PoolSize, + RedisMode: r.RedisMode, + Address: r.Address, + Username: r.Username, + Password: r.Password, + DB: r.DB, + MaxRetry: r.MaxRetry, + PoolSize: r.PoolSize, Sentinel: &redisutil.Sentinel{ - Enable: r.SentinelMode.Enable, - MasterName: r.SentinelMode.MasterName, - SentinelAddrs: r.SentinelMode.SentinelAddrs, + MasterName: r.SentinelMode.MasterName, + SentinelAddrs: r.SentinelMode.SentinelAddrs, + RouteByLatency: r.SentinelMode.RouteByLatency, + RouteRandomly: r.SentinelMode.RouteRandomly, }, } } diff --git a/pkg/common/discovery/discoveryregister.go b/pkg/common/discovery/discoveryregister.go index dc100be5c..87333fcac 100644 --- a/pkg/common/discovery/discoveryregister.go +++ b/pkg/common/discovery/discoveryregister.go @@ -35,7 +35,7 @@ func NewDiscoveryRegister(discovery *config.Discovery, watchNames []string) (dis return standalone.GetSvcDiscoveryRegistry(), nil } if runtimeenv.RuntimeEnvironment() == config.KUBERNETES { - return kubernetes.NewKubernetesConnManager(discovery.Kubernetes.Namespace, + return kubernetes.NewConnManager(discovery.Kubernetes.Namespace, nil, grpc.WithDefaultCallOptions( grpc.MaxCallSendMsgSize(1024*1024*20), ), diff --git a/pkg/common/storage/cache/redis/online_test.go b/pkg/common/storage/cache/redis/online_test.go index 0306f6f5d..d2ac283e0 100644 --- a/pkg/common/storage/cache/redis/online_test.go +++ b/pkg/common/storage/cache/redis/online_test.go @@ -26,7 +26,7 @@ func TestName111111(t *testing.T) { "172.16.8.124:7005", "172.16.8.124:7006", }, - ClusterMode: true, + RedisMode: "cluster", Password: "passwd123", //Address: []string{"localhost:16379"}, //Password: "openIM123",