Codis 實(shí)現(xiàn) Redis 集群(下)


基于 Codis 集群上篇 完成 Codis 集群操作

初始化 slots 槽位初始化

執(zhí)行 ./codis-config slot init,該命令會(huì)在 zookeeper 上創(chuàng)建 slot 相關(guān)信息,若提示已經(jīng)初始化可加強(qiáng) -f 強(qiáng)制
shell> ./bin/codis-config slot init
{
  "msg": "OK",
  "ret": 0
}
驗(yàn)證槽位已經(jīng)分配
示例

啟動(dòng) Redis 并添加 Redis,不能添加源生的 redis

準(zhǔn)備 4 個(gè) Redis 數(shù)據(jù)目錄
shell> mkdir -pv /var/lib/redis_638{1..4}
mkdir: created directory ‘/var/lib/redis_6381’
mkdir: created directory ‘/var/lib/redis_6382’
mkdir: created directory ‘/var/lib/redis_6383’
mkdir: created directory ‘/var/lib/redis_6384’
準(zhǔn)備 Reids 配置文件
shell> pwd
/opt/gopath/src/github.com/CodisLabs/codis/extern/redis-2.8.21

shell> cp redis.conf  /opt/gopath/src/github.com/CodisLabs/codis
shell> cd /opt/gopath/src/github.com/CodisLabs/codis
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump_6381.rdb
dir /var/lib/redis_6381
maxmemory 1.5g  #一定要設(shè)置最大內(nèi)存,否則后面的codis無(wú)法使用

shell> cp redis.conf redis_6381.conf
shell> cp redis_6381.conf redis_6382.conf
shell> cp redis_6381.conf  redis_6383.conf
shell> cp redis_6381.conf  redis_6384.conf
shell> sed -i  's/6381/6382/g' redis_6382.conf
shell> sed -i  's/6381/6383/g' redis_6383.conf
shell> sed -i  's/6381/6384/g' redis_6384.conf
通過(guò) codis-server 指定 redis.conf 文件啟動(dòng) redis 服務(wù),不能通過(guò) redis 命令啟動(dòng) redis 服務(wù),通過(guò) redis 啟動(dòng)的 redis 服務(wù)加到 codis 集群無(wú)法正常使用
shell> ./bin/codis-server ./redis_6381.conf
shell> ./bin/codis-server ./redis_6382.conf
shell> ./bin/codis-server ./redis_6383.conf
shell> ./bin/codis-server ./redis_6384.conf
驗(yàn)證通過(guò) codis 啟動(dòng) redis 服務(wù)成功
shell> ss -tnl | grep 638*
LISTEN     0      128          *:6381                     *:*                  
LISTEN     0      128          *:6382                     *:*                  
LISTEN     0      128          *:6383                     *:*                  
LISTEN     0      128          *:6384                     *:*                  
LISTEN     0      128         :::6381                    :::*                  
LISTEN     0      128         :::6382                    :::*                  
LISTEN     0      128         :::6383                    :::*                  
LISTEN     0      128         :::6384                    :::*

添加 redis server group

創(chuàng)建組并添加 redis server 到組內(nèi),并設(shè)置 master 或 slave 角色
shell> pwd
/opt/gopath/src/github.com/CodisLabs/codis

shell> ./bin/codis-config server -h
usage:
    codis-config server list
    codis-config server add <group_id> <redis_addr> <role>
    codis-config server remove <group_id> <redis_addr>
    codis-config server promote <group_id> <redis_addr>
    codis-config server add-group <group_id>
    codis-config server remove-group <group_id>

shell> ./bin/codis-config server add 1 192.168.10.101:6381 master   # 向組 ID 為 1 添加一個(gè)角色為 master 的 redis 服務(wù)
{
  "msg": "OK",
  "ret": 0
}

shell> ./bin/codis-config   server  add 1 192.168.10.101:6382 slave   # 向組里面添加一個(gè) slave 的 redis
{
  "msg": "OK",
  "ret": 0
}

shell> ./bin/codis-config   server  add 2  192.168.10.101:6383 master   # 創(chuàng)建另外一個(gè)組并添加一個(gè)主 master
{
  "msg": "OK",
  "ret": 0
}

shell> ./bin/codis-config server add 2 192.168.10.101:6384 slave   # 給組 2 添加一個(gè) slave
{
  "msg": "OK",
  "ret": 0
}
查看組列表信息
shell> ./bin/codis-config server list
[
  {
    "id": 1,
    "product_name": "mycodis",
    "servers": [
      {
        "addr": "192.168.10.101:6381",
        "group_id": 1,
        "type": "master"
      },
      {
        "addr": "192.168.10.101:6382",
        "group_id": 1,
        "type": "slave"
      }
    ]
  },
  {
    "id": 2,
    "product_name": "mycodis",
    "servers": [
      {
        "addr": "192.168.10.101:6383",
        "group_id": 2,
        "type": "master"
      },
      {
        "addr": "192.168.10.101:6384",
        "group_id": 2,
        "type": "slave"
      }
    ]
  }
]
web 界面驗(yàn)證
示例
驗(yàn)證 Redis Master 服務(wù)狀態(tài)
shell> redis-cli -h 192.168.10.101 -p 6381

