加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Codis 部署安装

发布时间:2020-12-16 04:40:49 所属栏目:安全 来源:网络整理
导读:背景 关于Redis的高可用除了只身的Sentinel和Cluster之外,还有一个用的比较多的是Codis,由于公司的Redis大部分都使用Codis,本文就针对Codis进行相关的安装部署进行说明,来好好的认识Codis。 介绍 Codis 是一个分布式 Redis 解决方案,对于上层的应用来说,

背景

关于Redis的高可用除了只身的Sentinel和Cluster之外,还有一个用的比较多的是Codis,由于公司的Redis大部分都使用Codis,本文就针对Codis进行相关的安装部署进行说明,来好好的认识Codis。

介绍

Codis 是一个分布式 Redis 解决方案,对于上层的应用来说,连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表),上层应用可以像使用单机的 Redis 一样使用,Codis 底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的 Redis 服务。与Twemproxy 和 Redis Cluster 对比:?

Codis Twemproxy Redis Cluster
resharding ? without restarting cluster Yes No Yes
pipeline Yes Yes No
hash tags for ? multi-key operations Yes Yes Yes
multi-key ? operations while resharding Yes - No(details)
Redis clients ? supporting Any clients Any clients Clients have to ? support cluster protocol

环境


机器 服务 端口 端口说明 依赖
192.168.163.131/132/133(Ubuntu ? 16.04) Codis 7021/7022 server端口:主/从(三台) GO
11080 proxy管理端口(三台)
18080 dashboard管理端口(一台)
10890 fe管理端口(一台)
192.168.163.131/132/133(Ubuntu ? 16.04) zookeeper 2181 zk客户端监听端口(三台) JDK
2888 zk内部通讯端口(三台)
3888 zk选举端口(三台)

Codis 组件说明

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

?各个组件之间的关系:

163084-20180703212324845-1586187945.png

客户端通过zk提供的信息访问Proxy,Proxy是无状态的,按照需要可以部署多个。通过Proxy访问多个Group(Server),Server的HA通过Sentinel来保证。更多的信息可以参考官方文档。

Codis主要由以下特点

  • 可以无缝迁移到codis,自带迁移工具

  • 可以动态扩容和缩容

  • 多业务完全透明,业务不知道运行的是codis

  • 支持多核心CPU,twemproxy只能单核

  • codis是中心基于proxy的设计,是客户端像连接单机一样操作proxy

  • 有部分命令不能支持,比如keys *等

  • 支持group划分,组内可以设置一个主多个从,通过sentinel 监控redis主从,当主down了自动将从切换为主

  • 设置的进程要最大等于CPU的核心,不能超过CPU的核心数

  • 其依赖于zookeeper,里面保存的key是redis主机位置,因此zookeeper要做高可用

  • 监控可以使用接口和dashboard

安装环境

安装包下载:

#go:
wget?https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

#zookeeper:
wget?http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

#codis:
git?clone?https://github.com/CodisLabs/codis.git?-b?release3.2

安装依赖包:


apt-get?install?gcc?make?autoconf?libtool?automake

1. zookeeper安装

zookeeper依赖JDK,需要先安装JDK:

sudo?apt-get?update
sudo?apt-get?install?openjdk-8-jdk


#?或者jdk:
sudo?add-apt-repository?ppa:webupd8team/java
sudo?apt-get?update
sudo?apt-get?install?oracle-java8-installer

1.1 解压文件

1:解压:
tar?-xf?zookeeper-3.4.14.tar.gz?
mv?zookeeper-3.4.14?/usr/local/zookeeper

2:编辑配置文件:
cd?/usr/local/zookeeper/conf
cp?zoo_sample.cfg?zoo.cfg

1.2?配置文件(zoo.cfg)见下面

#?The?number?of?milliseconds?of?each?tick
tickTime=2000
#?The?number?of?ticks?that?the?initial?
#?synchronization?phase?can?take
initLimit=10
#?The?number?of?ticks?that?can?pass?between?
#?sending?a?request?and?getting?an?acknowledgement
syncLimit=5
#?the?directory?where?the?snapshot?is?stored.
#?do?not?use?/tmp?for?storage,?/tmp?here?is?just?
#?example?sakes.
dataDir=/tmp/zookeeper
#?the?port?at?which?the?clients?will?connect
clientPort=2181
#?the?maximum?number?of?client?connections.
#?increase?this?if?you?need?to?handle?more?clients
#maxClientCnxns=60
#
#?Be?sure?to?read?the?maintenance?section?of?the?
#?administrator?guide?before?turning?on?autopurge.
#
#?http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
#?The?number?of?snapshots?to?retain?in?dataDir
#autopurge.snapRetainCount=3
#?Purge?task?interval?in?hours
#?Set?to?"0"?to?disable?auto?purge?feature
#autopurge.purgeInterval=1

配置文件说明:

  • tickTime: ZooKeeper 中使用的基本时间单元,以毫秒为单位,默认值是 2000。它用来调节心跳和超时。例如,默认的会话超时时间是两倍的 tickTime。

  • initLimit: 默认值是 10,即 tickTime 属性值的 10 倍。它用于配置允许 followers 连接并同步到 leader 的最大时间。如果 ZooKeeper 管理的数据量很大的话可以增加这个值。

  • syncLimit: 默认值是 5,即 tickTime 属性值的 5 倍。它用于配置leader 和 followers 间进行心跳检测的最大延迟时间。如果在设置的时间内 followers 无法与 leader 进行通信,那么 followers 将会被丢弃。

  • dataDir: ZooKeeper 用来存储内存数据库快照的目录,并且除非指定其它目录,否则数据库更新的事务日志也将会存储在该目录下。建议配置 dataLogDir 参数来指定 ZooKeeper 事务日志的存储目录。

  • dataLogDir:log目录,不设置则默认和数据目录相同

  • clientPort: 服务器监听客户端连接的端口,也即客户端尝试连接的端口,默认值是 2181。

  • maxClientCnxns: 在 socket 级别限制单个客户端与单台服务器之前的并发连接数量,可以通过 IP 地址来区分不同的客户端。它用来防止某种类型的 DoS 攻击,包括文件描述符耗尽。默认值是 60。将其设置为 0 将完全移除并发连接数的限制。

  • autopurge.snapRetainCount: 配置 ZooKeeper 在自动清理的时候需要保留的数据文件快照的数量和对应的事务日志文件,默认值是 3。

  • autopurge.purgeInterval: 和参数 autopurge.snapRetainCount 配套使用,用于配置 ZooKeeper 自动清理文件的频率,默认值是 1,即默认开启自动清理功能,设置为 0 则表示禁用自动清理功能。

1.3 创建需要的目录:

mkdir?-p?/data/zookeeper/data
mkdir?-p?/data/zookeeper/log

1.4?设置环境变量

vim?/etc/profile
#添加
#?ZooKeeper?Env
export?ZOOKEEPER_HOME=/usr/local/zookeeper
export?PATH=$PATH:$ZOOKEEPER_HOME/bin

#应用环境变量
source?/etc/profile

1.5?单机模式
zoo.cfg配置文件

cd?/usr/local/zookeeper/conf
vim?zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log
clientPort=2181

1.5.1?启动:zkServer.sh start

root@root:~#?zkServer.sh?start
ZooKeeper?JMX?enabled?by?default
Using?config:?/usr/local/zookeeper/bin/../conf/zoo.cfg
Starting?zookeeper?...?STARTED

1.5.2?查看状态:zkServer.sh status

root@root:~#?zkServer.sh?status
ZooKeeper?JMX?enabled?by?default
Using?config:?/usr/local/zookeeper/bin/../conf/zoo.cfg
Mode:?standalone

1.5.3?关闭:zkServer.sh stop

root@root:~#?zkServer.sh?stop
ZooKeeper?JMX?enabled?by?default
Using?config:?/usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping?zookeeper?...?STOPPED

注意:在单机模式中,Mode 的值是 "standalone"。

1.6.1?集群模式(3台)
zoo.cfg配置文件:对比单机模式多了server.ID

cd?/usr/local/zookeeper/conf
vim?zoo.cfg

#?内容
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log
clientPort=2181
#要是一台装三个zk,可以按照端口区分
server.1=192.168.3.159:2888:3888
server.2=192.168.3.237:2888:3888
server.3=192.168.3.212:2888:3888

