基于 Codis 集群上篇 完成 Codis 集群操作
初始化 slots 槽位初始化
執(zhí)行 ./codis-config slot init
勾扭,該命令會在 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)分配
示例
啟動 Redis 并添加 Redis朴恳,不能添加源生的 redis
準(zhǔn)備 4 個 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無法使用
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 服務(wù),不能通過 redis 命令啟動 redis 服務(wù)虑瀑,通過 redis 啟動的 redis 服務(wù)加到 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
驗(yàn)證通過 codis 啟動 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 添加一個角色為 master 的 redis 服務(wù)
{
"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 # 創(chuàng)建另外一個組并添加一個主 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 界面驗(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)在不能直接訪問 Redis舌狗,需要啟動 Proxy,然后通過 Proxy 訪問至 Redis
示例
啟動 Proxy描馅,Proxy 是無狀態(tài)的其不保存數(shù)據(jù)把夸,其數(shù)據(jù)保存在 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 訪問驗(yàn)證
示例
web 驗(yàn)證日志
示例
連接 Proxy 進(jìn)行訪問測試
通過 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
示例
遷移過程中
示例