一.codis介绍

  • Codis是一个分布式Redis解决方案,对于上层的应用来说,连接到Codis Proxy和连接原生的RedisServer没有明显的区别,有部分命令不支持
  • Codis底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的Redis服务.
  • Codis由四部分组成
    • Codis-proxy:实现redis协议,由于本身是无状态的,因此可以部署很多个节点
    • Codis-config :是codis的管理工具,包括添加/删除redis节点添加删除proxy节点,发起数据迁移等操作,自带httpserver,支持管理后台方式管理配置
    • Codis-server :是codis维护的redis分支,基于2.8.21分支,加入了slot的支持和原子的数据迁移指令; codis-proxy和codis-config只能和这个版本的redis交互才能正常运行
    • Zookeeper,用于codis集群元数据的存储,维护codis集群节点

二.Codis优缺点

优点
  • 对客户端透明,与codis交互方式和redis本身交互一样
  • 支持在线数据迁移,迁移过程对客户端透明有简单的管理和监控界面
  • 支持高可用,无论是redis数据存储还是代理节点
  • 自动进行数据的均衡分配
  • 最大支持1024个redis实例,存储容量海量
  • 高性能
缺点
  • 采用自有的redis分支,不能与原版的redis保持同步
  • 如果codis的proxy只有一个的情况下, redis的性能会下降20%左右
  • 某些命令不支持,比如事务命令muti
  • 国内开源产品,活跃度相对弱一些

三.部署codis,并写代码访问codis

3.1 zookeeper
  • 1.三集群节点
172.16.10.142   zoo1
172.16.10.143 zoo2
172.16.10.144 zoo3
# 确保每个节点hostname -i返回的是正确IP地址
  • 2.获取安装软件
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
scp -rp zookeeper-3.4.12 172.16.10.143:/usr/local
scp -rp zookeeper-3.4.12 172.16.10.144:/usr/local
mv zookeeper-3.4.12 /usr/local/zookeeper-3.4.12/
  • 3.设置环境变量
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.12/
export PATH=$PATH:$ZOOKEEPER_HOME/bin
  • 4.单机环境配置文件
cd /usr/local/zookeeper-3.4.12/conf
cp -rp zoo_sample.cfg zoo.cfg
vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
clientPort=2181
# tickTime : 服务器与客户端之间交互的基本时间单元(ms)
# dataDir : 保存zookeeper数据路径
# dataLogDir : 保存zookeeper日志路径,当此配置不存在时默认路径与dataDir一致
# clientPort : 客户端访问zookeeper时经过服务器端时的端口号
  • 5.集群环境配置文件
cd /usr/local/zookeeper-3.4.12/conf
cp -rp zoo_sample.cfg zoo.cfg
vi zoo.cfg
tickTime=2000
# tickTime : 服务器与客户端之间交互的基本时间单元(ms)
initLimit=10
# initLimit : 此配置表示允许follower连接并同步到leader的初始化时间,它以tickTime的倍数来表示。当超过设置倍数的tickTime时间,则连接失败。
syncLimit=5
# syncLimit : Leader服务器与follower服务器之间信息同步允许的最大时间间隔,如果超过次间隔,默认follower服务器与leader服务器之间断开链接。
dataDir=/usr/local/zookeeper/data
# dataDir : 保存zookeeper数据路径
dataLogDir=/usr/local/zookeeper/log/tran_logs
# dataLogDir : 保存zookeeper日志路径,当此配置不存在时默认路径与dataDir一致,事务日志,会产生version2目录
clientPort=2181
# clientPort : 客户端访问zookeeper时经过服务器端时的端口号
maxClientCnxns=60
# maxClientCnxns : 限制连接到zookeeper服务器客户端的数量。
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
# server.id=host:port:port : 表示了不同的zookeeper服务器的自身标识,作为集群的一部分,每一台服务器应该知道其他服务器的信息。用户可以从“server.id=host:port:port” 中读取到相关信息。在服务器的data(dataDir参数所指定的目录)下创建一个文件名为myid的文件,这个文件的内容只有一行,指定的是自身的id值。比如,服务器“1”应该在myid文件中写入“1”。这个id必须在集群环境中服务器标识中是唯一的,且大小在1~255之间。这一样配置中,zoo1代表第一台服务器的IP地址。第一个端口号(port)是从follower连接到leader机器的端口,第二个端口是用来进行leader选举时所用的端口。所以,在集群配置过程中有三个非常重要的端口:clientPort:2181、port:2888、port:3888。
  • 5.写id到文件
ssh 172.16.10.142 "echo '1' > /usr/local/zookeeper-3.4.12/data/myid"
ssh 172.16.10.143 "echo '2' > /usr/local/zookeeper-3.4.12/data/myid"
ssh 172.16.10.144 "echo '3' > /usr/local/zookeeper-3.4.12/data/myid"
  • 6.更改日志输出

