日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

codis集群部署实战

發布時間:2024/4/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 codis集群部署实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概要

1、折騰codis集群已經快兩個月了,感謝一直以來codis的作者劉奇和黃東旭的耐心支持,在這里給你們點個贊,現在我司已經有一個業務跑在了 codis集群上,目前只是切了整個業務的10%的量,預計下周會全量切到codis上,這個時候大家肯定特別想知道codis穩定嗎?有沒有什么bug 啊,你想知道的也是我想知道的,搞起吧,用了才知道,反正目前我們這沒發現啥問題,一些小的問題已經及時聯系作者改掉了,好吧,不扯淡了,寫這篇文章的目 的是幫助想了解codis的初學者快速部署(官方的部署文檔對應運維知識弱一點的童鞋看來還是有點費力)還有就是給自己做一個備錄以便后期集群的部署。

2、Codis 是一個分布式?Redis?解決方案, 對于上層的應用來說, 連接到 Codis Proxy 和連接原生的 Redis Server 沒有明顯的區別 (有一些命令不支持), 上層應用可以像使用單機的 Redis 一樣使用, Codis 底層會處理請求的轉發, 不停機的數據遷移等工作, 所有后邊的一切事情, 對于前面的客戶端來說是透明的, 可以簡單的認為后邊連接的是一個內存無限大的 Redis?服務,當然,前段時間redis官方的3.0出了穩定版,3.0支持集群功能,codis的實現原理和3.0的集群功能差不多,我了解的現在 美團、阿里已經用了3.0的集群功能了,我們這邊的業務主要是php,3.0集群的sdk目前貌似還沒有支持php語言的,大家誰的php應用上了3.0 集群,請聯系我,我去取經,有關redis常見的集群技術,請移步到 @蕭田國 蕭老師的infoq專欄Redis集群技術及Codis實踐

二、架構

?

三、角色分批

1

2

3

4

5

6

7

8

9

10

11

12

13

zookeeper集群:

10.10.0.47

10.10.0.48

10.10.1.76

codis-config、codis-ha:

10.10.32.10:18087

codis-proxy:

10.10.32.10:19000

10.10.32.49:19000

codis-server:

10.10.32.42:6379、10.10.32.43:6380(主、從)

10.10.32.43:6379、10.10.32.44:6380(主、從)

10.10.32.44:6379、10.10.32.42:6380(主、從)

四、部署

1、安裝zookeeper

1

yum?-y?install?zookeeper?jdk??##安裝服務

1

2

3

4

vim?/etc/hosts??##添加host

10.10.0.47?ZooKeeper-node1

10.10.0.48?ZooKeeper-node2

10.10.1.76?ZooKeeper-node3

1

2

3

4

5

6

7

8

9

10

vim?/etc/zookeeper/conf/zoo.cfg?##撰寫zk的配置文件

maxClientCnxns=50

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper/

clientPort=2181

server.1=ZooKeeper-node1:2888:3888

server.2=ZooKeeper-node2:2888:3888

server.3=ZooKeeper-node3:2888:3888

1

2

3

mkdir?/data/zookeeper/?##創建zk的datadir目錄

echo?"2"?>/data/zookeeper/myid??##生成ID,這里需要注意,?myid對應的zoo.cfg的server.ID,比如ZooKeeper-node2對應的myid應該是2

/usr/lib/zookeeper/bin/zkServer.sh?start??##?服務啟動

2、go安裝(codis是go語言寫的,所以那些機器需要安裝你懂得)

1

2

3

4

5

6

7

8

9

10

11

12

wget?https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz

tar?-zxvf?go1.4.1.linux-amd64.tar.gz

mv?go?/usr/local/

cd?/usr/local/go/src/

bash?all.bash

cat?>>?~/.bashrc?<<?_bashrc_export

export?GOROOT=/usr/local/go

export?PATH=$PATH:$GOROOT/bin

export?GOARCH=amd64

export?GOOS=linux

_bashrc_export

source?~/.bashrc

3、下載并編譯codis(codis-config、codis-proxy、codis-server所在的機器)

1

2

3

4

5

6

mkdir?/data/go

export?GOPATH=/data/go

/usr/local/go/bin/go?get?github.com/wandoulabs/codis

cd??/data/go/src/github.com/wandoulabs/codis/

./bootstrap.sh

make?gotest

五、服務啟動及初始化集群

1、啟動 dashboard(codis-config上操作)

1

2

3

4

5

6

7

cat?/etc/codis/config_10.ini?##撰寫配置文件

zk=10.10.0.47:2181,10.10.0.48:2181,10.10.1.76:2181

product=zh_news

proxy_id=codis-proxy_10

net_timeout=5000

proto=tcp4

dashboard_addr=10.10.32.10:18087

1

cd?/data/go/src/github.com/wandoulabs/codis/?&&??./bin/codis-config?-c?/etc/codis/config_10.ini??dashboard?&

2、初始化 slots?(codis-config上操作)

1

cd?/data/go/src/github.com/wandoulabs/codis/?&&??./bin/codis-config?-c?/etc/codis/config_10.ini?slot?init

3、啟動 Codis Redis , 和官方的Redis Server參數一樣(codis-server上操作)

1

cd?/data/go/src/github.com/wandoulabs/codis/?&&?./bin/codis-server?/etc/redis_6379.conf?&

4、添加 Redis Server Group , 每一個 Server Group 作為一個 Redis 服務器組存在, 只允許有一個 master, 可以有多個 slave, group id 僅支持大于等于1的整數(codis-config上操作)

1

2

3

4

5

6

7

cd?/data/go/src/github.com/wandoulabs/codis/

./bin/codis-config?-c?/etc/codis/config_10.ini?server?add?1?10.10.32.42:6379?master

./bin/codis-config?-c?/etc/codis/config_10.ini?server?add?1?10.10.32.43:6380?slave

./bin/codis-config?-c?/etc/codis/config_10.ini?server?add?2?10.10.32.43:6379?master

./bin/codis-config?-c?/etc/codis/config_10.ini?server?add?2?10.10.32.44:6380?slave

./bin/codis-config?-c?/etc/codis/config_10.ini?server?add?3?10.10.32.44:6379?master

./bin/codis-config?-c?/etc/codis/config_10.ini?server?add?3?10.10.32.42:6380?slave

5、設置 server group 服務的 slot 范圍 Codis 采用 Pre-sharding 的技術來實現數據的分片, 默認分成 1024 個 slots (0-1023), 對于每個key來說, 通過以下公式確定所屬的 Slot Id : SlotId = crc32(key) % 1024 每一個 slot 都會有一個特定的 server group id 來表示這個 slot 的數據由哪個 server group 來提供.(codis-config上操作)

1

2

3

4

cd?/data/go/src/github.com/wandoulabs/codis/

./bin/codis-config?-c?/etc/codis/config_10.ini?slot?range-set?0?300?1?online

./bin/codis-config?-c?/etc/codis/config_10.ini?slot?range-set?301?700?2?online

./bin/codis-config?-c?/etc/codis/config_10.ini?slot?range-set?701?1023?3?online

6、啟動 codis-proxy ?(codis-proxy上操作)

1

2

3

4

5

6

7

cat?/etc/codis/config_10.ini?##撰寫配置文件

zk=10.10.0.47:2181,10.10.0.48:2181,10.10.1.76:2181

product=zh_news

proxy_id=codis-proxy_10??##10.10.32.49上改成codis-proxy_49,多個proxy,proxy_id?需要唯一

net_timeout=5000

proto=tcp4

dashboard_addr=10.10.32.10:18087

1

2

cd?/data/go/src/github.com/wandoulabs/codis/?&&??./bin/codis-proxy??-c?/etc/codis/config_10.ini?-L?/data/log/codis-proxy_10.log??--cpu=4?--addr=0.0.0.0:19000?--http-addr=0.0.0.0:11000?&

cd?/data/go/src/github.com/wandoulabs/codis/?&&??./bin/codis-proxy??-c?/etc/codis/config_49.ini?-L?/data/log/codis-proxy_49.log??--cpu=4?--addr=0.0.0.0:19000?--http-addr=0.0.0.0:11000?&

OK,整個集群已經搭建成功了

六、codis-server的HA

codis-ha實現codis-server的主從切換,codis-server主庫掛了會提升一個從庫為主庫,從庫掛了會設置這個從庫從集群下線

1、安裝

1

2

3

4

5

6

7

export?GOPATH=/data/go

/usr/local/go/bin/go?get?github.com/ngaut/codis-ha

cd??/data/go/src/github.com/ngaut/codis-ha

go?build

cp?codis-ha?/data/go/src/github.com/wandoulabs/codis/bin/

使用方法:

codis-ha?--codis-config=dashboard地址:18087?--productName=集群項目名稱

2、使用supervisord管理codis-ha進程

1

yum?-y?install?supervisord

1

2

3

4

5

6

7

8

9

10

11

/etc/supervisord.conf中添加如下內容:

[program:codis-ha]

autorestart?=?True

stopwaitsecs?=?10

startsecs?=?1

stopsignal?=?QUIT

command?=?/data/go/src/github.com/wandoulabs/codis/bin/codis-ha?--codis-config=10.10.32.17:18087?--productName=dh_tianqi

user?=?root

startretries?=?3

autostart?=?True

exitcodes?=?0,2

3、啟動supervisord服務

1

2

/etc/init.d/supervisord?start

chkconfig?supervisord??on

此時,ps -ef |grep codis-ha 你回發現codis-ha進程已經啟動,這個時候你去停掉一個codis-server的master,看看slave會不會提升為master呢

?

七、關于監控

關于整個codis集群的監控,我們這邊用的是zabbix,監控的指標比較簡單,所以這塊大家有什么好的建議多給我提提哈

zookeeper:監控各個節點的端口聯通性(以后想著把進程也監控上)

codis-proxy:監控了端口的聯通性,這個監控遠遠不夠呀

codis-server:監控了內存使用率、連接數、聯通性

codis-ha:監控進程

dashboard:監控端口聯通性

?

八、使用過程中遇到的問題

1、codis-proxy的日志切割,codis-proxy的默認日志級別是info,日志量很大,我們這邊每天產生50多G日志,目前codis-proxy還不支持熱重啟,想修改啟動參數還是比較麻煩的,日志切割推薦用logrotate

2、codis-proxy的監聽地址默認沒有具體ipv4,也就是codis-proxy啟動之后沒有0.0.0.0:19000這樣的監聽,這 樣會導致的問題就是前端lvs沒有辦法負載均衡codis-proxy,不能轉發請求過,這個問題已聯系作者處理了,在codis-proxy啟動的配置 文件中加上proto=tcp4這個參數就支持監聽ipv4了

3、添加 Redis Server Group的時候,非codis-server(原生的redis)竟然也能加入到codis集群里面,在redis和codis-server共存在一 個物理機上的清楚,很容易加錯,希望能有個驗證,非codis-server不能加入到codis集群

4、codis集群內部通訊是通過主機名的,如果主機名沒有做域名解析那dashboard是通過主機名訪問不到proxy的http-addr地 址的,這會導致從web界面上看不到?OP/s的數據,至于還有沒有其他問題,目前我這邊還沒有發現,建議內部通訊直接用內網IP


本文轉自 msj0905 51CTO博客,原文鏈接:http://blog.51cto.com/sky66/1719187

總結

以上是生活随笔為你收集整理的codis集群部署实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。