From 33aae91ac1f7b15b958be3a250166b152f3919c6 Mon Sep 17 00:00:00 2001 From: "chuncheng.fan" Date: Fri, 7 Apr 2017 10:47:53 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=A0=E9=99=A4codis-ha=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/tutorial_zh.md | 56 +++++----------------------------------------- 1 file changed, 5 insertions(+), 51 deletions(-) diff --git a/doc/tutorial_zh.md b/doc/tutorial_zh.md index e8709366d..7d6a12d24 100644 --- a/doc/tutorial_zh.md +++ b/doc/tutorial_zh.md @@ -25,11 +25,6 @@ Codis 3.x 由以下组件组成: + 多个集群实例共享可以共享同一个前端展示页面; + 通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。 -* **Codis HA**:为集群提供高可用。 - - + 依赖 codis-dashboard 实例,自动抓取集群各个组件的状态; - + 会根据当前集群状态自动生成主从切换策略,并在需要时通过 codis-dashboard 完成主从切换。 - * **Storage**:为集群状态提供外部存储。 + 提供 Namespace 概念,不同集群的会按照不同 product name 进行组织; @@ -87,7 +82,6 @@ drwxr-xr-x 4 codis codis 4096 Jan 4 14:55 assets -rwxr-xr-x 1 codis codis 17600752 Jan 4 14:55 codis-admin -rwxr-xr-x 1 codis codis 18416320 Jan 4 14:55 codis-dashboard -rwxr-xr-x 1 codis codis 9498040 Jan 4 14:55 codis-fe --rwxr-xr-x 1 codis codis 9956328 Jan 4 14:55 codis-ha -rwxr-xr-x 1 codis codis 11057280 Jan 4 14:55 codis-proxy -rwxr-xr-x 1 codis codis 4234432 Jan 4 14:55 codis-server -rw-r--r-- 1 codis codis 148 Jan 4 14:55 version @@ -375,53 +369,11 @@ $ ./bin/codis-admin --dashboard-list --zookeeper=127.0.0.1:2181 | tee codis.json ] ``` -#### 2.5 Codis HA(可选组件) - -##### 2.5.1 启动命令: - -```bash -$ nohup ./bin/codis-ha --log=ha.log --log-level=WARN --dashboard=127.0.0.1:18080 & -``` - -##### 2.5.2 详细说明: - -```bash -$ ./bin/codis-ha -h -Usage: - codis-ha [--log=FILE] [--log-level=LEVEL] --dashboard=ADDR - codis-ha --version - -Options: - -l FILE, --log=FILE 设置 log 输出文件 - --log-level=LEVEL 设置 log 输出等级:INFO,WARN,DEBUG,ERROR;默认INFO,推荐WARN -``` -##### 2.5.3 工作原理: - -**注意:Codis HA 工具仅仅是 Codis 集群 HA 的一部分,单独工作能力有限。** - -**注意:Codis 同时支持 sentinel 作为 HA,codis-ha 已经不推荐使用了。** - -+ 默认以 5s 为周期,codis-ha 会从 codis-dashboard 中拉取集群状态,并进行主从切换; - -+ codis-ha 在以下状态下会退出: - 1. 从 codis-dashboard 获取集群状态失败时; - 2. 向 codis-dashboard 发送主从切换指令失败时; - -+ codis-ha 在以下状态下不会进行主从切换: - 1. 存在 proxy 状态异常: - + 因为提升主从需要得到所有 proxy 的确认,因此必须确保操作时所有 proxy 都能正常响应操作指令; - 2. 网络原因造成的 master 异常: - + 若存在 slave 满足 `slave.master_link_status == up`,通常可以认为 master 并没有真的退出,而是由于网络原因或者响应延迟造成的 master 状态获取失败,此时 codis-ha 不会对该 group 进行操作; - 3. 没有满足条件的 slave 时: - + 提升过程会选择满足 `slave.master_link_status == down`,并且 `slave.master_link_down_since_seconds` 最小的进行操作。这就要求被选择的 slave 至少在过去一段时间内与 master 是成功同步状态,这个时间间隔是 `2d+5`,其中 `d` 是 codis-ha 检查周期默认 `5`秒。 - -**注意:因此,应用 codis-ha 时还需要结合对 codis-proxy 和 codis-server 的可用性监控,否则 codis-ha 无法保证可靠性。** - -#### 2.6 Codis Admin(命令行工具) +#### 2.5 Codis Admin(命令行工具) **注意:使用 codis-admin 是十分危险的。** -##### 2.6.1 codis-dashboard 异常退出的修复 +##### 2.5.1 codis-dashboard 异常退出的修复 当 codis-dashboard 启动时,会在外部存储上存放一条数据,用于存储 dashboard 信息,同时作为 LOCK 存在。当 codis-dashboard 安全退出时,会主动删除该数据。当 codis-dashboard 异常退出时,由于之前 LOCK 未安全删除,重启往往会失败。因此 codis-admin 提供了强制删除工具: @@ -432,7 +384,7 @@ Options: $ ./bin/codis-admin --remove-lock --product=codis-demo --zookeeper=127.0.0.1:2181 ``` -##### 2.6.2 codis-proxy 异常退出的修复 +##### 2.5.2 codis-proxy 异常退出的修复 通常 codis-proxy 都是通过 codis-dashboard 进行移除,移除过程中 codis-dashboard 为了安全会向 codis-proxy 发送 `offline` 指令,成功后才会将 proxy 信息从外部存储中移除。如果 codis-proxy 异常退出,该操作会失败。此时可以使用 codis-admin 工具进行移除: @@ -529,3 +481,5 @@ Codis 3.x 的组件兼容 Jodis 协议。 因为 Codis 2.x 与 Codis 3.x 在外部存储中的组织结构不同,所以可以安全的 `kill` 掉全部 Codis 2.x 组件。 **注意:关闭过程请不要使用 `kill -9`,因为旧组件在退出时会自动清理部分注册信息。** + + From 60ee3c39fb968ff1a145e3c19ff076c05b92c38b Mon Sep 17 00:00:00 2001 From: "chuncheng.fan" Date: Fri, 7 Apr 2017 11:13:14 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9Ezookeeper=E9=9B=86?= =?UTF-8?q?=E7=BE=A4=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/tutorial_zh.md | 127 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 122 insertions(+), 5 deletions(-) diff --git a/doc/tutorial_zh.md b/doc/tutorial_zh.md index 7d6a12d24..33f80dfd0 100644 --- a/doc/tutorial_zh.md +++ b/doc/tutorial_zh.md @@ -31,8 +31,12 @@ Codis 3.x 由以下组件组成: + 目前仅提供了 Zookeeper 和 Etcd 两种实现,但是提供了抽象的 interface 可自行扩展。 ## 0. 下载与编译 +### 1.所需依赖包安装 +``` +yum install -y gcc make gcc-c++ automake lrzsz openssl-devel zlib-* bzip2-* readline* zlib-* bzip2-* git nmap unzip wget lsof xz net-tools mercurial vim +``` -#### 1. 安装 Go 运行环境 [参考这里](https://golang.org/doc/install) +#### 2. 安装 Go 运行环境 [参考这里](https://golang.org/doc/install) 安装完成后可以运行下列命令进行检测: @@ -41,7 +45,119 @@ $ go version go version go1.5.2 linux/amd64 ``` -#### 2. 设置编译环境 +### 3. zookeeper环境配置 +##### JDK配置 + +``` +cd /usr/loca/src/ +tar -C /usr/local/ -xzf /usr/local/src/jdk-8u111-linux-x64.tar.gz +``` + +##### 刷新环境变量 + +``` +vim /etc/profile +``` + +##### 添加如下信息 + +``` +export JAVA_HOME=/usr/local/jdk1.8.0_111 +export PATH=$JAVA_HOME/bin:$PATH +export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar +``` + +##### 刷新配置文件: + +``` +source /etc/profile +``` + +##### 安装zookeeper +``` +cd /usr/local/src/ +tar -C /usr/local/ -xzf zookeeper-3.4.8.tar.gz +cd /usr/local/zookeeper-3.4.8 +ln -s zookeeper-3.4.8 zookeeper +``` + +##### 生成配置文件 + +``` +cd /usr/local/zookeeper +cp conf/zoo_sample.cfg conf/zoo.cfg +``` + +##### 修改zookeeper配置文件 + +``` +vim /usr/local/zookeeper/conf/zoo.cfg +``` + +##### 修改以下内容 + +``` +maxClientCnxns=60 +tickTime=2000 +initLimit=10 +syncLimit=5 +dataDir=/usr/local/zookeeper/data +dataLogDir=/data/logs/zookeeper +clientPort=2181 +server.1=IP:2888:3888 +server.2=IP:2888:3888 +server.3=IP:2888:3888 +``` +>以上IP地址、路径、参数可根据实际情况修改 +>2888表示zookeeper程序监听端口,3888表示zookeeper选举通信端口 + + +##### 创建zookeeper所需文件夹 + +``` +mkdir -p /usr/local/zookeeper/data +mkdir -p /data/logs/zookeeper +``` + +##### 生成myid + +server.1 + +``` +echo "1" >/usr/local/zookeeper/data/myid ##生成ID,这里需要注意, myid对应的zoo.cfg的server.ID,比如第二台zookeeper主机对应的myid应该是2 +``` + +server.2 + +``` +echo "2" >/usr/local/zookeeper/data/myid +``` + +server.3 + +``` +echo "3" >/usr/local/zookeeper/data/myid +``` + +##### 启动zookeeper + +``` +cd /usr/local/zookeeper/bin +./zkServer.sh start +``` + +##### 查看zk状态 +``` +cd /usr/local/zookeeper/bin +./zkServer.sh status +``` + +##### 查看zk相关信息: +``` +/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181 +``` + +#### 3. 设置Codis编译环境 **注意 `$GOPATH` 是本机所有第三方库 go 项目所在目录,Codis 仅是其中之一。** @@ -52,16 +168,16 @@ $ go env GOPATH /home/codis/gopath ``` -#### 3. 下载 Codis 源代码 +#### 4. 下载 Codis 源代码 Codis 源代码需要下载到 `$GOPATH/src/github.com/CodisLabs/codis`: ```bash $ mkdir -p $GOPATH/src/github.com/CodisLabs -$ cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.1 +$ cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2 ``` -#### 4. 编译 Codis 源代码 +#### 5. 编译 Codis 源代码 * 直接通过 make 进行编译,会看到如下输出: @@ -92,6 +208,7 @@ version = 2016-01-03 14:53:22 +0800 @51f06ae3b58a256a58f857f590430977638846a3 compile = 2016-01-04 15:00:17 +0800 by go version go1.5.2 linux/amd64 ``` + ## 1. 快速启动 源码中提供了可供本地测试使用的脚本 `example/setup.py`,该脚本会生成一个本地集群。 From f94b9b03087f826f4a35eb4a496f6b66c445790d Mon Sep 17 00:00:00 2001 From: "chuncheng.fan" Date: Fri, 7 Apr 2017 11:35:58 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9zk=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/tutorial_zh.md | 116 +++------------------------------------------ 1 file changed, 6 insertions(+), 110 deletions(-) diff --git a/doc/tutorial_zh.md b/doc/tutorial_zh.md index 33f80dfd0..6bf1c764d 100644 --- a/doc/tutorial_zh.md +++ b/doc/tutorial_zh.md @@ -45,119 +45,15 @@ $ go version go version go1.5.2 linux/amd64 ``` -### 3. zookeeper环境配置 -##### JDK配置 +### 3. zookeeper环境配置 [参考这里](https://zookeeper.apache.org/doc/r3.1.2/zookeeperStarted.html) +安装完成后运行以下命令查看zookeeper状态是否正常: ``` -cd /usr/loca/src/ -tar -C /usr/local/ -xzf /usr/local/src/jdk-8u111-linux-x64.tar.gz -``` - -##### 刷新环境变量 - -``` -vim /etc/profile -``` - -##### 添加如下信息 - -``` -export JAVA_HOME=/usr/local/jdk1.8.0_111 -export PATH=$JAVA_HOME/bin:$PATH -export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar -``` - -##### 刷新配置文件: - -``` -source /etc/profile -``` - -##### 安装zookeeper -``` -cd /usr/local/src/ -tar -C /usr/local/ -xzf zookeeper-3.4.8.tar.gz -cd /usr/local/zookeeper-3.4.8 -ln -s zookeeper-3.4.8 zookeeper -``` - -##### 生成配置文件 - -``` -cd /usr/local/zookeeper -cp conf/zoo_sample.cfg conf/zoo.cfg -``` - -##### 修改zookeeper配置文件 - -``` -vim /usr/local/zookeeper/conf/zoo.cfg -``` - -##### 修改以下内容 - -``` -maxClientCnxns=60 -tickTime=2000 -initLimit=10 -syncLimit=5 -dataDir=/usr/local/zookeeper/data -dataLogDir=/data/logs/zookeeper -clientPort=2181 -server.1=IP:2888:3888 -server.2=IP:2888:3888 -server.3=IP:2888:3888 -``` ->以上IP地址、路径、参数可根据实际情况修改 ->2888表示zookeeper程序监听端口,3888表示zookeeper选举通信端口 - - -##### 创建zookeeper所需文件夹 - -``` -mkdir -p /usr/local/zookeeper/data -mkdir -p /data/logs/zookeeper -``` - -##### 生成myid - -server.1 - -``` -echo "1" >/usr/local/zookeeper/data/myid ##生成ID,这里需要注意, myid对应的zoo.cfg的server.ID,比如第二台zookeeper主机对应的myid应该是2 -``` - -server.2 - -``` -echo "2" >/usr/local/zookeeper/data/myid -``` - -server.3 - -``` -echo "3" >/usr/local/zookeeper/data/myid -``` - -##### 启动zookeeper - -``` -cd /usr/local/zookeeper/bin -./zkServer.sh start -``` - -##### 查看zk状态 -``` -cd /usr/local/zookeeper/bin +cd $zkPATH/bin ./zkServer.sh status ``` -##### 查看zk相关信息: -``` -/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181 -``` - -#### 3. 设置Codis编译环境 +#### 4. 设置Codis编译环境 **注意 `$GOPATH` 是本机所有第三方库 go 项目所在目录,Codis 仅是其中之一。** @@ -168,7 +64,7 @@ $ go env GOPATH /home/codis/gopath ``` -#### 4. 下载 Codis 源代码 +#### 5. 下载 Codis 源代码 Codis 源代码需要下载到 `$GOPATH/src/github.com/CodisLabs/codis`: @@ -177,7 +73,7 @@ $ mkdir -p $GOPATH/src/github.com/CodisLabs $ cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2 ``` -#### 5. 编译 Codis 源代码 +#### 6. 编译 Codis 源代码 * 直接通过 make 进行编译,会看到如下输出: