array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Codis集群安装配置 - 爱码网
一.借用网上codis架构图https://github.com/CodisLabs/codis
Codis集群安装配置
各组件作用说明
1.codis-proxy 相当于redis,是底层codis-server集群代理、
2.codis-group 是一个虚拟的节点机制通过槽位映射机制实现proxy与server的映射(一个组有一个master和多个slave组成,默认1024个槽位,redis cluster默认16384个槽位,不同的槽位内容放在不同group,通过zk查询key记录位置)
3.codis-fe 集群管理界面
4.codis-dashboard 集群管理中心

二. 环境搭建配置
系统centos7.1 64位系统
环境包
jdk1.8.0.91

机器分配
节点应用
codis节点
192.168.10.5
zk1 codis-proxy codis-fe codis-dashboard
redis-6379 6380 6381 6382
192.168.10.6
zk2 codis-proxy
redis-6379 6380 6381 6382
192.168.10.7
zk3
redis-6379 6380 6381 6382
zk集群简要配置(需要安装jdk--步骤略)
[[email protected] ~]# sed '/^$/ d;/^#/ d' /usr/local/zookeeper/conf/zk1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
server.1=192.168.10.5:2888:3888
server.2=192.168.10.6:2888:3888
server.3=192.168.10.7:2888:3888
-----------------------------------------------------------------------------------------------------------
echo 1 > /usr/local/zookeeper/data/myid
codis02 上操作类似 echo 2 > /usr/local/zookeeper/data/myid
codis03 上操作类似 echo 3 > /usr/local/zookeeper/data/myid
启动zk集群,检测zk状态是否正常

go环境编译安装
[[email protected] ~]# tar zxvf go1.7.3.linux-amd64.tar.gz
[[email protected] ~]# mv go /usr/local
[[email protected] ~]# mkdir /usr/local/codis
配置环境变量 vi /etc/profile
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=/usr/local/codis
path=$PATH:$HOME/bin:$GOROOT/bin:$GOPATH/bin
source /etc/profile
验证是否生效
[[email protected] ~]# go version
go version go1.7.3 linux/amd64
[[email protected] ~]# echo $GOPATH
/usr/local/codis
codis安装
mkdir -p $GOPATH/src/github.com/CodisLabs************************此目录不能为别的名

[[email protected] ~]# cd /usr/local/codis/src/github.com/CodisLabs/
[[email protected] ~]# git clone https://github.com/CodisLabs/codis.git -b release3.2
进行编译 cd /usr/local/codis/src/github.com/CodisLabs/codis
make ---------执行全部指令后,会在 bin 文件夹内生成 codis-proxy、codis-server三个可执行文件
Codis集群安装配置
修改配置信息
启动方式有两种
[[email protected] codis]# sed '/^#/ d;/^$/ d' config/dashboard.toml (修改了红字信息)
coordinator_name = "zookeeper"
coordinator_addr = "192.168.10.5:2181,192.168.10.6:2181,192.168.10.7:2181"
product_name = "codis-protal"
product_auth = ""
admin_addr = "0.0.0.0:18080"
migration_method = "semi-async"
migration_parallel_slots = 100
migration_async_maxbulks = 200
migration_async_maxbytes = "32mb"
migration_async_numkeys = 500
migration_timeout = "30s"
sentinel_client_timeout = "10s"
sentinel_quorum = 2
sentinel_parallel_syncs = 1
sentinel_down_after = "30s"
sentinel_failover_timeout = "5m"
sentinel_notification_script = ""
sentinel_client_reconfig_script = ""
---------------------------------------------------------------------------------------------------------------------------
[[email protected] codis]# sed '/^#/ d;/^$/ d' config/proxy.toml (修改了红字信息)
product_name = "codis-protal"
product_auth = ""
session_auth = ""
admin_addr = "0.0.0.0:11080"
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19000"
jodis_name = "zookeeper"
jodis_addr = "192.168.10.5:2181,192.168.10.6:2181,192.168.10.7:2181"
jodis_auth = ""
jodis_timeout = "20s"
jodis_compatible = true
----------------------------------------------------------------------------------------------------------------------------
新建4个codis-server节点(redis配置修改红字部分)
[[email protected] opt]# sed '/^#/ d;/^$/ d' /opt/redis-6379/redis.conf
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/opt/redis-6379/redis_6379.pid"
loglevel notice
logfile "/opt/redis-6379/redis_6379.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump_6379.rdb"
dir "/opt/redis-6379"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
----------------------------------------------------------------------------------------------------------------------------
服务启动【自带脚本方式】
cd $GOPATH/src/github.com/CodisLabs/codis/admin
./admin/codis-dashboard-admin.sh start 启动CODIS-DASHBOARD 外部存储
./admin/codis-proxy-admin.sh start 启动CODIS-PROXY 并加入CODIS-DASHBOARD管理
./admin/codis-server-admin.sh start 启动CODIS-SERVER
./admin/codis-fe-admin.sh start 启动CODIS-FE,可以通过127.0.0.1:9090访问管理界面
【手动运行命令后台运行】
./bin/codis-dashboard --ncpu=1 --config=config/dashboard.toml --log=dashboard.log --log-level=WARN &
./bin/codis-proxy --ncpu=1 --config=config/proxy.toml --log=proxy.log --log-level=WARN &
./bin/codis-fe --ncpu=1 --log=fe.log --log-level=WARN --zookeeper=192.168.10.5:2181 --listen=192.168.10.5:8090 & --管理页面端口
./bin/codis-server /opt/redis-6379/redis.conf
./bin/codis-server /opt/redis-6380/redis.conf
./bin/codis-server /opt/redis-6381/redis.conf
./bin/codis-server /opt/redis-6382/redis.conf
Codis集群安装配置
三.通过fe管理页面管理codis机器
浏览器访问http://192.168.10.5:8090进入管理页面
Codis集群安装配置
添加proxy代理
Codis集群安装配置
先添加4个分组,每个256个槽位,然后把codis-server加入到分组,组成一组两从
Codis集群安装配置
Codis集群安装配置
测试codis集群功能。停掉192.168.10.5:19000 这个proxy节点。检测工作是否正常
tag: 在10.5的节点上写入key,停掉10.5工作节点,在10.6上查询key
[[email protected] codis]# ./bin/redis-cli -h 192.168.10.5 -p 19000
192.168.10.5:19000> set fctee hello-world
OK
[[email protected] codis]# ./bin/redis-cli -h 192.168.10.6 -p 19000
192.168.10.6:19000> get fctee
"hello-world"
结果工作正常
tag:测试redis-key值写入,分配均衡
#!/bin/bash
for ((i=0;i<20000;i++))
do
echo -en "helloworld" | redis-cli -h 192.168.10.5 -p 19000 -x set name$i >>redis.log
done

------------参考链接

相关文章: