本文属原创,转载请注明此信息:http://www.cnblogs.com/robinjava77/p/5465150.html (Robin)

codis交流群 240361424  感谢群里各位群友的热情分享及特殊问题的解疑

一、 java安装

l  centOS 自带的openJDK需要卸载

1、head -n 1 /etc/issue             查看linux系统版本

2、java -version                      查看linux java版本,若显示的openJDK须卸载

3、rpm -qa | grep java           查看信息

tzdata-java-2014g-1.el6.noarch

java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64

java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64

4、卸载openJDK

yum -y remove java java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64

yum -y remove java java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64

5、java –version

-bash: java: command not found   说明卸载成功

l  安装:    mkdir /usr/java

cd /usr/java

上传文件 jdk-7u79-linux-x64.rpm

chmod +x jdk-7u79-linux-x64.rpm

rpm -ivh jdk-7u79-linux-x64.rpm

l  配置环境

vim /etc/profile

#set java environment

JAVA_HOME=/usr/java/jdk1.7.0_79

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

PATH=$JAVA_HOME/bin:$PATH

l  检查

java -version

java version "1.7.0_79"

Java(TM) SE Runtime Environment (build 1.7.0_79-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

!出现上述则安装成功

还可以使用javac 或者 java 命令 来检查

l  清除安装包

rm -rf jdk-7u79-linux-x64.rpm

 

二、 Zookeeper安装

l  创建目录 mkdir /usr/local/upload 进入该目录

l  下载         wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

l  安装        tar -xzf zookeeper-3.4.6.tar.gz -C /usr/local/
 

三、 go安装

l  下载:    wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz

l  解压:    tar -zxvf go1.4.1.linux-amd64.tar.gz

mv go /usr/local/

cd /usr/local/go/src/

l  相关依赖包环境安装:

yum groupinstall "Development Tools"

yum install -y git

l  编译go:

 /usr/local/go/src/all.bash

l  设置环境变量:

vim /etc/profile

#set go enviroment

export GOROOT=/usr/local/go

export GOBIN=$GOROOT/bin

export PATH=$PATH:$GOBIN

export GOPATH=$GOROOT/bin

source /etc/profile

l  检测go是否可以正常使用:

编辑文件命令:vim hello.go

文件内容:

package main

import "fmt"

func main(){

fmt.Printf("hello,world\n")

}

测试go

命令:go run hello.go

输出:hello,world

四、 codis安装

l  官方文档:https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md

l  下载codis代码:

go get -u -d github.com/CodisLabs/codis

l  编译codis:

cd /usr/local/go/bin/src/github.com/CodisLabs/codis

执行make命令,编译

执行make gotest 测试

执行成功后,会生成bin目录:assets  codis-config  codis-proxy  codis-server

五、 codis部署

(一)、部署zookeeper(可部署1个,建议部署多台[奇数]提供集群服务,须安装JDK)
1、cd /usr/local/zookeeper-3.4.6/conf
2、vim zoo.cfg
           tickTime=2000
           initLimit=5
           syncLimit=2
           dataDir=/data/zookeeper/data
           #dataLogDir=/data/zookeeper/logs
           clientPort=2181
           server.1=zookeeper-1:2888:3888
           server.2=zookeeper-2:2888:3888
           server.3=zookeeper-3:2888:3888
3、配置host  注意下面ip是zk的实际ip地址
           vim /ect/hosts
           ip zookeeper-1
           ip zookeeper-2
           ip zookeeper-3
4、vim /data/zookeeper/data/myid
           在此文件内编辑自己对应的serverID. serverID见上述红色标记的数字
5、sh /usr/local/zookeeper-3.4.6/bin/zkServer.sh start
           JMX enabled by default
           Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
           Starting zookeeper ... STARTED
 
           ./zkCli.sh -server ip:2181 能正确访问 则说明zk部署成功
           zk启动成功(依次将zk集群启动)
 
 
(二)、部署codis-server(部署多台形成集群)

1、mkdir /usr/local/codis

2、mkdir /usr/local/codis/conf

3、mkdir /usr/local/codis/log

4、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/bin/codis-server /usr/local/codis/

5、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/test/redis.temp /usr/local/codis/conf/redis_6379.conf

6、vim /usr/local/codis/conf/redis_6379.conf

主redis配置设置:

requirepass pwd                                codis-server密码 若使用密码,则不支持codis-ha插件

masterauth pwd                                  codis-server 从同步主密码(建议主redis也配置此项,codis-ha会自

动做主从切换,避免届时补充此项)

#save 900 1

#save 300 10

#save 60 10000                             这里是为了关闭主redis的rdb

rdbcompression no                             一个CRC64的校验就被放在了文件末尾,当存储或者加载rbd文件

的时候会         有一个10%左右的性能下降

appendonly no                            关闭AOF持久化策略

从redis配置设置:

requirepass pwd                                codis-server密码(建议从redis也配置此项,codis-ha会自动做主从切

换,避免届时补充此项)

masterauth pwd                                 codis-server 从同步主密码

save 900 1

save 300 10

save 60 10000                               这里是为了关闭主redis的rdb 从redis开放rdb数据持久策略

rdbchecksum yes

dbfilename dump.rdb                        快照的文件名

dir /var/lib/redis                                  存放快照的目录

appendonly yes                                    开放aof持久化策略

appendfsync everysec                      每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,

是受推荐的方式

no-appendfsync-on-rewrite    yes设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等

rewrite完成后再写入,建议yes

auto-aof-rewrite-percentage 100   当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自

动启动新的日志重写过程

auto-aof-rewrite-min-size 64mb     当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids

时由于文件尺寸较小导致频繁的重写

7、mkdir /var/lib/redis

8、cd /usr/local/codis

9、nohup ./codis-server ./conf/redis_6379.conf  > ./log/codis_server_6379.log  2>&1 &

10、通过redis-cli

redis-cli -h IP -p PORT 访问codis-server

CONFIG GET requirepass

(error) NOAUTH Authentication required.

auth pwd

                   OK

CONFIG GET requirepass

1) "requirepass"

