Codis3.2 安装部署
转载请注明出处:https://www.cnblogs.com/format-ch/p/9323841.html
一、软件下载
- 下载
下载 zookeeper (Codis注册中心)
下载 Jdk (zookeeper需要)
http://www.oracle.com/technetwork/java/javase/downloads/index.html
下载 Go (Codis编译需要)
https://golang.org/dl/ (需要科学上网)
[root@localhost ~]# cd /home/download/
[root@localhost download]# ll
total 353324
-rw-r--r--. 1 root root 132489256 Jun 28 02:24 go1.10.3.linux-amd64.tar.gz
-rw-r--r--. 1 root root 190890122 May 30 04:58 jdk-8u171-linux-x64.tar.gz
-rw-r--r--. 1 root root 36667596 May 30 04:58 zookeeper-3.4.12.tar.gz
解压到相应目录
全部解压到
/usr/local/目录下,Codis也会安装此目录(或解压到自己习惯的目录)
//命令:
tar -zxvf go1.10.3.linux-amd64.tar.gz [root@localhost download]# cd /usr/local/
[root@localhost local]# ll
total 1704
drwxr-xr-x. 5 root root 160 Jun 28 03:40 go
drwxr-xr-x. 8 10 143 255 Mar 28 20:18 jdk1.8.0_171
drwxr-xr-x. 11 bean bean 4096 May 30 05:39 zookeeper-3.4.12
二、修改环境变量(/etc/profile)
修改完之后执行 source /etc/profile 使生效
//GOROOT就是go的安装目录,codis编译的时候,会根据这个目录来找go。
//GOPATH就是codis的根目录,之后下载的时候会直接下载到这个目录。 export GOROOT=/usr/local/go export GOPATH=/usr/local/codis JAVA_HOME=/usr/local/jdk1.8.0_171 export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.12 CLASS_PATH=$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$GOROOT/bin:$GOPATH/bin export CODIS_HOME=$GOPATH/src/github.com/CodisLabs/codis
三、zk配置
目前部署单节点
- 修改配置文件:
cd /usr/local/zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
注意在dataDir目录下,新建一个myid,写入1 dataDir目录在
zoo.cfg里有配置
//命令
cd /usr/local/zookeeper-3.4.12/dataDir
vim myid
启动
在
bin目录下执行下名命令
./zkServer.sh start
四、下载Codis源码
- 新建目录,必须和官网一样,不一样,要报错。
mkdir -p $GOPATH/src/github.com/CodisLabs
进入目录下载
Codis 源代码需要下载到
$GOPATH/src/github.com/CodisLabs/codis
[root@localhost CodisLabs]# pwd
/usr/local/codis/src/github.com/CodisLabs
[root@localhost CodisLabs]# git clone https://github.com/CodisLabs/codis.git -b release3.2
五、编译Codis源码
cd $GOPATH/src/github.com/CodisLabs/codis make
六、启动codis-dashboard
- 修改配置文件
[root@localhost config]# pwd
/usr/local/codis/src/github.com/CodisLabs/codis/config
[root@localhost config]# vim dashboard.toml
- 将默认注册中心修改为zookeeper
#coordinator_name = "filesystem"
#coordinator_addr = "/tmp/codis"
coordinator_name = "zookeeper"
coordinator_addr = "127.0.0.1:2181"
启动命令
在Codis目录下执行如下操作
[root@localhost codis]# pwd
/usr/local/codis/src/github.com/CodisLabs/codis [root@localhost codis]# nohup ./bin/codis-dashboard --ncpu=1 --config=config/dashboard.toml --log=log/dashboard.log --log-level=WARN &
- 详细说明( 摘自官方文档,详见 : GitHub )
- 启动参数说明:
$ ./bin/codis-dashboard -h
Usage:
codis-dashboard [--ncpu=N] [--config=CONF] [--log=FILE] [--log-level=LEVEL] [--host-admin=ADDR]
codis-dashboard --default-config
codis-dashboard --version Options:
--ncpu=N 最大使用 CPU 个数
-c CONF, --config=CONF 指定启动配置文件
-l FILE, --log=FILE 设置 log 输出文件
--log-level=LEVEL 设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN
默认配置文件:
$ ./bin/codis-dashboard --default-config | tee dashboard.toml
##################################################
# #
# Codis-Dashboard #
# #
################################################## # Set Coordinator, only accept "zookeeper" & "etcd"
coordinator_name = "zookeeper"
coordinator_addr = "127.0.0.1:2181" # Set Codis Product {Name/Auth}.
product_name = "codis-demo"
product_auth = "" # Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:18080"
参数 说明
coordinator_name 外部存储类型,接受 zookeeper/etcd
coordinator_addr 外部存储地址
product_name 集群名称,满足正则 \w[\w.-]*
product_auth 集群密码,默认为空
admin_addr RESTful API 端口
- 停止命令
./bin/codis-admin --dashboard=192.168.30.128:18080 --shutdown
七、启动Codis Proxy
- 修改配置文件
# vim config/proxy.toml
- 修改为zk注册中心
jodis_name = "zookeeper"
jodis_addr = "127.0.0.1:2181"
jodis_auth = ""
jodis_timeout = "20s"
jodis_compatible = false
- 启动命令
nohup ./bin/codis-proxy --ncpu=1 --config=config/proxy.toml --log=log/proxy.log --log-level=WARN &
codis-proxy 启动后,处于 waiting 状态,监听 proxy_addr 地址,但是不会 accept 连接,添加到集群并完成集群状态的同步,才能改变状态为 online。添加的方法有以下两种:
- 通过 codis-fe 添加:通过
Add Proxy按钮,将admin_addr加入到集群中(见下方 9.3 页面配置章节); - 通过 codis-admin 命令行工具添加,方法如下:
./bin/codis-admin --dashboard=127.0.0.1:18080 --create-proxy -x 127.0.0.1:11080
其中 127.0.0.1:18080 以及 127.0.0.1:11080 分别为 dashboard 和 proxy 的 admin_addr 地址;
添加过程中,dashboard 会完成如下一系列动作:
- 获取 proxy 信息,对集群 name 以及 auth 进行验证,并将其信息写入到外部存储中;
- 同步 slots 状态;
- 标记 proxy 状态为
online,此后 proxy 开始accept连接并开始提供服务;
- 详细说明( 摘自官方文档,详见 : GitHub )
- 启动参数说明:
$ ./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
默认配置文件
$ ./bin/codis-proxy --default-config | tee proxy.toml
##################################################
# #
# Codis-Proxy #
# #
################################################## # Set Codis Product {Name/Auth}.
product_name = "codis-demo"
product_auth = "" # Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:11080" # Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19000" # Set jodis address & session timeout.
jodis_addr = ""
jodis_timeout = 10
jodis_compatible = false # Proxy will ping-pong backend redis periodly to keep-alive
backend_ping_period = 5 # If there is no request from client for a long time, the connection will be droped. Set 0 to disable.
session_max_timeout = 1800 # Buffer size for each client connection.
session_max_bufsize = 131072 # Number of buffered requests for each client connection.
# Make sure this is higher than the max number of requests for each pipeline request, or your client may be blocked.
session_max_pipeline = 1024 # Set period between keep alives. Set 0 to disable.
session_keepalive_period = 60
| 参数 | 说明 |
|---|---|
| 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 表示禁止 |
注:Codis3 会将 jodis 节点注册在 /jodis/{PRODUCT_NAME} 下,这点与 Codis2 不太兼容,所以为了兼容性,可以考虑将 jodis_compatible 设置成 true。
- 停止命令
./bin/codis-admin --proxy=192.168.30.128:11080 --auth="" --shutdown
- 启动第二个Codis Proxy
- 将
config目录下proxy.toml配置文件复制一份为proxy19001.toml(原文件默认端口为19000)
[root@localhost codis]# pwd
/usr/local/codis/src/github.com/CodisLabs/codis
[root@localhost codis]# cp config/proxy.toml config/proxy19001.toml
- 编辑复制好的配置文件,修改RESTful API 端口与代理端口端口如下
vim config/proxy19001.toml
---------------------------------
# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:11081" # Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19001"
- 启动第二个代理
nohup ./bin/codis-proxy --ncpu=1 --config=config/proxy19001.toml --log=log/proxy19001.log --log-level=WARN &
- 将代理添加入集群(也可在Fe操作,见下方 9.3 页面配置章节)
./bin/codis-admin --dashboard=127.0.0.1:18080 --create-proxy -x 127.0.0.1:11081
八、启动Codis Server
- 启动命令
nohup ./bin/codis-server config/redis.conf &
默认日志路径
/tmp/redis_6379.log
- 停止命令
./bin/redis-cli shutdown
- 启动多个Codis Server
- 将
config目录下redis.conf配置文件复制3份,总共4份,做两个server各配一个从服务
| 主 | 从 |
|---|---|
| localhost:6379 | localhost:7379 |
| localhost:6380 | localhost:7380 |
[root@localhost codis]# pwd
/usr/local/codis/src/github.com/CodisLabs/codis
[root@localhost codis]# cp config/redis.conf config/redis7379.conf
[root@localhost codis]# cp config/redis.conf config/redis6380.conf
[root@localhost codis]# cp config/redis.conf config/redis7380.conf
- 修改配置文件(示例为6380,其余操作相同)
vim config/redis6380.conf
------------------------------
port 6380
pidfile /tmp/redis_6380.pid
logfile "/tmp/redis_6380.log"
dbfilename dump6380.rdb
dir /tmp/redis_6380
- 启动
nohup ./bin/codis-server config/redis6380.conf &
- 依次修改其余两个配置文件并启动
服务启动后如其余终端无法连接服务,请将相关配置文件
redis.conf里bind 127.0.0.1改为bind 0.0.0.0,原设置只可本机访问,修改后所有IP都可访问
九、启动Codis FE
- 启动命令
nohup ./bin/codis-fe --ncpu=1 --log=log/fe.log --log-level=WARN --zookeeper=127.0.0.1:2181 --listen=0.0.0.0:8080 &
前一个参数是zk的地址端口,后面一个是fe的地址端口
- 详细说明( 摘自官方文档,详见 : GitHub )
- 启动参数说明:
$ ./bin/codis-fe -h
Usage:
codis-fe [--ncpu=N] [--log=FILE] [--log-level=LEVEL] [--assets-dir=PATH] (--dashboard-list=FILE|--zookeeper=ADDR|--etcd=ADDR|--filesystem=ROOT) --listen=ADDR
codis-fe --version Options:
--ncpu=N 最大使用 CPU 个数
-d LIST, --dashboard-list=LIST 配置文件,能够自动刷新
-l FILE, --log=FILE 设置 log 输出文件
--log-level=LEVEL 设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN
--listen=ADDR HTTP 服务端口
配置文件 codis.json 可以手动编辑,也可以通过 codis-admin 从外部存储中拉取,例如:
$ ./bin/codis-admin --dashboard-list --zookeeper=127.0.0.1:2181 | tee codis.json
[
{
"name": "codis-demo",
"dashboard": "127.0.0.1:18080"
},
{
"name": "codis-demo2",
"dashboard": "127.0.0.1:28080"
}
]
- 页面配置
访问Fe地址:http://192.168.30.128:8080

