使用docker 部署codis
原文地址:https://www.jianshu.com/p/85e72ae6fec3
codis的架構圖

1、zookeeeper,用於存放統一配置信息和集群狀態
2、codis-fe,codis管理后台的前端頁面。(可以看到是vue的地位)
3、codis-dashboard,coids的管理后台系統。(可以看成是提供后端接口的服務)
4、codis-proxy。工作服務器,負責redsi命令的的分發。
5、codis-group。真正存數據取數據的地方。
6、redis-sentinel。用來監控codis-group的主redis是否工作,用於redsi的主掛了之后,觸發主從切換。
部署流程
一、下載源碼
mkdir codis && cd codis
git clone https://github.com/CodisLabs/codis.git -b release3.2
二、構建鏡像imag
1、使用Docker multi-stage build多階段構建機制,編譯alpine版本的codis,使用阿里雲的軟件源,加速依賴安裝,然后設置時區為上海,打包后200M左右,修改Dockerfile如下。
修改dockerFile文件
FROM golang:1.10.3-alpine3.8 as builder
ENV GOPATH /go
ENV CODIS ${GOPATH}/src/github.com/CodisLabs/codis
ENV PATH ${GOPATH}/bin:${PATH}:${CODIS}/bin
COPY . ${CODIS}
RUN echo -e "https://mirrors.aliyun.com/alpine/v3.8/main/\nhttps://mirrors.aliyun.com/alpine/v3.8/community/" > /etc/apk/repositories ;\
apk add --no-cache --virtual .build-deps \
make \
bash \
gcc \
musl-dev \
autoconf \
linux-headers \
; \
make -C ${CODIS} distclean ;\
make -C ${CODIS} build-all ;\
apk del .build-deps
FROM alpine:3.8
ENV PATH ${PATH}:/codis/bin
RUN echo -e "https://mirrors.aliyun.com/alpine/v3.8/main/\nhttps://mirrors.aliyun.com/alpine/v3.8/community/" > /etc/apk/repositories ;\
apk add --no-cache tzdata ;\
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=builder /go/src/github.com/CodisLabs/codis /codis
WORKDIR /codis
執行
docker build -f Dockerfile -t codis-image .
構建鏡像

構建過程比較長,因為codis的運行需要go環境,需要把go環境打包到image里面
三、修改配置文件
在config目錄下面

修改dashboard.toml

修改proxy.toml

配置redis.toml
protected-mode no
dir "/codis"
修改docker.sh里面的server

server)
for ((i=0;i<4;i++)); do
let port="26379 + i"
docker rm -f "Codis-S${port}" &> /dev/null
docker run --net=host --name "Codis-S${port}" -d \
-v `realpath ../config/redis.conf`:/codis/redis.conf \
-v `realpath log`:/codis/log \
codis-image \
codis-server redis.conf --logfile log/${port}.log --port ${port}
done
;;
四、啟動應用
sh docker.sh zookeeper
sh docker.sh dashboard
sh docker.sh fv
sh docker.sh proxy
sh docker.sh server
啟動3個sentinel
docker run --net=host --name "Codis-T46380" -d \
-v `realpath ../config/sentinel.conf`:/codis/sentinel.conf \
-v `realpath log`:/codis/log \
codis-image \
redis-sentinel sentinel.conf --port 46380 --protected-mode no
docker run --net=host --name "Codis-T46381" -d \
-v `realpath ../config/sentinel.conf`:/codis/sentinel.conf \
-v `realpath log`:/codis/log \
codis-image \
redis-sentinel sentinel.conf --port 46381 --protected-mode no
docker run --net=host --name "Codis-T46382" -d \
-v `realpath ../config/sentinel.conf`:/codis/sentinel.conf \
-v `realpath log`:/codis/log \
codis-image \
redis-sentinel sentinel.conf --port 46382 --protected-mode no
瀏覽器進入192.168.2.136:8080端口(IP換成自己的服務器ip)

1、新增proxy

2、新增group和redis-server
這里我們有4台redsi-server分成2組;每組兩台
2.1、點擊新增group
2.2、再點擊新增server
2.3、再點擊標記為從redsi

2.4點擊分配group的solt

2.5新增3個sentinel,然后點擊syn

有2個master組,3個sentinel。

五、測試高可用
現在可以通過redis-cli192.168.2.136:29000端口去連接redis;
執行set a a ,set b b后的頁面顯示

執行docker stop Codis-S26381把group2的主停掉


執行get a,get b查看結果,依舊有數據
執行docker start Codis-S26381重啟26381

