Codis 实现 Redis 集群(下)


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

初始化 slots 槽位初始化

执行 ./codis-config slot init,该命令会在 zookeeper 上创建 slot 相关信息,若提示已经初始化可加强 -f 强制
shell> ./bin/codis-config slot init
{
  "msg": "OK",
  "ret": 0
}
验证槽位已经分配
示例

启动 Redis 并添加 Redis,不能添加源生的 redis

准备 4 个 Redis 数据目录
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’
准备 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  #一定要设置最大内存,否则后面的codis无法使用

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
通过 codis-server 指定 redis.conf 文件启动 redis 服务,不能通过 redis 命令启动 redis 服务,通过 redis 启动的 redis 服务加到 codis 集群无法正常使用
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
验证通过 codis 启动 redis 服务成功
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

创建组并添加 redis server 到组内,并设置 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 添加一个角色为 master 的 redis 服务
{
  "msg": "OK",
  "ret": 0
}

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

shell> ./bin/codis-config   server  add 2  192.168.10.101:6383 master   # 创建另外一个组并添加一个主 master
{
  "msg": "OK",
  "ret": 0
}

shell> ./bin/codis-config server add 2 192.168.10.101:6384 slave   # 给组 2 添加一个 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 界面验证
示例
验证 Redis Master 服务状态
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 #状态为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
验证 Redis Slave 服务状态
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 #状态为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 界面验证槽位已经分配至 group,现在不能直接访问 Redis,需要启动 Proxy,然后通过 Proxy 访问至 Redis
示例

启动 Proxy,Proxy 是无状态的其不保存数据,其数据保存在 zookeeper,可同时启动多个

启动 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
启动 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 访问验证
示例
web 验证日志
示例

连接 Proxy 进行访问测试

通过 Proxy 1 和 Proxy 2 创建 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 界面验证 key 是否添加完成
示例

服务器迁移

点击 migrate slot
示例
填写要迁移的槽位范围和 group ID
示例
迁移过程中
示例

将现有 Redis 数据迁移至 codis,使用 redis-port 工具

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。