Codis搭建,Codis + Pika

TerarkDB + Pika

https://cloud.tencent.com/developer/news/366922

-----------------------------------------

pika的info統計有多少個key,需要使用 info keyspace 1來觸發

與redis比較

pika相對於redis,最大的不同就是pika是持久化存儲,數據存在磁盤上,而redis是內存存儲,由此不同也給pika帶來了相對於redis的優勢和劣勢。

優勢:

  • 容量大:Pika沒有Redis的內存限制, 最大使用空間等於磁盤空間的大小
  • 加載db速度快:Pika 在寫入的時候, 數據是落盤的, 所以即使節點掛了, 不需要rdb或者oplog,pika 重啓不用加載所有數據到內存就能恢復之前的數據, 不需要進行回放數據操作。
  • 備份速度快:Pika備份的速度大致等同於cp的速度(拷貝數據文件後還有一個快照的恢復過程,會花費一些時間),這樣在對於百G大庫的備份是快捷的,更快的備份速度更好的解決了主從的全同步問題

劣勢:

  • 由於Pika是基於內存和文件來存放數據, 所以性能肯定比Redis低一些, 但是我們一般使用SSD盤來存放數據, 儘可能跟上Redis的性能。

SST文件(sorted string table files),數據永久化存儲到磁盤,可見,SST採取分層結構是爲了最大限度減小插入新entry時的開銷

hostname  -i

1.安裝

yum install install autoconf automake libtool

proxy.toml中要寫實際地址,不要使用0.0.0.0.或者127.0.0.0,否則綁定proxy的時候invalid xauth, please check product name & auth

admin_addr = "192.168.153.130:11080"

 

https://blog.csdn.net/Dr_Franks/article/details/83821320#2_codis32_65(單機)

https://www.cnblogs.com/zhoujinyi/p/9950105.html(詳細集羣)

 

codis-server是哨兵模式,不是集羣,所以客戶端連接codis-proxy的時候,不要使用集羣,連接任意一個proxy就可以,proxy自己會負載均衡數據到codis-server

 

instance-mode : classic

classic模式,又叫多庫版 (codis + 經典模式)
在sharding模式,又叫分片模式,redis-cli登錄後使用會出現: ERR Partition not found

 

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

 

pika 安裝

sudo yum install snappy-devel protobuf-compiler protobuf-devel bzip2-devel zlib-devel bzip2

https://www.jianshu.com/p/07bc0483e56c

 db dbsync log 這3個文件夾都會自己創建

3.2以後的版本配置sharding模式   https://github.com/Qihoo360/pika/wiki/Pika-Sharding-Tutorials

在Group的Keys欄目中看不到key的變化,但是使用redis-cli連接到pika後,可以驗證keys的確被均勻的確寫到了3臺服務器上

其中Memory顯示的是   當前內存/最大內存  因爲pika的最大內存是256M(wiki上說不能顯示修改),所以一直顯示256M,如果改成redis,則可以更大(使用config set maxmemory來修改最大內存)

 

4.異常問題總結

4.1. proxy還是dashboard,都會在zk上註冊自己的節點,同時在程序正常退出的時候會刪掉對應的節點,但如果異常退出或試用kill -9 {pid}就會導致zk的節點無法刪除,在下一次啓動的時候會報“zk: node already exists”的錯誤,使用kill pid替代

如果出錯了,使用以下方式恢復:

./bin/codis-admin --remove-lock --product=codis-demo --zookeeper=192.168.153.128:2181

 

5. 配置classic模式(codis3.2 + pika2.3.6)
1.1 啓動dashboard 修改dashboard.toml的"註冊中心"
coordinator_name = "zookeeper"
coordinator_addr = "127.0.0.1:2181"
nohup ./bin/codis-dashboard --ncpu=1 --config=config/dashboard.toml --log=log/dashboard.log --log-level=WARN &
這個 admin_addr = "0.0.0.0:18080" 是dashboard的監聽端口,接收來自 admin工具命令(線上環境不要監聽所有ip,要改成實際內網IP)

1.2 啓動proxy,修改proxy配置proxy.toml
nohup ./bin/codis-proxy --ncpu=4 --config=config/proxy.toml --log=log/proxy.log --log-level=WARN &
這個 admin_addr = "0.0.0.0:11080" 是dashboard的監聽端口,接收來自 admin工具命令

1.3 將dashboard和proxy關聯起來 (其實可以使用zookeeper進行關聯?)
./bin/codis-admin --dashboard=127.0.0.1:18080 --create-proxy -x 127.0.0.1:11080

1.4啓動管理配置界面 codis-fe
nohup ./bin/codis-fe --ncpu=1 --log=log/fe.log --log-level=WARN --zookeeper=127.0.0.1:2181 --listen=0.0.0.0:80 & 


1.5給group添加server (pika)
pika 3.XX 第一次啓動的時候,在classic模式下無法加入group,要先以sharding模式添加到group,然後再修改爲classic模式,就可以正常讀寫,否則報: ERR SLOTSINFO only support on sharding mode
因爲3.XX默認是支持sharding的,要使用codis + sharding 模式搭建集羣 配置方法參考https://github.com/Qihoo360/pika/wiki/Support-Cluster-Slots,注意codis要使用left2right的版本(我還沒有驗證)
修改pika.conf中 instance-mode爲sharding模式後, 啓動pika 
nohup ./bin/pika -c ./conf/pika.conf &
添加到group
nohup ./bin/codis-admin --dashboard=192.168.153.128:18080 --group-add --gid=1 --addr=192.168.153.128:9221
然後再關閉pika,修改pika.conf中 instance-mode爲classic

