Codis 3.2 部署配置

一,Codis简介

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一

样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。

不支持命令列表

https://github.com/CodisLabs/codis/blob/release3.2/doc/unsupported_cmds.md

redis的修改

https://github.com/CodisLabs/codis/blob/release3.2/doc/redis_change_zh.md

go安装

https://golang.org/doc/install

二,Codis 3.x

最新 release 版本为 codis-3.2,codis-server 基于 redis-3.2.8

支持 slot 同步迁移、异步迁移和并发迁移,对 key 大小无任何限制,迁移性能大幅度提升

相比 2.0:重构了整个集群组件通信方式,codis-proxy 与 zookeeper 实现了解耦,废弃了codis-config 等

元数据存储支持 etcd/zookeeper/filesystem 等,可自行扩展支持新的存储,集群正常运行期间,即便元存储故障也不再影响 codis 集群,大大提升 codis-proxy 稳定性

对 codis-proxy 进行了大量性能优化,通过控制GC频率、减少对象创建、内存预分配、引入 cgo、jemalloc 等,使其吞吐还是延迟,都已达到 codis 项目中最佳

proxy 实现 select 命令,支持多 DB

proxy 支持读写分离、优先读同 IP/同 DC 下副本功能

基于 redis-sentinel 实现主备自动切换

实现动态 pipeline 缓存区(减少内存分配以及所引起的 GC 问题)

proxy 支持通过 HTTP 请求实时获取 runtime metrics,便于监控、运维

支持通过 influxdb 和 statsd 采集 proxy metrics

slot auto rebalance 算法从 2.0 的基于 max memory policy 变更成基于 group 下 slot 数量

提供了更加友好的 dashboard 和 fe 界面,新增了很多按钮、跳转链接、错误状态等,有利于快速发现、处理集群故障

新增 SLOTSSCAN 指令,便于获取集群各个 slot 下的所有 key

codis-proxy 与 codis-dashbaord 支持 docker 部署

三,Codis 3.x 由以下组件组成:

Codis Server:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。

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 可自行扩展。

四,安装部署

二进制部署(官网的支持CentOS7,Glibc2.14以上版本)

tar zxvf /root/codis3.2.0-go1.7.5-linux.tar.gz -C /usr/local/

ln -s /usr/local/codis3.2.0-go1.7.5-linux/ /usr/local/codis

/usr/local/codis/redis-cli -v

