日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Centos系統(tǒng)中部署Codis集群服務(wù)具體方法

Codis是一種基于高可用的redis集群的一種帶來(lái),使用go語(yǔ)言編寫。被廣泛使用到豌豆莢和其他公司,下面將為大家講解一下Centos系統(tǒng)中部署Codis集群服務(wù)具體方法。

一、Codis簡(jiǎn)介

Codis 是 Wandoujia Infrastructure Team 開發(fā)的一個(gè)分布式 Redis 服務(wù), 用戶可以看成是一個(gè)無(wú)限內(nèi)存的 Redis 服務(wù), 有動(dòng)態(tài)擴(kuò)/縮容的能力. 對(duì)偏存儲(chǔ)型的業(yè)務(wù)更實(shí)用, 如果你需要 SUBPUB 之類的指令, Codis 是不支持的. 時(shí)刻記住 Codis 是一個(gè)分布式存儲(chǔ)的項(xiàng)目. 對(duì)于海量的 key, value不太大(

Codis github地址:https://github.com/CodisLabs/codis

Codis FAQ:https://github.com/CodisLabs/codis/blob/master/doc/FAQ_zh.md

二、Codis架構(gòu)圖

1、組件說(shuō)明

Codis 由四部分組成:

Codis Proxy (codis-proxy)

Codis Dashboard (codis-config)

Codis Redis (codis-server)

ZooKeeper/Etcd

codis-proxy:是客戶端連接的Redis代理服務(wù),codis-proxy 本身實(shí)現(xiàn)了Redis協(xié)議,表現(xiàn)得和一個(gè)原生的Redis沒什么區(qū)別(就像Twemproxy),對(duì)于一個(gè)業(yè)務(wù)來(lái)說(shuō),可以部署多個(gè)codis-proxy,codis-proxy本身是沒狀態(tài)的。

codis-config:是Codis的管理工具,支持包括,添加/刪除Redis節(jié)點(diǎn),添加/刪除Proxy節(jié)點(diǎn),發(fā)起數(shù)據(jù)遷移等操作,codis-config本身還自帶了一個(gè)http server,會(huì)啟動(dòng)一個(gè)dashboard,用戶可以直接在瀏覽器上觀察Codis集群的狀態(tài)。

codis-server:是Codis項(xiàng)目維護(hù)的一個(gè)Redis分支,基于2.8.13開發(fā),加入了slot的支持和原子的數(shù)據(jù)遷移指令,Codis上層的codis-proxy和codis-config只能和這個(gè)版本的Redis交互才能正常運(yùn)行。

ZooKeeper:用來(lái)存放數(shù)據(jù)路由表和codis-proxy節(jié)點(diǎn)的元信息,codis-config發(fā)起的命令都會(huì)通過(guò)ZooKeeper同步到各個(gè)存活的codis-proxy

注:Codis支持按照Namespace區(qū)分不同的產(chǎn)品,擁有不同的product name 的產(chǎn)品,各項(xiàng)配置都不會(huì)沖突。

2、實(shí)驗(yàn)環(huán)境

主機(jī)名 IP地址 角色
linux-node1 10.1.1.148 Zookeeper、redis_master,redis_slave
linux-node2 10.1.1.149 Zookeeper、redis_master,redis_slave
linux-node3 10.1.1.150 zookeeper,codis-proxy、redis_master,redis_slave

注:生產(chǎn)環(huán)境建議redis放到單獨(dú)的服務(wù)器上面

3、安裝配置

注:部署單個(gè)codis-proxy節(jié)點(diǎn)的環(huán)境,建議相關(guān)的安裝包本地下載完上傳到服務(wù)器上面。

#在codis-proxy(linux-node3)服務(wù)器上面操作

yum install -y git gcc make g++ gcc-c++ automake openssl-devel zlib-devel

3.1、安裝GO

Go下載地址:http://www.golangtc.com/download

cd /usr/local/src/
tar zxvf go1.7.linux-amd64.tar.gz -C /opt

注意:Zookeeper已搭建完成的下面安裝JDK和zookeeper的步驟可以跳過(guò)。

3.2、安裝JDK

JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

rpm -ivh jdk-8u65-linux-x64.rpm

3.3、安裝zookeeper

Zookeeper下載地址:http://zookeeper.apache.org/releases.html#download

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
tar zxvf zookeeper-3.4.8.tar.gz -C /opt/

3.4、環(huán)境變量設(shè)置

修改環(huán)境變量:vim /etc/profile 在最后添加以下內(nèi)容

#codis path
export GOROOT=/opt/go
export GOPATH=/opt/codis
JAVA_HOME=/usr/java/jdk1.8.0_101
CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$GOROOT/bin:$JAVA_HOME/bin:

#測(cè)試環(huán)境變量設(shè)置

#執(zhí)行source /etc/profile是環(huán)境變量生效,測(cè)試go是否正常安裝:

cat hello.go
package main
import "fmt"
func main(){
fmt.Printf("hello,world\n")
}
[root@linux-node-2 ~]# go run hello.go
hello,world!

三、安裝codis

[root@linux-node-3 ~]# yum -y install git
[root@linux-node-3 opt]# go get -u -d github.com/CodisLabs/codis

可以看到no buildable Go source files in /opt/codis/src/github.com/wandoulabs/codis,我們?cè)谏厦姝h(huán)境就是設(shè)置GOAPTH=/opt/codis,所以只要執(zhí)行上面的獲取命令,就會(huì)下載在/opt/codis下:

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

我們進(jìn)到提示的路徑進(jìn)行安裝,安裝過(guò)程比較久,耐心等待:

[root@linux-node-3 ~]# cd /opt/codis/src/github.com/CodisLabs/codis

目錄執(zhí)行make命令編譯代碼,并執(zhí)行make gotest來(lái)跑測(cè)試

make

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

make gotest

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

建議只通過(guò)go get命令來(lái)下載codis,除非你非常熟悉go語(yǔ)言的目錄引用形式從而不會(huì)導(dǎo)致代碼放錯(cuò)地方。該命令會(huì)下載master分支的最新版,我們會(huì)確保master分支的穩(wěn)定。

執(zhí)行全部指令后,會(huì)在 bin 文件夾內(nèi)生成 codis-config、codis-proxy、codis-server三個(gè)可執(zhí)行文件。另外, bin/assets 文件夾是 codis-config 的 dashboard http 服務(wù)需要的前端資源, 需要和 codis-config 放置在同一文件夾下)

通過(guò)git方式安裝codis

git clone https://github.com/CodisLabs/codis.git

git倉(cāng)庫(kù)下載完畢后,我們接下來(lái)進(jìn)行如下的操作。如下:

mkdir -p /opt/codis /src/github.com/CodisLabs/
cp -r codis /opt/codis/src/github.com/CodisLabs/
cd /opt/codis/src/github.com/CodisLabs/codis/

#以上操作完畢后,就和通過(guò)go下載安裝方式一樣,執(zhí)行make命令進(jìn)行編譯,然后執(zhí)行make gotest命令進(jìn)行測(cè)試

通過(guò)源碼包安裝

wget https://github.com/CodisLabs/codis/archive/3.0.3.tar.gz -P /usr/local/src
tar zxvf 3.0.3.tar.gz && cd codis-3.0.3 && make && make gotest

codis相關(guān)配置文件詳解

#codis安裝完成之后codis-config主要的使用方法

# ./bin/codis-config -h (master)
usage: codis-config [-c ] [-L ] [--log-level=]
 [...]
 options:
 -c 配置文件地址
 -L 日志輸出文件地址
 --log-level= 輸出日志級(jí)別 (debug # ./bin/codis-proxy -h
usage: codis-proxy [-c ] [-L ] [--log-level=] [--cpu=] [--addr=] [--http-addr=]

options:
-c 配置文件地址
-L 日志輸出文件地址
--log-level= 輸出日志級(jí)別 (debug 

四、配置codis集群

codis安裝完畢后,我們現(xiàn)在來(lái)配置codis集群,在正式配置集群之前,先創(chuàng)建相關(guān)的目錄,然后復(fù)制相關(guān)文件到新的目錄下。

1、codis集群配置

使用如下命令:

cd /opt/codis/src/github.com/CodisLabs/codis/
mkdir -p /opt/codis/{log,redis_conf}
cp -rf bin/ /opt/codis/
cp config.ini /opt/codis/
cp extern/redis-test/conf/6379.conf /opt/codis/redis_conf/
cp extern/redis-test/conf/6380.conf /opt/codis/redis_conf/

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

2、編輯codis配置文件

[root@linux-node3 codis]# egrep -v "^#|^$" config.ini
coordinator=zookeeper
zk=192.168.1.148:2181,192.168.1.149:2181,192.168.1.150:2181
product=test
dashboard_addr=192.168.1.150:18087
password=
backend_ping_period=5
session_max_timeout=1800
session_max_bufsize=131072
session_max_pipeline=1024
zk_session_timeout=30000
proxy_id=proxy_3

該配置文件中,我們需要注意三個(gè)參數(shù):zk、dashboard_addr、proxy_id。

其中zk是表示zookeeper集群的服務(wù)器IP地址,dashboard_addr表示codis web管理的IP地址及端口,proxy_id表示codis的id,注意每臺(tái)codis服務(wù)器該值要唯一。

#linux-node1

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#linux-node2

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#linux-node3

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

3、編輯redis配置文件

每臺(tái)codis服務(wù)器上,啟動(dòng)兩個(gè)redis實(shí)例(也可以啟動(dòng)多個(gè)redis實(shí)例),配置兩個(gè)redis,如下:

daemonize no
pidfile /var/run/redis.pid
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile /var/log/redis/6379.log
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6379.rdb
dir /opt/codis/
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

#注意紅線標(biāo)注的一個(gè)參數(shù),配置第二個(gè)redis實(shí)例

\cp /opt/codis/redis_conf/6379.conf 6380.conf
sed -i 's/6379/6380/g' /opt/codis/redis_conf/6380.conf
mkdir -p /var/log/redis/

#上面操作需要在每臺(tái)codis服務(wù)上面都執(zhí)行。

echo 512 > /proc/sys/net/core/somaxconn
sysctl vm.overcommit_memory=1

注:優(yōu)化系統(tǒng)的參數(shù)

4、 初始化 slots

執(zhí)行 bin/codis-config slot init,該命令會(huì)在zookeeper上創(chuàng)建slot相關(guān)信息

/opt/codis/bin/codis-config -c /opt/codis/config.ini slot init

#linux-node3、linux-node1、linux-node2

/opt/codis/bin/codis-server /opt/codis/redis_conf/6379.conf &
/opt/codis/bin/codis-server /opt/codis/redis_conf/6380.conf &
ps -ef | grep codis-server

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#在三臺(tái)codis-proxy上面分別啟動(dòng)redis實(shí)例

5、啟動(dòng)codis dashboard

#盡量在redis安裝目錄或者讓redi的log目錄下啟動(dòng)dashboard,這樣方便查看啟動(dòng)產(chǎn)生的日志,nohup.out

nohup /opt/codis/bin/codis-config -c /opt/codis/config.ini dashboard &

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#從圖中可以看出dashboard已經(jīng)啟動(dòng)完成,然后去web頁(yè)面訪問(wèn),codis dashboard訪問(wèn)端口是18087

#查看codis dashboard,瀏覽器訪問(wèn)http://192.168.1.150:18087/,如下:

#codis dashboard啟動(dòng)完成之后默認(rèn)頁(yè)面如上圖所示,我們可以通過(guò)web頁(yè)面新建redis_group,把剛剛啟動(dòng)好的redis實(shí)例加到不同的組當(dāng)中、也可以通過(guò)命令行執(zhí)行創(chuàng)建redis_group的操作。

6、添加 Redis Server Group

# 每一個(gè) Server Group 作為一個(gè)Redis服務(wù)器組存在, 只允許有一個(gè)master, 可以有多個(gè)slave, group id僅支持大于等于1的整數(shù)

#在codis dashboard上使用命令新建server group

[root@linux-node3 ~]# cd /opt/codis/
[root@linux-node3 codis]# ./bin/codis-config server -h
usage:
codis-config server list
codis-config server add
codis-config server remove
codis-config server promote
codis-config server add-group
codis-config server remove-group

#如: 添加三個(gè) server group, 每個(gè) group 有兩個(gè) redis 實(shí)例,group的id分別為1和2, redis實(shí)例為一主一從。

#注:這里我把linux-node3,linux-node2,linux-node1上面的兩個(gè)redis實(shí)例分別加到不同的server group當(dāng)中,詳細(xì)如下:

group_1: linux-node3 redis_6379 linux-node2 redis_6380
group_2: linux-node2 redis_6379 linux-node1 redis_6380
group_3: linux-node1 redis_5379 linux-node3 redis_6380

其中redis的6379端口作為redis master,6380作為slave

#添加一個(gè)group,group的id為1, 并添加一個(gè)redis master(192.168.1.150:6379)到該group

./bin/codis-config server add 1 192.168.1.150:6379 master

#添加一個(gè)redis slave(192.168.1.149:6380)到該group

./bin/codis-config server add 1 192.168.1.149:6380 slave

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#添加一個(gè)group,group的id為2, 并添加一個(gè)redis master(192.168.1.149:6379)到該group

./bin/codis-config server add 2 192.168.1.149:6379 master

#添加一個(gè)redis slave(192.168.1.148:6380)到該group

./bin/codis-config server add 2 192.168.1.148:6380 slave

#添加一個(gè)group,group的id為3, 并添加一個(gè)redis master(192.168.1.148:6379)到該group

./bin/codis-config server add 3 192.168.1.148:6379 master

#添加一個(gè)redis slave(192.168.1.150:6380)到該group

./bin/codis-config server add 3 192.168.1.150:6380 slave


注意:每組添加的第一個(gè)redis實(shí)例不能被刪除,因?yàn)閏odis默認(rèn)把該redis實(shí)例設(shè)置為master。

#從圖中我們可以看出server group 已經(jīng)創(chuàng)建成功,到codis dashboard上面查看:

7、設(shè)置 server group 服務(wù)的 slot 范圍,

https://github.com/CodisLabs/codis/blob/master/doc/FAQ_zh.md

Codis 采用 Pre-sharding 的技術(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的分片, 默認(rèn)分成 1024 個(gè) slots (0-1023), 對(duì)于每個(gè)key來(lái)說(shuō), 通過(guò)以下公式確定所屬的 Slot Id : SlotId = crc32(key) % 1024 每一個(gè) slot 都會(huì)有一個(gè)且必須有一個(gè)特定的 server group id 來(lái)表示這個(gè) slot 的數(shù)據(jù)由哪個(gè) server group 來(lái)提供.

[root@linux-node3 codis]# ./bin/codis-config slot -h
usage:
codis-config slot init [-f]
codis-config slot info
codis-config slot set
codis-config slot range-set
codis-config slot migrate [--delay=]
codis-config slot rebalance [--delay=]

#設(shè)置編號(hào)為[0, 340]的 slot 由 server group 1 提供服務(wù), 編號(hào) [341, 682] 的 slot 由 server group 2 提供服務(wù),編號(hào)[683, 1023] 的 slot 由 server group 3 提供服務(wù)

./bin/codis-config slot range-set 0 340 1 online
./bin/codis-config slot range-set 341 682 2 online
./bin/codis-config slot range-set 683 1023 3 online

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#查看slot的信息

/opt/codis/bin/codis-config -c /opt/codis/config.ini slot info 1
/opt/codis/bin/codis-config -c /opt/codis/config.ini slot info 2
/opt/codis/bin/codis-config -c /opt/codis/config.ini slot info 3

#slot操作完成可以到codis dashboard查看狀態(tài)。如下:

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

8、啟動(dòng) codis-proxy

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

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

nohup /opt/codis/bin/codis-proxy -c /opt/codis/config.ini –log-level=error -L /opt/codis/log/proxy.log –cpu=1 –addr=0.0.0.0:19000 –http-addr=0.0.0.0:11000 &

#下面對(duì)以上命令中的參數(shù)進(jìn)行解釋:

-c 配置文件地址。
-L 日志輸出文件地址。
–log-level= 輸出日志級(jí)別(debug –cpu= proxy占用的cpu核數(shù),默認(rèn)1,最好設(shè)置為機(jī)器的物理cpu數(shù)的一半到2/3左右。
–addr= proxy的redis server監(jiān)聽的地址, 格式:, 如: localhost:9000, :9001。
–http-addr= proxy的調(diào)試信息啟動(dòng)的http server,可以訪問(wèn) http://debug_http_server_addr/debug/vars。

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#codis-proxy啟動(dòng)后,我們可以在dashboard上進(jìn)行查看,如下:

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#到此codis集群搭建完畢,為了性能需求,建議redis實(shí)例和codis-proxy放到不同的服務(wù)器上面。

9、連接codis集群

codis集群搭建完畢后,測(cè)試連接codis集群。要連接codis集群,我們只需要連接codis-proxy即可。codis-proxy服務(wù)器地址:192.168.1.150,然后加19000端口。使用redis-cli命令連接,如下:

#在某臺(tái)已安裝redis實(shí)例的服務(wù)器上面測(cè)試:

通過(guò)上圖,我們可以很明顯的看到連接codis集群是ok的。

10、codis集群壓測(cè)

我們現(xiàn)在對(duì)codis集群做一些壓力測(cè)試,同時(shí)在dashboard上觀察鍵值對(duì)的情況。如下:

./redis-benchmark -h 192.168.1.150 -p 19000 -c 1000 -d 1000 -t set -n 100000 -r 100000

上述命令的意思是,使用redis-benchmark壓力測(cè)試命令連接codis集群,同時(shí)并發(fā)10000個(gè)(-c),測(cè)試set操作(-t),每個(gè)測(cè)試數(shù)據(jù)集是100字節(jié)(-d),請(qǐng)求數(shù)是100000(-n),使用使用隨機(jī)數(shù)插入數(shù)值(-r)

11、數(shù)據(jù)遷移

安全和透明的數(shù)據(jù)遷移是 Codis 提供的一個(gè)重要的功能, 也是 Codis 區(qū)別于 Twemproxy 等靜態(tài)的分布式 Redis 解決方案的地方
數(shù)據(jù)遷移的最小單位是 key, 我們?cè)?codis redis 中添加了一些指令, 實(shí)現(xiàn)基于key的遷移, 如 SLOTSMGRT等 (命令列表), 每次會(huì)將特定 slot 一個(gè)隨機(jī)的 key 發(fā)送給另外一個(gè) codis redis 實(shí)例, 這個(gè)命令會(huì)確認(rèn)對(duì)方已經(jīng)接收, 同時(shí)刪除本地的這個(gè) k-v 鍵值, 返回這個(gè) slot 的剩余 key 的數(shù)量, 整個(gè)操作是原子的.

在 codis-config 管理工具中, 每次遷移任務(wù)的最小單位是 slot
如: 將slot id 為 [0-340] 的slot的數(shù)據(jù), 遷移到 server group 2上, –delay 參數(shù)表示每遷移一個(gè) key 后 sleep 的毫秒數(shù), 默認(rèn)是 0, 用于限速.

#codis dashboard上面查看每個(gè)組中的數(shù)據(jù)狀態(tài),

#可以看出剛剛我們做過(guò)壓測(cè)之后,每個(gè)redis組處理的key基本一致,然后我們把group_1中slot上的數(shù)據(jù)遷移到group_2上,–delay 參數(shù)表示每遷移一個(gè) key 后 sleep 的毫秒數(shù), 默認(rèn)是 0, 用于限速.

$ bin/codis-config slot migrate 0 511 2 --delay=10

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

/opt/codis/bin/codis-config -c /opt/codis/config.ini slot migrate 0 340 2 --delay=10

#查看codis dashboard上,group狀態(tài):

#再次刷新,3s后

#對(duì)比group中兩次的key變化,我們可以看出group_1中的slot數(shù)據(jù)正在向group_2遷移。

遷移的過(guò)程對(duì)于上層業(yè)務(wù)來(lái)說(shuō)是安全且透明的, 數(shù)據(jù)不會(huì)丟失, 上層不會(huì)中止服務(wù).

注意, 遷移的過(guò)程中打斷是可以的, 但是如果中斷了一個(gè)正在遷移某個(gè)slot的任務(wù), 下次需要先遷移掉正處于遷移狀態(tài)的 slot, 否則無(wú)法繼續(xù) (即遷移程序會(huì)檢查同一時(shí)刻只能有一個(gè) slot 處于遷移狀態(tài)).

Auto Rebalance

Codis 支持動(dòng)態(tài)的根據(jù)實(shí)例內(nèi)存, 自動(dòng)對(duì)slot進(jìn)行遷移, 以均衡數(shù)據(jù)分布.

$ bin/codis-config slot rebalance

要求:

所有的codis-server都必須設(shè)置了maxmemory參數(shù)
所有的 slots 都應(yīng)該處于 online 狀態(tài), 即沒有遷移任務(wù)正在執(zhí)行
所有 server group 都必須有 Master

五、Codis集群架構(gòu)模擬故障測(cè)試

Server group實(shí)現(xiàn)主從切換,當(dāng)同一個(gè)組中的某一臺(tái)redis實(shí)例停止的時(shí)候,組中的其它redis實(shí)例自動(dòng)切換為master角色,提供服務(wù)。

需要安裝codis-ha插件,codis-ha可以安裝在任意節(jié)點(diǎn)即可,只需要在一個(gè)節(jié)點(diǎn)上面安裝。(本實(shí)驗(yàn)安裝在linux-node2上)

go get github.com/ngaut/codis-ha
[root@linux-node2 ~]# cd /opt/codis/src/github.com/ngaut/
[root@linux-node2 ngaut]# cp -r codis-ha /opt/
[root@linux-node2 ngaut]# cd /opt/codis-ha/
[root@linux-node2 codis-ha]# go build

1、啟動(dòng)codis-ha服務(wù)

nohup $codis_ha_home/codis-ha -codis-config=192.168.1.150:18087 -log-level=info -productName=test &> /opt/codis-ha/codis-ha.log

注:-codis-config后跟dashboard所在服務(wù)器ip

重新啟動(dòng)codis-proxy服務(wù)

注:(以150機(jī)器配置為例,其余codis-proxy只需要修改下名稱即可)

先停掉codis-proxy

[root@linux-node3 ~]# /opt/codis/bin/codis-config -c /opt/codis/config.ini proxy offline codis_proxy_3

#不同的機(jī)器只需要更改codis_proxy即可(本實(shí)驗(yàn)之重啟了一臺(tái)codis-proxy,且codis-ha服務(wù)已生效)

重新啟動(dòng)codis-proxy

nohup /opt/codis/bin/codis-proxy -c /opt/codis/config.ini --log-level=error -L /opt/codis/log/proxy.log --cpu=1 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &

設(shè)置codis-proxy狀態(tài)為online

[root@linux-node3 ~]# /opt/codis/bin/codis-config -c /opt/codis/config.ini proxy online codis_proxy_3

注:如果重啟一臺(tái)codis-proxy之后codis-ha服務(wù)沒生效,需要重啟三臺(tái)codis-proxy

停止任意節(jié)點(diǎn)的zookeeper,檢查codis-proxy,dashboard是否正常>

以zookeeper狀態(tài)為leader那臺(tái)服務(wù)器測(cè)試(linux-node2)

查看zookeeper狀態(tài)確認(rèn)是否為leader

[root@linux-node2 ~]# /opt/zookeeper/bin/zkServer.sh status

停止linux-node2上面的zookeeper節(jié)點(diǎn),讓其他zookeeper節(jié)點(diǎn)自動(dòng)選擇leader節(jié)點(diǎn)并提供服務(wù)

[root@linux-node2 ~]# /opt/zookeeper/bin/zkServer.sh stop

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#隨機(jī)檢測(cè)其他節(jié)點(diǎn)的zookeeper狀態(tài),檢測(cè)到linux-node2的zookeeper節(jié)點(diǎn)已經(jīng)被選為leader,開始提供服務(wù)

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

#重啟刷新codis dashboard可以看到dashboard是正常的。

檢測(cè)redis客戶端是否能正常訪問(wèn)codis-proxy

以linux-node3為例:

[root@linux-node3 ~]# cd /opt/codis/src/github.com/CodisLabs/codis/extern/redis-2.8.21/src/

#新建scripts目錄,存放redis常用命令

[root@linux-node3 src]# mkdir -p /opt/codis/scripts/
[root@linux-node3 src]# cp redis-cli redis-server redis-benchmark redis-check-dump /opt/codis/scripts/

實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)實(shí)戰(zhàn)Centos系統(tǒng)部署Codis集群服務(wù)

從上面可以看出我之前set的兩個(gè)key都能正常get到

停止任意group中的redis master實(shí)例,檢查redis slave是否自動(dòng)切換為master模擬linux-node1(192.168.1.148)上面的redis-master 6379端口掛掉

登錄到codis-ha所在的節(jié)點(diǎn)(linux-node2)查看codis-ha日志,打印如下

打開dashboard界面,可以看到如下:

從圖中可以看到group_3的salve節(jié)點(diǎn)已經(jīng)自動(dòng)切換到master狀態(tài)

客戶端寫入數(shù)據(jù),檢查切換后的redis master實(shí)例是否有新key增加

#linux-nod3新增key

重新刷新dashboard界面,查看key變化

#恢復(fù)linux-node1上的redis實(shí)例的6379端口

[root@linux-node1 ~]# /opt/codis/bin/codis-server /opt/codis/redis_conf/6379.conf &
[root@linux-node1 ~]# ps -ef | grep -v grep | grep codis-server
root     16620 13759  0 Aug27 pts/0    00:04:52 /opt/codis/bin/codis-server *:6380
root     27574 13759  2 19:40 pts/0    00:00:00 /opt/codis/bin/codis-server *:6379

刷新dashboard界面查看group中redis實(shí)例狀態(tài)變化
分享題目:Centos系統(tǒng)中部署Codis集群服務(wù)具體方法
標(biāo)題URL:http://www.dlmjj.cn/article/cojeego.html