/usr/local/zookeeper-3.4.12/conf/log4j.properties
#zookeeper.root.logger=INFO, CONSOLE
zookeeper.root.logger=INFO, ROLLINGFILE
#log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.ROLLINGFILE.MaxFileSize=10MB
# 更改app应用的日志输出
vi zkEnv.sh
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="/usr/local/zookeeper/log/app_logs/"
fi if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
3.2 go

https://www.golangtc.com/download

  • 1.下载
wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz
tar -zxvf go1.9.2.linux-amd64.tar.gz -C /usr/local
  • 2.配置环境变量
export GOROOT=/usr/local/go //后面的值指向go解压的目录
export GOPATH=/usr/local/go/gowork //go环境境的扩展包目录,所有go环境境共用,工作目录
PATH=$PATH:$GOROOT/bin:$GOPATH/bin # go命令依赖一个重要的环境变量:$GOPATH
# GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候Windows是分号;,Linux系统是冒号:
# 当有多个GOPATH时默认将go get获取的包存放在第一个目录下
# $GOPATH目录约定有三个子目录
# - src存放源代码(比如:.go .c .h .s等)
# - pkg编译时生成的中间文件(比如:.a)
# - bin编译后生成的可执行文件(为了方便,可以把此目录加入到 $PATH 变量中,如果有多个gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目录)
  • 3.查看版本
[root@slave01 go]# go version
go version go1.8.3 linux/amd64
3.3 CodsLabs

https://github.com/CodisLabs/codis

  • 1.下载
go get github.com/wandoulabs/codis
# cd .; git clone https://github.com/wandoulabs/codis /usr/local/go/gowork/src/github.com/wandoulabs/codis
Cloning into '/usr/local/go/gowork/src/github.com/wandoulabs/codis'...
fatal: unable to access 'https://github.com/wandoulabs/codis/': Peer reports incompatible or unsupported protocol version. yum update nss curl git mkdir -p $GOPATH/src/github.com/CodisLabs
cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2

1.linux二进制 https://github.com/CodisLabs/codis/releases 2.或者直接下载zip包

  • 2.安装
cd $GOPATH/src/github.com/CodisLabs/codis
$ make
  • 3.提取有用程序
# 进入源码目录
mkdir /usr/local/codis
cp -rp bin admin config /usr/local/codis/

http://blog.51cto.com/brucewang/2159131

3.4 部署codis-dashboard
  • 1.修改配置文件
vi /usr/local/codis/config/dashboard.toml
#coordinator_name = "filesystem"
#coordinator_addr = "/tmp/codis"
coordinator_name = "zookeeper"
coordinator_addr = "172.16.10.142:2181,172.16.10.143:2181,172.16.10.144:2181"
  • 2.启动dashboard
cd /usr/local/codis
./admin/codis-dashboard-admin.sh start
ss -tpnl |grep 18080
# 可以查看log确认状态 /usr/local/codis/log/codis-dashboard.log.
  • 3.dashboard地址
admin_addr = "0.0.0.0:18080"
3.5 部署codis-fe管理后台
  • 1.修改启动文件
vi /usr/local/codis/admin/codis-fe-admin.sh
#COORDINATOR_NAME="filesystem"
#COORDINATOR_ADDR="/tmp/codis"
COORDINATOR_NAME="zookeeper"
COORDINATOR_ADDR="172.16.10.142:2181,172.16.10.143:2181,172.16.10.144:2181"
  • 2.启动fe
cd /usr/local/codis
./admin/codis-fe-admin.sh start
ss -tpnl|grep 9090
# 可以查看log确认状态 /usr/local/codis/log/codis-fe.log.
  • 3.后台管理地址
CODIS_FE_ADDR="0.0.0.0:9090"
3.6 部署codis-server加入集群

部署4个节点的server 172.16.10.142/143/144/154

  • 1.所有server机器启动codis-server
/usr/local/codis/admin/codis-server-admin.sh start
  • 2.redis.conf修改了如下参数(仅用于测试)
protected-mode no
port 6369
pidfile /usr/local/codis/log/redis_6369.pid
logfile "/usr/local/codis/log/redis_6369.log"
dbfilename dump_6369.rdb
dir /usr/local/codis/log/
appendfilename "appendonly.aof"
  • 3.fe管理后台添加2个group,每个group分配2个机器 

  • 4.点击分配槽位 

3.7 部署codis-proxy代理服务

部署3个节点的server 172.16.10.142/143/144

  • 1.修改配置文件proxy.toml,zookeeper地址
vi /usr/local/codis/config/proxy.toml
#jodis_name = ""
#jodis_addr = ""
jodis_name = "zookeeper"
jodis_addr = "172.16.10.142:2181,172.16.10.143:2181,172.16.10.144:2181"
  • 2.修改启动文件并启动,指向dashboard IP:PORT
vi /usr/local/codis/admin/codis-proxy-admin.sh
#CODIS_DASHBOARD_ADDR="127.0.0.1:18080"
CODIS_DASHBOARD_ADDR="172.16.10.154:18080" /usr/local/codis/admin/codis-proxy-admin.sh start
ss -tpnl |grep 19000
  • 3.proxy启动默认会自动注册到dashboard中,也可以在fe中手动添加 
