1. 程式人生 > >從頭搭建codis3.0叢集

從頭搭建codis3.0叢集

配置hosts對映關係

vi /etc/hosts

192.168.92.137 item01
192.168.92.138 item02
192.168.92.139 item03

配置hostname

set-hostname item01

另外兩臺臺機器的hostname分別設定為item02,item03

reboot -f

配置3臺CentOS為ssh免密碼互相通訊

首先在三臺機器上配置對本機的ssh免密碼登入

ssh-keygen -t rsa

生成本機的公鑰,過程中不斷敲回車即可,ssh-keygen命令預設會將公鑰放在/root/.ssh目錄下

cd /root/.ssh
cp id_rsa.pub authorized_keys

將公鑰複製為authorized_keys檔案,此時使用ssh連線本機就不需要輸入密碼了

測試:

ssh item01

接著配置三臺機器互相之間的ssh免密碼登入

使用ssh-copy-id -i hostname(其他機子)命令將本機的公鑰拷貝到指定機器的authorized_keys檔案中

測試:

ssh item02

配置jdk環境

  1. yum install lrzsz -y
  2. rz jdk-8u144-linux-x64.tar.gz #上傳jdk8包
  3. cd /usr
  4. mkdir java
  5. 解壓
    tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/java/
  6. 編輯檔案:vim /etc/profile
  7. 在檔案尾部新增:

    JAVA_HOME=/usr/java/jdk1.8.0_144/
    export PATH=$JAVA_HOME/bin:$PATH
    
  8. 重新載入一下檔案:

    source /etc/profile  
    
  9. 檢視jdk版本,驗證是否配置成功:

    java -version
    

    這裡寫圖片描述

zooKeeper叢集搭建

上傳

    rz zookeeper-3.4.8.tar.gz

解壓

    tar -zxvf zookeeper-3.4.8.tar.gz -C /usr/

改名

    cd /usr/zookeeper-3.4.8/conf
    mv zoo_sample.cfg zoo.cfg

編輯

注:提前建立好目錄/usr/zk/data,/usr/zk/log

vim zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zk/data
dataLogDir=/usr/zk/log
clientPort=2181
server.1=item01:2287:3387
server.2=item02:2287:3387
server.3=item03:2287:3387

這裡寫圖片描述

說明:server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號伺服器;B 是這個伺服器的 ip 地址;C 表示的是這個伺服器與叢集中的 Leader 伺服器交換資訊的埠;D 表示的是萬一叢集中的 Leader 伺服器掛了,需要一個埠來重新進行選舉,選出一個新的 Leader,而這個埠就是用來執行選舉時伺服器相互通訊的埠。

ssh複製配置好的zookeeper到另外兩臺機器

scp -r zookeeper-3.4.8/  [email protected]:/usr
scp -r zookeeper-3.4.8/  [email protected]:/usr

配置id

注:在每個zk server配置檔案的dataDir所對應的目錄下,必須建立一個名為myid的檔案,其中的內容必須與zoo.cfg中server.x 中的x相同

touch /usr/zk/data/myid

item01的myid 中的內容為1,對應server.1中的1

item02的myid 中的內容為2,對應server.2中的2

item03的myid 中的內容為3,對應server.3中的3

啟動驗證

/usr/zookeeper-3.4.8/bin/zkServer.sh start              #啟動
/usr/zookeeper-3.4.8/bin/zkServer.sh status             #檢視狀態
/usr/zookeeper-3.4.8/bin/zkCli.sh -server item01:2181   #客戶端連線測試

配置go環境

解壓

tar -zxvf go1.10.3.linux-amd64.tar.gz -C /usr/local

配置環境變數

vim /etc/profile

export GOROOT=/usr/local/go                             # 安裝路徑 
export GOPATH=$HOME/godir                              # 工作路徑 
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin                # 命令搜尋路徑

驗證

go version

這裡寫圖片描述

git安裝

下載git

wget https://github.com/git/git/archive/v2.14.1.zip

安裝依賴

yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

解壓git

unzip v2.14.1.zip

將git安裝到/usr/local/git上

先進入git-2.14.1資料夾, 編譯,安裝

cd git-2.14.1
make prefix=/usr/local all
make prefix=/usr/local install

驗證

git --version

這裡寫圖片描述

codis叢集搭建

下載 Codis 原始碼

mkdir -p $GOPATH/src/github.com/CodisLabs
git clone https://github.com/CodisLabs/codis.git -b release3.2

編譯 Codis 原始碼

cd $GOPATH/src/github.com/CodisLabs/codis
yum install autoconf automake libtool -y     // 這行非常重要,官網沒有給出這個,不然安裝的時候會報錯  
make
ls bin/


total 69124
drwxr-xr-x 4 codis codis     4096 Jan  4 14:55 assets
-rwxr-xr-x 1 codis codis 17600752 Jan  4 14:55 codis-admin
-rwxr-xr-x 1 codis codis 18416320 Jan  4 14:55 codis-dashboard
-rwxr-xr-x 1 codis codis  9498040 Jan  4 14:55 codis-fe
-rwxr-xr-x 1 codis codis 11057280 Jan  4 14:55 codis-proxy
-rwxr-xr-x 1 codis codis  4234432 Jan  4 14:55 codis-server
-rw-r--r-- 1 codis codis      148 Jan  4 14:55 version
... ...