注意:2888表示zookeeper监听端口,3888表示zookeeper选举通信端口;以上server.1 server.2 server.3都要配置到三台zookeeper的zoo.cfg文件。

配置说明:

  • 集群模式中,集群中的每台机器都需要感知其它机器,在 zoo.cfg 配置文件中,可以按照如下格式进行配置,每一行代表一台服务器配置:?server.id=host:port:port

  • id 被称为 Server ID,用来标识服务器在集群中的序号。同时每台 ZooKeeper 服务器上,都需要在数据目录(即 dataDir 指定的目录) 下创建一个 myid 文件,该文件只有一行内容,即对应于每台服务器的Server ID。

  • ZooKeeper 集群中,每台服务器上的 zoo.cfg 配置文件内容一致。

  • server.1 的 myid 文件内容就是 "1"。每个服务器的 myid 内容都不同,且需要保证和自己的 zoo.cfg 配置文件中 "server.id=host:port:port" 的 id 值一致。

  • id 的范围是 1 ~ 255。

创建myid文件:设置zookeeper的id,和server.ID对应。

在 dataDir 指定的目录下 (即 /data/zookeeper/data 目录) 创建名为 myid 的文件,文件内容和 zoo.cfg 中当前机器的 id 一致。根据上述配置,master 的 myid 文件内容为 1。

按照相同步骤,为 132 和 133 配置 zoo.cfg 和 myid 文件。zoo.cfg文件内容相同,132 的 myid 文件内容为 2,133 的 myid 文件内容为 3。

#在第1台zookeeper(192.168.163.131)上设置id=1

echo?"1"?>/data/zookeeper/data/myid

#在第2台zookeeper(192.168.163.132)上设置id=2?

echo?"2"?>/data/zookeeper/data/myid

#在第3台zookeeper(192.168.163.133)上设置id=3

echo?"3"?>/data/zookeeper/data/myid

1.6.1?三台启动:zkServer.sh start

root@root:~#?zkServer.sh?start
ZooKeeper?JMX?enabled?by?default
Using?config:?/usr/local/zookeeper/bin/../conf/zoo.cfg
Starting?zookeeper?...?STARTED

1.6.2?三台查看状态:zkServer.sh status

root@root1:~#?zkServer.sh?status
ZooKeeper?JMX?enabled?by?default
Using?config:?/usr/local/zookeeper/bin/../conf/zoo.cfg
Mode:?leader

root@root2:~#?zkServer.sh?status
ZooKeeper?JMX?enabled?by?default
Using?config:?/usr/local/zookeeper/bin/../conf/zoo.cfg
Mode:?follower

root@root3:~#?zkServer.sh?status
ZooKeeper?JMX?enabled?by?default
Using?config:?/usr/local/zookeeper/bin/../conf/zoo.cfg
Mode:?follower

1.6.3?三台关闭:zkServer.sh stop

root@root1:~#?zkServer.sh?stop
ZooKeeper?JMX?enabled?by?default
Using?config:?/usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping?zookeeper?...?STOPPED

2 Codis安装:

2.1 安装go语言环境?codis基于go开发:

#解压:
sudo?tar?-C?/usr/local?-xzf?go1.10.3.linux-amd64.tar.gz?
#设置环境变量:
vim?/etc/profile


#添加:
##go
export?GOROOT=/usr/local/go
export?PATH=$PATH:$GOROOT/bin
#用于安装codis的目录
export?GOPATH=/opt/gowork?##mkdir?-p?/opt/gowork

#生效环境变量:
source?/etc/profile

查看go语言版本

go?version
go?version?go1.6.2?linux/386

2.2?创建需要的文件:

mkdir?/opt/gowork

以上go的依赖环境已经安装完毕

2.3 安装Codis

#创建目录
mkdir?-p?/opt/gowork/src/github.com/CodisLabs
#git?clone迁移
mv?codis?/opt/gowork/src/github.com/CodisLabs/
#进入目录
cd?/opt/gowork/src/github.com/CodisLabs/codis

#编译
make
make?gotest

2.3.1?编译安装完毕之后先设置一个软连接:

