一、概要
1、折騰codis集群已經(jīng)快兩個(gè)月了,感謝一直以來(lái)codis的作者劉奇和黃東旭的耐心支持,在這里給你們點(diǎn)個(gè)贊,現(xiàn)在我司已經(jīng)有一個(gè)業(yè)務(wù)跑在了codis集群上,目前只是切了整個(gè)業(yè)務(wù)的10%%u7684量,預(yù)計(jì)下周會(huì)全量切到codis上,這個(gè)時(shí)候大家肯定特別想知道codis穩(wěn)定嗎?有沒(méi)有什么bug啊,你想知道的也是我想知道的,搞起吧,用了才知道,反正目前我們這沒(méi)發(fā)現(xiàn)啥問(wèn)題,一些小的問(wèn)題已經(jīng)及時(shí)聯(lián)系作者改掉了,好吧,不扯淡了,寫(xiě)這篇文章的目的是幫助想了解codis的初學(xué)者快速部署(官方的部署文檔對(duì)應(yīng)運(yùn)維知識(shí)弱一點(diǎn)的童鞋看來(lái)還是有點(diǎn)費(fèi)力)還有就是給自己做一個(gè)備錄以便后期集群的部署。
2、codis 是一個(gè)分布式redis解決方案, 對(duì)于上層的應(yīng)用來(lái)說(shuō), 連接到 codis proxy 和連接原生的 redis server 沒(méi)有明顯的區(qū)別 (有一些命令不支持), 上層應(yīng)用可以像使用單機(jī)的 redis 一樣使用, codis 底層會(huì)處理請(qǐng)求的轉(zhuǎn)發(fā), 不停機(jī)的數(shù)據(jù)遷移等工作, 所有后邊的一切事情, 對(duì)于前面的客戶(hù)端來(lái)說(shuō)是透明的, 可以簡(jiǎn)單的認(rèn)為后邊連接的是一個(gè)內(nèi)存無(wú)限大的 redis服務(wù),當(dāng)然,前段時(shí)間redis官方的3.0出了穩(wěn)定版,3.0支持集群功能,codis的實(shí)現(xiàn)原理和3.0的集群功能差不多,我了解的現(xiàn)在美團(tuán)、阿里已經(jīng)用了3.0的集群功能了,我們這邊的業(yè)務(wù)主要是php,3.0集群的sdk目前貌似還沒(méi)有支持php語(yǔ)言的,大家誰(shuí)的php應(yīng)用上了3.0集群,請(qǐng)聯(lián)系我,我去取經(jīng),有關(guān)redis常見(jiàn)的集群技術(shù),請(qǐng)移步到 @蕭田國(guó) 蕭老師的infoq專(zhuān)欄redis集群技術(shù)及codis實(shí)踐
二、架構(gòu)
三、角色分批
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
yum-yinstallzookeeperjdk##安裝服務(wù)
vim/etc/hosts##添加host 10.10.0.47zookeeper-node1 10.10.0.48zookeeper-node2 10.10.1.76zookeeper-node3
vim/etc/zookeeper/conf/zoo.cfg##撰寫(xiě)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
mkdir/data/zookeeper/##創(chuàng)建zk的datadir目錄 echo"2">/data/zookeeper/myid##生成id,這里需要注意,myid對(duì)應(yīng)的zoo.cfg的server.id,比如zookeeper-node2對(duì)應(yīng)的myid應(yīng)該是2 /usr/lib/zookeeper/bin/zkserver.shstart##服務(wù)啟動(dòng)
2、go安裝(codis是go語(yǔ)言寫(xiě)的,所以那些機(jī)器需要安裝你懂得)
wgethttps://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz tar-zxvfgo1.4.1.linux-amd64.tar.gz mvgo/usr/local/ cd/usr/local/go/src/ bashall.bash cat>>~/.bashrc<<_bashrc_export exportgoroot=/usr/local/go exportpath=$path:$goroot/bin exportgoarch=amd64 exportgoos=linux _bashrc_export source~/.bashrc
3、下載并編譯codis(codis-config、codis-proxy、codis-server所在的機(jī)器)
mkdir/data/go exportgopath=/data/go /usr/local/go/bin/gogetgithub.com/wandoulabs/codis cd/data/go/src/github.com/wandoulabs/codis/ ./bootstrap.sh makegotest
五、服務(wù)啟動(dòng)及初始化集群
1、啟動(dòng) dashboard(codis-config上操作)
cat/etc/codis/config_10.ini##撰寫(xiě)配置文件 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
cd/data/go/src/github.com/wandoulabs/codis/&&./bin/codis-config-c/etc/codis/config_10.inidashboard&
2、初始化 slots(codis-config上操作)
cd/data/go/src/github.com/wandoulabs/codis/&&./bin/codis-config-c/etc/codis/config_10.inislotinit
3、啟動(dòng) codis redis , 和官方的redis server參數(shù)一樣(codis-server上操作)
cd/data/go/src/github.com/wandoulabs/codis/&&./bin/codis-server/etc/redis_6379.conf&
4、添加 redis server group , 每一個(gè) server group 作為一個(gè) redis 服務(wù)器組存在, 只允許有一個(gè) master, 可以有多個(gè) slave, group id 僅支持大于等于1的整數(shù)(codis-config上操作)
cd/data/go/src/github.com/wandoulabs/codis/ ./bin/codis-config-c/etc/codis/config_10.iniserveradd110.10.32.42:6379master ./bin/codis-config-c/etc/codis/config_10.iniserveradd110.10.32.43:6380slave ./bin/codis-config-c/etc/codis/config_10.iniserveradd210.10.32.43:6379master ./bin/codis-config-c/etc/codis/config_10.iniserveradd210.10.32.44:6380slave ./bin/codis-config-c/etc/codis/config_10.iniserveradd310.10.32.44:6379master ./bin/codis-config-c/etc/codis/config_10.iniserveradd310.10.32.42:6380slave
5、設(shè)置 server group 服務(wù)的 slot 范圍 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è)特定的 server group id 來(lái)表示這個(gè) slot 的數(shù)據(jù)由哪個(gè) server group 來(lái)提供.(codis-config上操作)
cd/data/go/src/github.com/wandoulabs/codis/ ./bin/codis-config-c/etc/codis/config_10.inislotrange-set03001online ./bin/codis-config-c/etc/codis/config_10.inislotrange-set3017002online ./bin/codis-config-c/etc/codis/config_10.inislotrange-set70110233online
6、啟動(dòng) codis-proxy
阿里云買(mǎi)哪個(gè)是獨(dú)立服務(wù)器做網(wǎng)站對(duì)于網(wǎng)址來(lái)說(shuō)要考慮再三新站SEO時(shí)為何會(huì)關(guān)鍵詞排名不穩(wěn)定新加坡云服務(wù)器租金貴嗎購(gòu)買(mǎi)服務(wù)器和云服務(wù)器哪個(gè)劃算電腦釘釘直播怎么共享屏幕 釘釘電腦版直播如何共享屏幕阿里云服務(wù)器購(gòu)買(mǎi)原因云服務(wù)器網(wǎng)站空間費(fèi)用