基于 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
示例
迁移过程中
示例