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


基于 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
示例
遷移過程中
示例

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恋日,一起剝皮案震驚了整個濱河市膀篮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岂膳,老刑警劉巖誓竿,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谈截,居然都是意外死亡筷屡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門簸喂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毙死,“玉大人,你說我怎么就攤上這事喻鳄《筇龋” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵除呵,是天一觀的道長再菊。 經(jīng)常有香客問我,道長颜曾,這世上最難降的妖魔是什么纠拔? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮泛豪,結(jié)果婚禮上稠诲,老公的妹妹穿的比我還像新娘。我一直安慰自己候址,他們只是感情好吕粹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布种柑。 她就那樣靜靜地躺著岗仑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪聚请。 梳的紋絲不亂的頭發(fā)上荠雕,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機(jī)與錄音驶赏,去河邊找鬼炸卑。 笑死,一個胖子當(dāng)著我的面吹牛煤傍,可吹牛的內(nèi)容都是我干的盖文。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蚯姆,長吁一口氣:“原來是場噩夢啊……” “哼五续!你這毒婦竟也來了洒敏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疙驾,失蹤者是張志新(化名)和其女友劉穎凶伙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體它碎,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡函荣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扳肛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻挂。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挖息,靈堂內(nèi)的尸體忽然破棺而出踊谋,到底是詐尸還是另有隱情,我是刑警寧澤旋讹,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布殖蚕,位于F島的核電站,受9級特大地震影響沉迹,放射性物質(zhì)發(fā)生泄漏睦疫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一鞭呕、第九天 我趴在偏房一處隱蔽的房頂上張望蛤育。 院中可真熱鬧,春花似錦葫松、人聲如沸瓦糕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咕娄。三九已至,卻和暖如春珊擂,著一層夾襖步出監(jiān)牢的瞬間圣勒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工摧扇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留圣贸,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓扛稽,卻偏偏與公主長得像吁峻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359