codis安裝手冊

本文屬原創,轉載請註明此信息:http://www.cnblogs.com/robinjava77/p/5465150.html (Robin)html

codis交流羣 240361424  感謝羣裏各位羣友的熱情分享及特殊問題的解疑java

1、 java安裝linux

l  centOS 自帶的openJDK須要卸載git

一、head -n 1 /etc/issue             查看linux系統版本github

二、java -version                      查看linux java版本,若顯示的openJDK須卸載golang

三、rpm -qa | grep java           查看信息web

tzdata-java-2014g-1.el6.noarchredis

java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64算法

java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64apache

 

四、卸載openJDK

yum -y remove java java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64

yum -y remove java java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64

五、java –version

-bash: java: command not found   說明卸載成功

l  安裝:    mkdir /usr/java

cd /usr/java

上傳文件 jdk-7u79-linux-x64.rpm

chmod +x jdk-7u79-linux-x64.rpm

rpm -ivh jdk-7u79-linux-x64.rpm

l  配置環境

vim /etc/profile

#set java environment

JAVA_HOME=/usr/java/jdk1.7.0_79

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

PATH=$JAVA_HOME/bin:$PATH

l  檢查

java -version

 

java version "1.7.0_79"

Java(TM) SE Runtime Environment (build 1.7.0_79-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

 

!出現上述則安裝成功

還可使用javac 或者 java 命令 來檢查

l  清除安裝包

rm -rf jdk-7u79-linux-x64.rpm

 

2、 Zookeeper安裝

l  建立目錄 mkdir /usr/local/upload 進入該目錄

l  下載         wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

l  安裝        tar -xzf zookeeper-3.4.6.tar.gz -C /usr/local/
 

3、 go安裝

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

l  解壓:    tar -zxvf go1.4.1.linux-amd64.tar.gz

mv go /usr/local/

cd /usr/local/go/src/

l  相關依賴包環境安裝:

      yum groupinstall "Development Tools"

yum install -y git

l  編譯go:

          /usr/local/go/src/all.bash

l  設置環境變量:

          vim /etc/profile

                     #set go enviroment

export GOROOT=/usr/local/go

export GOBIN=$GOROOT/bin

export PATH=$PATH:$GOBIN

export GOPATH=$GOROOT/bin

source /etc/profile

l  檢測go是否能夠正常使用:

編輯文件命令:vim hello.go

文件內容:

    package main

    import "fmt"

 

    func main(){

        fmt.Printf("hello,world\n")

     }

測試go

命令:go run hello.go

輸出:hello,world

 

 

 

4、 codis安裝

官方文檔:https://github.com/CodisLabs/codis/blob/master/doc/tutorial_zh.md

l  下載codis代碼:

      go get -u -d github.com/CodisLabs/codis

l  編譯codis:

      cd /usr/local/go/bin/src/github.com/CodisLabs/codis

      執行make命令,編譯

      執行make gotest 測試

      執行成功後,會生成bin目錄:assets  codis-config  codis-proxy  codis-server

 

 

5、 codis部署

(一)、部署zookeeper(可部署1個,建議部署多臺[奇數]提供集羣服務,須安裝JDK)
一、cd /usr/local/zookeeper-3.4.6/conf
二、vim zoo.cfg
           tickTime=2000
           initLimit=5
           syncLimit=2
           dataDir=/data/zookeeper/data
           #dataLogDir=/data/zookeeper/logs
           clientPort=2181
           server.1=zookeeper-1:2888:3888
           server.2=zookeeper-2:2888:3888
           server.3=zookeeper-3:2888:3888
三、配置host  注意下面ip是zk的實際ip地址
           vim /ect/hosts
           ip zookeeper-1
           ip zookeeper-2
           ip zookeeper-3
四、vim /data/zookeeper/data/myid
           在此文件內編輯本身對應的serverID. serverID見上述紅色標記的數字
五、sh /usr/local/zookeeper-3.4.6/bin/zkServer.sh start
           JMX enabled by default
           Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
           Starting zookeeper ... STARTED
 
           ./zkCli.sh -server ip:2181 能正確訪問 則說明zk部署成功
           zk啓動成功(依次將zk集羣啓動)
 
 
(二)、部署codis-server(部署多臺造成集羣)

一、mkdir /usr/local/codis

二、mkdir /usr/local/codis/conf

三、mkdir /usr/local/codis/log

四、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/bin/codis-server /usr/local/codis/

五、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/test/redis.temp /usr/local/codis/conf/redis_6379.conf

六、vim /usr/local/codis/conf/redis_6379.conf

主redis配置設置:

requirepass pwd                                codis-server密碼 若使用密碼,則不支持codis-ha插件

masterauth pwd                                  codis-server 從同步主密碼(建議主redis也配置此項,codis-ha會自

                                                                  動作主從切換,避免屆時補充此項)

#save 900 1

#save 300 10

#save 60 10000                             這裏是爲了關閉主redis的rdb

rdbcompression no                             一個CRC64的校驗就被放在了文件末尾,當存儲或者加載rbd文件

                                                                  的時候會         有一個10%左右的性能降低

appendonly no                            關閉AOF持久化策略

從redis配置設置:

requirepass pwd                                codis-server密碼(建議從redis也配置此項,codis-ha會自動作主從切

換,避免屆時補充此項)

masterauth pwd                                 codis-server 從同步主密碼

save 900 1

save 300 10

save 60 10000                               這裏是爲了關閉主redis的rdb 從redis開放rdb數據持久策略

rdbchecksum yes

dbfilename dump.rdb                        快照的文件名

dir /var/lib/redis                                  存放快照的目錄

appendonly yes                                    開放aof持久化策略

appendfsync everysec                      每秒鐘強制寫入磁盤一次,在性能和持久化方面作了很好的折中,

                                                                 是受推薦的方式

no-appendfsync-on-rewrite    yes 設置爲yes表示rewrite期間對新寫操做不fsync,暫時存在內存中,等

                                                                 rewrite完成後再寫入,建議yes

auto-aof-rewrite-percentage 100   當前AOF文件大小是上第二天志重寫獲得AOF文件大小的二倍時,自

                                                                 動啓動新的日誌重寫過程

auto-aof-rewrite-min-size 64mb     當前AOF文件啓動新的日誌重寫過程的最小值,避免剛剛啓動Reids

                                                                 時因爲文件尺寸較小致使頻繁的重寫

七、mkdir /var/lib/redis

八、cd /usr/local/codis

九、nohup ./codis-server ./conf/redis_6379.conf  > ./log/codis_server_6379.log  2>&1 &

十、經過redis-cli

redis-cli -h IP -p PORT 訪問codis-server

CONFIG GET requirepass

         (error) NOAUTH Authentication required.

                   auth pwd

                   OK

CONFIG GET requirepass

1) "requirepass"