3.8 部署redis-sentinel实现集群HA

部署3个节点的server 172.16.10.142/143/144

  • 1.修改配置文件
vi /usr/local/codis/config/sentinel.conf
port 26379
dir "/tmp"
protected-mode no
  • 2启动sentinel
#sentinel部署官方脚本,是根据codis-server启动脚本进行修改
# 源文件目录:./ansible/roles/redis-sentinel/templates/redis-sentinel-admin.sh
/usr/local/codis/admin/codis-sentinel-admin.sh start
ss -tpnl |grep 26379
  • 3.fe界面添加Sentinels 

codis原理及部署_01的更多相关文章

  1. Flink 集群运行原理兼部署及Yarn运行模式深入剖析

    1 Flink的前世今生(生态很重要) 原文:https://blog.csdn.net/shenshouniu/article/details/84439459 很多人可能都是在 2015 年才听到 ...

  2. 架构师成长之路3.1-Cobber原理及部署

    点击返回架构师成长之路 架构师成长之路3.1-Cobber原理及部署 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理 ...

  3. (转)heartbeat原理及部署

    原文:http://yjy724.blog.51cto.com/10897133/1840794---------------------------------------------------h ...

  4. Flink架构、原理与部署测试

    Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处理作为 ...

  5. mongodb副本集原理及部署记录

    工作原理 1.副本集之间的复制是通过oplog日志现实的.备份节点通过查询这个集合就可以知道需要进行复制的操作 2.oplog是节点中local库中的一个固定的集合,在默认情况下oplog初始化大小为 ...

  6. Docker+Redis镜像的原理以及部署安装(超详解附截图)

    文章来源:公众号-智能化IT系统. 一. DOCKER介绍 Docker简介 (1)Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从Apache2.0协议开源. (2)Docker 可 ...

  7. HBase的replication原理及部署

    一.hbase replication原理 hbase 的复制方式是 master-push 方式,即主集群推的方式,主要是因为每个rs都有自己的WAL. 一个master集群可以复制给多个从集群,复 ...

  8. Flink架构、原理与部署测试(转)

    Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处理作为 ...

  9. [svc]HTTPS证书生成原理和部署细节

    参考: http://www.barretlee.com/blog/2015/10/05/how-to-build-a-https-server/ 今天摸索了下 HTTPS 的证书生成,以及它在 Ng ...

随机推荐

  1. 关于XSS弹窗的小姿势

    最近快比赛了想刷刷题,做合天XSS进阶的时候遇到了过滤了alert然后还要弹窗效果的题目,这让我这个JS只学了一点点的菜鸡倍感无力.     在百度了其他资料后,发现confirm('xss')和pr ...

  2. ARP/RARP报文格式

    arp协议 地址解析协议ARP(Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议. arp格式: 一个字节等于8位 硬件类型:指明发送方想知道的硬件接口类 ...

  3. Ali_Cloud++:阿里云服务器部署【禅道】项目管理系统

    1.开源版安装包下载 地址一:百度云下载 10.0  提取码:2dyg  地址二:官方下载 2.直接解压安装包到/opt目录下 注意:这里我安装的是Linux一键安装包官方给出的方法就是直接解压到/o ...

  4. Docker容器利用weave实现跨主机互联

    Docker容器利用weave实现跨主机互联 环境: 实现目的:实现主机A中容器1与主机B中容器1的网络互联 主机A步骤: ①下载复制weave二进制执行文件(需要internet)[root@192 ...

  5. MySQL UDF Dynamic Library Exploit in *nix

    /* } 本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/575448,如需转载请自行联系原作者

  6. Axios 拦截器中添加headers 属性

    描述: 已在网上查过怎么在 interceptors 中对header进行处理,// http request 拦截器 axios.interceptors.request.use( config = ...

  7. 疯子的算法总结(九) 图论中的矩阵应用 Part 1+POJ3613 Cow Relays

    图的存储有邻接矩阵,那么他就具备一些矩阵的性质,设有一个图的demo[100][100];那么demo[M][N]就是M—>N的距离,若经过一次松弛操作demo[M][N]=demo[M][K] ...

  8. python(time 模块)

    一.Time 模块 1.时间戳 时间戳是指格林威治时间 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒) 起至现在的总秒数 最早出现的 UNIX 操作系统考 ...

  9. Python(Pyautogui 模块)

    1.安装 pyautogui 模块 pip install pyautogui 2.pyautogui 模块相关操作 鼠标操作 # 获取屏幕宽和高 w,h = pyautogui.size() # 在 ...

  10. ASP.NET Core MVC 如何获取请求的参数

    一次HTTP请求,就是一次标准IO操作.请求是I,是输入:响应式O,是输出.任何web开发框架,其实都是在干这两件事: 接受请求并进行解析获取参数 根据参数进行渲染并输出响应内容 所以我们学习一个框架 ...