1.下载解压缩安装包
#wget https://golang.org/dl/go1.7.3.linux-amd64.tar.gz
#tar -zvxf go1.7.3.linux-amd64.tar.gz /usr/local
2.设置go的环境变量
#vi /etc/profile
在末尾添加一下内容
#go
GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/opt/gowork 【这个是安装codis的目录】
source /etc/profile
#go version 出现以下文字说明成功安装go
Zookeeper集群搭建
1.部署zookeeper(可部署1个,建议部署多台[奇数]提供集群服务,须安装JDK)
#cd /usr/local/zookeeper-3.4.6/conf (建议使用3.4.6以上版本)
#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
2.配置host 注意下面ip是zk的实际IP地址
#vim /ect/hosts
ip zookeeper-1
ip zookeeper-2
ip zookeeper-3
#vim /data/zookeeper/data/myid
在此文件内编辑自己对应的serverID. serverID见上述红色标记的数字
#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安装搭建
1.在线使用git下载安装codis
#cd /opt/gowork
#yum install git -y
#go get -u -d github.com/CodisLabs/codis(这个方法我没有采用,不知道为什么执行之后不出结果,我是直接在官网下载的包)
#wget https://github.com/CodisLabs/codis-release3.1.zip
#cd /opt/gowork
#mkdir -p src/github.com/CodisLabs
#unzip /
codis-release3.1.zip -d /opt/gowork/src/github.com/CodisLabs/
#cd /opt/gowork/src/github.com/CodisLabs/
#mv codis-release codis
#cd codis
#make
#make gotest(测试编译是否成功)
执行成功后进入bin目录,会新增几个文件,如下:
表示编译成功
2.配置redis文件(我以2个为例,数量随意)
#cp extern/redis-2.8.21/redis.conf /usr/local/redis/redis6379.conf
考虑性能,主库关闭aof和rdp,从库只开启aof:
将redis6379.conf更改以下参数(主库):
daemonize yes
pidfile /codisapp/run/codis/redis6379.pid
port 6379
timeout 86400
tcp-keepalive 60
loglevel notice
logfile /codisapp/logs/codis/redis6379.log
databases 16
save ""
#save 900 1 ----关闭aof
#save 300 10
#save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
dbfilename dump6379.rdb
dir /codisapp/dbdat/redis_data_6379
masterauth "xxxxx"
slave-serve-stale-data yes
repl-disable-tcp-nodelay no
slave-priority 100
requirepass "xxxxx"
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
上面将redis6379.conf配置完成
接下来修改redis6380.conf文件
#cp /usr/local/redis/redis6379.conf /usr/local/redis/redis6380.conf
#vi /usr/local/redis/redis6380.conf
修改以下内容
pidfile /codisapp/run/codis/redis6380.pid
port 6380
logfile /codisapp/logs/codis/redis6380.log
dbfilename dump6380.rdb
dir /codisapp/dbdat/redis_data_6380
启动redis
执行之前注意将log和data的文件生成目录建好,不然会启动失败
./bin/codis-server /usr/local/redis/redis6379.conf &
./bin/codis-server /usr/local/redis/redis6380.conf &
3.启动bashboard
#./bin/codis-dashboard --default-config | tee dashboard.conf
#vi dashboard.conf
coordinator_name 外部存储类型,接受 zookeeper/etcd
coordinator_addr 外部存储地址
product_name 集群名称,满足正则 \w[\w\.\-]*
product_auth 集群密码,默认为空
admin_addr RESTful API 端口
#nohup bin/codis-dashboard --ncpu=4 --config=dashboard.conf --log=dashboard.log --log-level=WARN &
执行完成后出现以下内容说明成功
#more dashboard.log日期
说明:
--ncpu=N 最大使用 CPU 个数
-c CONF, --config=CONF 指定启动配置文件
-l FILE, --log=FILE 设置 log 输出文件
--log-level=LEVEL 设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN
l 对于同一个业务集群而言,可以同时部署多个codis-proxy 实例;
l 不同 codis-proxy 之间由 codis-dashboard 保证状态同步。
4.启动codis-proxy
#./bin/codis-proxy --default-config | tee proxy.conf
#vi proxy.conf
填写箭头位置信息
配置文件解析:
product_name 集群名称,参考dashboard参数说明
product_auth 集群密码,默认为空
admin_addr RESTfulAPI 端口
proto_type Redis 端口类型,接受tcp/tcp4/tcp6/unix/unixpacket
proxy_addr Redis 端口地址或者路径
jodis_addr Jodis 注册 zookeeper地址
jodis_timeout Jodis 注册 sessiontimeout时间,单位second
backend_ping_period 与 codis-server 探活周期,单位second,0表示禁止
session_max_timeout 与 client 连接最大读超时,单位second,0表示禁止
session_max_bufsize 与 client 连接读写缓冲区大小,单位byte
session_max_pipeline 与 client 连接最大的pipeline 大小
session_keepalive_period 与 client 的 tcp keepalive 周期,仅tcp有效,0表示禁止
启动codis-proxy
#nohup bin/codis-proxy --ncpu=4 --config=proxy.conf --log=proxy.log --log-level=WARN &
codis-proxy启动后,处于 waiting 状态,监听proxy_addr 地址,但是不会 accept 连接,添加到集群并完成集群状态的同步,才能改变状态为online。添加的方法有以下两种:
通过 codis-fe 添加:通过 Add Proxy 按钮,将 admin_addr 加入到集群中;
l 通过 codis-admin 命令行工具添加,方法如下:
$ ./bin/codis-admin --dashboard=192.168.1.184:18080 --create-proxy -x 192.168.1.184:11080
其中 192.168.1.184:18080 以及 192.168.1.184:11080 分别为 dashboard 和 proxy 的 admin_addr 地址;
添加过程中,dashboard 会完成如下一系列动作:
① 获取 proxy 信息,对集群 name 以及 auth 进行验证,并将其信息写入到外部存储中;
② 同步 slots 状态;
③ 标记 proxy 状态为 online,此后 proxy 开始 accept 连接并开始提供服务;
./bin/codis-admin --proxy=192.168.30.6:11080 --auth="xxxxx" --shutdown
$ ./bin/codis-proxy -h
Usage:
codis-proxy [--ncpu=N][--config=CONF] [--log=FILE] [--log-level=LEVEL] [--host-admin=ADDR]
[--host-proxy=ADDR] [--ulimit=NLIMIT]
codis-proxy --default-config
codis-proxy --version
Options:
--ncpu=N 最大使用 CPU 个数
-c CONF, --config=CONF 指定启动配置文件
-l FILE, --log=FILE 设置 log 输出文件
--log-level=LEVEL 设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN
--ulimit=NLIMIT 检查 ulimit -n 的结果,确保运行时最大文件描述不少于 NLIMIT
5.配置启动Cdis FE 集群管理界面
生成配置文件
#mkdir conf (为了下面放codis.json的文件,目录可以随意定义)
# ./bin/codis-admin --dashboard-list --zookeeper=192.168.1.184 | tee conf/codis.json
启动codis-fe
#nohup ./bin/codis-fe --ncpu=4 --log=fe.log --log-level=WARN --dashboard-list=conf/codis.json --listen=192.168.1.184:18090 &
看生成的日志出现如下情况说明没问题
至此codis的图形界面已经能够显示
6.图形界面创建组和solt节点
1)打开浏览器访问http://ip:18090,通过管理界面操作codis
创建组
输入编号1,点击New Group,第一组创建完成。
2)添加实例
在后面输入组的id号,然后后面框内输入redis实例所在机器的ip地址和redis实例的端口号,点击Add Server即可添加完成 实例 ,再添加第二个实例完成后G-1那一列会有向上的箭头,点击后可升为master,点击第二个redis实例中master那一列的图标 即可将 此实例设置为slave,
此图标可以将对应的实例从该组中删除,如下两图:
3)对slots进行分组
如下图所示,输入你所要分组的slots的起和止的范围,然后输入组ID,点击后面按钮即可。
4)添加管理proxy
如下图所示,在框内输入proxy所对应的ip地址和端口号点击Add proxy即可
此外除了图形界面进行如上操作外,还可以通过命令行进行操作
创建组:
#./bin/codis-admin --dashboard=192.168.1.184:18080 --create-group --gid=1
#./bin/codis-admin --dashboard=192.168.1.184:18080 --create-group --gid=2
组添加服务器:
#./bin/codis-admin --dashboard=192.168.1.184:18080 --group-add --gid=1 \
--addr=192.168.1.184:6379
#/bin/codis-admin --dashboard=192.168.1.184:18080 --group-add --gid=1 \
--addr=192.168.1.184:6380
把从库跟主库同步:(同一组的两个实例都要执行)
#./bin/codis-admin --dashboard=192.168.1.184:18080 --sync-action --create \
--addr=192.168.1.184:6379
#./bin/codis-admin --dashboard=192.168.1.184:18080 --sync-action --create \
--addr=192.168.1.184:6380
若从库需要提升为master,操作如下:
#./bin/codis-admin --dashboard=192.168.1.184:18080 --promote-server --gid=1 \
--addr=192.168.1.184:6380(从库ip和端口)
初始化 slots,并设置 server group 服务的slot范围((只在一节点执行一次)sid是slot的编号。Codis 采用 Pre-sharding 的技术来实现数据的分片, 默认分成1024个slots (0-1023), 对于每个key来说, 通过以下公式确定所属的Slot Id : SlotId = crc32(key) % 1024 每一个slot都会有一个且必须有一个特定的server group id来表示这个slot的数据由哪个server group来提供.
#./bin/codis-admin --dashboard=192.168.1.184:18080 --slot-action --create-range --beg=0 \
--end=300 --gid=1
#./bin/codis-admin --dashboard=192.168.1.184:18080 --slot-action --create-range --beg=301 \
--end=601 --gid=2