A017 Linux下codis3.2集羣部署的安裝、配置、測試(redhat 6.3)

codis3.2集羣部署

(Red Hat 6.3)

 

軟件包下載:

鏈接: https://pan.baidu.com/s/1X_wtM04yNMJfnEtV1EcBfg 密碼: 9nkj

 

一、部署環境規劃

 

IP服務列表:

192.168.209.131 jdk、zk1、go、proxy、server、dashboard、fe

192.168.209.132 jdk、zk2、go、proxy、server

192.168.209.133 jdk、zk3、go、proxy、server

 

zookeeper集羣:

192.168.209.131

192.168.209.132

192.168.209.133

 

codis-dashboard:

192.168.209.131:18080

 

codis-config:

192.168.209.131:8888

 

codis-proxy:

192.168.209.131:19000  (11080)

192.168.209.132:19000  (11080)

192.168.209.133:19000  (11080)

 

codis-server:

192.168.209.131:6379(主)、192.168.209.132:6380(從)

192.168.209.132:6379(主)、192.168.209.133:6380(從)

192.168.209.133:6379(主)、192.168.209.131:6380(從)

 

軟件版本:

jdk-8u191-linux-x64.tar.gz

zookeeper-3.4.13.tar.gz

go1.9.1.linux-amd64.tar.gz

codis-release3.2.zip

 

二、安裝Jdk1.8

 

JDK安裝目錄/usr/local/jdk1.8.0_191:

tar -zxf jdk-8u191-linux-x64.tar.gz -C /usr/local/

 

vim /etc/profile

最後面添加以下幾行:

#set java enviroment

JAVA_HOME=/usr/local/jdk1.8.0_191

JRE_HOME=/usr/local/jdk1.8.0_191/jre

CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export JAVA_HOME JRE_HOME CLASS_PATH PATH

 

重新加載

source /etc/profile

 

測試檢查是否安裝完成

java -version

 

三、安裝zookeeper

 

ZK安裝目錄/usr/local/zookeeper:

tar -zxf zookeeper-3.4.13.tar.gz -C /usr/local/

mv /usr/local/zookeeper-3.4.13 /usr/local/zookeeper

zookeeper目錄下新建data與logs文件夾

mkdir /usr/local/zookeeper/data

mkdir /usr/local/zookeeper/logs

 

新建配置文件/usr/local/zookeeper/conf/zoo.cfg內容如下

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/usr/local/zookeeper/data

dataLogDir=/usr/local/zookeeper/log

clientPort=2181

maxClientCnxns=300

server.1=192.168.209.131:2888:3888

server.2=192.168.209.132:2888:3888

server.3=192.168.209.133:2888:3888

 

參數說明:

注意防火牆,要保證3臺主機之間的端口是可以互通的。

tickTime:這個時間是作爲 Zookeeper 主機之間或客戶端與主機之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。

dataDir:顧名思義就是 Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏。

clientPort:這個端口就是客戶端連接 Zookeeper 主機的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。

initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶連接 Zookeeper 主機的客戶端,而是 Zookeeper 主機集羣中連接到 Leader 的 Follower 主機)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是 tickTime)長度後 Zookeeper 主機還沒有收到客戶端的返回信息,那麼表明這個客戶端連接失敗。總的時間長度就是 10*6000=60 秒

syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*6000=30 秒

server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號主機;B 是這個主機的 ip 地址;C 表示的是這個主機與集羣中的 Leader 主機交換信息的端口;D 表示的是萬一集羣中的 Leader 主機掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時主機相互通信的端口。如果是僞集羣的配置方式,由於 B 都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。

 

設置集羣ID

#192.168.209.131主機

echo '1' > /usr/local/zookeeper/data/myid

#192.168.209.132主機

echo '2' > /usr/local/zookeeper/data/myid

#192.168.209.133主機

echo '3' > /usr/local/zookeeper/data/myid

myid對應的zoo.cfg的server.ID.比如zookeeper-node2對應的myid應該是2,不按規定設置,zookeeper集羣將無法啓動

 

