Codis基礎
01.codis是一個分布式的Redis解決方案,對于上層的應用來說,連接Codis Proxy和連接原生的Redis Server沒有明顯的區別。
-
codis底層會處理請求的轉發,不停機的數據遷移等工作,所有后邊的一切事情,對于前面客戶端來說是透明的,可以簡單的認為后邊連接是一個內存無限大的Redis服務。
-
codis架構圖如下:
02.codis由codis-proxy,codis-redis,codis-dashboard和zookeeper組成。
-
codis-dashboard,codis的主控制節點。
-
codis-proxy,客戶端連接redis的代理工具,本身實現了redis協議,和原生的redis沒有太多區別。
-
codis-redis,實現redis實例功能。
-
zookeeper,用來存放數據路由和codis-proxy的節點元信息;codis-proxy之間通過zookeeper來同步信息。
03.實現環境:
-
zookeeper,10.1.20.1
-
zookeeper,10.1.20.2
-
zookeeper,10.1.20.3
-
codis-redis,10.1.20.4
-
codis-redis,10.1.20.5
-
codis-proxy,10.1.20.6
-
codis-proxy,10.1.20.7
-
dashboard,10.1.20.24
zookeeper安裝
對象:10.1.20.1,10.1.20.2,10.1.20.3
01.zookeeper是一個分布式的開源框架,它能很好的管理集群,而且提供協調分布式應用的基本服務。
-
它向外部應用暴露一組通用服務——分布式同步(Distributed Synchronization)、命名服務(Naming Service)、集群維護(Group Maintenance)等,簡化分布式應用協調及其管理的難度,提供高性能的分布式服務。
-
zookeeper本身可以以standalone模式(單節點狀態)安裝運行,不過它的長處在于通過分布式zookeeper集群(一個leader,多個follower),基于一定的策略來保證zookeeper集群的穩定性和可用性,從而實現分布式應用的可靠性。
02.zookeeper集群中主要有兩個角色,分別是領導者和學習者。
-
領導者(leader),用于負責進行投票的發起和決議,更新系統狀態。
-
學習者(learner),包括跟隨者(follower)和觀察者(observer)。
-
跟隨者用于接受客戶端請求并向客戶端返回結果,在選主過程中參與投票。
-
觀察者用于接受客戶端連接,將寫請求轉發給領導者;但observer不參加投票過程,只同步leader的狀態,observer的目的是為了擴展系統并提高讀取速度。
03.zookeeper的集群數量:
-
zookeeper節點部署的越多,服務的可靠性也就越高。
-
zookeeper集群中,超過半數的節點宕機才造成整個集群宕機,所以節點應配置為奇數個。
04.安裝jdk:
-
cd /root/Downloads,進入下載目錄。
-
tar -zxvf jdk-7u60-linux-x64.tar.gz -C /usr/local/,解壓至指定目錄。
-
vim /etc/profile,修改profile文件,添加如下內容:
export JAVA_HOME=/usr/local/jdk1.7.0_60
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
-
source /etc/profile,載入profile文件。
-
java -version,確認出現“Java(TM) SE Runtime Environment”等信息確保jdk安裝好。
05.安裝zookeeper:
-
cd /root/Downloads,進入下載目錄。
-
wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz,下載zookeeper安裝包。
-
tar -zxvf zookeeper-3.4.8.tar.gz -C /usr/local/,解壓至指定目錄。
-
mv /usr/local/zookeeper-3.4.8 /usr/local/zookeeper,更改目錄名。
-
chown -R root:root /usr/local/zookeeper,更改目錄屬主屬組。
-
vim /etc/profile,修改profile文件,添加如下內容:
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
-
source /etc/profile,載入profile文件。
-
cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg,修改配置文件名稱。
06.啟動zookeeper:
-
/usr/local/zookeeper/bin/zkServer.sh start,在任意一臺服務器上啟動zookeeper。
-
netstat -ntlp | grep 2181,查看2181是否啟動。
-
/usr/local/zookeeper/bin/zkServer.sh status,確認zookeeper已啟動,并且為standalone狀態。
07.配置zookeeper集群:
-
vim /usr/local/zookeeper/conf/zoo.cfg,修改如下參數:
dataLogDir=/usr/local/zookeeper/log
dataDir=/usr/local/zookeeper/data
clientPort=2181
server.1=10.1.20.1:2888:3888
server.2=10.1.20.2:2888:3888
server.3=10.1.20.3:2888:3888
-
mkdir -p /usr/local/zookeeper/{log,data},創建對應的目錄。
-
echo "1" > /usr/local/zookeeper/data/myid,在10.1.20.1服務器上執行,數字根據配置文件中,ip對應的server.#中的數字決定。
-
echo "2" > /usr/local/zookeeper/data/myid,在10.1.20.2服務器上執行。
-
echo "3" > /usr/local/zookeeper/data/myid,在10.1.20.3服務器上執行。
-
/usr/local/zookeeper/bin/zkServer.sh start,啟動每天服務器上的zookeeper。
-
/usr/local/zookeeper/bin/zkServer.sh status,分別查詢狀態,應有1臺為leader,2臺為follewer。
-
/usr/local/zookeeper/bin/zkCli.sh -server 10.1.20.2:2181,從服務器連接其他zookeeper,查看是否成功。
Codis安裝
對象:10.1.20.4,10.1.20.5,10.1.20.6,10.1.20.7,10.1.20.24
01.安裝基本依賴包:
-
yum install -y git gcc make g++ gcc-c++ automake openssl-devel zlib-*
02.安裝go語言包:
-
cd /root/Downloads,進入下載目錄。
-
wget http://www.golangtc.com/static/go/1.6.2/go1.6.2.linux-amd64.tar.gz,下載go安裝包。
-
tar -zxvf go1.6.2.linux-amd64.tar.gz -C /usr/local/,解壓至指定目錄。
-
vim /etc/profile,添加如下配置:
export GOROOT=/usr/local/go
export GOPATH=/usr/local/codis
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin
-
source /etc/profile,刷新/etc/profile文件。
-
go version,測試go語言是否正常。
-
vim /opt/hello.go,測試go命令是否能正常使用,添加如下內容:
package main
import "fmt"
func main(){
fmt.Printf("hello world\n")
}
-
go run /opt/hello.go,測試輸出hello world。
03.安裝godep:
-
mkdir -p /usr/local/codis/src/github.com/tools,創建codis目錄。
-
cd /usr/local/codis/src/github.com/tools,進入codis工具目錄。
-
go get -u github.com/tools/godep,下載godep。
-
cd godep/,進入安裝目錄。
-
go install ./,安裝godep,檢查該程序有無安裝在/usr/local/codis/bin下。
-
which godep,測試系統是否識別。
04.安裝codis:
-
mkdir -p /usr/local/codis/src/github.com/CodisLabs,創建安裝目錄。
-
cd /root/Downloads,進入下載目錄。
-
tar -zxvf /root/Downloads/codis-3.0.3.tar.gz,解壓安裝文件。
-
cp -rf /root/Downloads/codis-3.0.3 /usr/local/codis/src/github.com/CodisLabs/codis,復制安裝目錄。
-
cd /usr/local/codis/src/github.com/CodisLabs/codis,進入安裝目錄。
-
make && make gotest,測試安裝,確定不報錯為安裝成功。
-
安裝成功后,會在/usr/local/codis/src/github.com/CodisLabs/codis/bin目錄下產生如下文件:
05.創建程序目錄:
-
mkdir -p /codis/{bin,conf,log,scripts,run,database},創建目錄結構。
-
cp -rp /usr/local/codis/src/github.com/CodisLabs/codis/bin/* /codis/bin/,復制因公程序至程序目錄。
-
cp /usr/local/codis/src/github.com/CodisLabs/codis/extern/redis-2.8.21/src/{redis-benchmark,redis-check-aof,redis-check-dump,redis-cli} /codis/bin/,復制redis的程序至程序目錄。
-
cp /usr/local/codis/src/github.com/CodisLabs/codis/extern/redis-2.8.21/redis.conf /codis/conf/redis6379.conf,復制redis配置文件至redis主配置。
-
cp /usr/local/codis/src/github.com/CodisLabs/codis/extern/redis-2.8.21/redis.conf /codis/conf/redis6380.conf,復制redis配置文件至redis從配置。
集群配置
01.配置并啟動codis-dashboard(10.1.20.24)。
-
/codis/bin/codis-dashboard –default-config | tee /codis/conf/dashboard.toml,生成配置文件。
-
vim /codis/conf/dashboard.toml,修改如下配置:
coordinator_addr = "10.1.20.1:2181,10.1.20.2:2181,10.1.20.3:2181"
product_name = "codis-jym"
-
coordinator_name為外部存儲的類型,為zookeeper或者etcd,不能用其他名稱;coordinator_addr為外部存儲zookeeper的集群地址。
-
product_name為codis集群名稱,可以自定義;product_auth為codis集群認證密碼,默認為空。
-
nohup /codis/bin/codis-dashboard –config=/codis/conf/dashboard.toml –log=/codis/log/dashboard.log &,啟動codis-dashboard,啟動后會產生一個18080的端口。
02.配置并啟動codis-proxy(10.1.20.6,10.1.20.7)。
-
/codis/bin/codis-proxy –default-config | tee /codis/conf/proxy.toml,產生默認配置文件。
-
vim /codis/conf/proxy.toml,修改如下配置:
product_name = "codis-jym"
jodis_addr = "10.1.20.1:2181,10.1.20.2:2181,10.1.20.3:2181"
-
nohup /codis/bin/codis-proxy –config=/codis/conf/proxy.toml –log=/codis/log/proxy.log &,啟動codis-proxy。
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –create-proxy -x 10.1.20.6:11080,將proxy添加進集群管理中。
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –create-proxy -x 10.1.20.7:11080,將proxy添加進集群管理中。
-
http://10.1.20.24:18080/topom,獲取dashboard的json文件,查看proxy的狀態,如下圖:
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –list-proxy,查看proxy集群。
03.配置并啟動codis-sever(10.1.20.4,10.1.20.5)。
-
vim /codis/conf/redis6379.conf,將6379配置為master服務器,修改如下配置:
pidfile /codis/run/redis6379.pid
timeout 3600
tcp-keepalive 60
logfile "/codis/log/redis6379.log"
#save 900 1
#save 300 10
#save 60 10000
dbfilename dump6379.rdb
dir /codis/database/redis6379
-
vim /codis/conf/redis6380.conf,將6380配置為master服務器,修改如下配置:
pidfile /codis/run/redis6380.pid
timeout 3600
tcp-keepalive 60
logfile "/codis/log/redis6380.log"
dbfilename dump6380.rdb
dir /codis/database/redis6380
-
/codis/bin/codis-server /codis/conf/redis6379.conf &,啟動6379實例。
-
/codis/bin/codis-server /codis/conf/redis6380.conf &,啟動6380實例。
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –create-group –gid=1,新建一個redisgroup,gid為1。
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –create-group –gid=2,新建一個redisgroup,gid為2。
10.1.20.4上
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –group-add –gid=1 –addr=10.1.20.4:6379,將6379加入gid1。
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –group-add –gid=2 –addr=10.1.20.4:6380,將6380加入gid2。
10.1.20.5上
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –group-add –gid=2 –addr=10.1.20.5:6379,將6379加入gid1。
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –group-add –gid=1 –addr=10.1.20.5:6380,將6379加入gid1。
-
實例的放置傾向于交叉放置,每臺codis-sever上放置不同的主從實例。
-
/codis/bin/codis-admin –dashboard=10.1.20.24:18080 –list-group,查看group情況。
04.配置并啟動codis-sever(10.1.10.24,可選):
-
/codis/bin/codis-admin –dashboard-list –zookeeper=10.1.20.1:2181 | tee /codis/conf/fe.json,通過zookeeper下載fe配置文件。
-
nohup /codis/bin/codis-fe –dashboard-list=/codis/conf/fe.json –listen=10.1.20.24:8080 &,啟動codis-fe。
-
http://10.1.20.24:8080/,訪問圖形化界面。
原創文章,作者:wenjun8888,如若轉載,請注明出處:http://www.www58058.com/49320