ln?-s?/opt/gowork/src/github.com/CodisLabs/codis/?/usr/local/codis

2.3.2?再设置环境变量:

vim?/etc/profile
#添加
#?Codis
export?CODIS_HOME=/usr/local/codis
export?PATH=$PATH:$CODIS_HOME/bin


#应用环境变量
source?/etc/profile

2.4?配置启动Codis

2.4.1?新建目录专门存放codis的配置(包括在一台上安装(131)dashboard、proxy、fe等相关服务进程的配置)

mkdir?-p?/etc/codis/codis-dashboard

mkdir?-p?/etc/codis/codis-proxy?(三台)

mkdir?-p?/etc/codis/codis-server?(一台)

mkdir?-p?/etc/codis/codis-fe

mkdir?–p?/etc/codis/codis-ha

2.4.2?新建codis-server(redis):三台上都安装

cp?/usr/local/codis/extern/redis-3.2.11/redis.conf?/etc/codis/codis-server/redis7021.conf

修改redis7021.conf:

#?bind?127.0.0.1
protected-mode?no
port?7021
daemonize?yes
pidfile?/var/lib/redis_7021/redis_7021.pid
logfile?"/var/lib/redis_7021/redis_7021.log"
dbfilename?7021dump.rdb
dir?/var/lib/redis_7021/
appendfilename?"7021appendonly.aof"

创建配置文件里所需的目录:

mkdir?/var/lib/redis_7021

再新建一个codis-server:

cd?/etc/codis/codis-server

cp?redis7021.conf?redis7022.conf?

sed?-i?"s/7021/7022/g"?redis7022.conf?

mkdir?/var/lib/redis_7022

开启codis-server:

codis-server?/etc/codis/codis-server/redis7021.conf?
codis-server?/etc/codis/codis-server/redis7022.conf

2.4.3?配置codis-dashboard(一台)

cd?/etc/codis/codis-dashboard/
cp?/usr/local/codis/config/dashboard.toml?/etc/codis/codis-dashboard/

修改配置:vim /etc/codis/codis-dashboard/dashboard.toml

##################################################
#????????????????????????????????????????????????#
#??????????????????Codis-Dashboard???????????????#
#????????????????????????????????????????????????#
##################################################

#?Set?Coordinator,?only?accept?"zookeeper"?&?"etcd"?&?"filesystem".
#?for?zookeeper/etcd,?coorinator_auth?accept?"user:password"?
#?Quick?Start
#coordinator_name?=?"filesystem"
#coordinator_addr?=?"/tmp/codis"
coordinator_name?=?"zookeeper"
coordinator_addr?=?"192.168.3.159:2181,192.168.3.212:2181,192.168.3.237:2181"??#zk地址,多个逗号隔开
#coordinator_auth?=?""

#?Set?Codis?Product?Name/Auth.
product_name?=?"codis-testX"?#集群名称
product_auth?=?""??#集群密码

#?Set?bind?address?for?admin(rpc),?tcp?only.
admin_addr?=?"192.168.3.159:18080"?restful?api地址,

#?Set?arguments?for?data?migration?(only?accept?'sync'?&?'semi-async').
migration_method?=?"semi-async"
migration_parallel_slots?=?100
migration_async_maxbulks?=?200
migration_async_maxbytes?=?"32mb"
migration_async_numkeys?=?500
migration_timeout?=?"30s"

#?Set?configs?for?redis?sentinel.
sentinel_client_timeout?=?"10s"
sentinel_quorum?=?2
sentinel_parallel_syncs?=?1
sentinel_down_after?=?"30s"
sentinel_failover_timeout?=?"5m"
sentinel_notification_script?=?""
sentinel_client_reconfig_script?=?""

参数说明:

参数 说明
coordinator_name 外部存储类型,接受 ? zookeeper/etcd
coordinator_addr 外部存储地址
product_name 集群名称,满足正则?w[w.-]*
product_auth 集群密码,默认为空
admin_addr RESTful ? API 端口

创建codis日志目录(存放codis所有log):

mkdir?/usr/local/codis/logs

启动codis-dashboard服务:(一台)

codis-dashboard?--ncpu=1?--config=/etc/codis/codis-dashboard/dashboard.toml?--log=/usr/local/codis/logs/dashboard.log?--log-level=warn?&