#啓動

/usr/local/zookeeper/bin/zkServer.sh start

#停止

/usr/local/zookeeper/bin/zkServer.sh stop

#重啓

/usr/local/zookeeper/bin/zkServer.sh restart

#查看 (主:leader,備:follower)

/usr/local/zookeeper/bin/zkServer.sh status

#查看進程

ps -ef | grep zookeeper

#查看端口是否啓動

ss -tlnp | grep 2181

 

四、安裝go環境

 

go安裝目錄/usr/local/go:

tar -zxf go1.9.1.linux-amd64.tar.gz -C /usr/local/

 

在/etc/profile文件末尾加上以下代碼

#set go enviroment

export GOPATH=/usr/local/codis

export GOROOT=/usr/local/go

export PATH=$PATH:/usr/local/go/bin

 

重新加載/etc/profile

source /etc/profile

 

檢測是否安裝成功

go version

 

五、安裝codis3.2

 

1、安裝依賴

yum install autoconf automake libtool -y

yum install -y gcc glibc gcc-c++ make git

 

2、設置編譯環境

下載並編譯codis(codis-config、codis-proxy、codis-serve)

codis編譯目錄必須爲$GOPATH/src/github.com/CodisLabs,否則編譯時報找不到目錄,

將codis-release3.2.zip解壓到此目錄後改名爲codis:

unzip codis-release3.2.zip

mkdir -p $GOPATH/src/github.com/CodisLabs

mv codis-release3.2 $GOPATH/src/github.com/CodisLabs/codis

 

3、編譯Codis源碼

cd $GOPATH/src/github.com/CodisLabs/codis

make

當看到如下內容,編譯成功。

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 -tags "cgo_jemalloc" -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

 

執行測試:

make gotest

 

執行全部指令後,會在bin文件夾內生成codis-proxy、codis-server等可執行文件。

另外bin/assets文件夾是dashboard的http服務需要的前端資源

 

4、配置集羣

Codis源碼編譯完成後

組件的啓動腳本目錄:$GOPATH/src/github.com/CodisLabs/codis/admin

配置文件目錄:     $GOPATH/src/github.com/CodisLabs/codis/config

日誌目錄:         $GOPATH/src/github.com/CodisLabs/codis/log

 

#複製文件,更改codis目錄,方便管理

mkdir -p /usr/local/codis/{bin,logs,data}/

