一.环境
centos 6.8
develop1 192.168.1.10
develop2 192.168.1.11
develop3 192.168.1.12
redis-3.2.8
redis集群从3.0开始需要至少3个主节点才能让集群正常工作,集群中主节点超过半数失败,整个集群就不可用。
本次实验使用3台机器,每台机器启动两个实例。
参考:http://www.cnblogs.com/love19791125/p/5102182.html
下载redis-3.2.8
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
二.安装
在develop1:
tar -xzf redis-3.2.8.tar.gz
mkdir -p /opt/redisdb/{6379,6380} #存放不同端口的配置文件和数据
cp /opt/redis-3.2.8/redis.conf /opt/redisdb/6379
cp /opt/redis-3.2.8/redis.conf /opt/redisdb/6380
redis.conf
sed -i "s/bind 127.0.0.1/bind 192.168.1.10/" /opt/redisdb/6379/redis.conf
sed -i "s/daemonize no/daemonize yes/" /opt/redisdb/6379/redis.conf
sed -i "s/# cluster-enabled yes/cluster-enabled yes/" /opt/redisdb/6379/redis.conf
sed -i "s/# cluster-node-timeout 15000/cluster-node-timeout 15000/" /opt/redisdb/6379/redis.conf
sed -i "s/logfile \"\"/logfile \"\/opt\/redisdb\/6370\/6370.log\"/" /opt/redisdb/6379/redis.conf
bind 192.168.1.10 #本服务器的ip
protected-mode yes。 #是否开启保护模式,默认开启。开启后要指定bind,否者redis只允许本地访问。
port 6379 #实例端口
#此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度,当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在终端中执行sysctl -p。
tcp-backlog 511
# 此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0。
timeout 0
#如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,检测客户端是否还处于健康状态,避免服务器一直阻塞,官方建议300秒(从3.2.1版本开始的)
tcp-keepalive 300
daemonize yes #是否在后台执行,yes:后台执行 no:不是后台执行(旧版本默认)
#可以通过upstart和systemd管理Redis守护进程,这个参数是和具体的操作系统相关的。
supervised no
#配置pid文件路径。当redis以守护模式启动时,如果没有配置pidfile,pidfile默认值是/var/run/redis.pid
pidfile /var/run/redis_6379.pid
loglevel notice #日志级别 生产环境notice ,开发/测试环境 debug
logfile "/opt/redisdb/6379/6379.log"。 #制定日志文件文件
databases 16 # 数据库数量,默认16个(0-15)
#保存数据到磁盘。格式是:save <seconds> <changes> ,含义是在 seconds 秒之后至少有 changes个keys 发生改变则保存一次。
save 900 1
save 300 10
save 60 10000
#默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作,这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘, 否则就会没人注意到灾难的发生。 如果后台保存进程重新启动工作了,redis 也将自动的允许写操作。然而你要是安装了靠谱的监控,你可能不希望 redis 这样做,那你就改成 no 好了。
stop-writes-on-bgsave-error yes
rdbcompression yes #是否在dump .rdb数据库的时候使用 LZF压缩字符串,默认设置为yes。如果你想节约一些cpu资源的话,可以把它设置为no,这样的话数据集就可能会比较大。
rdbchecksum yes #是否CRC64校验rdb文件,会有一定的性能损失(大概10%)
dbfilename dump.rdb #rdb文件的名字。
dir ./ #数据库存放目录。必须是一个目录,aof文件也会保存到该目录下。
#当一个slave与master失去联系时,或者复制正在进行的时候,slave应对请求的行为:1) 如果为 yes(默认值) ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候;2) 如果为 no ,在你执行除了 info 和 salveof 之外的其他命令时,slave 都将返回一个 "SYNC with master in progress" 的错误。
slave-serve-stale-data yes
slave-read-only yes #设置slave是否是只读的。从2.6版起,slave默认是只读的。
repl-diskless-sync no #主从数据复制是否使用无硬盘复制功能。
repl-diskless-sync-delay 5 #指定slave定期ping master的周期,默认5秒钟
repl-disable-tcp-nodelay no。 #在slave和master同步后(发送psync/sync),后续的同步是否设置成TCP_NODELAY
假如设置成yes,则redis会合并小的TCP包从而节省带宽,但会增加同步延迟(40ms),造成master与slave数据不一致
假如设置成no,则redis master会立即发送同步数据,没有延迟
slave-priority 100 #当 master 不能正常工作的时候,Redis Sentinel 会从 slaves 中选出一个新的 master,这个值越小,就越会被优先选中,但是如果是 0 , 那是意味着这个 slave 不可能被选中。 默认优先级为 100。
appendonly no #是否开启持久化
appendfilename "appendonly.aof " #持久化文件
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes #是否开启集群
cluster-config-file nodes-6379.conf ##集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
cluster-node-timeout 15000 #节点互连超时的阀值。集群节点超时毫秒数
#执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
slowlog-log-slower-than 10000
slowlog-max-len 128 #慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。这个长度没有限制。只要有足够的内存就行。你可以通过 SLOWLOG RESET 来释放内存。
##################################################################################################
#以下为扩展选项和内存设置
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
参考:https://yq.aliyun.com/articles/38806
系统调优:
echo 1 > /proc/sys/vm/overcommit_memory
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
echo 1024 >/proc/sys/net/core/somaxconn
网友评论