jinfeng_wang

          G-G-S,D-D-U!

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
          http://www.tuicool.com/articles/eAJfYv2



          Codis由豌豆莢于2014年11月開(kāi)源,基于go和c開(kāi)發(fā),是近期涌現(xiàn)的、國(guó)人開(kāi)發(fā)的優(yōu)秀開(kāi)源軟件之一,穩(wěn)定性極高,性能更是改善了很多。

          Codis由四部分組成:

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

          codis-config:codis-config是Codis的管理工具,支持添加/刪除Redis節(jié)點(diǎn),同時(shí)會(huì)啟動(dòng)一個(gè)dashboard的服務(wù),可通過(guò)web界面來(lái)直接觀察Redis集群運(yùn)行的狀態(tài)

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

          zookeeper:Codis依賴zookeeper來(lái)存放數(shù)據(jù)路由表和codis-proxy節(jié)點(diǎn)的元信息,codis-config發(fā)起的命令都會(huì)通過(guò)zookeeper同步到各個(gè)codis-proxy節(jié)點(diǎn),zookeeper還維護(hù)codis-server group信息,并提供分布式鎖等服務(wù)。

          Codis的特性:

          1、自動(dòng)平衡

          2、使用非常簡(jiǎn)單,可通過(guò)web界面來(lái)管理

          3、圖形化的面板和管理工具

          4、支持絕大多數(shù)Redis命令,完全兼容twemproxy

          5、支持Redis原生客戶端

          6、安全而完全透明的數(shù)據(jù)移植,可根據(jù)需要輕松添加和刪除節(jié)點(diǎn)

          7、提供命令行接口

          IP/主機(jī)名部署服務(wù)
          10.10.73.148/node1codis+zookeeper
          10.10.73.149/node2codis-zookeeper
          10.10.73.192/node3codis+dashboard

          一、提供java環(huán)境,Zookeeper以及Go依賴于java(node1、node2、node3)

          [root@node1 ~]# mkdir -pv /opt/java [root@node1 ~]# tar -xf /root/jdk-7u51-linux-x64.tar.gz -C /opt/java/

          二、提供Go語(yǔ)言,Codis服務(wù)依賴Go語(yǔ)言(node1、node2、node3)

          [root@node1 ~]# tar -xf /root/go1.6.linux-amd64.tar.gz -C /usr/local/

          三、編輯"/etc/hosts"(node1、node2、node3)

          [root@node1 ~]# vim /etc/hosts 10.10.73.148  node1 10.10.73.149  node2 10.10.73.192  node3  ####node2、node3和node1一樣

          四、在node1、node2服務(wù)器上部署Zookeeper服務(wù)(node1、node2)

          [root@node1 ~]# mkdir /opt/app/zookeeper -pv [root@node1 ~]# cd /opt/app/zookeeper/ [root@node1 zookeeper]# wget  http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz [root@node1 zookeeper]# tar -xf zookeeper-3.4.8.tar.gz  [root@node1 zookeeper]# cd zookeeper-3.4.8 [root@node1 zookeeper-3.4.8]# pwd /opt/app/zookeeper/zookeeper-3.4.8 [root@node1 zookeeper-3.4.8]# cp conf/zoo_sample.cfg conf/zoo.cfg     ##"zoo.cfg"為"zookeeper"的配置文件 [root@node1 zookeeper-3.4.8]# vim conf/zoo.cfg     tickTime=2000    ##指明服務(wù)端(Leader)和客戶端(Follower)之間的心跳時(shí)間間隔,單位為ms     initLimit=10    ##指定容忍心跳檢測(cè)失敗的最大次數(shù)     syncLimit=5    ##指定Leader和Folloer之間發(fā)送消息,請(qǐng)求和應(yīng)答的時(shí)常,不能大于’tickTime’的值     dataDir=./data/    ##指定數(shù)據(jù)存儲(chǔ)路徑,需創(chuàng)建     dataLogDir=./logs    ##指明日志存儲(chǔ)路徑,需創(chuàng)建     server.148=node1:2888:3888    ##指明zookeeper節(jié)點(diǎn),148表示每臺(tái)zookeeper標(biāo)號(hào),2888表示zookeeper監(jiān)聽(tīng)端口,3888表示leader選舉端口     server.149=node2:2888:3888     clientPort=2181    ##指明客戶端連接服務(wù)端的端口 [root@node1 zookeeper-3.4.8]# mkdir data logs [root@node1 zookeeper-3.4.8]# cat data/myid  148   ##指明zookeeper當(dāng)前節(jié)點(diǎn)的標(biāo)示符  #####以上操作均在node1節(jié)點(diǎn)上操作,node2節(jié)點(diǎn)同樣如此,需要注意的是node2節(jié)點(diǎn)下的data/myid應(yīng)為149

          五、提供環(huán)境環(huán)保,編輯"/etc/profile"(node1、node2、node3)

          [root@node1 ~]# vim /etc/profile export  PATH=$PATH:/usr/local/go/bin export  JAVA_HOME=/opt/java/jdk1.7.0_51 export  PATH=$JAVA_HOME/bin:$PATH export  GOPATH=/opt/app/product    ##codis的路徑,下面由”$GOPATH”表示 export  PATH=$PATH:$GOPATH/bin export  CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export  CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar [root@node1 ~]# source /etc/profile    ##重載配置文件 [root@node1 ~]# go version      ##檢測(cè)環(huán)境變量配置是否成功 go version go1.6 linux/amd64

          六、安裝codis服務(wù)(node1、node2、node3)

          [root@node1 product]# pwd /opt/app/product [root@node1 codis]# cd $GOPATH/src/github.com/CodisLabs/codis/ [root@node1 codis]# go get -u -d github.com/CodisLabs/codis     ##下載codis     package github.com/CodisLabs/codis: no buildable Go source files in /opt/app/product/src/github.com/CodisLabs/codis  ##正確 [root@node1 codis]# make make[2]: Leaving directory `/opt/app/product/src/github.com/CodisLabs/codis/extern/redis-2.8.21/src'     make[1]: Leaving directory `/opt/app/product/src/github.com/CodisLabs/codis/extern/redis-2.8.21' [root@node1 codis]# make gotest ?       github.com/CodisLabs/codis/cmd/cconfig    [no test files] ?       github.com/CodisLabs/codis/cmd/proxy    [no test files]    ##出現(xiàn)以上內(nèi)容表示codis安裝成功 [root@node1 codis]# mkdir -pv logs data conf [root@node1 codis]# vim config.ini     zk=node1:2181,node2:2181   ##指明zookeeper節(jié)點(diǎn)的IP和端口     product=ch_wtc   ##定義數(shù)據(jù)庫(kù)     dashboard_addr=10.10.73.192:18087   ##定義dashboard節(jié)點(diǎn),監(jiān)聽(tīng)端口為18087     password=wtc.com     ##slave連接master的密碼     proxy_id=proxy_148   ##定義proxy節(jié)點(diǎn)的id           [root@node1 codis]# cd /conf [root@node1 conf]# wget https://github.com/ijonas/dotfiles/raw/master/etc/redis.conf --no-check-certificate [root@node1 conf]# ll total 24 -rw-r--r-- 1 root root 23350 Aug 30 11:02 redis.conf [root@node1 conf]# cp redis.conf redis_9736.conf  [root@node1 conf]# cp redis.conf redis_9746.conf  [root@node1 conf]# vim redis_9736.conf     pidfile ./data/redis_9736.pid     port 9736     logfile ./logs/redis_9736.log     dbfilename dump_9736.rdb     dir ./data/redis_9736     masterauth wtc.com   ##開(kāi)啟認(rèn)證功能     requirepass wtc.com   ##指定密碼,必須與”config.ini’配置文件中的password值一樣 [root@node1 conf]# vim redis_9746.conf     pidfile ./data/redis_9746.pid     port 9746     logfile ./logs/redis_9746.log     dbfilename dump_9746.rdb     dir ./data/redis_9746     masterauth wtc.com        requirepass wtc.com  ####以上操作均在node1節(jié)點(diǎn)上運(yùn)行,node2、node3節(jié)點(diǎn)操作方式和node1一樣

          七、上述操作完成后,分別啟動(dòng)zookeeper、codis-server、dashboard、codis-proxy

          1、啟動(dòng)zookeeper(node1、node2)

          [root@node1 zookeeper-3.4.8]# pwd /opt/app/zookeeper/zookeeper-3.4.8 [root@node1 zookeeper-3.4.8]# bin/zkServer.sh start     ##node1 ZooKeeper JMX enabled by default Using config: /opt/app/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@node2 zookeeper-3.4.8]# bin/zkServer.sh start     ##node2 ZooKeeper JMX enabled by default Using config: /opt/app/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg Starting zookeeper ... STARTED

          2、啟動(dòng)codis-server(node1、node2、node3)

          [root@node1 codis]# pwd /opt/app/product/src/github.com/CodisLabs/codis [root@node1 codis]# bin/codis-server conf/redis_9736.conf [root@node1 codis]# bin/codis-server conf/redis_9746.conf [root@node1 codis]# ps aux | grep codis root      1597  0.0  0.1 137388  9432 ?        Ssl  11:58   0:00 bin/codis-server *:9736               root      1601  0.0  0.1 137388  9432 ?        Ssl  11:59   0:00 bin/codis-server *:9746  注意:如果啟動(dòng)失敗,可查看錯(cuò)誤日志 [root@mysql_01 codis]# pwd /opt/app/product/src/github.com/CodisLabs/codis [root@mysql_01 codis]# cat logs/redis_9736.log [28181] 29 Aug 16:44:17.121 # Can't chdir to './data/redis_9736': No such file or directory 解決辦法:在相應(yīng)的目錄下創(chuàng)建相應(yīng)的文件即可--./data/redis_9736

          3、啟動(dòng)dashboard(node3),并經(jīng)行初始化

          [root@node3 codis]# nohup bin/codis-config dashboard >./logs/dashboard.log 2>&1 & [1] 4891 [root@node3 codis]# ps aux | grep dashboard root      4891  0.5  0.1 281876  8296 pts/1    Sl   11:59   0:00 bin/codis-config dashboard [root@node3 codis]# bin/codis-config slot init   ##進(jìn)行初始化,之后建立組關(guān)系 {   "msg": "OK",   "ret": 0 }

          八、對(duì)各個(gè)節(jié)點(diǎn)建立組關(guān)系(node3)

          [root@node3 codis]# bin/codis-config server add 1 node1:9736 master {   "msg": "OK",   "ret": 0 } [root@node3 codis]# bin/codis-config server add 1 node2:9746 slave {   "msg": "OK",   "ret": 0 } [root@node3 codis]# bin/codis-config server add 2 node2:9736 master {   "msg": "OK",   "ret": 0 } [root@node3 codis]# bin/codis-config server add 2 node3:9746 slave {   "msg": "OK",   "ret": 0 } [root@node3 codis]# bin/codis-config server add 3 node3:9736 master {   "msg": "OK",   "ret": 0 } [root@node3 codis]# bin/codis-config server add 3 node1:9746 slave {   "msg": "OK",   "ret": 0 }  ##總共分了三個(gè)組     1、node1為主、node2為從     2、node2為主、node3為從     3、node3為主、node1為從

          九、對(duì)每個(gè)組進(jìn)行solt范圍劃分,并啟動(dòng)proxy,設(shè)置為online(node3)

          [root@node3 codis]# bin/codis-config slot range-set 0 340 1 online {   "msg": "OK",   "ret": 0 } [root@node3 codis]# bin/codis-config slot range-set 341 681 2 online {   "msg": "OK",   "ret": 0 } [root@node3 codis]# bin/codis-config slot range-set 682 1023 3 online {   "msg": "OK",   "ret": 0 } [root@node1 codis]# nohup bin/codis-proxy -c config.ini -L ./logs/proxy.log --cpu=4 --addr=0.0.0.0:19000 &    [root@node2 codis]# nohup bin/codis-proxy -c config.ini -L ./logs/proxy.log --cpu=4 --addr=0.0.0.0:19000 & [root@node3 codis]# nohup bin/codis-proxy -c config.ini -L ./logs/proxy.log --cpu=4 --addr=0.0.0.0:19000 &  [root@node1 codis]#  bin/codis-config -c config.ini proxy online proxy_148    ##node1 {   "msg": "OK",   "ret": 0 } [root@node2 codis]# bin/codis-config -c config.ini proxy online proxy_149     ##node2 {   "msg": "OK",   "ret": 0 } [root@node3 codis]# bin/codis-config -c config.ini proxy online proxy_192     ##node3 {   "msg": "OK",   "ret": 0 }

          問(wèn)題總結(jié):

          1、在搭建Redis集群時(shí),一定要配置"/etc/hosts",否則啟動(dòng)dashboard時(shí)失敗

          2、"config.ini"和"redis_97(3|4)6"中的"password"一樣

          3、通過(guò)dashboard對(duì)Redis集群進(jìn)行分組所使用的solt范圍為"0-1023"

          4、dashboard啟動(dòng)成功后,一定要進(jìn)行初始化,查看是否初始化可通過(guò)zookeeper節(jié)點(diǎn)來(lái)查看

          [root@node1 zookeeper-3.4.8]# pwd     ##node1 /opt/app/zookeeper/zookeeper-3.4.8 [root@node1 zookeeper-3.4.8]# sh bin/zkCli.sh [zk: localhost:2181(CONNECTED) 0] ls /zk/codis [db_wtc] [zk: localhost:2181(CONNECTED) 1] ls /zk/codis/db_wtc [fence, servers, slots, proxy, migrate_tasks, dashboard, LOCK, actions, ActionResponse]  ####若出現(xiàn)了"slots",則說(shuō)明進(jìn)行了初始化(用于定義solt范圍)
          posted on 2016-12-15 15:48 jinfeng_wang 閱讀(276) 評(píng)論(0)  編輯  收藏 所屬分類: 2016-REDIS
          主站蜘蛛池模板: 屏边| 麻江县| 赣州市| 介休市| 清镇市| 健康| 和政县| 红原县| 枣庄市| 林芝县| 施甸县| 吴桥县| 沧源| 阿合奇县| 竹溪县| 吉木萨尔县| 临沭县| 五河县| 雅江县| 永顺县| 体育| 剑阁县| 安仁县| 乐安县| 香港 | 万州区| 玉环县| 万年县| 丰宁| 沈丘县| 无为县| 泰州市| 西宁市| 郎溪县| 吴旗县| 宽甸| 应用必备| 莆田市| 宜城市| 福泉市| 孟村|