参数说明:
##--ncpu=N?最大使用?CPU?个数;

##-c??CONF,?--config=CONF?指定启动配置文件;

##-l???FILE,?--log=FILE?设置?log?输出文件;

##--log-level=LEVEL?设置?log?输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN;

##对于同一个业务集群而言,可以同时部署多个codis-proxy?实例;

##不同?codis-proxy?之间由?codis-dashboard?保证状态同步。

关闭codis-dashboard服务:

codis-admin?--dashboard=192.168.163.131:18080?--shutdown

2.4.4 配置codis-proxy(三台):每台配置一个Proxy,也可以一台配置多个Proxy。

注意参数:proxy_max_clients

cd?/etc/codis/codis-proxy/
cp?/usr/local/codis/config/proxy.toml?/etc/codis/codis-proxy/

修改配置:vim /etc/codis/codis-proxy/proxy.toml

##################################################
#????????????????????????????????????????????????#
#??????????????????Codis-Proxy???????????????????#
#????????????????????????????????????????????????#
##################################################

#?Set?Codis?Product?Name/Auth.
product_name?=?"codis-testX"??#和dashboard对应
product_auth?=?""

#?Set?auth?for?client?session
#???1.?product_auth?is?used?for?auth?validation?among?codis-dashboard,#??????codis-proxy?and?codis-server.
#???2.?session_auth?is?different?from?product_auth,?it?requires?clients
#??????to?issue?AUTH?<PASSWORD>?before?processing?any?other?commands.
session_auth?=?""

#?Set?bind?address?for?admin(rpc),?tcp?only.
admin_addr?=?"192.168.163.131:11080"??#同一台服务器可以根据端口创建多个Proxy

#?Set?bind?address?for?proxy,?proto_type?can?be?"tcp",?"tcp4",?"tcp6",?"unix"?or?"unixpacket".
proto_type?=?"tcp4"
proxy_addr?=?"192.168.163.131:19000"??#同一台服务器可以根据端口创建多个Proxy

#?Set?jodis?address?&?session?timeout
#???1.?jodis_name?is?short?for?jodis_coordinator_name,?only?accept?"zookeeper"?&?"etcd".
#???2.?jodis_addr?is?short?for?jodis_coordinator_addr
#???3.?jodis_auth?is?short?for?jodis_coordinator_auth,?for?zookeeper/etcd,?"user:password"?is?accepted.
#???4.?proxy?will?be?registered?as?node:
#????????if?jodis_compatible?=?true?(not?suggested):
#??????????/zk/codis/db_{PRODUCT_NAME}/proxy-{HASHID}?(compatible?with?Codis2.0)
#????????or?else
#??????????/jodis/{PRODUCT_NAME}/proxy-{HASHID}
jodis_name?=?"zookeeper"
jodis_addr?=?"192.168.163.131:2181,192.168.163.132:2181,192.168.163.133:2181"
jodis_auth?=?""
jodis_timeout?=?"20s"
jodis_compatible?=?false

...
...

参数说明:


参数 说明
product_name 集群名称,参考 ? dashboard 参数说明
product_auth 集群密码,默认为空
admin_addr RESTful ? API 端口
proto_type Redis ? 端口类型,接受 tcp/tcp4/tcp6/unix/unixpacket
proxy_addr Redis ? 端口地址或者路径
jodis_addr Jodis ? 注册 zookeeper 地址
jodis_timeout Jodis ? 注册 session timeout 时间,单位 second
jodis_compatible Jodis ? 注册 zookeeper 的路径
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服务(三台):


codis-proxy?--ncpu=1?--config=/etc/codis/codis-proxy/proxy.toml?--log=/usr/local/codis/logs/proxy.log?--log-level=warn?&

codis-proxy 启动后,处于 waiting online 状态(日志查询),监听 proxy_addr 地址,但是不会 accept 连接,添加到集群并完成集群状态的同步,才能改变状态为 online。添加的方法有以下两种:

  • 通过 codis-fe 添加:通过 Add Proxy 按钮,将 admin_addr 加入到集群中;⑤之后。

  • 通过 codis-admin 命令行工具添加,方法如下:

