前言 Codis 是一个使用Go语言编写的Redis集群代理,是一种 Redis 的分布式集群解决方案,支持管道和动态弹性扩容 redis集群方案对比 除了 Codis ,Twemproxy 和 Redis...Cluster 也能实现Redis集群,下面是它们的对比 Feature Codis Twemproxy Redis Cluster resharding without restarting cluster
打开浏览器进入 http://ip:11000/debug/vars 可以获取一些debug信息
初始化 slots [root@h102 codis]# bin/codis-config slot help usage: codis-config slot init [-f] codis-config...slot info codis-config slot set codis-config slot range-set...> [--delay=] codis-config slot rebalance [--delay=] [root@h102 codis...]# bin/codis-config slot init { "msg": "OK", "ret": 0 } [root@h102 codis]# 此时通过管理界面就可以看到slot信息(...]# bin/codis-server extern/redis-2.8.21/redis.conf [root@h102 codis]#
=/root HOME=/root GOROOT=/usr/local/go LOGNAME=root GOPATH=/root/go_home [root@h102 ~]# GOROOT : Go语言的根目录
启动 codis-proxy [root@h102 codis]# bin/codis-proxy -c config.ini -L /tmp/proxy.log --cpu=2 --addr=0.0.0.0...修改codis-proxy状态 [root@h102 codis]# bin/codis-config proxy help usage: codis-config proxy list codis-config...proxy offline codis-config proxy online [root@h102 codis]# bin/codis-config...-c config.ini proxy list [ { "addr": "h102.temp:19000", "debug_var_addr": "h102.temp:11000...]# bin/codis-config -c config.ini proxy online proxy_1 { "msg": "OK", "ret": 0 } [root@h102 codis
/codis-config slot rebalance { "msg": "OK", "ret": 0 } [root@h102 codis]# ---- codis dashboard...Ss 09:44 0:00 cupsd -C /etc/cups/cupsd.conf root 36106 2.8 4.8 310552 93192 pts/0 Sl+ 21...22:37 0:00 | \_ bin/codis-proxy -c config.ini -L /tmp/proxy.log --cpu=2 --addr=0.0.0.0:19000...Ss 09:44 0:00 cupsd -C /etc/cups/cupsd.conf root 36715 0.4 1.1 320592 22772 pts/1 Sl+ 22...:37 0:00 | \_ bin/codis-proxy -c config.ini -L /tmp/proxy.log --cpu=2 --addr=0.0.0.0:19000 -
发现此时,slave的同步关系已经自动建立好了 [root@h102 codis]# extern/redis-2.8.21/src/redis-cli -p 6390 info replication...repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 [root@h102 codis...]# 查看配置信息 [root@h102 codis]# bin/codis-config server list [ { "id": 1, "product_name": "test...": "localhost:6389", "group_id": 2, "type": "master" } ] } ] [root@h102 codis
添加到group [root@h102 codis]# bin/codis-config server add 1 localhost:6379 master { "msg": "OK", "ret...": 0 } [root@h102 codis]# [root@h102 codis]# bin/codis-config server add 1 localhost:6380 slave 2015...[root@h102 codis]# echo $?...pass config.ini #password=codis [root@h102 codis]# 再次尝试添加 [root@h102 codis]# bin/codis-config server...add 1 localhost:6380 slave { "msg": "OK", "ret": 0 } [root@h102 codis]# bin/codis-config server
]# Tip: 执行完上面全部指令后,会在 bin 文件夹内生成 codis-config、codis-proxy、codis-server三个可执行文件;另外, bin/assets 文件夹是 codis-config...-h usage: codis-config [-c ] [-L ] [--log-level=] [...] options: -c set config file -L set output log file, default is stdout --log-level=<loglevel...]# bin/codis-proxy -h usage: proxy [-c ] [-L ] [--log-level=] [--log-filesize...[--cpu=] [--addr=] [--http-addr=] options: -c
/codis-server --version Redis server v=2.8.21 sha=4a332efd:0 malloc=jemalloc-3.6.0 bits=64 build=569d3bc356356f21...[root@h101 bin]# ---- 概要 ---- 安装Codis 由于 Codis 是基于Go语言的,所以得先安装Go ---- 安装Go Tip: Go当前最新版本为 go1.5.2 [...root@h102 ~]# du -sh go1.5.2.linux-amd64.tar.gz 73M go1.5.2.linux-amd64.tar.gz [root@h102 ~]# tar -C...test/varerr.go go/test/varinit.go go/test/writebarrier.go go/test/zerodivide.go [root@h102 ~]# Tip: Go语言的详细安装文档可以参考...The Go Programming Language , Go语言各种版本的 下载地址
此时,容易导致dashboard 起不来,报错如下 [root@h102 codis]# bin/codis-config dashboard 2015/12/04 22:38:14 dashboard.go...": "192.168.100.102:18087", "pid": 36106} [stack]: 3 /root/go_home/src/github.com/wandoulabs/codis...[root@h102 codis]# 但是直接使用ps查看当前进程,又发现系统中并没有残存任何dashboard进程,端口也并没有被占用 [root@h102 codis]# netstat -an...) 8] ls /zk/codis/db_test/dashboard [] [zk: localhost:2181(CONNECTED) 9] get /zk/codis/db_test/dashboard.../db_test/dashboard [zk: localhost:2181(CONNECTED) 11] 之后就可以正常启动了 [root@h102 codis]# bin/codis-config
设置 server group 服务的 slot 范围 [root@h102 codis]# bin/codis-config slot range-set 0 500 1 online { "msg...": "OK", "ret": 0 } [root@h102 codis]# bin/codis-config slot range-set 501 1023 2 online { "msg":..."OK", "ret": 0 } [root@h102 codis]# 执行完第一条命令后,会发现管理界面里slot状态发生了变化 执行完第二条命令后,管理界面里slot状态又发生了变化 双击其中一个
下载codis代码 直接使用 go get -u -d github.com/wandoulabs/codis 来获取codis源码 [root@h102 ~]# go get -u -d github.com...]# du -sh codis/ 25M codis/ [root@h102 wandoulabs]# cd codis/ [root@h102 codis]# ls cmd config.ini...]# Tip: 官方建议只通过go get命令来下载codis,除非自己非常熟悉go语言的目录引用形式从而不会导致代码放错地方,该命令会下载master分支的最新版,作者会确保master分支的稳定 -...build -o bin/codis-proxy ....0 [root@h102 codis]#
codis搭建&迁移方案 1.1 codis迁移规格 ECS:测试实例3台32C128GB规格 REDIS:Redis 4.0—128G集群版16节点 1.2 codis-demo架构 zookeeper...部署 1 部署安装包zookeeper、jdk、golang、codis ansible hosts /etc/ansible/hosts [codis] c1 ansible_ssh_host=47.106.91.108...ansible_ssh_user=root ansible_ssh_pass=123456 c2 ansible_ssh_host=120.24.255.96 ansible_ssh_user=root...ansible_ssh_pass=123456 c3 ansible_ssh_host=120.25.193.146 ansible_ssh_user=root ansible_ssh_pass=123456...spm=5176.2020520141.0.0.308c6375KXAK0c https://yq.aliyun.com/articles/691794 wget https://github.com
部署Codis集群 启动zookeeper服务 配置 zookeeper [root@h101 zookeeper-Standalone]# grep -v "^#" conf/zoo.cfg tickTime...state NEW tcp dpt:2180 [root@h101 zookeeper-Standalone]# Note: 不事先启动zk 而启动后面的服务会报错 ---- 启动codis...dashboard 配置 config.ini Note: codis-config 和 codis-proxy 在不加 -c 参数的时候, 默认会读取当前目录下的 config.ini 文件 [root...@h102 codis]# grep -v "^#" config.ini | grep -v "^$" coordinator=zookeeper zk=192.168.100.101:2180 product...=test dashboard_addr=192.168.100.102:18087 password=codis backend_ping_period=5 session_max_timeout=1800
检查状态 [root@h102 codis]# ps faux | grep codis | grep -v grep root 35057 1.5 2.5 448184 49352...pts/0 Sl+ 17:55 2:32 | \_ bin/codis-config dashboard root 35742 0.1 0.5 137392 9592...Ssl 20:39 0:00 bin/codis-server *:6379 [root@h102 codis]# cat /var/run/redis.pid...35742 [root@h102 codis]# extern/redis-2.8.21/src/redis-cli -p 6379 info # Server redis_version:2.8.21...x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.4.7 process_id:35742 run_id:0506f862c0562d04c11c5e018d59f0ec74d72617
点击[OK]后会展示正在迁移的slot队列,一次只能迁移一个 迁移完成后slot的状态 使用命令行迁移数据 [root@h102 codis]# bin/codis-config slot migrate...7 12 1 { "msg": "OK", "ret": 0 } [root@h102 codis]# 管理界面也会作出相应反映 迁移完成后的状态 Tip: 迁移的过程对于上层业务来说是安全且透明的...]# extern/redis-2.8.21/src/redis-cli -p 6379 CONFIG GET maxmemory 1) "maxmemory" 2) "0" [root@h102 codis...]# extern/redis-2.8.21/src/redis-cli -p 6380 CONFIG GET maxmemory 1) "maxmemory" 2) "0" [root@h102 codis...]# extern/redis-2.8.21/src/redis-cli -p 6389 CONFIG GET maxmemory 1) "maxmemory" 2) "0" [root@h102 codis
启动codis dashboard 使用 bin/codis-config dashboard 启动 dashboard [root@h102 codis]# bin/codis-config dashboard...listening on addr: :18087 2015/12/04 17:56:00 dashboard.go:143: [INFO] dashboard node created: /zk/codis...会在当前终端启动一个端口为18087的web server ---- 打开防火墙 [root@h102 codis]# iptables -L -nv | grep 18087 [root@h102...codis]# vim /etc/sysconfig/iptables [root@h102 codis]# grep 18087 /etc/sysconfig/iptables -A INPUT...-p tcp -m state --state NEW -m tcp --dport 18087 -j ACCEPT [root@h102 codis]# /etc/init.d/iptables
grep -v "^$" > /etc/codis/redis2_s.conf [root@h102 codis]# vim /etc/codis/redis_s.conf [root@h102 codis...]# diff /etc/codis/redis2.conf /etc/codis/redis2_s.conf 2,3c2,3 < pidfile /var/run/redis2.pid < port...6389 --- > pidfile /var/run/redis2_s.pid > port 6390 16c16 < dbfilename dump2.rdb --- > dbfilename dump2..._s.rdb 25c25 < appendfilename "appendonly2.aof" --- > appendfilename "appendonly2_s.aof" [root@h102 codis...]# 启动多个服务 [root@h102 codis]# bin/codis-server /etc/codis/redis_s.conf [root@h102 codis]# bin/codis-server
/bin/sh CODIS_HOME=/usr/local/codis nohup $CODIS_HOME/bin/codis-config -c $CODIS_HOME/conf/config.ini...$CODIS_HOME/bin/codis-config -c $CODIS_HOME/conf/config.ini slot init -f echo "done" 执行初始化槽脚本: sh initslot.sh...$CODIS_HOME/bin/codis-config -c $CODIS_HOME/conf/config.ini proxy offline codis_proxy_1 echo "done" echo..."start new codis_proxy_1..." nohup $CODIS_HOME/bin/codis-proxy --log-level info -c $CODIS_HOME/conf/.../bin/sh CODIS_HOME=/usr/local/codis echo "set codis_proxy_1 online" $CODIS_HOME/bin/codis-config -c $
领取专属 10元无门槛券
手把手带您无忧上云