本文屬原創,轉載請註明此信息: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安裝
l 官方文檔: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.