/usr/local/codis/redis-cli: /lib64/libc.so.6: version `GLIBC_2.14‘ not found (required by /usr/local/codis/redis-cli)

排错

strings /lib64/libc.so.6 |grep GLIBC_

GLIBC_2.2.5

GLIBC_2.2.6

GLIBC_2.3

GLIBC_2.3.2

GLIBC_2.3.3

GLIBC_2.3.4

GLIBC_2.4

GLIBC_2.5

GLIBC_2.6

GLIBC_2.7

GLIBC_2.8

GLIBC_2.9

GLIBC_2.10

GLIBC_2.11

GLIBC_2.12

GLIBC_PRIVATE

需要安装GLIBC_2.14版本

直接使用CentOS7即可解决此问题。

源码部署(CentOS6/7都可)

1,java环境

yum -y  install java-1.8.0

java -version

2,go环境

tar zxvf /root/go1.8.3.linux-amd64.tar.gz -C /usr/local/

/usr/local/go/bin/go version

mkdir -p /data/go

echo ‘export PATH=$PATH:/usr/local/go/bin:/usr/local/codis/bin‘  >>/etc/profile

echo ‘export GOPATH=/data/go‘  >>/etc/profile

source /etc/profile

go env GOPATH

3,codis安装

mkdir -p /data/go/src/github.com/CodisLabs/

tar -zxvf /root/codis-3.2.0.tar.gz -C /data/go/src/github.com/CodisLabs/

cd /data/go/src/github.com/CodisLabs/

mv codis-3.2.0/ codis

cd codis/

make

./bin/redis-cli -v

ln -s /data/go/src/github.com/CodisLabs/codis/ /usr/local/codis

cat bin/version

version = unknown version

compile = 2017-09-11 16:58:26 +0800 by go version go1.8.3 linux/amd64

4,zookeepr安装

tar -zxvf /root/zookeeper-3.4.10.tar.gz -C /usr/local

ln -s /usr/local/zookeeper-3.4.10 /usr/local/zookeeper

echo ‘/usr/local/zookeeper/bin/zkServer.sh start‘  >>/etc/rc.local

cat << EOF >>  /usr/local/zookeeper/conf/zoo.cfg

tickTime=2000

initLimit=5

syncLimit=2

dataDir=/data/zookeeper/data

clientPort=2181

server.1=192.168.188.120:2888:3888

server.2=192.168.188.121:2888:3888

server.3=192.168.188.122:2888:3888

EOF

###myid

#注意:2888是主从的通信端口,3888是选举端口,server后面的1,2,3是在data目录下myid文件里的数值

mkdir -p /data/zookeeper/data

echo ‘1‘ > /data/zookeeper/data/myid

/usr/local/zookeeper/bin/zkServer.sh start

/usr/local/zookeeper/bin/zkServer.sh status

5,其他节点直接打包/data/go/src/github.com/CodisLabs/codis.tar.gz复制过去即可

集群配置前需要了解架构,集群分片主要分三种:

客户端分片:这个需要自己开发,对客户端要求严格,集群很难扩容

代理端分片:如codis,对客户端几乎无要求,集群容易扩容

服务端分片:如redis集群,需要智能客户端支持集群协议的,集群容易扩容

codis3.2集群架构

服务端:codis-fe------codis-dashboard------codis-proxy------codis-group------codis-server

客户端:client------nginx-tcp------codis-proxy

cdis-fe可以管理多个codis-dashboard

每个codis-dashboard代表一个产品线,每个codis-dashboard可以管理多个codis-proxy

每个codis-proxy可以管理多个codis-server group

每个codis-server group至少由两个codis-server组成,最少1主1备

由上可知一个大的codis集群可以分多个产品线,客户端连接各个产品线的codis-proxy,业务线之间可以做到物理隔离,比如group1,group2,group3分给codis-product1业务线,group4,

group5,group6分给codis-product2业务线,codis-dashboard配置保存在zookeeper里。

特别注意

同一个codis-server加入多个codis-dashboard的codis-group里,但是在不同的codis-dashboard里面主备的角色要一致,这代表逻辑隔离。

同一个codis-server只加入唯一的codis-dashboard的codis-group里,这代表物理隔离。

五,集群配置

1,角色划分

192.168.188.120 codis120 codis-server  zookeeper

192.168.188.121 codis121 codis-server  zookeeper

192.168.188.122 codis122 codis-server  zookeeper

192.168.188.123 codis123 codis-server  codis-proxy   nginx-tcp  lvs

192.168.188.124 codis124 codis-server  codis-proxy   nginx-tcp  lvs

192.168.188.125 codis125   codis-server  codis-dashboard codis-fe

以下操作的基本目录

[[email protected] codis]# pwd -L

/usr/local/codis

[[email protected] codis]# pwd -P

/data/go/src/github.com/CodisLabs/codis

2,启动codis-dashobard(codis125上操作)

1),修改dashboard.toml配置文件

[[email protected] codis]# cat config/dashboard.toml

主要修改这几行

# Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".

coordinator_name = "zookeeper"

coordinator_addr = "192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181"

# Set Codis Product Name/Auth.

product_name = "codis-product1"

product_auth = ""

# Set bind address for admin(rpc), tcp only.

admin_addr = "0.0.0.0:18080"

2),启动脚本

启动前需要修改脚本zookeeper地址池与product名称

[[email protected] codis]#cat   ./admin/codis-dashboard-admin.sh

$CODIS_ADMIN_TOOL_BIN -v --remove-lock --product=codis-product1 --zookeeper=192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181

[[email protected] codis]#  ./admin/codis-dashboard-admin.sh start

3),检查日志与端口

[[email protected] codis]# cat log/codis-dashboard.log.2017-09-11

2017/09/11 17:42:08 main.go:78: [WARN] set ncpu = 8

2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181

2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - Connected to 192.168.188.121:2181

2017/09/11 17:42:08 topom.go:119: [WARN] create new topom:

{

"token": "a10e7a35209d1db8f21c8e89a78a6c9a",

"start_time": "2017-09-11 17:42:08.1058555 +0800 CST",

"admin_addr": "codis125:18080",

"product_name": "codis-product2",

"pid": 18029,

"pwd": "/usr/local/codis",

"sys": "Linux codis125 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux"

}

2017/09/11 17:42:08 main.go:103: [WARN] create topom with config

coordinator_name = "zookeeper"

coordinator_addr = "192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181"

admin_addr = "0.0.0.0:18080"

product_name = "codis-product1"

product_auth = ""

migration_method = "semi-async"

migration_parallel_slots = 100

migration_async_maxbulks = 200

migration_async_maxbytes = "32mb"

migration_async_numkeys = 500

migration_timeout = "30s"

sentinel_quorum = 2

sentinel_parallel_syncs = 1

sentinel_down_after = "30s"

sentinel_failover_timeout = "5m"

sentinel_notification_script = ""

sentinel_client_reconfig_script = ""

2017/09/11 17:42:08 topom.go:424: [WARN] admin start service on [::]:18080

2017/09/11 17:42:08 main.go:116: [WARN] option --pidfile = /usr/local/codis/bin/codis-dashboard.pid

2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - Authenticated: id=170697207944249344, timeout=40000

2017/09/11 17:42:08 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect

2017/09/11 17:42:08 main.go:140: [WARN] [0xc42033e120] dashboard is working ...

[[email protected] codis]# netstat -tulpn |grep codis-dashboa

tcp6       0      0 :::18080                :::*                    LISTEN      32006/codis-dashboa

4),检查服务

http://192.168.188.125:18080/topom

3,启动codis-proxy(codis123与codis124上操作)

1),修改codis-proxy启动脚本

[[email protected] codis]# cat admin/codis-proxy-admin.sh|grep DASH

CODIS_DASHBOARD_ADDR="192.168.188.125:18080"

2),修改proxy.toml配置

[[email protected] codis]# cat config/proxy.toml|grep -Ev "^#|^$"

product_name = "codis-product1"

product_auth = ""

session_auth = ""

admin_addr = "0.0.0.0:11080"

proto_type = "tcp4"

proxy_addr = "0.0.0.0:19000"

3),启动codis-proxy脚本

[[email protected] codis]# ./admin/codis-proxy-admin.sh start

4),检查日志与端口

[[email protected] codis]# cat log/codis-proxy.log.2017-09-11

[[email protected] codis]# netstat -tulpn|grep codis-proxy

tcp        0      0 0.0.0.0:19000           0.0.0.0:*               LISTEN      31971/codis-proxy

tcp6       0      0 :::11080                :::*                    LISTEN      31971/codis-proxy

4,启动codis-server(需要在所有上操作)

1),修改启动脚本

vim /usr/local/codis/admin/codis-server-admin-6379.sh start

vim /usr/local/codis/admin/codis-server-admin-6380.sh start

主要注意以下几点

[[email protected] codis]# cat /usr/local/codis/admin/codis-server-admin-6379.sh |grep -Ev "^#|^$"|grep 6379

CODIS_SERVER_PID_FILE=/data/codis/6379/redis_6379.pid

CODIS_SERVER_LOG_FILE=/data/codis/6379/redis_6379.log

CODIS_SERVER_CONF_FILE=$CODIS_CONF_DIR/redis-6379.conf

2),修改服务配置

[[email protected] codis]# mkdir -p /data/redis/6379

[[email protected] codis]# mkdir -p /data/redis/6380

[[email protected] codis]# vim /usr/local/codis/config/redis-6379.conf

[[email protected] codis]# vim /usr/local/codis/config/redis-6380.conf

主要是注意以下几点

[[email protected] codis]# cat /usr/local/codis/config/redis-6379.conf |grep -Ev "^#|^$"|grep 6379

port 6379

pidfile /data/redis/6379/redis_6379.pid

logfile "/data/redis/6379/redis_6379.log"

dir /data/redis/6379

3),启动codis-server服务

[[email protected] codis]# ./admin/codis-server-admin-6379.sh start

/usr/local/codis/admin/../config/redis-6379.conf

starting codis-server ...

[[email protected] codis]# ./admin/codis-server-admin-6380.sh start

/usr/local/codis/admin/../config/redis-6380.conf

starting codis-server ...

4),检测日志与端口

[[email protected] codis]# netstat -tulpn |grep codis-server

tcp        0      0 192.168.188.120:6379       0.0.0.0:*               LISTEN      22231/codis-server

tcp        0      0 192.168.188.120:6380       0.0.0.0:*               LISTEN      22308/codis-server

5,启动codis-fe(codis125上操作)

1),修改codis-fe启动脚本

[[email protected] codis]# cat admin/codis-fe-admin.sh

主要修改这几行

#!/usr/bin/env bash

#COORDINATOR_NAME="filesystem"

#COORDINATOR_ADDR="/tmp/codis"

COORDINATOR_NAME="zookeeper"

COORDINATOR_ADDR="192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181"

2),启动codis-fe脚本

[[email protected] codis]#  ./admin/codis-fe-admin.sh start

3),检查日志与端口

[[email protected] codis]# cat log/codis-fe.log.2017-09-11

2017/09/11 19:24:32 main.go:101: [WARN] set ncpu = 8

2017/09/11 19:24:32 main.go:104: [WARN] set listen = 0.0.0.0:9090

2017/09/11 19:24:32 main.go:120: [WARN] set assets = /usr/local/codis/bin/assets

2017/09/11 19:24:32 main.go:155: [WARN] set --zookeeper = 192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181

2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 192.168.188.120:2181,192.168.188.121:2181,192.168.188.122:2181

2017/09/11 19:24:32 main.go:209: [WARN] option --pidfile = /usr/local/codis/bin/codis-fe.pid

2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - Connected to 192.168.188.120:2181

2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - Authenticated: id=98639613905403907, timeout=40000

2017/09/11 19:24:32 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect

[[email protected] codis]# netstat -tupnl |grep codis-fe

tcp6       0      0 :::9090                 :::*                    LISTEN      32141/codis-fe

4),访问面板

http://192.168.188.125:9090/#codis-product1

六,codis-fe面板操作

1,通过codis-fe添加group

通过web浏览器访问集群管理页面(fe地址:http://192.168.188.125:9090/#codis-product1) 选择我们刚搭建的集群 codis-product1,在 Proxy 栏可看到我们已经启动的 Proxy, 但是

Group 栏为空,因为我们启动的 codis-server 并未加入到集群 添加 NEW GROUP,NEW GROUP 行输入 1,再点击 NEW GROUP 即可 添加 Codis Server,Add Server 行输入我们刚刚启动的

codis-server 地址,添加到我们刚新建的 Group,然后再点击 Add Server 按钮即可。

如上依次添加6个group,12个codis-server,默认每组里面第一个添加的为主,第二个添加的设置为从,同一个节点2个实例不能设置为同一group。

2,通过codis-fe初始化solt

新增的集群 slot 状态是 offline,因此我们需要对它进行初始化(将 1024 个 slot 分配到各个 group),而初始化最快的方法可通过 fe 提供的 rebalance all slots 按钮来做,如下图

所示,点击此按钮,我们即快速完成了一个集群的搭建。

自动分配1024个solt到6个group,reblance all solts会自动分配完所以solt到6个group。

七,代理HA

1,在codis123与codis124上安装lvs与nginx-tcp

2,配置好VIP+19000端口为第一个codis-dashboard业务线使用,其他类推

192.168.188.131:19000

时间: 2024-07-30 23:51:05

Codis 3.2 部署配置的相关文章

WebLogic中间件基础入门培训教程_WebLogic部署配置视频教程

WebLogic中间件基础入门培训教程_WebLogic部署配置视频教程 WebLogic中间件基础入门培训教程_WebLogic部署配置视频教程5 风哥主讲:介绍Oracle WebLogic中间件的概念,WebLogic概念,域,JDK,JVM,数据源,连接池,控制台,集群相关,Weblogic安装与部署. 视频学习地址: http://edu.51cto.com/course/course_id-3744.html

Linux平台oracle 11g单实例 安装部署配置 快速参考

1.重建主机的Oracle用户 组 统一规范 uid gid 以保证共享存储挂接或其他需求的权限规范 userdel -r oracle groupadd -g 500 oinstall groupadd -g 501 dba useradd -g oinstall -G dba -u 500 oracle #id oracle uid=500(oracle) gid=500(oinstall) 组=500(oinstall),501(dba) 2.安装好Oracle 需要的rpm包.安装rpm

linux后台server开发环境的部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))

linux后台server开发环境部署配置 引言 背景 随着互联网业务的不断增多.开发环境变得越来越复杂,为了便于统一server端的开发部署环境,特制定本配置文档. 使用软件 CentOS 6.3(Linux version 2.6.32-279.el6.x86_64) gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) 本次配置 Nginx 1.5.8 Apache 2.4.7 php 5.3.26 目的 构造WEB前端技术架构.web前端的部署结构技术全然

MDT 2013 从入门到精通之自动化部署配置

在上文配置好系统分区信息,MDT部署所需的基本配置内容已经初步配置完成,现在我们就可以通过MDT进行部署了.在开始部署操作系统之前,我们需要对Windows PE启动引导进行简单自动化配置,从而方便后续操作系统部署的顺利进行,需要补充的是:在未集成SQL之前,这里的自定制设置是整个自动化部署过程中最重要的环节.接下来就为大家带来今日的自动化部署配置.客户端部署过程中信息系统日志的远程存放(Logs日志的远程存放是为了方便大家在分发失败的时候更好的排错).控制台的更新内容. 一.启动信息调整: 1

Exchange 2016 与 Office 365建立混合部署配置

之前我们已经准备好环境,现在开始配置混合部署 目前本地运行的服务器: 2 x Exchange 2016 Mailbox servers 1 x Exchange 2013 multi-role server 1 x Exchange 2013 Edge Transport server 1 x Exchange 2010 multi-role server Exchange 2016 Mailbox server是对公网服务器,并且配置的负载均衡,由于需要同时配置Office 365的服务,因

redis集群部署配置

Redis集群部署配置 测试环境:服务器系统为centos6.5,redis版本为3.2.2,使用一台机器,模拟6个redis实例来创建redis集群,其中3主3从 分别建立redis的安装目录,并复制redis.conf到安装目录下. 2.修改每个目录下的redis.conf配置文件 port 7000   #端口 daemonize yes cluster-enabled yes   #开启集群模式 cluster-config-file nodes-7000.conf  #集群配置文件 c

【4】搭建HA高可用hadoop-2.3(部署配置HBase)

[1]搭建HA高可用hadoop-2.3(规划+环境准备) [2]搭建HA高可用hadoop-2.3(安装zookeeper) [3]搭建HA高可用hadoop-2.3(部署配置hadoop--cdh5.1.0) [4]搭建HA高可用hadoop-2.3(部署配置HBase) 部署配置habase (1)安装habase master1.slave1.slave2.slave3 #cd /opt #tar xf  hbase-0.98.1-cdh5.1.0.tar.gz #ln -s  hbas

linux后台服务器开发环境部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))

linux后台服务器开发环境部署配置 引言 背景 随着公司互联网业务的不断增多,开发环境变得越来越复杂,为了便于统一服务器端的开发部署环境,特制定本配置文档. 使用软件 CentOS 6.3(Linux version 2.6.32-279.el6.x86_64) gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4) 本次配置 Nginx 1.5.8 Apache 2.4.7 php 5.3.26 目的 构造WEB前端技术架构,web前端的部署结构技术完全完成.

Myeclipse/STS 首次在本地部署配置一个Spring MVC 项目 (十二)

1. 在本地新创建一个文件夹 ,做为项目工作空间; 2. 用 Myeclipse 或 STS 进入该文件夹,该文件夹就成为项目的工作空间: 3. 就要进 窗口-首选项,配置: 环境默认编码: 1>. 常规下面 内容类型 .txt 文本 UTF-8 更新 2>. 常规 – 工作空间 , 文本文件编码 3>. 常规 – 编辑器 – 文本编辑器 – 拼写 配置 java JDK 为 项目需要的版本 比如 (1.7) : 配置 Myeclipse 下的 Servers 及 validation