1. 程式人生 > >codis叢集部署實戰

codis叢集部署實戰

這篇文章寫成shit了,建議不要往下看了

一、codis簡介

Codis 是一個分散式 Redis 解決方案, 對於上層的應用來說, 連線到 Codis Proxy 和連線原生的 Redis Server 沒有顯著區別 (不支援的命令列表), 上層應用可以像使用單機的 Redis 一樣使用, Codis 底層會處理請求的轉發, 不停機的資料遷移等工作, 所有後邊的一切事情, 對於前面的客戶端來說是透明的, 可以簡單的認為後邊連線的是一個記憶體無限大的 Redis 服務。

二、安裝redis

下載地址:www.redis.cn

[root@server8 ~]# tar -zxf redis-4.0.1.tar.gz
[root@server8 ~]# cd redis-4.0.1 [root@server8 redis-4.0.1]# make [root@server8 redis-4.0.1]# make install [root@server8 redis-4.0.1]# cd utils/ [root@server8 utils]# ./install_server.sh [root@server8 utils]# cd /etc/redis [root@server8 redis]# ls 6379.conf [root@server8 utils]# vim /etc/redis/6379.conf bind 0
.0.0.0 [root@server8 redis]# /etc/init.d/redis_6379 restart

三、下載與編譯

1.安裝 Go 執行環境

下載地址 :https://www.golangtc.com/download
根據你的作業系統選擇響應的版合適版本,我選擇的是go1.7rc5.linux-amd64.tar.gz 即1.7.5的

  • 解壓
[root@server8 ~]# tar -C /usr/local -xzf go1.7rc5.linux-amd64.tar.gz
  • 將 /usr/local/go/bin 目錄新增至PATH環境變數
[[email protected]
~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [[email protected] ~]# export PATH=$PATH:/usr/local/go/bin [[email protected] ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/go/bin
  • 通過命令列將 /usr/local/go/bin 目錄新增至GOPATH環境變數(重啟後失效,不推薦)
[root@server8 ~]# echo $GOPATH

[root@server8 ~]# export GOPATH=/usr/local/go/bin
[root@server8 ~]# echo $GOPATH
/usr/local/go/bin
  • 修改/etc/profile 新增環境變數,推薦
[root@server8 ~]# vim /etc/profile
export GOROOT=/usr/local/go
export GOPATH=/usr/local/codis
export PATH=$PATH:/usr/local/go/bin

[root@server8 ~]# source /etc/profile
  • 安裝完成後可以執行下列命令進行檢測:
[root@server8 ~]# go version
go version go1.7rc5 linux/amd64
[root@server8 ~]# go env GOPATH
/usr/local/codis
[root@server8 ~]# go env GOROOT
/usr/local/go

說明Go 執行環境安裝成功

3.下載 Codis 原始碼

[root@server8 ~]# yum install -y git autoconf
[root@server8 ~]# mkdir -p $GOPATH/src/github.com/CodisLabs

[root@server8 ~]# cd $GOPATH/src/github.com/CodisLabs

[root@server8 CodisLabs]# git clone https://github.com/CodisLabs/codis.git -b release3.1
##或者
[root@server8 ~]# wget https://codeload.github.com/CodisLabs/codis/zip/release3.2
[root@server8 ~]# mkdir -p $GOPATH/src/Codis
[root@server8 ~]# unzip codis-release3.2.zip -d /usr/local/codis/src/Codis
[root@server8 ~]# cd $GOPATH/Codis/codis-release3.2
[root@server8 codis-release3.2]# ls
admin    cmd     deploy  Dockerfile  extern  kubernetes  MIT-LICENSE.txt  README.md  vendor   wandoujia_license.txt
ansible  config  doc     example     Godeps  Makefile    pkg              scripts    version
[root@server8 codis-release3.2]# pwd
/usr/local/codis/src/Codis/codis-release3.2

值得注意的是: 通過這兩種方法下載的原始碼位置不一樣,根據具體情況來,這裡我是通過第一種方法下載的,所以我的編譯時進入的路徑是 $GOPATH/src/github.com/CodisLabs/codismake 如果你用的是第一種方法,那麼你需要進入的相應的路徑是 /usr/local/codis/src/Codis/codis-release3.2

4.編譯 Codis 原始碼

  • 直接通過 make 進行編譯
[root@server8 ~]# cd $GOPATH/src/github.com/CodisLabs/codis
[root@server8 codis]# make


JEMALLOC_PRIVATE_NAMESPACE
                   : je_
install_suffix     : 
malloc_conf        : 
autogen            : 1
cc-silence         : 1
debug              : 0
code-coverage      : 0
stats              : 1
prof               : 0
prof-libunwind     : 0
prof-libgcc        : 0
prof-gcc           : 0
tcache             : 1
fill               : 1
utrace             : 0
valgrind           : 0
xmalloc            : 0
munmap             : 0
lazy_lock          : 0
tls                : 1
cache-oblivious    : 1
===============================================================================
go build -i -o bin/codis-dashboard ./cmd/dashboard
go build -i -o bin/codis-proxy ./cmd/proxy
go build -i -o bin/codis-admin ./cmd/admin
go build -i -o bin/codis-ha ./cmd/ha
go build -i -o bin/codis-fe ./cmd/fe

[root@server8 codis]# cat bin/version  ##檢視安裝以後的版本
version = 2017-03-08 14:07:13 +0800 @b1919d11593dfd1f47a2461837233dfc8fc78002 @3.1.5-26-gb1919d1
compile = 2017-10-19 00:38:53 +0800 by go version go1.5.4 linux/amd64

編譯成功
這裡寫圖片描述
複製檔案,方便管理

[root@server8 codis]# mkdir -p /opt/local/codis/{bin,logs,data}/
[root@server8 codis]# cp -rf $GOPATH/src/github.com/CodisLabs/codis/bin/* /opt/local/codis/bin
[root@server8 codis]# cp -rf $GOPATH/src/github.com/CodisLabs/codis/config /opt/local/codis/

四、配置 Codis

[root@server8 codis]# cd /opt/local/codis/config/
[root@server8 config]# vim dashboard.toml
##################################################
#                                                #
#                  Codis-Dashboard               #
#                                                #
##################################################

# Set Coordinator, only accept "zookeeper" & "etcd" & "filesystem".
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"

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

這裡寫圖片描述

啟動 Dashboard

[[email protected] config]# nohup /opt/local/codis/bin/codis-dashboard --ncpu=4 --config=/opt/local/codis/config/dashboard.toml     --log=/opt/local/codis/logs/dashboard.log --log-level=WARN &

五、Codis Proxy

[[email protected] config]# vim /opt/local/codis/config/proxy.toml 

# Set jodis address & session timeout, only accept "zookeeper" & "etcd".
jodis_name = "zookeeper"
jodis_addr = "127.0.0.1:2181"
jodis_timeout = "20s"
jodis_compatible = false

啟動 codis-proxy

[[email protected] config]# nohup /opt/local/codis/bin/codis-proxy --ncpu=4 --config=/opt/local/codis/config/proxy.toml     --log=/opt/local/codis/logs/proxy.log --log-level=WARN &

檢視日至

[[email protected] ~]# cat /opt/local/codis/logs/proxy.log.2017-10-19

2017/10/19 01:04:46 main.go:206: [WARN] [0xc82023a6c0] proxy waiting online ...
2017/10/19 01:04:47 main.go:206: [WARN] [0xc82023a6c0] proxy waiting online ...

必須新增到叢集中,才正常