codis集羣環境部署測試


codis介紹前端

Codis 是一個分佈式 Redis 解決方案, 對於上層的應用來講, 鏈接到 Codis Proxy 和鏈接原生的 Redis Server 沒有顯著區別 , 上層應用能夠像使用單機的 Redis 同樣使用, Codis 底層會處理請求的轉發, 不停機的數據遷移等工做, 全部後邊的一切事情, 對於前面的客戶端來講是透明的, 能夠簡單的認爲後邊鏈接的是一個內存無限大的 Redis 服務。java

image001

codis組件node

codis server:基於redis-3.2.8 分支開發。增長了額外的數據結構,以支持slot有關的操做以及數據遷移指令linux

codis proxy:客戶端鏈接的redis代理服務,實現了redis協議。除部分命令不支持之外(不支持的命令列表),表現的和原生的redis沒有區別。對於同一個業務集羣而言,能夠同時部署多個codis-proxy實例;不一樣codis-proxy之間由codis-dashboard保證狀態同步。git

codis dashboard:集羣管理工具,支持codis-proxy、codis-server的添加、刪除、以及數據遷移操做。在集羣狀態發生改變時,codis-dashboard維護集羣下全部codis-proxy的狀態一致性,對於同一個業務集羣而言,同一時刻codis-dashboard只能有0個或者1個,全部對集羣的修改都必須經過codis-dashboard完成。github

codis FE:集羣管理界面,多個集羣實例共享能夠共享同一個前端展現頁面,經過配置文件管理後端codis-dashboard列表,配置文件可自動更新。golang

storage:提供namespace概念,不一樣集羣會按照不一樣product name進行組織;目前僅提供了zookeeper、etcd、fs三種實現,可是提供了抽象的interface可自行擴展。web

codis分片:Codis 採用 Pre-sharding 的技術來實現數據的分片, 默認分紅 1024 個 slots (0-1023), 對於每一個key來講, 經過如下公式肯定所屬的 Slot Id : SlotId = crc32(key) % 1024。redis

每個 slot 都會有一個且必須有一個特定的 server group id 來表示這個 slot 的數據由哪一個 server group 來提供。數據的遷移也是以slot爲單位的。apache


codis 集羣部署


機器環境分佈

節點
IP
系統
測試配置
node1
192.168.0.198
centos7.2 (最小化安裝)
2核2G --30G盤
node2
192.168.0.199 centos7.2 (最小化安裝) 2核2G --30G盤
node3
192.168.0.200 centos7.2 (最小化安裝) 2核2G --30G盤


codis部署架構圖(來源網絡-西門飛兵)

image003

codis 主從分佈

image004


系統環境三臺機器準備


安裝centos7.2系統,最小化安裝

設置好網絡和防火牆  網絡須要能訪問外網,

下面關閉防火牆

setenforce 0

systemctl stop firewalld

systemctl disable firewalld

sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux


設置yum源

cd /etc/yum.repos.d/

wget http://mirrors.aliyun.com/repo/Centos-7.repo

wget http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install epel-release 

yum -y install vim wget lrzsz net-tools

----------------------------------------------------------------------


安裝JDK (zk須要jdk(三臺機器)

yum install java-1.8.0-openjdk.x86_64 -y

yum install java-1.8.0-openjdk*-y


安裝zookeeper集羣(三臺機器)


下載zk包(三臺機器)

cd /usr/local/src

wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.14.tar.gz   ##zk版本在變化,鏈接可能失效

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


配置環境變量(三臺機器)

vim /etc/profile

ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile  ##生效


建立zk的數據日誌目錄及配置文件(三臺機器)

mkdir -p /data/zookeeper/{data,log}

cp /usr/local/zookeeper-3.4.14/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.14/conf/zoo.cfg

vim /usr/local/zookeeper-3.4.14/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log
clientPort=2181
maxClientCnxns=300
server.1=192.168.0.198:2888:3888
server.2=192.168.0.199:2888:3888
server.3=192.168.0.200:2888:3888

建立myid文件(三臺機器)

三臺機器分別爲:

echo 1 > /data/zookeeper/data/myid       ##198機器

echo 2 > /data/zookeeper/data/myid       ##199機器

echo 3 > /data/zookeeper/data/myid       ##200機器


啓動zk服務

/usr/local/zookeeper-3.4.14/bin/zkServer.sh start   ##啓動
/usr/local/zookeeper-3.4.14/bin/zkServer.sh status   ##查看狀態

[root@localhost ]# /usr/local/zookeeper-3.4.14/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
[root@localhost ]# /usr/local/zookeeper-3.4.14/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader

======================================

安裝go環境(三臺機器)

yum -y install golang

配置go環境

mkdir /data/go -p

vim /etc/profile

export GOPATH=/data/go
export PATH=$PATH:$GOPATH/bin

source /etc/profile  ##生效

安裝godep

yum -y install git

go get -u github.com/tools/godep && which godep

#/data/go/bin/godep


安裝codis3.2 (三臺機器)


下載編譯安裝

yum install gcc autoconf automake libtool -y

cd /data/go/src/github.com/CodisLabs

git clone https://github.com/CodisLabs/codis.git -b release3.2
cd codis/
make


修改配置

dashboard配置修改(三臺機器)

vim config/dashboard.toml

coordinator_name = "zookeeper"
coordinator_addr = "192.168.0.200:2181,192.168.0.199:2181,192.168.0.198:2181"
product_name = "test-codis"

codis-proxy配置修改(三臺機器)

vim config/proxy.toml

product_name = "test-codis"

jodis_name = "zookeeper"
jodis_addr = "192.168.0.200:2181,192.168.0.199:2181,192.168.0.198:2181"
jodis_auth = ""
jodis_timeout = "20s"
jodis_compatible = true

codis-server配置 (三臺機器)

cd /data/go/src/github.com/CodisLabs/codis/extern/redis-3.2.11


建立配置目錄(三臺機器)

mkdir /data/redis

mkdir /data/redis/redis_6379 -p
mkdir /data/redis/redis_6380 -p
mkdir /data/redis/redis_6381 -p


先在198上修改三個配置文件,後面複製到其餘機器

建立配置文件

cp redis.conf /data/redis/redis-6379.conf
cp redis.conf /data/redis/redis-6380.conf
cp redis.conf /data/redis/redis-6381.conf


修改配置文件

vim /data/redis/redis-6379.conf

bind 0.0.0.0
port 6379
pidfile "/tmp/redis_6379.pid"
logfile "/tmp/redis_6379.log"
dbfilename "dump_6379.rdb"
dir "/data/redis/redis_6379"

vim /data/redis/redis-6380.conf
bind 0.0.0.0
port 6380
pidfile "/tmp/redis_6380.pid"
logfile "/tmp/redis_6380.log"
dbfilename "dump_6380.rdb"
dir "/data/redis/redis_6380"

vim /data/redis/redis-6381.conf
bind 0.0.0.0
port 6381
pidfile "/tmp/redis_6381.pid"
logfile "/tmp/redis_6381.log"
dbfilename "dump_6381.rdb"
dir "/data/redis/redis_6381"


複製配置文件到其餘兩個機器

scp /data/redis/*.conf 192.168.0.199:/data/redis/

scp /data/redis/*.conf 192.168.0.200:/data/redis/


服務啓動及集羣初始化


cd /data/go/src/github.com/CodisLabs/codis


啓動codis-dashboard  (選一臺機器198)

nohup ./bin/codis-dashboard --ncpu=1 --config=config/dashboard.toml --log=dashboard.log --log-level=WARN >> /var/log/codis_dashboard.log &

啓動codis-proxy (三臺機器)

nohup ./bin/codis-proxy --ncpu=1 --config=config/proxy.toml --log=proxy.log --log-level=WARN >> /var/log/codis_proxy.log &

啓動codis-server(三臺機器)

nohup ./bin/codis-server /data/redis/redis-6379.conf &
nohup ./bin/codis-server /data/redis/redis-6380.conf &
nohup ./bin/codis-server /data/redis/redis-6381.conf &

啓動codis-fe (選一臺機器198)

nohup ./bin/codis-fe --ncpu=1 --log=fe.log --log-level=WARN --zookeeper=192.168.0.198:2181,192.168.0.199:2181,192.168.0.200:2181 --listen=192.168.0.198:8090 &


訪問管理界面並配置

瀏覽器打開192.168.0.198:8090

QQ截圖20190417110527.png

選擇test-codis,並增長三個proxy,(填寫11080端口才能夠增長)

QQ截圖20190417110412.png

接着添加 group和server

先添加123group  而後把server加入到group中

QQ截圖20190417112824.png

QQ截圖20190417114311.png


而後初始化solt

新增的集羣 slot 狀態是 offline,所以咱們須要對它進行初始化(將 1024 個 slot 分配到各個 group),而初始化最快的方法可經過 fe 提供的 rebalance all slots 按鈕來作,點擊按鈕,咱們便可快速完成了一個集羣的搭建。也能夠填寫不一樣的solt範圍進行分配,本例將逐一分配solt)點migrate range按鈕

QQ截圖20190417115329.png

QQ截圖20190417115417.png

上圖已經將solt分配到三個group了



經過鏈接codis-proxy進行驗證

[root@localhost codis]# ./bin/redis-cli -h 192.168.0.199 -p 19000
192.168.0.199:19000> info
能夠查看集羣代理信息
192.168.0.199:19000> set test 999
OK
192.168.0.199:19000> get test
"999"

壓力測試

./bin/redis-benchmark -h 192.168.0.200 -p 19000 -c 100 -d 100 -t set -n 10000 -r 10000
上述命令的意思是,使用redis-benchmark壓力測試命令鏈接codis集羣,
同時併發10000個(-c),測試set操做(-t),每一個測試數據集是100字節(-d),
請求數是100000(-n),使用使用隨機數插入數值(-r)


壓測後能夠看到分到後端group的數據均衡狀況

QQ截圖20190417125145.png



基於redis-sentinel實現HA

修改sentinel配置文件(三臺機器)

mkdir /data/redis/logs/
mkdir /data/redis/db/

cd /data/go/src/github.com/CodisLabs/codis

cp extern/redis-3.2.11/sentinel.conf  /data/redis/


先在一臺機器上修改配置,而後複製到其餘機器

vim /data/redis/sentinel.conf
bind 0.0.0.0
port 26379
pidfile "/data/redis/logs/sentinel.pid"
logfile "/data/redis/logs/sentinel.log"
dir "/data/redis/db"
sentinel monitor codis-server-01 192.168.0.198 6379 2
sentinel down-after-milliseconds codis-server-01 5000
sentinel failover-timeout codis-server-01 60000
sentinel parallel-syncs codis-server-01 2
 
sentinel monitor codis-server-02 192.168.0.199 6380 2
sentinel down-after-milliseconds codis-server-02 5000
sentinel failover-timeout codis-server-02 60000
sentinel parallel-syncs codis-server-02 2
 
sentinel monitor codis-server-03 192.168.0.200 6381 2
sentinel down-after-milliseconds codis-server-03 5000
sentinel failover-timeout codis-server-03 60000
sentinel parallel-syncs codis-server-03 2


複製配置到其餘機器

scp /data/redis/sentinel.conf 192.168.0.199:/data/redis/
scp /data/redis/sentinel.conf 192.168.0.200:/data/redis/


啓動sentinel(三臺機器)

cd /data/go/src/github.com/CodisLabs/codis

nohup ./bin/redis-sentinel /data/redis/sentinel.conf &


而後回到web管理界面添加sentinel,添加時的端口爲26379


QQ截圖20190417140430.png

QQ截圖20190417140446.png

配置完成後能夠在group中看到明顯的HA標誌

QQ截圖20190417140559.png


到此基本完成了codis集羣搭建

更多內容可參考Codis的github:https://github.com/CodisLabs/codis

以及http://www.fblinux.com/?p=1463   https://blog.51cto.com/brucewang/2159131等文章

相關文章
相關標籤/搜索