codis安裝手冊


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

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

一、 java安裝

l  centOS 自帶的openJDK需要卸載

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

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

3、rpm -qa | grep java           查看信息

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

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_64

 

4、卸載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

5、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

 

二、 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/
 

三、 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

 

 

 

四、 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

 

 

五、 codis部署

(一)、部署zookeeper(可部署1個,建議部署多台[奇數]提供集群服務,須安裝JDK)
1、cd /usr/local/zookeeper-3.4.6/conf
2、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
3、配置host  注意下面ip是zk的實際ip地址
           vim /ect/hosts
           ip zookeeper-1
           ip zookeeper-2
           ip zookeeper-3
4、vim /data/zookeeper/data/myid
           在此文件內編輯自己對應的serverID. serverID見上述紅色標記的數字
5、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(部署多台形成集群)

1、mkdir /usr/local/codis

2、mkdir /usr/local/codis/conf

3、mkdir /usr/local/codis/log

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

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

6、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

                                                                 時由於文件尺寸較小導致頻繁的重寫

7、mkdir /var/lib/redis

8、cd /usr/local/codis

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

10、通過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(只需部署一台)

1、mkdir /usr/local/codis

2、mkdir /usr/local/codis/conf

3、mkdir /usr/local/codis/log

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

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

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

7、vim /etc/hosts

ip zookeeper-1

ip zookeeper-2

ip zookeeper-3

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

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

    設置dashboard_addr=ip:18087

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

10、./codis-config -c ./conf/config.ini slot init (這個命令執行時,codis-proxy必須全部在未啟動狀態)

{

      "msg": "OK",

      "ret": 0

}

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

 

 

 

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

1、mkdir /usr/local/codis

    2、mkdir /usr/local/codis/conf

3、mkdir /usr/local/codis/log

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

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

6、vim /etc/hosts

ip zookeeper-1

ip zookeeper-2

ip zookeeper-3

7、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

8、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 &

 

 

 

六、 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

 

 

七、 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分配給新的組。

八、 codis-server回收

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

l  然后刪除從redis,直至僅剩主redis

l  最后刪除組

 

 

九、 安全性設置密碼變更

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

2、通過web或者指令下線codis-proxy,重新上線codis-proxy

3、修改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

        4、上述操作完后,重啟dashboard

 

十、 常見問題

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無法自動完成主從數據同步。

 

十一、       Codis應用場景

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

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

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

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

 

十二、       Codis使用優化事項

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

2.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM