Codis 3.2 集群搭建与测试
这里首选分为四个步骤进行
一、软件下载
codis 3.2.2 https://github.com/CodisLabs/codis/releases
codis-src https://codeload.github.com/CodisLabs/codis/zip/release3.2
zeepkeeper 3.5.4 http://ftp.twaren.net/Unix/Web/apache/zookeeper/zookeeper-3.5.4-beta/zookeeper-3.5.4-beta.tar.gz
jdk 8
codis 是Linux二进制包,下载这个就不用编译,也不用安装go环境
codis-src主要是需要里面的admin目录的脚本,方便运维。以及config目录的脚本,用来z配置文件实例。
zeepkeeper 用来充当Storage信息存储组件,codis支持zookeeper,etcd,filesystem三种方式,建议使用zookeeper
jdk 环境, zookeeper是java写的,所以需要java环境
我这里提供一套整合好了本实例整合好的一套codis集群配置,可以到这里下载
二、搭建的步骤
一)、物理硬件需求
二)、初始化服务环境
三)、部署zookeeper集群
四)、部署codis-dashboard
五)、部署codis-fe管理后台
六)、部署codis-server加入集群
七)、部署codis-proxy代理服务
八)、部署redis-sentinel实现集群HA
九)、利用redis-benchmark进行集群压测
十)、codis的一些常见问题以及理解
一)、物理硬件需求
对于测试的环境来说,其实一台就可以2c4g的机器就可以,没什么需求。但我想用于生产环境,所以需求又四台4c8g的机器来搭建,具体需求的算法根据业务的数据存储来算,当然也跟业务的繁忙度有关系。我的机器配置如下:
10.21.1.206 | 4C8G |
10.21.1.207 | 4C8G |
10.21.1.208 | 4C8G |
10.21.1.209 | 4C8G |
二)、初始化服务环境
需要的环境就一个java环境,这个是zookeeper的依赖,也不是必须的,如果搭建使用的是默认的filesystem,那java环境也不需要了。codis的建议用我提供的实例,省得自己去整合脚本,配置文件,各个实例下载后安装的目录如下:
zookeeper | /usr/local/zookeeper/ |
codis | /usr/local/codis/ |
java | /usr/local/java/ |
三)、部署zookeeper集群
10.21.1.206
10.21.1.207
10.21.1.209
1、设置配置文件 /usr/local/zookeeper/conf/zoo.cfg
[root@localhost zookeeper]# cat conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper/data dataLogDir=/data/zookeeper/log clientPort=2181 maxClientCnxns=300 server.1=10.21.1.206:2888:3888 server.2=10.21.1.207:2888:3888 server.3=10.21.1.208:2888:3888
2、设置zookeeper存储目录
mkdir -p /data/zookeeper/log mkdir -p /data/zookeeper/data
3、设置集群ID
IP | myid位置 | 内容 |
10.21.1.206 | /data/zookeeper/data/myid | 1 |
10.21.1.207 | /data/zookeeper/data/myid | 2 |
10.21.1.208 | /data/zookeeper/data/myid | 3 |
4、启动zookeeper集群
#在三个机器分别启动zookeeper/usr/local/zookeeper/bin/zkServer.sh start
5、测试启动的zookeeper是否成功
## 查看zookeeper状态 [root@localhost bin]# ./zkServer.sh status /usr/local/java/bin/java ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: leader## 进入zookeeper [root@localhost bin]# ./zkCli.sh ........ [zk: localhost:2181(CONNECTED) 0] ls /
四)、部署codis-dashboard
10.21.1.206
1、修改配置文件
# vi /usr/local/codis/conf/dashboard.toml coordinator_name = "zookeeper" coordinator_addr = "10.21.1.206:2181,10.21.1.207:2181,10.21.1.208:2181"
默认为filesystem的Storage,修改成使用zookeeper。
2、启动dashboard
# cd /usr/local/codis # ./admin/codis-dashboard-admin.sh start # ss -tpnl |grep 18080 LISTEN 0 128 :::18080 :::* users:(("codis-dashboard",pid=1017,fd=6))
3、查看日志排查错误
# tail -n 200 /usr/local/codis/log/codis-dashboard.out # tail -n 200 /usr/local/codis/log/codis-dashboard.log.2018-08-09
五)、10.21.206上部署codis-fe管理后台
0、部署机器
10.21.1.206
1、修改启动文件
# 修改存储文件成zookeeper方式 # vi /usr/local/codis/codis-fe-admin.sh COORDINATOR_NAME="zookeeper" COORDINATOR_ADDR="10.21.1.206:2181,10.21.1.207:2181,10.21.1.208:2181"
2、启动fe
# /usr/local/codis/admin/codis-fe-admin.sh start # ss -tpnl |grep 9090 LISTEN 0 128 :::9090 :::* users:(("codis-fe",pid=1072,fd=6))
3、打开后台查看
六)、部署codis-server加入集群
0、部署机器
10.21.1.206
10.21.1.207
10.21.1.208
10.21.1.209
1、在四台机器都启动codis-server
/usr/local/codis/admin/codis-server-admin.sh start
2、在fe后台添加两个Group,每个group分配两个机器
3、利用fe自动分配插槽slot
七)、部署codis-proxy代理服务
0、部署机器
10.21.1.206
10.21.1.207
10.21.1.208
1、修改配置文件proxy.toml,这种zookeeper的jodis地址
jodis_name = "zookeeper" jodis_addr = "10.21.1.206:2181,10.21.1.207:2181,10.21.1.208:2181"
2、修改启动文件并启动
# vi /usr/local/codis/admin/codis-proxy-admin.sh CODIS_DASHBOARD_ADDR="10.21.1.206:18080"# /usr/local/codis/admin/codis-proxy-admin.sh start# ss -tpnl |grep 19000 LISTEN 0 128 *:19000 *:* users:(("codis-proxy",pid=1097,fd=5))
3、在fe界面查看proxy
proxy启动默认会自动注册到dashboard中,也可以在fe中手动添加
八)、部署redis-sentinel实现集群HA
0、部署机器
10.21.1.206
10.21.1.207
10.21.1.208
1、修改配置文件
port 26379 dir "/tmp" protected-mode no
2、启动sentinel
#sentinel部署官方脚本,是根据codis-server启动脚本进行修改 /usr/local/codis/admin/codis-sentinel-admin.sh start# ss -tpnl |grep 26379
3、fe界面添加Sentinels
4、点下SYNC,这样配置文件会自动添加如下内容
# Generated by CONFIG REWRITE sentinel myid ea5a5c3613f12dbddf469851ecacef8dba60dc23 sentinel monitor codis-demo-2 10.21.1.208 6379 2 sentinel failover-timeout codis-demo-2 300000 sentinel config-epoch codis-demo-2 0 sentinel leader-epoch codis-demo-2 0 sentinel known-slave codis-demo-2 10.21.1.209 6379 sentinel known-sentinel codis-demo-2 10.21.1.207 26379 0757848854fba1295387b9d5b5ca49178e73ebd6 sentinel known-sentinel codis-demo-2 10.21.1.208 26379 7c8ee4b48e5dbbe49f3f999b8746caf0c18e4565 sentinel monitor codis-demo-1 10.21.1.206 6379 2 sentinel failover-timeout codis-demo-1 300000 sentinel config-epoch codis-demo-1 2 sentinel leader-epoch codis-demo-1 2 sentinel known-slave codis-demo-1 10.21.1.207 6379 sentinel known-sentinel codis-demo-1 10.21.1.207 26379 0757848854fba1295387b9d5b5ca49178e73ebd6 sentinel known-sentinel codis-demo-1 10.21.1.208 26379 7c8ee4b48e5dbbe49f3f999b8746caf0c18e4565 sentinel current-epoch 2
九)、利用redis-benchmark进行集群压测
1、一个proxy压测,10w次请求,20个并发
./bin/redis-benchmark -p 19000 -n 100000 -c 20
可以看到单proxy几乎可以达到4w的ops,这是当前集群单proxy的极限,如果进行业务实际应用要参考改值是否符合业务需求。
2、3个proxy同时压测
可以看到多个proxy可以增加ops,所以建议开发的接入使用jodis,通过zookeeper获取proxy来实现负载均衡,同时也可以明显的增加集群性能。
十)、codis的一些常见问题以及理解
1、官方几个组件的说明
Codis Server:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。
Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。
对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;
不同 codis-proxy 之间由 codis-dashboard 保证状态同步。
Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。
对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;
所有对集群的修改都必须通过 codis-dashboard 完成。
Codis Admin:集群管理的命令行工具。
可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储。
Codis FE:集群管理界面。
多个集群实例共享可以共享同一个前端展示页面;
通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。
Storage:为集群状态提供外部存储。
提供 Namespace 概念,不同集群的会按照不同 product name 进行组织;
目前仅提供了 Zookeeper、Etcd、Fs 三种实现,但是提供了抽象的 interface 可自行扩展。
2、关于插槽
slot总共有1024个,可以根据分组进行调整,如果使用自动平衡,则会均衡分配,比如这里有两组,所以一组分配512个插槽。插槽是一种codis虚拟的分配,只是为了方便快速索引,数据最终存储到后方的redis服务。
3、codis集群的架构图如下
转载于:https://blog.51cto.com/brucewang/2159131
相关文章:

(C++)CSP202009-1 称检测点查询
#include<cstdio> #include<cmath> #define MAXSIZE 200//定义结构体 struct sqList{int r[MAXSIZE1][2];int length0; }; //交换 void swap(sqList* sqz,int index1,int index2){int temp sqz->r[index1][1];sqz->r[index1][1]sqz->r[index2][1];sqz-&…

sysbench的安装和做性能测试
sysbench的安装和做性能测试 http://imysql.cn/node/312 sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。 关于这个项目的详细介绍请看:http://sysbench.sourceforge.net。 它主要包括以下几…

React文档 state and lifecycle
状态和生命周期 这篇介绍 React 组件中状态和声明周期的概念。详情可以查看API参考 。 思考前一部分中时钟的例子。渲染元素中,我们仅学习了一种更新 UI 的方式。调用 ReactDOM.render() 改变渲染后的输出。 function tick() {const element (<div><h1>…

【讨论】基于WF的流程结构
大家都知道,在WF中默认情况下,其活动是以树状结构组成的,简单说就是复合活动包含其子活动,如果子活动也是复合活动也可以包含其子活动,但同一个活动不能成为两个活动的子活动。这种方式被大量使用在WF自带的活动库中&a…

(C++)设计一个程序能计算一个日期加上若干天后是什么日期and计算日期差值
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。 输出m行,每行按yyyy-mm-dd的个数输出。 #include<cstdio>//判断是否是闰年 bool isLeap(int year){return (year%40&&year%100!0)||year%4000; }//用二维数…

【转载】解决Apache2+PHP上传文件大小限制的问题
原文出处:http://evol1216.blog.163.com/blog/static/13019958020106783623528/ 在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下: 1、php.ini:uploa…

第36章 网络管理
第36章 网络管理 监听 11g的话首先写配置文件vi /u01/grid/11g/network/admin/listener.ora打开后选取下面的两个部分修改就好了 模板所在地vi /u01/11g/network/admin/samples/listener.ora SID_LIST_LISTENER (SID_LIST (SID_DESC (GLOBAL_DNAMEwyzc11g) (SID_NAMEwyzc11g)…

(C++)CSP202006-2 稀疏向量 two pointers
#include<cstdio>const int M 500000;//a,b<5*10^5 int u[M1][2];//第一维是index,第二维是value int v[M1][2];int main(){//1.读入n,a,b//2.对数组进行遍历,如果第一位相等,将第二维相乘 int n,a,b,i;long long ans0;scanf("%d%d%d&qu…

基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库01 —— 准备环境,搭建本地仓库,安装ambari...
一、集群软硬件环境准备: 操作系统: centos 7 x86_64.1804 Ambari版本:2.7.0 HDP版本:3.0.0 HAWQ版本:2.3.05台PC作为工作站: ep-bd01ep-bd02ep-bd03ep-bd04ep-bd05其中ep-bd01作为主节点,用于…

PDF编辑工具——PDF Desktop Converter 4 Professional
管理和操作PDF的工具。PDF Desktop Converter 4 Professional可以生成,转换,提取,组合,分割合并PDF。新增加的OCR功能可以将扫描后的文件转变成可以检索和编辑的PDF。以上这些功能只需要一个软件就可以全部实现。软件特点1. 快速&…

史上世界上最惨烈的几次股灾!
史上世界上最惨烈的几次股灾!●最惨烈的几次股灾 1美国股灾 1.1 1929年大股灾 1929年10月24日,星 期四。灾难的发生是毫无征兆的,开盘时,并没有出现什么值得注意的迹象,而且有一段时间股指还非常坚挺,但交易…

(C++) CSP 201803-1 跳一跳
#include<cstdio> const int M 30; int a[M1][2];//第一维用于读入,第二维用于记录上一局得分 int main(){int temp,index0,ans0;scanf("%d",&temp);while(temp!0){a[index][0]temp;if(a[index][0]1){ans1;}else{if(a[index-1][0]2){a[index][…

C#对象数组排序方法
一个排序的类,用了几种方式实现的。 usingSystem; namespaceDataStruct { publicclassSorter { ///<summary>///冒泡排序法1 ///</summary>/*(1)对于数组list中的1至n个数据,先将第1个和第2个数据进行比…

Asp.net MVC 3 防止 Cross-Site Request Forgery (CSRF)原理及扩展 安全 注入
原理:http://blog.csdn.net/cpytiger/article/details/8781457 原文地址:http://www.cnblogs.com/wintersun/archive/2011/12/09/2282675.html Cross-Site Request Forgery (CSRF) 是我们Web站点中常见的安全隐患。 下面我们在Asp.net MVC3 来演示一下。…

Windows下安装Redis服务
2019独角兽企业重金招聘Python工程师标准>>> Redis是有名的NoSql数据库,一般Linux都会默认支持。但在Windows环境中,可能需要手动安装设置才能有效使用。这里就简单介绍一下Windows下Redis服务的安装方法,希望能够帮到你。 1、要安…

(C++)1022 D进制的A+B 除基取余法将10进制数换成给定进制数
#include<cstdio> //除基取余法 const int M 30;int main(){long long a,b,c;int D,ans[M2];scanf("%lld%lld%d",&a,&b,&D);cab;int num0;do{ans[num]c%D;c c/D;}while(c!0);for(int inum-1;i>0;i--){printf("%d",ans[i]);}return…

Linux zip-tar.gz 压缩解压
tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。zip 压缩方法: 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归zip [参数] [打包后的文件名]…

Spring(ApplicationContextBeanFactory)
BeanFactory 才是 Spring 容器中的顶层接口。ApplicationContext 是它的子接口。 BeanFactory 和 ApplicationContext 的区别:创建对象的时间点不一样。 BeanFactory接口 spring的原始接口,针对原始接口的实现类功能较为单一.BeanFactory接口实现类的容器,特点是每次…

spoolsv.exe占CPU100% 的解决方法
spoolsv.exe占CPU100% 的解决方法spoolsv.exe是打印缓冲,没有打印机就关掉,有的话在打印时会占用很大内存。因为要打印的文件要转化格式。禁止Print spooler服务,如果用打印机,此方法不可行。 解决办法如下:1、在服…

(C++)1037 在霍格沃茨找零钱的两种解法
解法一 #include<cstdio> //十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可 //1 G 17 S , 1 S 29 Kint main(){int g1,s1,k1,g2,s2,k2,g3,s3,k3;scanf("%d.%d.%d",&g2,&s2,&k2);//定价 scanf("%d.%d.%…

开发人员角色分析
开发人员角色分析: 开发人员Developers 主要包含以下角色: n 软件架构师Software Architect n 设计员Designer n 用户界面设计员User-Interface Designer n 数据库设计员 Database Designer n 实施员Implementer n …

php empty()和isset()的区别
在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再。 顾名思义,empty…

jmap 内存情况
2019独角兽企业重金招聘Python工程师标准>>> -dump dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件名 [rootlocalhost ~]# jmap -dump:live,formatb,filedump.hprof 187784 Dumping heap to /home/yxgly/dump.hprof ... Heap dump …

(C++)1021 个位数统计
#include<cstdio> #include<cstring>const int M 1000;int main(){char str[M1];int count[10]{0};//全部初始化为0 scanf("%s",str);int len strlen(str);int i;for(i0;i<len;i){count[str[i]-0];}for(i0;i<10;i){if(count[i]>0){printf(&qu…

TOJ--3456--数学题
这题 做出来真的好爽啊... it is cool although it is easy 虽然 已经是大概1 2点的事了 我拖到现在才写是因为------lol 终于赢一把了 --- 先贴下题目: touch me 嗯 我一开始 用的是 3重for 我以为32767的数据量 是很小的.... 结果 TLE。。 OK 那么 我们只能换…

firewalled centos7
zone绑定网卡 firewall-cmd --zoneinternal --add-interfaceens192 --permanent firewall-cmd --permanent --zoneinternal --add-rich-rule"rule family"ipv4" source address"192.168.10.0/24" accept" [rootbyos000 system]# firewall-cmd -…

为Delphi程序添加事件和事件处理器
在Delphi中,事件实际上是专门化的属性,它是一个过程(procedure)的指针。要添加事件,首先应在所定义的类中说明一个用来指向事件过 程的指针,该指针的作用是当事件一旦发生,就通过这个指针执行所…

(C++)1031 查验身份证 3难点+3注意点
#include<cstdio> #include<cstring> //难点1:检查前17位是否全为数字 //解决之道1:本来就不是整型数字,是字符数字,判断是否在0和9之间即可 //难点2:遇到一个X后,如果不想处理sum了该怎么办 /…

Perl时间处理函数
官方网址:http://search.cpan.org/~stbey/Date-Calc-6.3/lib/Date/Calc.pod#___top use Date::Calc qw(Days_in_YearDays_in_MonthWeeks_in_Yearleap_yearcheck_datecheck_timecheck_business_dateDay_of_YearDate_to_DaysDay_of_WeekWeek_NumberWeek_of_YearMonda…

Linux环境搭建 | 手把手教你安装Linux虚拟机
2019独角兽企业重金招聘Python工程师标准>>> 前言 作为一名Linux工程师,不管是运维、应用、驱动方向,在工作中肯定会需要Linux环境。想要获得Linux环境,一个办法就是将电脑系统直接换成Linux系统,但我们平常用惯了Wind…