192.168.10.101:6381> info
NOAUTH Authentication required.

192.168.10.101:6381> auth 123456
OK

192.168.10.101:6381> INFO
# Server
redis_version:2.8.21
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:8d4d63485df75935
redis_mode:standalone
os:Linux 3.10.0-327.22.2.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:34287
run_id:1674e513fe2c1bcc17d9b52b322af8646f4065dd
tcp_port:6381
uptime_in_seconds:222
uptime_in_days:0
hz:10
lru_clock:8210501
config_file:/opt/gopath/src/github.com/CodisLabs/codis/./redis_6381.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:2529120
used_memory_human:2.41M
used_memory_rss:9695232
used_memory_peak:2586848
used_memory_peak_human:2.47M
used_memory_lua:36864
mem_fragmentation_ratio:3.83
mem_allocator:jemalloc-3.6.0

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1484605287
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

# Stats
total_connections_received:228
total_commands_processed:682
instantaneous_ops_per_sec:1
total_net_input_bytes:18214
total_net_output_bytes:441099
instantaneous_input_kbps:0.05
instantaneous_output_kbps:1.17
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0

# Replication
role:master #狀態(tài)為master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:0.39
used_cpu_user:0.05
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
驗(yàn)證 Redis Slave 服務(wù)狀態(tài)
shell> redis-cli -h 192.168.10.101 -p 6382

192.168.10.101:6382> AUTH 123456
OK

192.168.10.101:6382> INFO
# Server
redis_version:2.8.21
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:8d4d63485df75935
redis_mode:standalone
os:Linux 3.10.0-327.22.2.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:34291
run_id:bbda783d89c78c9f804d6fbe5292b0484f40a830
tcp_port:6382
uptime_in_seconds:336
uptime_in_days:0
hz:10
lru_clock:8210621
config_file:/opt/gopath/src/github.com/CodisLabs/codis/./redis_6382.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:2530144
used_memory_human:2.41M
used_memory_rss:9691136
used_memory_peak:2530144
used_memory_peak_human:2.41M
used_memory_lua:36864
mem_fragmentation_ratio:3.83
mem_allocator:jemalloc-3.6.0

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1484605293
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

# Stats
total_connections_received:3
total_commands_processed:7
instantaneous_ops_per_sec:0
total_net_input_bytes:200
total_net_output_bytes:3874
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0

# Replication
role:master #狀態(tài)為slave
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:0.40
used_cpu_user:0.06
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

將槽位分配至 group

將槽位分配至 group 1
shell> ./bin/codis-config slot range-set 0 511 1 online
{
  "msg": "OK",
  "ret": 0
}
將槽位分配至 group 2
shell> ./bin/codis-config slot range-set 512 1023  2 online   # 2 是組 ID
{
  "msg": "OK",
  "ret": 0
}
web 界面驗(yàn)證槽位已經(jīng)分配至 group,現(xiàn)在不能直接訪問(wèn) Redis,需要啟動(dòng) Proxy,然后通過(guò) Proxy 訪問(wèn)至 Redis
示例

啟動(dòng) Proxy,Proxy 是無(wú)狀態(tài)的其不保存數(shù)據(jù),其數(shù)據(jù)保存在 zookeeper,可同時(shí)啟動(dòng)多個(gè)

啟動(dòng) Proxy 1
shell> nohup ./bin/codis-proxy -c ./config-1.ini -L /var/log/codis-1.log --log-level=error --cpu=1 --addr=192.168.10.101:7001 --http-addr=192.168.10.101:8001 &
[2] 34390
啟動(dòng) Proxy 2
shell> nohup  ./bin/codis-proxy  -c ./config-2.ini  -L /var/log/codis-2.log --log-level=error --cpu=1 --addr=192.168.10.101:7002 --http-addr=192.168.10.101:8002 &
[3] 34400
web 訪問(wèn)驗(yàn)證
示例
web 驗(yàn)證日志
示例

連接 Proxy 進(jìn)行訪問(wèn)測(cè)試

通過(guò) Proxy 1 和 Proxy 2 創(chuàng)建 key
shell> redis-cli -h 192.168.10.101 -p 7001 -a 123456
192.168.10.101:7001> set key1 value1
OK
192.168.10.101:7001> set key2 value2
OK
192.168.10.101:7001> set key3 value3
OK
192.168.10.101:7001> set key4 value4
OK
192.168.10.101:7001> set key5 value5
OK
192.168.10.101:7001> 

shell> redis-cli  -h 192.168.10.101 -p 7002 -a 123456
192.168.10.101:7002> set key6  value6
OK
192.168.10.101:7002> set key7  value7
OK
192.168.10.101:7002> set key8  value8
OK
192.168.10.101:7002> set key9  value9
OK
192.168.10.101:7002> set key10  value10
OK
192.168.10.101:7002> 
web 界面驗(yàn)證 key 是否添加完成
示例

服務(wù)器遷移

點(diǎn)擊 migrate slot
示例
填寫要遷移的槽位范圍和 group ID
示例
遷移過(guò)程中
示例

將現(xiàn)有 Redis 數(shù)據(jù)遷移至 codis,使用 redis-port 工具

https://github.com/CodisLabs/redis-port

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容