拷貝codis程式和配置

  1. 建立資料夾

    mkdir -p /usr/local/codis/bin
    
  2. 拷貝程式和配置

    cp -rf $GOPATH/src/github.com/CodisLabs/codis/bin/* /usr/local/codis/bin/
    cp -rf $GOPATH/src/github.com/CodisLabs/codis/config/* /usr/local/codis/conf/
    

codis-server

  1. 建立資料夾

    cd /usr/local/codis/conf/
    
  2. 複製配置

    cp redis.conf redis-6379.conf
    cp redis.conf redis-6380.conf
    
  3. 修改配置

    以下為需修改的配置,其他配置走預設

    pidfile /usr/local/codis/proc/redis-6379.pid    # 程序ID檔案路徑 
    port 6379                                       # 繫結埠 
    logfile "/usr/local/codis/log/redis-6379.log"   # 日誌檔案路徑 
    dbfilename dump-6379.rdb                        # dump檔案 
    dir /usr/local/codis/data/redis_data_6379       # dump路徑
    masterauth "123456"                             # Master密碼(從主同步密碼) 
    requirepass "123456"                            # 鑑權密碼(客戶端連線密碼)
    bind 0.0.0.0                                    # 繫結ip
    
  4. 建立資料夾

    mkdir /usr/local/codis/proc
    mkdir /usr/local/codis/log
    mkdir /usr/local/codis/data/redis_data_6379
    mkdir /usr/local/codis/data/redis_data_6380
    
  5. 啟動程式

    cd /usr/local/codis/bin/ 
    ./codis-server ../conf/redis-6379.conf &        #啟動主程式 
    ./codis-server ../conf/redis-6380.conf &        #啟動從程式
    
  6. 檢視

    netstat -ntlp
    

    這裡寫圖片描述

codis-dashboard

  1. 生成配置

    ./codis-dashboard --default-conifg | tee ../conf/dashboard.conf
    
  2. 修改配置

    vim ../conf/dashboard.conf
    
    coordinator_name = "zookeeper"                                                   # 外部儲存型別
    coordinator_addr = "192.168.92.137:2181,192.168.92.138:2181,192.168.92.139:2181" # 外部儲存IP列表
    product_name = "kid"                                                             # 專案名稱     
    product_auth = "123456"                                                          # 叢集密碼(注意:需要與redis配置中的requirepass保持一致)
    admin_addr = "0.0.0.0:18080"                                                     # RESTful API 埠
    
  3. 啟動程式

    nohup ./codis-dashboard --ncpu=24 --config=/usr/local/codis/conf/dashboard.conf --log=/usr/local/codis/log/dashboard.log --log-level=WARN &
    
  4. 檢視

    netstat -ntlp
    

    這裡寫圖片描述

  5. 停止程式(可選)

dashboard不要非正常停止,例如:kill -9 xxx,不然下次啟動會報錯,會報檔案已存在,需要刪掉之前的product資訊

./codis-admin --dashboard=192.168.92.137:18080 --shutdown

codis-proxy

  1. 生成配置

    ./codis-proxy --default-config | tee ../conf/proxy.conf
    
  2. 修改配置

    以下為需修改的配置,其他配置走預設

    product_name = "kid"                # 設定專案名 
    product_auth = "123456"             # 設定登入dashboard的密碼(注意:與redis中requirepass一致)
    session_auth = "56789"              # Redis客戶端的登入密碼(注意:與redis中requirepass不一致)
    admin_addr = "0.0.0.0:11080"        #繫結埠(Redis客戶端連線此埠)
    proxy_addr = "0.0.0.0:19000"        # 外部儲存型別
    
  3. 啟動程式

    nohup ./codis-proxy --ncpu=24 --config=../conf/proxy.conf --log=../log/proxy.log --log-level=WARN &
    
  4. 檢視

    netstat -ntlp
    

    這裡寫圖片描述

redis-sentinel

  1. 拷貝程式

    cp -rf $GOPATH/src/github.com/CodisLabs/codis/extern/redis-3.2.11/src/redis-sentinel /usr/local/codis/bin/
    
  2. 拷貝配置

    cp -rf $GOPATH/src/github.com/CodisLabs/codis/extern/redis-3.2.11/sentinel.conf /usr/local/codis/conf/
    
  3. 修改配置

    以下為需修改的配置,其他配置走預設

    bind 0.0.0.0
    protected-mode no
    port 26379
    dir "/usr/local/codis/data"
    
  4. 啟動程式

    cd /usr/local/codis/bin/
    nohup ./redis-sentinel ../conf/sentinel.conf &
    
  5. 檢視

    netstat -ntlp
    

    這裡寫圖片描述

codis-fe

  1. 生成配置

    ./codis-admin --dashboard-list --zookeeper=192.168.92.137:2181 | tee ../conf/codis.json
    
  2. 啟動程式

    nohup ./codis-fe --ncpu=4 --log=fe.log --log-level=WARN --zookeeper=192.168.92.137:2181 --listen=0.0.0.0:18090 &
    
  3. 檢視

    netstat -ntlp
    

    這裡寫圖片描述

元件整合

開啟監控介面

開啟瀏覽器,輸入http://192.168.92.137:18090便可看到codis叢集的監控介面。如下圖所示:

這裡寫圖片描述

加入codis-proxy

這裡寫圖片描述

加入codis-server

這裡寫圖片描述

分配slot到group

這裡寫圖片描述

sentinels

這裡寫圖片描述

完結

其他兩臺按照上述流程部署,新增進去組成叢集即可
至此,codis叢集部署完成

下一篇文章構思:nginx+lua直連codis,讀取快取資料,然後存至nginx本地快取,打造熱點資料多級快取