标签:不同的 客户端连接 配置 chmod dir 自己 info pytho 调用
分布式存储之-Redis
一、简介
redis常用于数据库读缓存和写缓存,通常写缓存需要考虑到数据一致性的问题,读缓存应用较多
redis是一个开源的,使用c语言编写的,支持网络交互的,可基于内存也可持久化的key-value数据库
二、安装部署
1、安装 wget http://download.redis.io/releases/redis-3.0.7.tar.gz tar xf redis-3.0.7.tar.gz cd redis-3.0.7 make PREFIX=/usr/local/redis install cp redis_init_script /etc/init.d/redis chmod +x /etc/init.d/redis 2、修改配置文件 vim /etc/init.d/redis EXEC=/usr/local/redis/bin/redis-server CLIEXEC=/usr/local/redis/bin/redis-cli cp /usr/local/redis-3.0.7/redis.conf /etc/redis/6379.conf vim /etc/redis/6379.conf daemonize yes 3、启动服务 /etc/init.d/redis start
通过salt-master批量安装:
cp redis-3.0.7.tar.gz salt/redis/files/ cp 6379.conf salt/redis/files/ cp /etc/init.d/redis salt/redis/files/
vim redis.sls
redis-install: file.managed: #调用file模块的managed方法 - name: /usr/local/src/redis-3.0.7.tar.gz #客户端的文件路径 - source: salt://init/files/redis-3.0.7.tar.gz #在服务器的路径 - user: root - group: root - mode: 755 cmd.run: #执行远程命令,使用cmd的run方法 - name: cd /usr/local/src/ && tar xvf redis-3.0.7.tar.gz && cd redis-3.0.7 && make PREFIX=/usr/local/redis install #编译安装 - unless: test -d /usr/local/redis #如果目录存在就不安装了 - require: #依赖 - file: redis-install #编译之前需要依赖redis-install执行成功 redis-config: file.managed: - name: /etc/redis/6379.conf #客户端的配置文件路径 - source: salt://init/files/6379.conf #服务器的配置文件路径 - user: root - group: root - mode: 644 redis-service: file.managed: - name: /etc/init.d/redis - source: salt://init/files/redis - user: root - group: root - mode: 755 cmd.run: - name: chkconfig --add redis && chkconfig redis on #设置服务开机启动 - unless: chkconfig --list | grep redis #如果已经在chkconfig --list列表就不执行上一步骤 service.running: #这是服务启动 - name: redis - enable: True - watch: #监控的文件 - file: redis-config - require: 服务启动依赖 redis-install和redis-service - cmd: redis-install - cmd: redis-service
三:redis数据类型格式
1、字符串数据格式
SET: 设置key,设置的值都是字符串格式string:
GET: 获取key的值:
KEYS: 显示所有的key
EXISTS: 判断key是否存在:返回1表示存在,0表示不存在
DEL: 删除指定的key:返回0表示没有指定的key可以删除,返回其他整数表示成功删除的key的数量,没有的key不报错
TYPE: 获取key的类型
INFO: 当前服务器的状态
SELECT: 更换数据库,redis默认支持16个数据库,默认在数据库0,可以使用sekect 进行更换数据库
FLUSHALL: 清空整个数据库
APPEND:追加
INCR:自增,如果key不存在就创建并设置value默认为1
DECR:自减,value自减1:
INCRBY :指定自增value的整数值:
DECRBY:指定自减value的值:
INCRBYFLOAT :设置浮点数的value
MSET 和 MGET:批量创建和获取key
STRLEN:获取key字符串的长度
2、散列数据类型:
HSET:命令用于为哈希表中的字段赋值,如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作,如果字段已经存在于哈希表中,旧值将被覆盖
HGET:获取key:
HGETALL:获取key的所有值
HMSET、HMGET、HMGETALL:批量创建、批量获取并获取所有的key:
HDEL:删除指定的key
3、列表数据类型
不同的数据类型的命令是不通用的,如list与string的命令是不能通用的。出了set命令之外
LPUSH:从左侧添加
RPUSH:从右侧添加
LLEN:获取列表的长度:
LPOP:从左侧弹出列表中的值
RPOP:从右侧弹出列表中的值
LINDEX:获取最后一个元素:
LRANGE :获取指定范围的元素
4、集合数据类型的操作
集合默认是无序的,列表是有序的,有序是只按照添加的循序保持位置
SADD:创建并给集合赋值
SMEMBERS:获取集合中的所有值
SISMEMBER:判断一个值是不是在集合当中,在返回1,否则返回0
SDIFF:求两个集合的差集:
SINTER:求并集,即在多个集合当中共同包含的值,可以是多个集合
SUNION:求并集,即在每个元素都出现的值只统计一次
ZADD:创建有序队列,保持值的位置固定
ZSCORE:获取值的分数
ZRANGE:根据值的分数排序获取值
四、持久化
redis支持两种持久化,分别是rdb和aof
rdb:指定的时间内快照存放在本地
aof: 将所有执行过的命令保存在本地,这种方式更像mysql的binlog
在服务器宕机时,如果是快照的方式,数据将会丢失一部分,而aof则损失的较小,并且在后台会进行重写
save 900 1 #900秒以内有1个key发生变化就快照 save 300 10 #300秒以内有10个key发生变化就快照 save 60 10000 #60秒内有10000个key变化就快照 rdbcompression yes #持久化到RDB文件时,是否压缩,“yes”为压缩,“no”则反之 rdbchecksum yes #读取和写入的时候是否支持CRC64校验,默认是开启的 dbfilename dump.rdb #保存的文件的名称 dir /usr/local/redis #快照文件的保存路径
SAVE:阻塞保存
BGSAVE:在后台保存,不阻塞
使用AOF进行持久化:
appendonly yes #默认为no,改为yes appendfilename "appendonly.aof" #保存的文件名,路径为rdb指定的file目录
五、Redis主从
一个主服务器可以有多个从服务器,而且从服务器也可以有主服务器,主从复制时非阻塞的,通过fork主进程主服务器收到从服务器的sync命令,就在后台执行bgsave,执行完毕后将保持的rdb文件发给客户端,客户端收到后将rdb载入到内存,新版本的支持增量备份
在从服务器执行命令:
SLAVEOF 192.168.4.100 6379 #主服务器的地址和端口
查看从服务器的info信息
六、Redis集群:
1、简介
四种大方案:
1)客户端分片,优势是比较灵活,不存在单点故障,缺点是添加节点需要重新配置,数据要手动同步
2)代理:代理分片,有proxy代理取数据,可以为proxy配置算法,如Twemproxy
3)Redis Cluster:在3.0版本以后支持,无中心,在某种情况下会造成数据丢失
4)Coodis:豌豆荚的开源方案
2、配置集群
使用redis cluster:
需要至少6个机器,3主3从,下面创建8个客户端,另外2个做备用
先将配置文件复制到/opt,然后创建8个目录并生成8个不同端口、不同pid和不同rdb文件的redis.conf配置文件:
cd /opt/ mkdir `seq 7001 7008` cp /etc/redis/6379.conf . sed ‘s/6379/7001/g‘ 6379.conf >> 7001/redis.conf sed ‘s/7001/7002/g‘ 6379.conf >> 7002/redis.conf sed ‘s/7002/7003/g‘ 6379.conf >> 7003/redis.conf sed ‘s/7003/7004/g‘ 6379.conf >> 7004/redis.conf sed ‘s/7004/7005/g‘ 6379.conf >> 7005/redis.conf sed ‘s/7005/7006/g‘ 6379.conf >> 7006/redis.conf sed ‘s/7006/7007/g‘ 6379.conf >> 7007/redis.conf sed ‘s/7007/7008/g‘ 6379.conf >> 7008/redis.conf
批量启动redis:
for i in `seq 7001 7008`;do cd /opt/$i && /usr/local/redis/bin/redis-server /opt/$i/redis.conf;done
netstat -lntp|grep :700*
安装ruby管理工具:
yum install ruby rubygems -y
gem install redis
复制ruby的管理脚本:
cp /root/redis-3.0.7/src/redis-trib.rb /usr/local/bin/redis-trib #是一个ruby脚本,方便redis管理
创建集群:
redis-trib help redis-trib create --replicas 1 192.168.10.205:7001 192.168.10.205:7002 192.168.10.205:7003 192.168.10.205:7004 192.168.10.205:7005 192.168.10.205:7006
M: 9db0386330f3d66d0c7cac48dbf2dda1972c96c4 192.168.10.205:7001 #ID及IP和端口 slots:0-5460 (5461 slots) master #本机对应的分片位置,0-5460
插入的数据是轮训写入到各个redis server
集群操作:
cluster nodes #列出当前的主从
cluster info #当前的状态
向集群中添加节点:
redis-trib add-node 192.168.10.205:7007 192.168.10.205:7001 redis-trib add-node 要添加的节点和端口 添加到的目的节点和端口
添加主机以后需要重新分片:
redis-trib reshard 192.168.10.205:7007
七、Redis的管理工具
1)phpredisadmin工具
2)rdbtools管理工具
3)saltstack管理redis
4)通过codis完成redis管理
1、phpredisadmin工具
类似于mysqladmin管理mysql一样
安装部署
1、安装环境: yum install httpd php php-redis -y 2、下载管理包: git clone https://github.com/erikdubbelboer/phpRedisAdmin.git 3、更改名称并解决依赖: mv phpRedisAdmin admin cd admin git clone https://github.com/nrk/predis.git vendor #解决依赖包 4、启动http服务 /etc/init.d/httpd restart 5、访问 http://192.168.4.100/admin:
报错解决:
cd /var/www/html/admin/includes/ vim config.inc.php ‘name‘ => ‘7001‘, #名称 ‘host‘ => ‘192.168.10.205‘, #配置为自己的主机IP ‘port‘ => 7001, vim /var/www/html/admin/includes/common.inc.php #mb_internal_encoding(‘utf-8‘); 将此行改为注释
可以配置多个reids Server
2、rdbtools管理工具:
安装部署
yum install python-pip pip install rdbtools https://github.com/sripathikrishnan/redis-rdb-tools cd /opt/7001/ rdb -c memory dump_7001.rdb > memory.csv #然后将memory.csv文件下载到本地,即可用excel打开分析了
databases,key,大小,格式,长度,如下所示:
3、通过saltstack管理redis:
模块名称:redismod
官方文档地址:https://docs.saltstack.com/en/latest/ref/modules/all/index.html
4、通过codis完成redis管理:
codis简介:
豌豆荚,快速分布式缓存git地址:https://github.com/CodisLabs/codis
所有内容借鉴gitlab-豌豆荚
Codis 由四部分组成:
Codis Proxy (codis-proxy): 代理服务器做请求转发,codis-proxy 本身实现了 Redis 协议,codis-proxy 本身是无状态的.可以执行多个
Codis Dashboard (codis-config): codis工具,包括添加删除节点,并且自带一个dashboard,点一点即可
Codis Redis (codis-server): 基于2.8.13开发的分支,只能使用codis-server
ZooKeeper/Etcd: Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.
安装部署
1、安装go语言并设置环境变量: yum install golang -y #codis是基于go语言编写的,因此要安装go语言环境 mkdir /opt/gopath #保存go环境的路径 vim /etc/profile export GOPATH=/opt/gopath source /etc/profile
2、安装配置zookeeper,需要有java环境: wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz mv zookeeper-3.4.6 /usr/local/zookeeper cd /usr/local/zookeeper/conf/ cp zoo_sample.cfg /opt/zoo.cfg #复制配置文件 cd /opt/ mkdir zk1 zk2 zk3 #准备zookeeper 服务ID,每个服务器的ID是不同的 echo 1 > zk1/myid echo 2 > zk2/myid cho 3 > zk3/myid vim zoo.cfg #编辑配置文件
dataDir=/opt/zk1 #保存数据的命令
clientPort=2181 #客户端连接的端口 server.1 = 192.168.10.205:2887:3887 server.2 = 192.168.10.205:2888:3888 server.3 = 192.168.10.205:2889:3889
cp zoo.cfg zk1/zk1.cfg cp zoo.cfg zk2/zk2.cfg cp zoo.cfg zk3/zk3.cfg vim zk2/zk2.cfg #每个服务对应不同的目录
dataDir=/opt/zk2
clientPort=2182 vim zk3/zk3.cfg
dataDir=/opt/zk3
clientPort=2183
启动每个zookeeper 服务:
/usr/local/zookeeper/bin/zkServer.sh start /opt/zk1/zk1.cfg /usr/local/zookeeper/bin/zkServer.sh start /opt/zk2/zk2.cfg /usr/local/zookeeper/bin/zkServer.sh start /opt/zk3/zk3.cfg
查看每个节点的状态:
/usr/local/zookeeper/bin/zkServer.sh status /opt/zk1/zk1.cfg /usr/local/zookeeper/bin/zkServer.sh status /opt/zk2/zk2.cfg /usr/local/zookeeper/bin/zkServer.sh status /opt/zk3/zk3.cfg
连接到zookeeper节点:
/usr/local/zookeeper/bin/zkCli.sh -server 192.168.10.205:2181
标签:不同的 客户端连接 配置 chmod dir 自己 info pytho 调用
原文地址:https://www.cnblogs.com/wuhg/p/10329468.html