cp -rf $GOPATH/src/github.com/CodisLabs/codis/bin/*   /usr/local/codis/bin

cp -rf $GOPATH/src/github.com/CodisLabs/codis/config  /usr/local/codis/

 

1Codis Dashboard (192.168.209.131主機)

dashboard是儀表盤,可以把其他服務綁定到監控儀表盤來進行服務管理及監控。

編輯配置文件/usr/local/codis/config/dashboard.toml

coordinator_name = "zookeeper"

coordinator_addr = "192.168.209.131:2181,192.168.209.132:2181,192.168.209.133:2181"

product_name = "codis-proxy1"

product_auth = "china2008"

admin_addr = "192.168.209.131:18080"

 

啓動dashboard

nohup /usr/local/codis/bin/codis-dashboard --ncpu=4 --config=/usr/local/codis/config/dashboard.toml --log=/usr/local/codis/logs/dashboard.log --log-level=WARN &

停止dashboard

必須使用命令來停止dashboard,不然會報錯。原因是已經在zk中註冊了,但是沒有正常關閉的話,zk中的信息就不能刪除,再次啓動會報錯。

/usr/local/codis/bin/codis-admin --dashboard=192.168.209.131:18080 --shutdown

 

2Codis Proxy

proxy是對外提供redis服務的入口。

編輯配置文件/usr/local/codis/config/proxy.toml

#主機192.168.209.131

product_name = "codis-proxy1"

product_auth = "china2008"

session_auth = "china2008"

admin_addr = "192.168.209.131:11080"

proto_type = "tcp4"

proxy_addr = "192.168.209.131:19000"

jodis_name = "zookeeper"

jodis_addr = "192.168.209.131:2181,192.168.209.132:2181,192.168.209.133:2181"

jodis_auth = ""

jodis_timeout = "20s"

jodis_compatible = true

 

#主機192.168.209.132

product_name = "codis-proxy1"

product_auth = "china2008"

session_auth = "china2008"

admin_addr = "192.168.209.132:11080"

proto_type = "tcp4"

proxy_addr = "192.168.209.132:19000"

jodis_name = "zookeeper"

jodis_addr = "192.168.209.131:2181,192.168.209.132:2181,192.168.209.133:2181"

jodis_auth = ""

jodis_timeout = "20s"

jodis_compatible = true

 

#主機192.168.209.133

product_name = "codis-proxy1"

product_auth = "china2008"

session_auth = "china2008"

admin_addr = "192.168.209.133:11080"

proto_type = "tcp4"

proxy_addr = "192.168.209.133:19000"

jodis_name = "zookeeper"

jodis_addr = "192.168.209.131:2181,192.168.209.132:2181,192.168.209.133:2181"

jodis_auth = ""

jodis_timeout = "20s"

jodis_compatible = true

 

啓動codis-proxy

nohup /usr/local/codis/bin/codis-proxy --ncpu=4 --config=/usr/local/codis/config/proxy.toml --log=/usr/local/codis/logs/proxy.log --log-level=WARN &

 

3Codis-admin

關聯proxy到dashboard

#主機192.168.209.131

/usr/local/codis/bin/codis-admin --dashboard=192.168.209.131:18080 --create-proxy -x 192.168.209.131:11080

 

4Codis-Server

即創建redis實例,每臺主機都創建2個redis實例

mkdir -p /usr/local/codis/redis/6379

mkdir -p /usr/local/codis/redis/6380

cp $GOPATH/src/github.com/CodisLabs/codis/config/redis.conf /usr/local/codis/redis/6379

cp $GOPATH/src/github.com/CodisLabs/codis/config/redis.conf /usr/local/codis/redis/6380

 

修改/usr/local/codis/redis/6379/redis.conf配置文件

(maxmemory一定要設置最大內存,否則後面的codis無法使用)

bind 192.168.209.131

pidfile "/usr/local/codis/redis/6379/redis.pid"

daemonize no

protected-mode yes

port 6379

dbfilename "dump_6379.rdb"

dir "/usr/local/codis/redis/6379/"

logfile "/usr/local/codis/redis/6379/redis.log"

requirepass "china2008"

maxmemory 1gb

 

修改/usr/local/codis/redis/6380/redis.conf配置文件

(maxmemory一定要設置最大內存,否則後面的codis無法使用)

bind 192.168.209.131

pidfile "/usr/local/codis/redis/6380/redis.pid"

daemonize no

protected-mode yes

port 6380

dbfilename "dump_6380.rdb"

dir "/usr/local/codis/redis/6380/"

logfile "/usr/local/codis/redis/6380/redis.log"

requirepass "china2008"

maxmemory 1gb

 

啓動codis-server

後面需要使用 Codis-fe或者Codis-admin 添加到集羣

nohup /usr/local/codis/bin/codis-server /usr/local/codis/redis/6379/redis.conf &

nohup /usr/local/codis/bin/codis-server /usr/local/codis/redis/6380/redis.conf &

 

5Codis-FE

# 啓動 codis-fe

nohup /usr/local/codis/bin/codis-fe --ncpu=4 --log=/usr/local/codis/logs/fe.log --log-level=WARN --zookeeper=192.168.209.131:2181 --listen=192.168.209.131:8888 &

通過網頁訪問:http://192.168.209.131:8888可以看到codis的管理頁面如下:

fe界面查看、添加proxy代理服務。

proxy啓動默認會自動註冊到dashboard中,也可以在fe中手動添加,

“Proxy Admin Address”選項中分別填寫如下內容,然後點擊“New Proxy”按鈕添加

192.168.209.131:11080

192.168.209.132:11080

192.168.209.133:11080

備註:主機的codis-proxy服務需要啓動,11080端口是互通的,才能添加成功,結果如下:

 

部署codis-server加入集羣

添加group

Group欄爲空,因爲我們啓動的codis-server並未加入到集羣,啓動所有主機codis-server服務,

“NEW GROUP”選項分別輸入輸入1,2,3,點擊NEW GROUP添加3個Group。

 

添加實例(按照部署規劃,添加redis服務)

“Data Center” 選項填 空

“Codis Server Address” 選項填192.168.209.131:6379

“Group”選項填1

“Data Center” 選項填 空

“Codis Server Address” 選項填192.168.209.132:6380

“Group”選項填1

 

“Data Center” 選項填 空

“Codis Server Address” 選項填192.168.209.132:6379

“Group”選項填2

“Data Center” 選項填 空

“Codis Server Address” 選項填192.168.209.133:6380

“Group”選項填2

 

“Data Center” 選項填 空

“Codis Server Address” 選項填192.168.209.133:6379

“Group”選項填3

“Data Center” 選項填 空

“Codis Server Address” 選項填192.168.209.131:6380

“Group”選項填3

 

配置結果如下,圖中按鈕誤亂操作,否則會導致服務切換,若要刪除Group,需要先刪除Group對應的slots

 

對slots進行分組

Migrate Range選項中,輸入所要分組的slots的起和止的範圍,然後輸入組ID,點擊後面按鈕即可。

也可以直接點擊按鈕“Rebalance All Slots”,讓系統自動分配slots。

 

六、通過codis-proxy連接redis進行測試

 

/usr/local/codis/bin/redis-cli -h 192.168.209.131 -p 19000

192.168.209.131:19000> auth china2008

OK

192.168.209.131:19000> info

# Server

redis_version:3.2.11

redis_git_sha1:00000000

redis_git_dirty:0

redis_build_id:9435915580a7413a

redis_mode:standalone

os:Linux 2.6.32-279.el6.x86_64 x86_64

arch_bits:64

multiplexing_api:epoll

gcc_version:4.4.7

process_id:20655

run_id:9f4c78b2bac2c4f32f4ee596875a582047ea0498

tcp_port:6379

uptime_in_seconds:3063

uptime_in_days:0

hz:10

lru_clock:8436544

executable:/usr/local/codis/bin/codis-server

config_file:/usr/local/codis/redis/6379/redis.conf

 

# Clients

connected_clients:97

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

 

# Memory

used_memory:5644480

used_memory_human:5.38M

used_memory_rss:14770176

used_memory_rss_human:14.09M

used_memory_peak:9451968

used_memory_peak_human:9.01M

total_system_memory:1028878336

total_system_memory_human:981.21M

used_memory_lua:37888

used_memory_lua_human:37.00K

maxmemory:1073741824

maxmemory_human:1.00G

maxmemory_policy:noeviction

mem_fragmentation_ratio:2.62

mem_allocator:jemalloc-4.0.3

 

# Persistence

loading:0

rdb_changes_since_last_save:0

rdb_bgsave_in_progress:0

rdb_last_save_time:1551938262

rdb_last_bgsave_status:ok

rdb_last_bgsave_time_sec:0

rdb_current_bgsave_time_sec:-1

aof_enabled:0

aof_rewrite_in_progress:0

aof_rewrite_scheduled:0

aof_last_rewrite_time_sec:-1

aof_current_rewrite_time_sec:-1

aof_last_bgrewrite_status:ok

aof_last_write_status:ok

 

# Stats

total_connections_received:109

total_commands_processed:12274

instantaneous_ops_per_sec:3

total_net_input_bytes:426408

total_net_output_bytes:5992109

instantaneous_input_kbps:0.11

instantaneous_output_kbps:2.81

rejected_connections:0

sync_full:1

sync_partial_ok:0

sync_partial_err:0

expired_keys:0

evicted_keys:0

keyspace_hits:0

keyspace_misses:0

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:13624

migrate_cached_sockets:0

 

# Replication

role:master

connected_slaves:1

slave0:ip=192.168.209.132,port=6380,state=online,offset=4295,lag=1

master_repl_offset:4295

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:4294

 

# CPU

used_cpu_sys:4.44

used_cpu_user:2.40

used_cpu_sys_children:0.09

used_cpu_user_children:0.00

 

# Cluster

cluster_enabled:0

 

# Keyspace

 

192.168.209.131:19000> set id 001

OK

192.168.209.131:19000> get id

"001"

192.168.209.131:19000> set name jack

OK

192.168.209.131:19000> get name

"jack"

 

web界面驗證key是否添加完成,可以看到已經添加到了group1和group2中:

連接zookeeper,檢查codis的group,slots,proxy等信息是否記錄在zook中

/usr/local/zookeeper/bin/zkCli.sh -server

 

多個客戶端壓力測試效果如下:

/usr/local/codis/bin/redis-benchmark -h 192.168.209.131 -p 19000 -a china2008 -q -n 1000000 -c 20 -d 100k

/usr/local/codis/bin/redis-benchmark -h 192.168.209.132 -p 19000 -a china2008 -q -n 1000000 -c 20 -d 100k

 

/usr/local/codis/bin/redis-benchmark -h 192.168.209.133 -p 19000 -a china2008 -q -n 1000000 -c 20 -d 100k

 

/usr/local/codis/bin/redis-benchmark -h 192.168.209.133 -p 19000 -a china2008 -t set -r 100000 -n 1000000

 

 

 

其他注意事項:

 

(1) 修復異常退出的 Codis-dashboard

dashboard 非正常退出,或者 kill -9 時使用

/usr/local/codis/bin/codis-admin --remove-lock --product=codis-proxy1 --zookeeper=192.168.209.131:2181

 

(2)修復異常退出的 Codis-proxy

proxy 非正常退出,或者 kill -9 時使用

/usr/local/codis/bin/codis-admin --dashboard=192.168.209.131:18080 --remove-proxy --addr=192.168.209.131:11080 –force

 

(3)redis密碼和codis密碼要設置相同,否則通過fe頁面添加集羣配置時會報密碼錯誤

 

(4)設置編譯環境,編譯目錄必須爲$GOPATH/src/github.com/CodisLabs否則報錯

go build -i -o bin/codis-dashboard ./cmd/dashboard

cmd/dashboard/main.go:19:2:cannot find package "github.com/CodisLabs/codis/pkg/models" in any of:

        /usr/local/go/src/github.com/CodisLabs/codis/pkg/models (from $GOROOT)

        /usr/local/codis/src/github.com/CodisLabs/codis/pkg/models (from $GOPATH)

cmd/dashboard/main.go:20:2:cannot find package "github.com/CodisLabs/codis/pkg/topom" in any of:

        /usr/local/go/src/github.com/CodisLabs/codis/pkg/topom (from $GOROOT)

        /usr/local/codis/src/github.com/CodisLabs/codis/pkg/topom (from $GOPATH)

cmd/dashboard/main.go:21:2:cannot find package "github.com/CodisLabs/codis/pkg/utils" in any of:

        /usr/local/go/src/github.com/CodisLabs/codis/pkg/utils (from $GOROOT)

        /usr/local/codis/src/github.com/CodisLabs/codis/pkg/utils (from $GOPATH)

cmd/dashboard/main.go:22:2:cannot find package "github.com/CodisLabs/codis/pkg/utils/log" in any of:

        /usr/local/go/src/github.com/CodisLabs/codis/pkg/utils/log (from $GOROOT)

        /usr/local/codis/src/github.com/CodisLabs/codis/pkg/utils/log (from $GOPATH)

cmd/dashboard/main.go:17:2:cannot find package "github.com/docopt/docopt-go" in any of:

        /usr/local/go/src/github.com/docopt/docopt-go (from $GOROOT)

        /usr/local/codis/src/github.com/docopt/docopt-go (from $GOPATH)

make:*** [codis-dashboard] Error 1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章