redis-cli -h 127.0.0.1 -p 6379 [-a passwprd] [-n database] set cli1 1 ---- cli执行命令
#系统内核有关配置
#tcp_backlog
#RDB
save 900 1 #当有一条Keys数据被改变时,900秒刷新到Disk一次 save 300 10 #当有10条Keys数据被改变时,300秒刷新到Disk一次 save 60 10000 #当有10000条Keys数据被改变时,60秒刷新到Disk一次
#AOF
appendonly yes #启用AOF appendfilename #保存的文件!不能有路径 appendfsync #always | everysec | no
no-appendfsync-on-rewrite yes #在日志重写时不进行命令追加操作 auto-aof-rewrite-percentage 100 #当增加文件大小达到原来的AOF文件的"100%" 时,自动进行重写 auto-aof-rewrite-min-size 64mb #启动日志重写的最小值
redis-cli > info
找到最后几行:
db0: key的数量是:11,
内存使用量是: 891.52k
#主从配置
主:6379,从6380,6381
cp /usr/local/redis cp /usr/local/redis_6380
cp /usr/local/redis cp /usr/local/redis_6381
修改从6380和6381的redis.conf:配置文件
vi /usr/local/redis_slave_6380/redis.conf
bind 127.0.0.1 port 6380 pidfile /var/run/redis_slave_6380.pid slave 127.0.0.7 6379 slave-read-only yes dir /usr/local/redis_slave_6380/data #masterauth 123456
vi /usr/local/redis_slave_6381/redis.conf
bind 127.0.0.1 port 6381 pidfile /var/run/redis_salve_6381.pid slave 127.0.0.7 6379 slave-read-only yes dir /usr/local/redis_slave_6381/data
#masterauth 123456
info replication 可看出6380是从
从服务器变成主服务器:
杀掉住服务器
重启开启66379的redis服务
sentinel(哨兵)配置
vi /usr/local/redis/sentinal.conf
port 36379
sentinel monitor mymaster 127.0.0.1 6379 2 --监视一个主服务器,判断主服务器失效至少需要2个
Sentinel同意(不要两个,自动故障迁移就不执行)
sentinel down-after-milliseconds mymaster 60000 --指定Sentinel认为服务器已经断线的毫秒数(主观掉线)
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1 --故障转移时,每次只有"1"个服务器处于不能处理命令的状态(同时对新服务器同步
vi /usr/local/redis/sentinal-36379.conf
port 36379
sentinel monitor mymaster 127.0.0.1 6379 2 --监视一个主服务器,判断主服务器失效至少需要2个Sentinel同意(不要两个,
自动故障迁移就不执行)
sentinel down-after-milliseconds mymaster 60000 --指定Sentinel认为服务器已经断线的毫秒数(主观掉线)
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1 --故障转移时,每次只有"1"个服务器处于不能处理命令的状态(同时对新服务器同步
启动两个sentinel
redis-server /usr/local/redis/sentinal.conf --sentinel
redis-server /usr/local/redis/sentinal-36379.conf --sentinel
redis-cli -p 26379 --连接sentinel
127.0.0.1:26379> sentinel masters
127.0.0.1:26379> sentinel master mymaster
127.0.0.1:26379> sentinel slaves mymaster
127.0.0.1:26379> sentinel get-master-addr-by-name mymaster
测试
sentinel down-after-milliseconds mymaster 60000 #60秒 所以下面设置70秒
127.0.0.1:6379> debug sleep 70
此时 6381 变成了主服务器, 6379 变成了从服务器
Sentinel commands
常用- PING This command simply returns PONG.
- SENTINEL masters Show a list of monitored masters and their state.
- SENTINEL master
<master name>
Show the state and info of the specified master. - SENTINEL slaves
<master name>
Show a list of slaves for this master, and their state. - SENTINEL sentinels
<master name>
Show a list of sentinel instances for this master, and their state. - SENTINEL get-master-addr-by-name
<master name>
Return the ip and port number of the master with that
少用
内存优化
hash-max-ziplist-entries 512 #最大key的个数 !测试过程中256较佳
hash-max-ziplist-value 64 #最大键值长度 !1024
!可以将类似javabean的各个属性值保存在hash数据结构里,充分利用内存压缩
redis-cluster配置
复制三份redis #要删除appendonly,dump.db文件,不然创建集群时会有下面的错误
cp -r /usr/local/redis /usr/local/redis-cluster-7000
cp -r /usr/local/redis /usr/local/redis-cluster-7001
cp -r /usr/local/redis /usr/local/redis-cluster-7002
修改redis.conf 以7000配置作为实例
#最少修改配置
port 7000
cluster-enabled yes
cluster-config-file nodes.conf #这个是启动服务器服务时自动创建的文件
cluster-node-timeout 5000
appendonly yes
其他
dir /usr/local/redis-cluster-7000/data
分别启动集群服务
创建集群 #ruby需要安装2.2以上的
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \ #--replicas 1 表示每个主几点创建从节点
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
客户端访问集群
redis-cli -c -p 7000
#查看集群信息
cluster info
命令操作
redis-trib.rb的命令如下
create host1:port1 ... hostN:portN
--replicas <arg>
check host:port
info host:port
fix host:port
--timeout <arg>
reshard host:port
--from <arg>
--to <arg>
--slots <arg>
--yes
--timeout <arg>
--pipeline <arg>
rebalance host:port
--weight <arg>
--auto-weights
--use-empty-masters
--timeout <arg>
--simulate
--pipeline <arg>
--threshold <arg>
add-node new_host:new_port existing_host:existing_port
--slave
--master-id <arg>
del-node host:port node_id
set-timeout host:port milliseconds
call host:port command arg arg .. arg
import host:port
--from <arg>
--copy
--replace
redis-trib.rb info 127.0.0.1:7000
redis-trib.rb call 127.0.0.1:7000 set haha 1
redis-trib.rb fix 127.0.0.1:7000
redis-trib.rb add-node --slave 127.0.0.1:27000 127.0.0.1:7000
redis-trib.rb del-node 127.0.0.1:7000 83e9cb81dbda2f37c1932dd95503a5db0b9de31a ! 确保主节点是空的,或者手动故障迁移志从节点再进行相关操作
增加新节点并且分配槽
修改集群的从节点的主节点
redis-cli -c -p 27001 cluster replicate cfda3fc799e7e862dce5ed99fa7537edb759d763
手动故障迁移
cluster failover #从节点的连接下执行
装ruby时解决办法:
1.源码安装参考例子.centos yum 好像安装不了2.2以上的
https://github.com/postmodern/ruby-install#readme
2. /usr/local/ruby/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- redis (LoadError)
from /usr/local/ruby/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from ./redis-trib.rb:25:in `<main>
gem install redis