如果您对Redis的了解不够深入请关注本栏目,本栏目包括Redis安装,Redis配置文件说明,Redis命令和数据类型说明,Redis持久化配置,Redis主从复制和哨兵机制,Redis Cluster(集群)配置,Redis Predixy 集群,Redis Twemproxy 集群。
Codis 是什么?
使用 Codis 有什么好处?
Codis由豌豆荚于2014年11月开源,基于go和c开发,国人开发的优秀开源软件之一,稳定性极高,性能也还可以。
开源地址:https://github.com/CodisLabs/codis
中文教程:https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md
下载地址:https://github.com/CodisLabs/codis/releases
yum install wget unzip -y
wget https://github.com/CodisLabs/codis/releases/download/3.1.5/codis3.1.5-go1.7.5-linux.zip
unzip codis3.1.5-go1.7.5-linux.zip -d /opt/
ls /opt/
cd /opt/codis3.1.5-go1.7.5-linux
mkdir conf logs
导出 Codis Dashboard 默认配置文件(只执行一次)
./codis-dashboard --default-config > conf/dashboard.toml
修改 Codis Dashboard 配置文件: vi conf/dashboard.toml
# Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".
# 配置 Codis 协调器为 zookeeper
coordinator_name = "zookeeper"
#coordinator_addr = "127.0.0.1:2181"
# 配置 Codis 协调器为 zookeeper 集群的址
coordinator_addr = "192.168.8.51:2181,192.168.8.52:2181,192.168.8.53:2181"
# Set Codis Product Name/Auth.
# 配置 Codis 集群名称为 codis-demo
product_name = "codis-demo"
# 配置 Codis 集群密码为空
product_auth = ""
# Set bind address for admin(rpc), tcp only.
# Codis Dashboard 管理地址及端口
admin_addr = "0.0.0.0:18080"
# Set configs for redis sentinel.
sentinel_quorum = 2
sentinel_parallel_syncs = 1
sentinel_down_after = "30s"
sentinel_failover_timeout = "5m"
启动 Codis Dashboard
./codis-dashboard --ncpu=4 --config=conf/dashboard.toml --log=logs/dashboard.log --log-level=WARN &
导出 Codis Proxy 默认配置文件(只执行一次)
./codis-proxy --default-config > conf/proxy.toml
修改 Codis Proxy 配置文件: vi conf/proxy.toml
# Set Codis Product Name/Auth.
# 配置 Codis 集群名称为 codis-demo
product_name = "codis-demo"
# 配置 Codis 集群密码为空
product_auth = ""
# Set bind address for admin(rpc), tcp only.
# Codis Proxy 管理地址及端口
admin_addr = "0.0.0.0:11080"
# Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
# Redis 端口类型,接受 tcp/tcp4/tcp6/unix/unixpacket
proto_type = "tcp4"
# Redis 端口地址或者路径
proxy_addr = "0.0.0.0:19000"
# Set jodis address & session timeout, only accept "zookeeper" & "etcd".
jodis_name = "zookeeper"
# Jodis 注册 zookeeper 地址
jodis_addr = "192.168.8.51:2181,192.168.8.52:2181,192.168.8.53:2181"
# odis 注册 session timeout 时间,单位 second
jodis_timeout = "20s"
# Jodis 注册 zookeeper 的路径
jodis_compatible = false
# Set datacenter of proxy.
proxy_datacenter = ""
# Set max number of alive sessions.
proxy_max_clients = 1000
# Set max offheap memory size. (0 to disable)
proxy_max_offheap_size = "1024mb"
# Set heap placeholder to reduce GC frequency.
proxy_heap_placeholder = "256mb"
# Proxy will ping backend redis (and clear 'MASTERDOWN' state) in a predefined interval. (0 to disable)
# 与 codis-server 探活周期,单位 second,0 表示禁止
backend_ping_period = "5s"
# Set backend recv buffer size & timeout.
backend_recv_bufsize = "128kb"
backend_recv_timeout = "30s"
# Set backend send buffer & timeout.
backend_send_bufsize = "128kb"
backend_send_timeout = "30s"
# Set backend pipeline buffer size.
backend_max_pipeline = 1024
# Set backend never read replica groups, default is false
backend_primary_only = false
# Set backend parallel connections per server
backend_primary_parallel = 1
backend_replica_parallel = 1
# Set backend tcp keepalive period. (0 to disable)
backend_keepalive_period = "75s"
# If there is no request from client for a long time, the connection will be closed. (0 to disable)
# Set session recv buffer size & timeout.
# 与 client 连接读写缓冲区大小,单位 byte
session_recv_bufsize = "128kb"
# 与 client 连接最大读超时,单位 second,0 表示禁止
session_recv_timeout = "30m"
# Set session send buffer size & timeout.
session_send_bufsize = "64kb"
session_send_timeout = "30s"
# Make sure this is higher than the max number of requests for each pipeline request, or your client may be blocked.
# Set session pipeline buffer size.
# 与 client 连接最大的 pipeline 大小
session_max_pipeline = 1024
# Set session tcp keepalive period. (0 to disable)
# 与 client 的 tcp keepalive 周期,仅 tcp 有效,0 表示禁止
session_keepalive_period = "75s"
# Set session to be sensitive to failures. Default is false, instead of closing socket, proxy will send an error response to client.
session_break_on_failure = false
# Set metrics server (such as http://localhost:28000), proxy will report json formatted metrics to specified server in a predefined period.
metrics_report_server = ""
metrics_report_period = "1s"
# Set influxdb server (such as http://localhost:8086), proxy will report metrics to influxdb.
metrics_report_influxdb_server = ""
metrics_report_influxdb_period = "1s"
metrics_report_influxdb_username = ""
metrics_report_influxdb_password = ""
metrics_report_influxdb_database = ""
启动 Codis Proxy
./codis-proxy --ncpu=4 --config=conf/proxy.toml --log=logs/proxy.log --log-level=WARN &
启动成功后您可以访问 http://127.0.0.1:11080/ 查看,他是 RESTful API ,可以看到返回数据。如果失败可以看 logs/proxy.log 日志文件。
然后可以使用以下命令将 Codis Proxy 加入/移除 Codis Dashboard 集群。建议等后面安装 Codis FE 后使用图形化界面配置。
- 添加 Codis Proxy
./codis-admin --dashboard=127.0.0.1:18080 --create-proxy -x 127.0.0.1:11080
- 删除 Codis Proxy
./codis-admin --dashboard=127.0.0.1:18080 --remove-proxy --addr=127.0.0.1:11080 --force
启动两个 Codis Server,端口分别为 6371 和 6372。
./codis-server --port 6371
./codis-server --port 6372
Codis Server 就是 Redis Server, 跟以前启动 Redis Server 一样的(类似 redis-server redis.conf)。Codis Server 启动时也可以使用配置文件,各参数配置也一样,请参考Redis 配置文件。
启动完成后可直接使用 redis-cli -p 6371 连接测试。
然后可以使用以下命令将 Codis Server加入/移除 Codis Dashboard 集群。这里要用到组号,建议等后面安装 Codis FE 后使用图形化界面配置。这里只是列出来说明可以使用命令操作(各版本可能不一样)。
codis-admin --dashboard=127.0.0.1:18080 --list-group
codis-admin -c codis.json group create
codis-admin -c codis.json group remove
codis-admin -c codis.json server add
codis-admin -c codis.json server remove
codis-admin -c codis.json server list
如:
./codis-admin -c codis.json server add 1 127.0.0.1 6371
./codis-admin -c codis.json server add 1 127.0.0.1 6372
导出 Codis FE 默认配置文件(只执行一次)
./codis-dashboard --default-config > conf/dashboard.toml
启动 Codis FE
./codis-fe --ncpu=4 --log=logs/fe.log --log-level=WARN --zookeeper=192.168.8.51:2181,192.168.8.52:2181,192.168.8.53:2181 --listen=0.0.0.0:8080 &
在浏览器打开 Codis-FE,主界面如下
把 Codis Server 加入 Codis 集群(把页面往下拉,找到 Group)
在 New Group 后面输入1,然后点击 New Group
在 Add Server 后面输入 Codis Server 地址(127.0.0.1:6371)和 Group(1)后点占击 Add Server。
再输入第二个 Codis Server 地址(127.0.0.1:6372)和 Group(1)后点占击 Add Server。
Codis 集群可以分配 9999 个组,取值范围为 1~9999。
分配槽位(拖动页面,找到 Slots)
分配槽位可以手动分配,也可以自动分配,我这里使用自动分配。点击 Rebalance All Slots 然后确定。可以看到提示将 0~1023槽位全部分配给了组1(group1)
如果你不了解槽位,请看Redis Cluster,这个里面讲解了槽位分配的情况 。
添加 Codis Proxy
在 Codis-FE 中也可以为集群配置 哨兵,在 Codis-FE 中也可以为集群配置哨兵,哨兵配置请参考这里。
测试时直接使用 Redis Client 连接 Codis Proxy 就可以了(默认端口19000),如下:
redis-cli -p 19000
[root@yiqifu-redis ~]# redis-cli -p 19000
127.0.0.1:19000> set aaa 1111
OK
127.0.0.1:19000> get aaa
“1111”
127.0.0.1:19000> incr aaa
(integer) 1112
127.0.0.1:19000> get aaa
“1112”
127.0.0.1:19000>
完成后你可以看数据被分配那个 Codis Server,如下,我直接连接 Codis Server 查看分布情况
[root@yiqifu-redis ~]# redis-cli -p 6371
127.0.0.1:6371> keys *
1) "aaa"
127.0.0.1:6371>
[root@yiqifu-redis ~]# redis-cli -p 6372
127.0.0.1:6372> keys *
(empty array)
127.0.0.1:6372>