codis
总体架构
192.168.199.223(zookeeper、codis-proxy、codis-dashborad:18080、codis-fe:18090、codis-server)
192.168.199.224(zookeeper、codis-server)
192.168.199.254(zookeeper、codis-proxy、codis-server)
一,zookeeper
作用:用于存放数据路由表。
描述:zookeeper简称zk。在生产环境中,zk部署越多,其可靠性越高。由于zk集群是以宕机个数过半才会让整个集群宕机,因此,奇数个zk更佳。
部署:按照1.2中的部署规划,将在如下几台机器上部署该程序。
序号 IP 主机名 部署程序
01 192.168.199.223 test zookeeper:2181
02 192.168.199.224 jason_1 zookeeper:2181
03 192.168.199.254 jason_2 zookeeper:2181
1.修改hosts文件
#该文件三台主机保持一致
[root@test ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.223 node1
192.168.199.224 node2
192.168.199.254 node3
2.Java环境(请查看 https://www.cnblogs.com/xiaoyou2018/p/9945272.html)
3.zookeeper
wget http://ftp.wayne.edu/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
解压
tar -zxvf zookeeper-3.4.13.tar.gz -C /usr/local/zookeeper/
mv zookeeper-3.4.13 zookeeper
[root@jason tools]# cd /usr/local/zookeeper/conf
[root@jason tools]# cp zoo_sample.cfg zoo.cfg
[root@jason conf]# cat zoo.cfg
maxClientCnxns=
tickTime=
initLimit=
syncLimit=
dataDir=/data/zookeeper
###dataLogDir=/data/zookeeper/log
clientPort=
server.=node1::
server.=node2::
server.=node3::
[root@jason tools]#mkdir -p /data
说明:server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
第三步:其他处理
创建第二步中的dataDir目录,并设置当前zk的结点ID。[注:在192.168.199.223、224、254上ID值各不相同]
echo 1 > /data/zookeeper/myid (在223上)
echo 2 > /data/zookeeper/myid (在224上)
echo 13> /data/zookeeper/myid (在254上)
依次启动各个服务器的zookeeper服务 (要全部zookeeper角色的服务器都依次启动,不然查看status会报错)
[root@test ~]# cd /usr/local/zookeeper/bin/
[root@test bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看角色状态
[root@test bin]# ./zkServer.sh status
192.168.199.223
192.168.199.224
启动失败 查看 https://blog.csdn.net/weiyongle1996/article/details/73733228
./zkServer.sh start-foreground
安装go环境
wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
tar -zxvf go1.11.2.linux-amd64.tar.gz -C /usr/local/
配置环境变量(/etc/profile 添加)
export JAVA_HOME=/usr/local/java/jdk1..0_191
JRE_HOME=${JAVA_HOME}/jre
CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
PATH=${JAVA_HOME}/bin:$PATH
export GOROOT=/usr/local/go
export GOPATH=/usr/local/codis
export PATH=$PATH:/usr/local/go/bin
#JAVA_HOME=/usr/local/jdk
#CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
#export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.
export PATH=$PATH:$GOROOT/bin:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
[root@jason go]# source /etc/profile
[root@jason go]# go version
go version go1.11.2 linux/amd64
下载编译codis
mkdir -p $GOPATH/src/github.com/CodisLabs
cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2
cd $GOPATH/src/github.com/CodisLabs/codis
make
再次介绍一下codis的各个组件,以明确在集群中应该如何启动
Codis Server:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。在集群中充当redis实例。
Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;不同 codis-proxy 之间由 codis-dashboard 保证状态同步。
Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。
Codis FE:集群管理界面
在node1启动FE和Dashboard用来管理集群;
node1和node3启动codis-proxy;
node1,node2,node3启动codis-server
首先启动Dashboard,关联zookeeper集群,将dashboard信息保存在zookeeper集群中,FE通过读取zookeeper中保存的dashboard信息来连接需要被管理的集群。
#启动dashboard,将coordinator修改为zookeeper模式,自定义product_name和auth
[root@test bin]# cd $GOPATH/src/github.com/CodisLabs/codis
[root@test codis]# cd config/
[root@test config]# cat dashboard.toml ##################################################
# #
# Codis-Dashboard #
# #
################################################## # Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".
# for zookeeper/etcd, coorinator_auth accept "user:password"
# Quick Start
#coordinator_name = "filesystem"
#coordinator_addr = "/tmp/codis"
coordinator_name = "zookeeper"
coordinator_addr = "node1:2181,node2:2181,node3:2181"
#coordinator_auth = "" # Set Codis Product Name/Auth.
product_name = "codis-demo"
product_auth = "123456" # Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:18080" # Set arguments for data migration (only accept 'sync' & 'semi-async').
migration_method = "semi-async"
migration_parallel_slots = 100
migration_async_maxbulks = 200
migration_async_maxbytes = "32mb"
migration_async_numkeys = 500
migration_timeout = "30s" # Set configs for redis sentinel.
sentinel_client_timeout = "10s"
sentinel_quorum = 2
sentinel_parallel_syncs = 1
sentinel_down_after = "30s"
sentinel_failover_timeout = "5m"
sentinel_notification_script = ""
sentinel_client_reconfig_script = ""
启动dashboard
cd $GOPATH/src/github.com/CodisLabs/codis/admin
[root@test admin]# ./codis-dashboard-admin.sh start
启动FE
cd $GOPATH/src/github.com/CodisLabs/codis
[root@test bin]# nohup ./bin/codis-fe --ncpu= --log=/usr/local/codis/src/github.com/CodisLabs/codis/log/fe.log --log-level=WARN --zookeeper=node1: --listen=0.0.0.0: &
[]
[root@test bin]# nohup: ignoring input and appending output to ‘nohup.out’
启东失败可以查看日志
登录监听的9090端口查看FE管理界面,接下来集群操作可在FE中完成
http://192.168.199.223:9090
启动两个codis-proxy,
分别修改node1和node3的proxy.toml配置文件
[root@test config]# cat proxy.toml |grep -Ev '^$|^#'
product_name = "codis-demo"
product_auth = ""
session_auth = ""
admin_addr = "0.0.0.0:11080"
proxy_addr = "0.0.0.0:19000"
jodis_name = "zookeeper"
jodis_addr = "192.168.199.223:2181,192.168.199.224:2181,192.168.199.254:2181"
jodis_timeout = "20s"
session_recv_timeout = "0s"
product_name = "chatroom" # 设置项目名
product_auth = "123456" # 设置登录dashboard的密码(注意:与redis中requirepass一致)
session_auth = "56789" # Redis客户端的登录密码(注意:与redis中requirepass不一致)
# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:11080"
# Set bind address for proxy, proto_type can be “tcp”,”tcp4”, “tcp6”, “unix”
or “unixpacket”.
proto_type = “tcp4”
proxy_addr = "0.0.0.0:19000" #绑定端口(Redis客户端连接此端口)
# 外部存储
jodis_name = "zookeeper" # 外部存储类型
jodis_addr = “192.168.199.223:2181,192.168.199.224:2181,192.168.199.254:2181” # 外部存储列表
jodis_timeout = “20s”
#会话设置
session_recv_timeout = “0s” #如果不为0可能导致应用程序出现”write: broken pipe”的问题
启动proxy
./admin/codis-proxy-admin.sh start
#因为node1上同时存在proxy和dashboard,启动proxy后,proxy会自动连接127.0.0.1的dashboard,node3的proxy需要在FE中添加到dashboard。使用admin_addr配置参数连接。启动proxy后,尽快执行new proxy操作,默认30秒超时,超时后退出proxy进程。
报错的话可以查看日志
cd $GOPATH/src/github.com/CodisLabs/codis/log
[root@jason log]# ls
codis-proxy.log.-- codis-proxy.log.-- codis-proxy.log.-- codis-proxy.out
redis(三台主机一样)
[root@test codis]# cd $GOPATH/src/github.com/CodisLabs/codis/config
cp -r redis.conf redis-.conf
cp -r redis.conf redis-.conf
6379主配置、6380从配置
cat redis-6379.conf
daemonize yes
pidfile /usr/loca/codis/proc/redis-6379.pid
port 6379
timeout 86400
tcp-keepalive 60
loglevel notice
logfile /usr/local/codis/log/redis-6379.log
databases 16
save “”
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
dbfilename dump-6379.rdb
dir /usr/local/codis/data/redis_data_6379
masterauth "123456"
slave-serve-stale-data yes
repl-disable-tcp-nodelay no
slave-priority 100
requirepass "123456"
maxmemory 10gb
maxmemory-policy allkeys-lru
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 0 0 0
client-output-buffer-limit pubsub 0 0 0
hz 10
aof-rewrite-incremental-fsync yes
repl-backlog-size 33554432
cat redis-6380.conf
daemonize yes
pidfile "/usr/loca/codis/proc/redis-6380.pid"
port 6380
timeout 86400
tcp-keepalive 60
loglevel notice
logfile "/usr/local/codis/log/redis-6380.log"
databases 16
save 900 1
save 300 10
save 60 10000 stop-writes-on-bgsave-error no
rdbcompression yes
dbfilename "dump-6380.rdb"
dir "/usr/local/codis/data/redis_data_6380"
masterauth "123456"
slave-serve-stale-data yes
repl-disable-tcp-nodelay no
slave-priority 100
requirepass "123456"
maxmemory 10gb
maxmemory-policy allkeys-lru
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 0 0 0
client-output-buffer-limit pubsub 0 0 0
hz 10
aof-rewrite-incremental-fsync yes
repl-backlog-size 32mb
创建目录
mkdir -p /usr/local/codis/{data,log}
mkdir -p /usr/local/codis/data/{redis_data_6379,redis_data_6380}
启动redis
cd $GOPATH/src/github.com/CodisLabs/codis
./bin/codis-server ./config/redis-.conf
./bin/codis-server ./config/redis-.conf
Redis-sentinel
三台主机一样
cd $GOPATH/src/github.com/CodisLabs/codis/config
[root@jason config]# cat sentinel.conf
bind 0.0.0.0
protected-mode no
port
dir "/usr/local/codis/data"
启动 sentinel
[root@test codis]# ./bin/redis-sentinel ./config/sentinel.conf
用codis-proxy代理-压力测试
上面我们已经配置好了2个codis-proxy,接下来使用它们其一对部署的集群进行压力测试
在其中一台codis-server上使用redis-benchmark命令进行测试。命令如下:
cd /usr/loca/codis
./bin/redis-benchmark -h 192.168.199.223 -p 19000 -q -n 1000000 -c 20 -d 100k
命令行执行结果:
[root@localhost codis]# ./bin/redis-benchmark -h 10.0.10.44 -p 19000 -q -n 1000000 -c 20 -d 100k
PING_INLINE: 21769.42 requests per second
PING_BULK: 18310.32 requests per second
SET: 17011.14 requests per second
GET: 18086.45 requests per second
INCR: 17886.21 requests per second
LPUSH: 17146.48 requests per second
RPUSH: 17003.91 requests per second
LPOP: 17160.31 requests per second
RPOP: 17233.65 requests per second
SADD: 19542.32

参考:
https://www.cnblogs.com/xuanzhi201111/p/4425194.html
https://www.jianshu.com/p/6994cef7c675
https://blog.csdn.net/qifengzou/article/details/72902503
http://blog.51cto.com/xiumin/1954795
https://wuyanteng.github.io/2017/11/28/Codis3.2%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2/
codis的更多相关文章
- Codis——分布式Redis服务的解决方案
Codis——分布式Redis服务的解决方案 之前介绍过的 Twemproxy 是一种Redis代理,但它不支持集群的动态伸缩,而codis则支持动态的增减Redis节点:另外,官方的redis 3. ...
- 基于Redis的开源分布式服务Codis
Redis在豌豆荚的使用历程--单实例==>多实例,业务代码中做sharding==>单个Twemproxy==>多个Twemproxy==>Codis,豌豆荚自己开发的分布式 ...
- codis集群安装
在网上找了很多codis的集群安装方法,看起来都是大同小异,本人结合了大多种方法完成了一套自己使用的codis的集群安装,可以供大家学习使用,如果有什么问题或者不懂的地方欢迎指正 1.集群规划: 三台 ...
- Codis集群
一.简介 Codis是一个分布式的Redis解决方案,对于上层的应用来说,连接Codis Proxy和连接原生的Redis Server没有明显的区别(不支持的命令列表),上层应用可以像使用单机的Re ...
- codis安装手册
本文属原创,转载请注明此信息:http://www.cnblogs.com/robinjava77/p/5465150.html (Robin) codis交流群 240361424 感谢群里各位群 ...
- 伪集群zookeeper模式下codis的部署安装
1,zookeeper伪集群部署 部署在192.168.0.210服务器上 下载 去官网将3.4.6版本的zookeeper下载下来到/app目录下解压 首先 ...
- Ping CAP CTO、Codis作者谈redis分布式解决方案和分布式KV存储
此文根据[QCON高可用架构群]分享内容,由群内[编辑组]志愿整理,转发请注明出处. 苏东旭,Ping CAP CTO,Codis作者 开源项目Codis的co-author黄东旭,之前在豌豆荚从事i ...
- 实战Centos系统部署Codis集群服务
导读 Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可 ...
- codis配置
codis集群配置 Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表) ...
- Redis 集群解决方案 Codis
(来源:开源中国社区 http://www.oschina.net/p/codis) Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生 ...
随机推荐
- Analysis of Web.xml in Hello1project
一下是hello1 web inf 里的 web.xml <?xml version="1.0" encoding="UTF-8"?><w ...
- PHP + Apche 在 window 系统下的环境搭建
1, 安装 Apche 服务器, 官方只提供源码,这里推荐三方下载地址 http://www.apachelounge.com/download/ 1.1,下载后解压到自己想要安装的位置, 笔者安装在 ...
- 白鹭引擎 - 碰撞检测 ( hitTestPoint )
1, 矩形碰撞检测 class Main extends egret.DisplayObjectContainer { /** * Main 类构造器, 初始化的时候自动执行, ( 子类的构造函数必须 ...
- js 简单算法
1. 嵌套数组打平并且去重 ,,,,,,,,[,,,,[,,]]]; var obj = {};//去重标识 function test(data) { var newArr = []; for ( ...
- Rabbitmq(3) work queues
轮询分发:每个消费者处理的消息是一样的 公平分发:能者多劳 *****公平分发 生产者 package com.aynu.bootamqp.service; import com.aynu.boota ...
- golang 的 mysql 操作
goLang的mysql操作,大致可分为三个步骤: 1.下载mysql驱动:go get github.com/go-sql-driver/mysql 2.建立连接:sql.Open("my ...
- nginx压缩,缓存
https://www.darrenfang.com/2015/01/setting-up-http-cache-and-gzip-with-nginx/ https://www.linuxdashe ...
- Packets 1037A(二进制数)
分析:看这个数有多少位二进制数 #include<cstdio> int main() { int n; while(~scanf("%d",&n)) { ; ...
- linux下安装Tomcat7.0
1.下载安装文件:Download apache-tomcat-7.0.14.tar.gz 下载1 下载 2.输入命令解压文件:tar - zxvf apach ...
- win10家庭版升级专业版的两种方法和密钥
win10家庭版升级专业版密钥:VK7JG-NPHTM-C97JM-9MPGT-3V66T4N7JM-CV98F-WY9XX-9D8CF-369TT FMPND-XFTD4-67FJC-HDR8C-3 ...