点击项目名进行具体页面

通过Fe添加Codis-proxy
如图,在输入框中填入启动的代理地址,之后点击
New Proxy进行添加,同 7.2 codis-admin 命令行工具添加
通过fe添加group
如图在 Proxy 栏可看到我们已经启动的 Proxy, 但是 Group 栏为空,因为我们启动的 codis-server 并未加入到集群

添加
NEW GROUP,NEW GROUP行输入 1,再点击NEW GROUP即可
添加 Codis Server,
Add Server行输入我们刚刚启动的 codis-server 地址,添加到我们刚新建的 Group,然后再点击Add Server按钮即可
每个group只能有一个主,其余为从服务,可多从,点击如图所示按钮,将服务配置为从服务,之后按照上述 8.3 表格规划依次添加及配置好其余服务

说明: 上述 8.3 部署 Codis Server 多实例时为拷贝3份数据,更改相关主要配置信息,并未设置主从,原因为 codis-fe 管理端可以配置主从,上述 9.3最后一点也说明了通过fe配置主从方式,也可以直接通过修改
redis.conf配置文件来设置主从,修改如下:
//编辑从服务配置文件
vim config/redis7380.conf
//增加如下行,配置主服务地址信息
slaveof 192.168.30.128 6380
通过fe初始化slot
新增的集群 slot 状态是 offline,因此我们需要对它进行初始化(将 1024 个 slot 分配到各个 group),通过 fe 提供的
rebalance all slots按钮可以进行快速初始化,也可自定义配置
十、命令行工具( 摘自官方文档,详见 : GitHub )
注意:使用 codis-admin 是十分危险的。
- codis-dashboard 异常退出的修复
当 codis-dashboard 启动时,会在外部存储上存放一条数据,用于存储 dashboard 信息,同时作为 LOCK 存在。当 codis-dashboard 安全退出时,会主动删除该数据。当 codis-dashboard 异常退出时,由于之前 LOCK 未安全删除,重启往往会失败。因此 codis-admin 提供了强制删除工具:
- 确认 codis-dashboard 进程已经退出(很重要);
- 运行 codis-admin 删除 LOCK:
$ ./bin/codis-admin --remove-lock --product=codis-demo --zookeeper=127.0.0.1:2181
- codis-proxy 异常退出的修复
通常 codis-proxy 都是通过 codis-dashboard 进行移除,移除过程中 codis-dashboard 为了安全会向 codis-proxy 发送 offline 指令,成功后才会将 proxy 信息从外部存储中移除。如果 codis-proxy 异常退出,该操作会失败。此时可以使用 codis-admin 工具进行移除:
- 确认 codis-proxy 进程已经退出(很重要);
- 运行 codis-admin 删除 proxy:
$ ./bin/codis-admin --dashboard=127.0.0.1:18080 --remove-proxy --addr=127.0.0.1:11080 --force
选项 --force 表示,无论 offline 操作是否成功,都从外部存储中将该节点删除。所以操作前,一定要确认该 codis-proxy 进程已经退出。
Codis3.2 安装部署的更多相关文章
- Oracle安装部署,版本升级,应用补丁快速参考
一.Oracle安装部署 1.1 单机环境 1.2 Oracle RAC环境 1.3 Oracle DataGuard环境 1.4 主机双机 1.5 客户端部署 二.Oracle版本升级 2.1 单机 ...
- KVM安装部署
KVM安装部署 公司开始部署KVM,KVM的全称是kernel base virtual machine,对KVM虚拟化技术研究了一段时间, KVM是基于硬件的完全虚拟化,跟vmware.xen.hy ...
- Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考
操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...
- 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署
少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...
- C# winform安装部署(转载)
c# winform 程序打包部署 核心总结: 1.建议在完成的要打包的项目外,另建解决方案建立安装部署项目(而不是在同一个解决方案内新建),在解决方案上右击-〉添加-〉现有项目-〉选择你要打包的项目 ...
- Ubuntu14.04 Django Mysql安装部署全过程
Ubuntu14.04 Django Mysql安装部署全过程 一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...
- 比Ansible更吊的自动化运维工具,自动化统一安装部署_自动化部署udeploy 1.0
新增功能: 2015-03-11 除pass(备份与更新)与start(启动服务)外,实现一切自动化. 注:pass与start设为业务类,由于各类业务不同,所以无法实现自动化.同类业务除外,如更新的 ...
- 比Ansible更吊的自动化运维工具,自动化统一安装部署自动化部署udeploy 1.0 版本发布
新增功能: 逻辑与业务分离,完美实现逻辑与业务分离,业务实现统一shell脚本开发,由框架统一调用. 并发多线程部署,不管多少台服务器,多少个服务,同时发起线程进行更新.部署.启动. 提高list规则 ...
- SCCM 2012 R2安装部署过程和问题(三)
上篇 SCCM 2012 R2安装部署过程和问题(二) 个人认为对于使用SCCM 2012的最重要的经验是耐心. SCCM采用分布式部署的架构,不同的站点角色可以部署在不同的服务器上,站点角色之间的通 ...
随机推荐
- c语言-汉诺塔递归调用
#include<stdio.h> int main() { void hano_tower(int n,char one,char two,char three); int m=0; p ...
- CSS 两个行内块元素,宽度相加刚好等于父盒子容器的元素,但第二个元素掉在第二行解决办法
我们可以发现:两个行内块元素,宽度相加刚好等于父盒子容器的元素,但第二个元素掉在第二行,这是什么问题呢? 我们先来看一下效果: <!DOCTYPE html> <html lang= ...
- WINDOWS SERVER 2012标准版密钥
Windows Server 2012 R2 安装密钥(只适用安装,不支持激活) 标准版 = NB4WH-BBBYV-3MPPC-9RCMV-46XCB MMPXK-NBJDQ-JPM34-WX3FM ...
- SPOJ - COT 路径构造主席树
题意:给出一个带权树,多次询问路径\((u,v)\)的第k小权值 这是主席树往区间扩展到树上的套路题 由于是按路径查询,我们无法使用dfs序,但可利用主席树对父亲扩展的方法构造出链 因此要用dfs构造 ...
- WebFrom页面绑定数据过于冗长的处理方法
嘛 这个是当时写完东西之后 功能没什么问题 但是由于页面绑定的数据太长 破坏了整体的样式(对于本人来说 样式就是浮云....) 所以测试就跟我说必须弄好看点 于是乎 我就找到了下面这种方法 因为我这 ...
- Flutter Navigator operation requested with a context that does not include a Navigat
如下直接在 MaterialApp 中使用 Navigator 是会报 Navigator operation requested with a context that does not inclu ...
- Comparación para 2019 Nueva Lonsdor K518S y K518ISE
Comparación para 2019 Nueva Lonsdor K518S y Lonsdor K518ISE: Igual: Capacidades de Immo y cobertura ...
- CSAPP阅读笔记-存储器层次结构-第六章-P400-P462
6.1 存储技术 1.随机访问存储器(RAM),是易失性存储器,掉电存储信息会丢失,与之相对的是非易失性存储器(ROM),它掉电后存储信息不丢失,但前者访问速度较快,但容量有限,通常只有几百或几千兆字 ...
- golang mcall
// func mcall(fn func(*g)) // Switch to m->g0's stack, call fn(g). // Fn must never return. It sh ...
- c# 如何得到一个字符的ASCII码
'; int b = (int)a; 就这么简单..