使用2.XX版本可以直接加入codis的group

1.6要使用codis-proxy 還要在dashboard頁面上執行一次reblance all slots 
配置好主從以後,如果主down了,從是無法自動主從切換的,要配置哨兵,這裏還要注意,Slave提升成Master之後,老Master還需要執行slaveof才能進行新的複製
https://blog.csdn.net/weixin_43832846/article/details/90024274 有配置哨兵的方式 


1.7安全認證(如果關閉了防火牆)
pika.conf中  userpass和 requirepass都要配置密碼, userpass爲空,那麼就相當於是普通用戶的權限,這個時候執行一些需要管理員權限的命令或者黑名單中的命令,都是不被允許的
codis中 proxy.toml和dashboard.toml都要配置密碼,這樣訪問 proxy的時候,就需要和redis那樣使用密碼驗證了

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.28.142.29" port protocol="tcp" port="9221" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.31.52.9" port protocol="tcp" port="9221" accept"
還要配置如下端口:
11080
18080
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.28.142.29" port protocol="tcp" port="18080" accept"
firewall-cmd --reload


查看已經開放的端口
firewall-cmd --list-ports 查看開放的端口
firewall-cmd --list-all   包括策略
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl start firewalld.service

./redis-cli -h 10.28.142.29  -p 9221
./redis-cli -h 10.31.52.9  -p 9221

export GOPATH=/alidata/usr/go/
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY=https://goproxy.io
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64
export PATH=$PATH:$JAVA_HOME/bin 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export ZOOKEEPER_HOME=/alidata/usr/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf


firewall-cmd --permanent --add-port=19000/tcp 


nohup ./bin/codis-dashboard --ncpu=1 --config=config/dashboard.toml --log=log/dashboard.log --log-level=WARN &
nohup ./bin/codis-proxy --ncpu=4 --config=config/proxy.toml --log=log/proxy.log --log-level=WARN &
nohup ./bin/codis-fe --ncpu=1 --log=log/fe.log --log-level=WARN --zookeeper=10.28.142.29:2181 --listen=10.28.142.29:10080 &

nohup ./bin/pika -c ./conf/pika.conf &

6.分片模式搭建
0.codis搭建
下載left2right修改過的pika版本 codis-pika 3.2 :https://github.com/left2right/codis
放到gosrc github.com/left2right/codis下do,然後make
1.在codis上爲server分配slot,
2.在server上執行slot分配命令(要和codis上分配的slot保持一致):
pkcluster info slot
pkcluster addslots 0-1023 (可以在單個pika server上分配1024個slot),在虛擬機上搭建分片模式(4核 + 4G + 96G內存,硬件性能太弱了pkcluster addslots 0-1023會報錯,
驗證了下,內存修改爲2G應該可以),
這個命令執行的時候會報錯

 

7.監控

influxdb + Grafana 
systemctl start grafana-server

codis-proxy.toml中配置influxdb的url

metrics_report_influxdb_server = "http://192.168.153.128:8086"

壓力測試 redis-benchmark -h 127.0.0.1 -p 9221 -c 100  -t set -n 1000000  

 

8.zset的性能指標

Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz(4核)  + 32G + SSD 阿里雲服務器
zrange pika3.2 classic-------------------------------------------------------------------
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取5697-5700 3000qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取500-502   22000qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取1500-1502 9800qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取10002-10004 1700qps

zrevrange
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取5697-5700 1670qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取500-502   13000qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取1500-1502 5600qps    
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取10002-10004 950qps   

ZRangeByScore(score從0--12000)
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取5697-5700 2700 qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取500-502   18000 qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取1500-1502 8500 qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取10002-10004 1600 qps

ZRevRangeByScore(score從0--12000)
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取5697-5700 1470qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取500-502   800qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取1500-1502 900qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取10002-10004 4200qps
pika 3.2 thread num: 12 Thread Pool Size 12 cpu: 370% 取11500-11502 13000qps


pika2.3-------------------------------------------------------------------
zrange
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取5697-5700 1200 qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取500-502   12000qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取1500-1502 4500qps   添加/刪除/讀取的頻率一樣的時候, (讀寫越頻繁)性能下降比較厲害,只有580,   
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取10002-10004 1200 qps

zrevrange
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取5697-5700 400qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取500-502   4800qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取1500-1502 1600qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取10002-10004 3400qps

ZRangeByScore(score從0--12000)
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取5697-5700 2800 qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取500-502   21000 qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取1500-1502 9300 qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取10002-10004 1600 qps

ZRevRangeByScore(score從0--12000)
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取5697-5700 1470qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取500-502   820qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取1500-1502 890qps
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取10002-10004 4300
pika 2.3 thread num: 12 Thread Pool Size 12 cpu: 370% 取11500-11502 13500

 

普通key的讀速度大約是set的3倍,redis get/set速度是一樣的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章