codis-admin?--dashboard=192.168.3.159:18080?--create-proxy?-x?192.168.3.159:11080

其中 192.168.3.159:18080 以及 192.168.3.159:11080 分别为 dashboard 和 proxy 的 admin_addr 地址;可以在后面的codis-fe里看到

添加过程中,dashboard 会完成如下一系列动作:

  • 获取 proxy 信息,对集群 name 以及 auth 进行验证,并将其信息写入到外部存储中(zookeeper);

  • 同步 slots 状态;

  • 标记 proxy 状态为 online,此后 proxy 开始 accept 连接并开始提供服务;

停止codis-proxy服务:

?codis-admin?--proxy=192.168.3.159:11080?--shutdown

注意:直接kill Proxy进程zk的codis3里会有残留数据,建议codis-admin方式停codis-proxy服务?

2.4.5?配置codis-fe(一台)

配置文件 codis.json 可以手动编辑,也可以通过 codis-admin 从外部存储中拉取:

cd?/etc/codis/codis-fe/

codis-admin?--dashboard-list?--zookeeper=192.168.3.159:2181?|?tee?codis.json

#?启动信息
2019/02/11?11:52:19?zkclient.go:23:?[INFO]?zookeeper?-?zkclient?setup?new?connection?to?192.168.3.159:2181
2019/02/11?11:52:19?zkclient.go:23:?[INFO]?zookeeper?-?Connected?to?192.168.3.159:2181
2019/02/11?11:52:19?zkclient.go:23:?[INFO]?zookeeper?-?Authenticated:?id=72057932370608129,?timeout=40000
2019/02/11?11:52:19?zkclient.go:23:?[INFO]?zookeeper?-?Re-submitting?`0`?credentials?after?reconnect
[
????{
????????"name":?"codis-testX",????????"dashboard":?"192.168.3.159:18080"
????}
]
2019/02/11?11:52:19?zkclient.go:23:?[INFO]?zookeeper?-?Recv?loop?terminated:?err=EOF
2019/02/11?11:52:19?zkclient.go:23:?[INFO]?zookeeper?-?Send?loop?terminated:?err=<nil>

启动codis-fe:

codis-fe?--ncpu=1?--dashboard-list=/etc/codis/codis-fe/codis.json?--listen=192.168.3.159:18090?--log=/usr/local/codis/logs/fe.log?--log-level=warn?--assets-dir=/usr/local/codis/bin/assets/?&

关闭codis-fe:

ps?-ef|grep?codis-fe|grep?-v?grep|awk?'{print?$2}'|xargs?kill

2.5 通过codis-fe进行web操作管理(http://192.168.3.159:18090)

注意在fe上添加的时候需要保证这些进程存在,fe不会自动开启,只是对这些已有进程进行相关操作。

2.5.1 添加proxy:地址是配置文件中配置的admin_addr信息,需要先开启codis-proxy(处于waiting online)。

1.png

2.png

2.5.2?添加Group

本文说明的Group就是一主一从的环境,当然也可以一主多从。在上面介绍codis-server中,只是开启了实例,没有做主从关系。现在通过codis-fe来进行主从关系的创建,添加group:


Group
1 192.168.3.159:7021 192.168.3.159:7022

需要注意的是在fe上添加,组内默认第一个Server是master。


3.png

注意:点了PROMOTE之后,slave会被提升为master,但是老的master需要手动点(扳手)才能对新主进行同步。

按照上面继续添加GROUP 2和3,最终图的结果为:

4.png

4.png

通过codis-fe已经把codis-server(redis)已经添加并自动做了主从复制。

3)初始化Slots:进行到这步的时候整个codis集群已经搭建完毕,最后只需要把Slots初始和分配下就可以使用了。

6.png

把0~300的slots分配给Group1,301~800的slots分配给Group2,801~1023的slots分配给Group3,最终结果图如下:

7.png

上面的图可以看到slots的分布信息,也可以通过condis-admin进行查询:

codis-admin?--dashboard=192.168.163.131:18080?--slots-status


同一


同一

codis-fe?管理界面

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

参考:

http://www.cnblogs.com/zhoujinyi/p/9249873.html

http://blog.51cto.com/arthur376/2051993



(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读