2) "pwd"

按照上述命令執行,獲得如上現象,則說明codis-server啓動成功,而且密碼設置成功

 

 

 

 

 

 

 

 

 

 

(三)、部署codis-config(只需部署一臺)

一、mkdir /usr/local/codis

二、mkdir /usr/local/codis/conf

三、mkdir /usr/local/codis/log

四、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/bin/codis-config /usr/local/codis/

五、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/config.ini /usr/local/codis/conf/

六、cp -r /usr/local/go/bin/src/github.com/CodisLabs/codis/bin/assets /usr/local/codis 

七、vim /etc/hosts

ip zookeeper-1

ip zookeeper-2

ip zookeeper-3

八、vim /usr/local/codis/conf/config.ini

    設置zk=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181

    設置dashboard_addr=ip:18087

九、nohup ./codis-config -c ./conf/config.ini dashboard > ./log/codis_config.log  2>&1 &

十、./codis-config -c ./conf/config.ini slot init (這個命令執行時,codis-proxy必須所有在未啓動狀態)

{

      "msg": "OK",

      "ret": 0

}

         看到上述消息,則說明執行slot init成功

 

 

 

(四)、部署codis-proxy(可部署一臺,建議部署多臺)

一、mkdir /usr/local/codis

    二、mkdir /usr/local/codis/conf

三、mkdir /usr/local/codis/log

四、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/bin/codis-proxy /usr/local/codis/

五、cp /usr/local/go/bin/src/github.com/CodisLabs/codis/config.ini /usr/local/codis/conf/

六、vim /etc/hosts

ip zookeeper-1

ip zookeeper-2

ip zookeeper-3

七、vim /usr/local/codis/conf/config.ini

設置zk=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181

設置 dashboard_addr=ip:18087

         設置 password=pwd                若使用密碼,則不支持codis-ha插件。3.0以上版本支持密碼

    設置proxy_id=proxy_1

八、nohup ./codis-proxy -c ./conf/config.ini -L ./log/proxy.log  --cpu=8 --addr=本proxy服務ip:19000 --http-addr=本proxy服務ip:11000 > codis_proxy_1.log  2>&1 &

 

 

 

6、 codis-HA插件(codis官方提供的從redis自動升級爲主redis的插件,須先安裝go)

codis-ha不支持auth,若使用codis-ha插件,請去掉密碼設置

l  下載         cd /usr/local

go get github.com/ngaut/codis-ha

cd /usr/local/go/bin/src/github.com/ngaut/

