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速度是一样的

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