2) "pwd"

按照上述命令执行,得到如上现象,则说明codis-server启动成功,并且密码设置成功

(三)、部署codis-config(只需部署一台)

1、mkdir /usr/local/codis

2、mkdir /usr/local/codis/conf

3、mkdir /usr/local/codis/log

4、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/bin/codis-config /usr/local/codis/

5、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/config.ini /usr/local/codis/conf/

6、cp -r /usr/local/go/bin/src/github.com/CodisLabs/codis/bin/assets /usr/local/codis

7、vim /etc/hosts

ip zookeeper-1

ip zookeeper-2

ip zookeeper-3

8、vim /usr/local/codis/conf/config.ini

设置zk=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181

设置dashboard_addr=ip:18087

9、nohup ./codis-config -c ./conf/config.ini dashboard > ./log/codis_config.log  2>&1 &

10、./codis-config -c ./conf/config.ini slot init (这个命令执行时,codis-proxy必须全部在未启动状态)

{

"msg": "OK",

"ret": 0

}

看到上述消息,则说明执行slot init成功

(四)、部署codis-proxy(可部署一台,建议部署多台)

1、mkdir /usr/local/codis

2、mkdir /usr/local/codis/conf

3、mkdir /usr/local/codis/log

4、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/bin/codis-proxy /usr/local/codis/

5、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/config.ini /usr/local/codis/conf/

6、vim /etc/hosts

ip zookeeper-1

ip zookeeper-2

ip zookeeper-3

7、vim /usr/local/codis/conf/config.ini

设置zk=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181

设置 dashboard_addr=ip:18087

设置 password=pwd                若使用密码,则不支持codis-ha插件。3.0以上版本支持密码

设置proxy_id=proxy_1

8、nohup ./codis-proxy -c ./conf/config.ini -L ./log/proxy.log  --cpu=8 --addr=本proxy服务ip:19000 --http-addr=本proxy服务ip:11000 > codis_proxy_1.log  2>&1 &

六、 codis-HA插件(codis官方提供的从redis自动升级为主redis的插件,须先安装go)

codis-ha不支持auth,若使用codis-ha插件,请去掉密码设置

l  下载         cd /usr/local

go get github.com/ngaut/codis-ha

cd /usr/local/go/bin/src/github.com/ngaut/

cp -r codis-ha /usr/local

cd /usr/local/codis-ha

go build

l  创建脚本vim start_codis_ha.sh

