Codis集羣搭建摘要

本文主要介紹Codis編譯過程當中的一些注意事項和Codis集羣的搭建。linux

#準備方案 ##Golang環境搭建 環境搭建很簡單,下載go1.4.2.linux-amd64.tar.gz安裝包,直接解壓並添加到環境變量就能夠。 假設解壓到/usr/local/go下,這個目錄就是GOROOT,另外須要定義一個go開發目錄,假設爲/workspace/golang。 go開發目錄將來會產生一些主要的子目錄: 1. src 存放源碼 2. pkg 編譯後生成的文件 3. bin 編譯後生產的可執行文件(好比godep命令在安裝後就會放在這個目錄下)git

環境變量添加:github

export GOROOT=/usr/local/go
export GOPATH=/workspace/golang
PATH=".:$PATH:$GOROOT/bin:$GOPATH/bin:$ZOOKEEPER/bin"

生效後就能夠執行go version查看go的版本信息。 將$GOPATH/bin加入PATH是爲了讓一些開源的或者本身安裝的go擴展命令(如godep)能夠全局使用。golang

##Codis下載和編譯redis

最新版的Codis位於[https://github.com/CodisLabs/codis] 經過下面命令得到源碼瀏覽器

go get -u -d github.com/CodisLabs/codis

進入源碼路徑,執行make開始編譯。服務器

Codis的編譯使用了godep,若是沒有安裝的話就會報godep command not found的錯誤。 godep是golang的一個包管理工具,經過session

go get github.com/tools/godep

安裝,成功後執行godep就會有對應的命令信息,若是沒有能夠在$GOPATH/bin目錄下查找這個命令,而後加入環境變量。工具

若是你是用golang 1.5 beta3以上的版本進行編譯,還有可能出現的一個問題是ui

GOPATH=godep path godep restore
Error: GO15VENDOREXPERIMENT is enabled and the vendor/ directory is not a valid Go workspace.
godep: Error restore requires GOPATH but it is empty.
make: *** [godep] Error 1

這是由於golang 1.5 beta3以後go添加了GO15VENDOREXPERIMENT這個特性,並在1.6默認開啓,你能夠參照Codis issue715 裏面的方案解決。 最簡單就是在編譯前

export GO15VENDOREXPERIMENT = 0

##編譯後的文件 編譯後會產生一個bin目錄,下面有三個可執行文件和一個目錄

assets          //dashboard的靜態文件目錄
codis-config    //codis 命令式配置管理組件
codis-proxy     //codis 代理也就是核心組件
codis-server    //codis 基於redis2.8.21的定製版redis

這就是咱們最終集羣部署的時候須要用到的文件,固然跨平臺的話主要要交叉編譯或者在特定平臺下編譯,否則可能沒法運行。

##集羣方案 這裏使用三臺機器作一個小的集羣。每臺機器部署一個zookeeper實例,兩個codis server實例(也就是redis server)。 其中兩臺機器部署codis proxy,另一臺開啓codis dashboard。


host ip zookeeper port redis server master/slave port codis proxy codis dashboard
slave1 192.168.4.124 2181 6379/6380 Y
slave2 192.168.4.126 2181 6379/6380 Y
slave3 192.168.4.128 2181 6379/6380 Y

#集羣搭建 ##zookeeper集羣 zookeeper的搭建這裏就不詳細介紹了,最終節點是

1. slave1:2181
2. slave2:2181
3. slave3:2181

先把zookeeper起起來 ##codis服務集羣

####建立codis服務目錄

[root@slave1]# mkdir -p /usr/local/codis/{log,redis_conf}
[root@slave1]# cp -rf bin /usr/local/codis/
[root@slave1]# cp config.ini /usr/local/codis/conf/
[root@slave1]# cp extern/redis-test/6379.conf /usr/local/codis/redis_conf/

對每臺機器執行以上操做

####根據註釋修改config.ini文件

##### 這些配置是爲dashboard和proxies服務的

# zookeeper or etcd
coordinator=zookeeper

# Use comma "," for multiple instances. If you use etcd, you should also use this property.
zk=slave1:2181,slave2:2181,slave3:2181

# 這個是標識zk下的命名空間,好比命名test在zookeeper會/zk/codis/db_test下
product=test

# dashboard的地址和監聽端口
dashboard_addr=192.168.4.126:18087

password=

##### 下面是proxies的配置

# 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

# If proxy don't send a heartbeat in timeout millisecond which is usually because proxy has high load or even no response, zk will mark this proxy offline.
# A higher timeout will recude the possibility of "session expired" but clients will not know the proxy has no response in time if the proxy is down indeed.
# So we highly recommend you not to change this default timeout and use Jodis(https://github.com/CodisLabs/jodis)
# which watches the available proxies and will skip the offline proxy or add new online proxy automatically.
# If you are not using Java in client, you can DIY a zk watcher accourding to Jodis source code.
zk_session_timeout=30000

##### 每一個代理的id,不能相同 好比slave1 命名爲proxy_1, slave2命名爲proxy_2
proxy_id=proxy_1

####啓動dashboard 在slave2上執行 bin/codis-config dashboard, 該命令會啓動 dashboard

####初始化slots 在任一機器上執行 bin/codis-config slot init,該命令會在zookeeper上建立slot相關信息

####啓動Codis Redis 和官方redis的參數一下,三臺機器上分別執行

[root@slave1]# /usr/local/codis/bin/codis-server /usr/local/codis/redis_conf/6379.conf &
[root@slave1]# /usr/local/codis/bin/codis-server /usr/local/codis/redis_conf/6380.conf &

####添加Redis Server Group 每個 Server Group 做爲一個 Redis 服務器組存在, 只容許有一個 master, 能夠有多個 slave, group id 僅支持大於等於1的整數

$ bin/codis-config server -h                                                                                                                                                                                                                   usage:
	codis-config server list
	codis-config server add <group_id> <redis_addr> <role>
	codis-config server remove <group_id> <redis_addr>
	codis-config server promote <group_id> <redis_addr>
	codis-config server add-group <group_id>
	codis-config server remove-group <group_id>

如: 添加三個 server group, 每一個 group 有兩個 redis 實例,group的id分別爲一、2和3, redis實例爲一主一從。

添加一個group,group的id爲1, 並添加一個redis master到該group

$ bin/codis-config server add 1 slave1:6379 master

添加一個redis slave到該group

$ bin/codis-config server add 1 slave1:6380 slave

相似的,再添加group,group的id爲2

$ bin/codis-config server add 2 slave2:6379 master
$ bin/codis-config server add 2 slave2:6380 slave

相似的,再添加group,group的id爲3

$ bin/codis-config server add 3 slave3:6379 master
$ bin/codis-config server add 3 slave3:6380 slave

####設置 server group 服務的 slot 範圍 Codis 採用 Pre-sharding 的技術來實現數據的分片, 默認分紅 1024 個 slots (0-1023), 對於每一個key來講, 經過如下公式肯定所屬的 Slot Id : SlotId = crc32(key) % 1024 每個 slot 都會有一個且必須有一個特定的 server group id 來表示這個 slot 的數據由哪一個 server group 來提供.

$ bin/codis-config slot -h                                                                                                                                                                                                                     
usage:
	codis-config slot init
	codis-config slot info <slot_id>
	codis-config slot set <slot_id> <group_id> <status>
	codis-config slot range-set <slot_from> <slot_to> <group_id> <status>
	codis-config slot migrate <slot_from> <slot_to> <group_id> [--delay=<delay_time_in_ms>]

如:

設置編號爲[0, 334]的 slot 由 server group 1 提供服務, 編號 [335, 669] 的 slot 由 server group 2 提供服務, 編號 [670, 1023] 的 slot 由 server group 3 提供服務,

$ bin/codis-config slot range-set 0 334 1 online
$ bin/codis-config slot range-set 335 669 2 online
$ bin/codis-config slot range-set 670 1023 3 online

####啓動 codis-proxy

bin/codis-proxy -c config.ini -L ./log/proxy.log  --cpu=8 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000

剛啓動的 codis-proxy 默認是處於 offline狀態的, 而後設置 proxy 爲 online 狀態, 只有處於 online 狀態的 proxy 纔會對外提供服務

bin/codis-config -c config.ini proxy online <proxy_name>  <---- proxy的id, 如 proxy_1

####瀏覽器管理 訪問http://192.168.4.126:18087/admin , 如今能夠在瀏覽器裏面完成各類操做了。

相關文章
相關標籤/搜索