cp -r codis-ha /usr/local

cd /usr/local/codis-ha

go build

l  建立腳本vim start_codis_ha.sh

l  內容         codis-ha --codis-config=codis-configIP:prort --log-level=「info」 --productName=test &> ./logs/codis-ha.log &

建立日誌目錄:mkdir logs

給sh文件賦予權限:chmod +x start_codis_ha.sh

l  啓動         sh start_codis_ha.sh

 

 

7、 codis擴容(數據遷移)

l  部署好codis-server

l  Server Groops à +New Server Group 下圖輸入分組編號

 

l  選擇新增的組,點擊 +Add Ner Redis Instance  輸入新增codis-server ip:port

 

l  上述操做添加完主從後,點擊 」Migrate Status」 à Migrate Slot(S)

輸入給擴容組分配的slot,第三項不能填寫-1;

 

關於擴容分slot選擇建議:將如今key最多的組內的slot分配給新的組。

8、 codis-server回收

l  先把要回收的codis-server的slot移動到仍在繼續使用的組中

l  而後刪除從redis,直至僅剩主redis

l  最後刪除組

 

 

9、 安全性設置密碼變動

一、修改codis-proxy的config.ini 中的password

二、經過web或者指令下線codis-proxy,從新上線codis-proxy

三、修改codis-server的安全性設置(若採用這種不重啓redis-server的方式修改密碼,請將修改的密碼 同時修改進redis-server配置文件中,以防忘記)

1) redis-cli -h ip -p port(下述命令都是在redis客戶端執行)

         2) CONFIG SET requirepass password

         3) CONFIG GET requirepass

提示:(error) NOAUTH Authentication required 則配置修改爲功

             4) auth password

                   5) CONFIG GET requirepass  à 1) "requirepass" 2) " password "

                 6) redis-cli -a password -h ip -p port

                  7) CONFIG GET masterauth password

        四、上述操做完後,重啓dashboard

 

10、 常見問題

1)、Dashboard啓動後,關閉,再啓動,須要先到zookeeper裏面刪除:

/zk/codis/db_test/dashboard

2)、codis-config(dashboard)、codis-proxy須要以nohup方式啓動

3)、zookeeper要求JAVA的環境才能運行,且jdk版本要求6.0以上(含6.0)

4)、codis-ha或者手動把一個slave提高爲主以後,原有的主從關係就沒有了,須要手動去把新提高主redis的數據同步到各個從redis中,然設置主從關係。

設置主從關係方式:

①web界面操做,刪除原來master redis信息,重啓掛掉的redis,將這個redis添加進組;

②指令操做方式

                    codis-config server list

                    codis-config server add <group_id> <redis_addr> <role>

                    codis-config server remove <group_id> <redis_addr>

                    codis-config server promote <group_id> <redis_addr>

                    codis-config server add-group <group_id>

                    codis-config server remove-group <group_id>

建議使用web界面操做,操做簡單

5)、下線任一個proxy後且仍存在提供服務的proxy,codis還是能夠正常使用的,可是從新上線的proxy若出現一個配置不正常的proxy,則整個codis不可用。

6)、codis的1024個slot必需要分配完,才能對外提供服務,不然沒法將添加的proxy改成online;

7)、solts遷移錯誤問題,

登陸zk取消遷移任務

1.zkCli.sh –server ip:port

2.rmr /zk/codis/db_test/migrate_tasks

3.create /zk/codis/db_test/migrate_tasks 「migrate」

4.rmr /zk/codis/db_test/fence

5.rmr /zk/codis/db_test/dashboard

6.rmr /zk/codis/db_test/proxy

7. ./codis-config -c ./conf/config.ini slot init

         8)、部署完成後,若codis裏的主從經過codis-ha進行自動切換後,須經過zkCli 進入zk,使用命令 「CONFIG SET key value」 對主從redis按照「五à(二)à6」的要求進行修改。

        

         9)、主從codis-server,若對codis-server設置密碼,requirepass和masterauth未設置相同的密碼,codis沒法自動完成主從數據同步。

 

11、       Codis應用場景

海量的key,value值小於1M的緩存場景。

① 數據根據key,分佈在 1024 個 slot 中,分佈算法:crc32(key) % 1024;

② 數據遷移是由 codis-config 發起的,在 codis-config 看來,數據遷移的最小單位是 slot

         ③ 數據遷移時,選取slots的key-value 傳輸目標codis-server,完成後,刪除本地key-value。這個操做是原子操做

 

12、       Codis使用優化事項

1.關閉group master 的rdb和aof,提升master性能,開放slave的rdb和aof,確保數據不丟失;

2.

相關文章
相關標籤/搜索