l  内容         codis-ha --codis-config=codis-configIP:prort --log-level=“info” --productName=test &> ./logs/codis-ha.log &

创建日志目录:mkdir logs

给sh文件赋予权限:chmod +x start_codis_ha.sh

l  启动         sh start_codis_ha.sh

七、 codis扩容(数据迁移)

l  部署好codis-server

l  Server Groops à +New Server Group 下图输入分组编号

l  选择新增的组,点击 +Add Ner Redis Instance  输入新增codis-server ip:port

l  上述操作添加完主从后,点击 ”Migrate Status” à Migrate Slot(S)

输入给扩容组分配的slot,第三项不能填写-1;

关于扩容分slot选择建议:将现在key最多的组内的slot分配给新的组。

八、 codis-server回收

l  先把要回收的codis-server的slot移动到仍在继续使用的组中

l  然后删除从redis,直至仅剩主redis

l  最后删除组

九、 安全性设置密码变更

1、修改codis-proxy的config.ini 中的password

2、通过web或者指令下线codis-proxy,重新上线codis-proxy

3、修改codis-server的安全性设置(若采用这种不重启redis-server的方式修改密码,请将修改的密码 同时修改进redis-server配置文件中,以防忘记)

1) redis-cli -h ip -p port(下述命令都是在redis客户端执行)

2) CONFIG SET requirepass password

3) CONFIG GET requirepass

提示:(error) NOAUTH Authentication required 则配置修改成功

4) auth password

5) CONFIG GET requirepass  à 1) "requirepass" 2) " password "

6) redis-cli -a password -h ip -p port

7) CONFIG GET masterauth password

4、上述操作完后,重启dashboard

十、 常见问题

1)、Dashboard启动后,关闭,再启动,需要先到zookeeper里面删除:

/zk/codis/db_test/dashboard

2)、codis-config(dashboard)、codis-proxy需要以nohup方式启动

3)、zookeeper要求JAVA的环境才能运行,且jdk版本要求6.0以上(含6.0)

4)、codis-ha或者手动把一个slave提升为主之后,原有的主从关系就没有了,需要手动去把新提升主redis的数据同步到各个从redis中,然设置主从关系。

设置主从关系方式:

①web界面操作,删除原来master redis信息,重启挂掉的redis,将这个redis添加进组;

②指令操作方式

codis-config server list

codis-config server add <group_id> <redis_addr> <role>

codis-config server remove <group_id> <redis_addr>

codis-config server promote <group_id> <redis_addr>

codis-config server add-group <group_id>

codis-config server remove-group <group_id>

建议使用web界面操作,操作简单

5)、下线任一个proxy后且仍存在提供服务的proxy,codis仍是可以正常使用的,但是重新上线的proxy若出现一个配置不正常的proxy,则整个codis不可用。

6)、codis的1024个slot必须要分配完,才能对外提供服务,否则无法将添加的proxy改为online;

7)、solts迁移错误问题,

登录zk取消迁移任务

1.zkCli.sh –server ip:port

2.rmr /zk/codis/db_test/migrate_tasks

3.create /zk/codis/db_test/migrate_tasks “migrate”

4.rmr /zk/codis/db_test/fence

5.rmr /zk/codis/db_test/dashboard

6.rmr /zk/codis/db_test/proxy

7. ./codis-config -c ./conf/config.ini slot init

8)、部署完成后,若codis里的主从通过codis-ha进行自动切换后,须通过zkCli 进入zk,使用命令 “CONFIG SET key value” 对主从redis按照“五à(二)à6”的要求进行修改。

        

         9)、主从codis-server,若对codis-server设置密码,requirepass和masterauth未设置相同的密码,codis无法自动完成主从数据同步。

 

十一、       Codis应用场景

海量的key,value值小于1M的缓存场景。

① 数据根据key,分布在 1024 个 slot 中,分布算法:crc32(key) % 1024;

② 数据迁移是由 codis-config 发起的,在 codis-config 看来,数据迁移的最小单位是 slot

③ 数据迁移时,选取slots的key-value 传输目标codis-server,完成后,删除本地key-value。这个操作是原子操作

十二、       Codis使用优化事项

1.关闭group master 的rdb和aof,提高master性能,开放slave的rdb和aof,确保数据不丢失;

2.

codis安装手册的更多相关文章

  1. Redis安装手册

    转载请注明出处:http://www.cnblogs.com/robinjava77/p/5465146.html (Robin) 1)下载redis:wget http://download.red ...

  2. linux下subversion server安装手册

    linux下subversion server安装手册 安装基于的Linux版本为:Red Hat Enterprise Linux Server release 6.3. 一 准备需要的安装包. ( ...

  3. Oracle 11g R2安装手册(图文教程)For Windows

    1.Oracle 11g R2安装手册(图文教程)For Windows 1.下载Oracle 11g R2 for Windows版本,下载地址如下 官方网站: http://download.or ...

  4. oracle 11gR2 RAC安装手册

    --oracle 11gR2 RAC安装手册 -----------------------------2013/10/29 参考三思笔记 http://files.cnblogs.com/jackh ...

  5. entos 7虚拟机安装手册

    entos 7虚拟机安装手册. 环境:VMware虚拟机软件 centos7 最小化安装包 步骤: 第一步:新建虚拟机 第二步:选择要安装的虚拟机的操作系统镜像.如我这里使用的就是CentOS7最小化 ...

  6. Nginx安装手册

    前提是搭建yum安装环境,见前面的教程资料 Nginx安装手册1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. gcc 安装ngin ...

  7. 豌豆夹Redis解决方案Codis安装使用

    豌豆夹Redis解决方案Codis安装使用 1.安装 1.1 Golang环境 Golang的安装非常简单,因为官网被墙,可以从国内镜像如studygolang.com下载. [root@vm roo ...

  8. 泛微云桥e-Bridge安装手册

    有时候不看官方文档进行配置,可能会出现奇奇怪怪的问题,SO转载一下官方文档,顺带学习. 想超长体验此软件,请搜索本博客内容,有破解方法,仅用来学习使用,顺带进行二次开发,请勿使用在商业用途,谢谢. 泛 ...

  9. Gpload安装手册(Linux版本)

    Gpload安装手册(Linux版本) 一.python 2.7版本 Linux系统默认是安装python2.7的,如果没有需要手动安装(python版本要求2.4.4以上): 通过命令:python ...

随机推荐

  1. jsp xml servlet

    什么都懂一点,什么都不精通!!

  2. error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用

    MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用 Debug ...

  3. 为什么上传文件的表单里面要加一个属性enctype=multipart/form-data?

    首先知道enctype这个属性管理的是表单的MIME编码.共有三个值可选:1.application/x-www-form-urlencoded2.multipart/form-data3.text/ ...

  4. AXIS最佳实践

    前言: Axis是apache一个开源的webservice服务,需要web容器进行发布.本节主要用于介绍使用Axis开发webservice,包括服务端的创建.webservice的部署.客户端的调 ...

  5. 关于无法使用xx-pc附加到应用程序iisexpress.exe

    问题表现:1.本地调试F5不能调试 2.IIS调试 附加到进程 提示无法访问 解决方法: 用管理员身份在cmd中运行:netsh winsock reset,然后重启.

  6. 使用Navicat连接数据库,不能创建外键

    最近在学习python中遇到这样的情况,使用Navicat连接MySQL,为表结构创建外键时,出现了创建外键就消失,而且外键也没有创建成功的情况. 在网上找了些资料,最后发现是MySQL引擎的问题.由 ...

  7. HDU2896 病毒侵袭

    题目大意:给出若干病毒的特征码,不超过500个.每个病毒的特征码长度在20~200之间.现在有若干网站的源代码,要检测网站的源代码中是否包含病毒.网站的个数不超过1000个,每个网站的源代码长度在70 ...

  8. GBDT算法原理深入解析

    GBDT算法原理深入解析 标签: 机器学习 集成学习 GBM GBDT XGBoost 梯度提升(Gradient boosting)是一种用于回归.分类和排序任务的机器学习技术,属于Boosting ...

  9. oracle基础备份和还原

    #全库备份 buffer inctype=complete file=c:\mminfo.dmp log=c:\mminfo.log #用户备份:用户mminfo下的所有表 buffer owner= ...

  10. MD5 32位 小写加密和大写加密

    /** * MD5加密方法 */ public static String MD5(String str) { MessageDigest md5 = null; try { md5 = Messag ...