debian9 环境
#普通安装
- 新建目录
/opt/soft给权限chmod -R 777 - 下载
wget http://download.redis.io/releases/redis-5.0.2.tar.gz - 解压
tar -xvf redis-5.0.2.tar.gz - 设置软连接,方便以后升级
ln -s redis-5.0.2 redis makemake install安装到系统- 新建日志、数据目录
/opt/soft/redis/data - 新建配置目录
/opt/soft/redis/config - 复制配置
cp /opt/soft/redis/redis.config /opt/soft/redis/config/redis-6000.conf - 编辑
redis-6000.conf
主要修改配置
protected-mode no
port 6000
daemonize yes
pidfile /var/run/redis_6000.pid
logfile "/opt/soft/redis/data/6000.log"
dir /opt/soft/redis/data
修改默认端口为6000
去除回车空行查看配置:
cat redis-6000.conf | grep -v "#" | grep -v ^$
- 启动
redis-server redis-6000.conf
查看进程详细目录
- 查看进程pid
ps -ef | grep redis得到redis 的pid=6733 - 查看pid详情
ll /proc/6733
lrwxrwxrwx 1 vagrant vagrant 0 Nov 30 06:18 cwd -> /opt/soft/redis-5.0.2/data
-r-------- 1 vagrant vagrant 0 Nov 30 06:18 environ
lrwxrwxrwx 1 vagrant vagrant 0 Nov 30 06:18 exe -> /usr/local/bin/redis-server
主从配置
复制两个配置文件并修改端口
sed "s/6000/6001/g" redis-6000.conf > redis-6001.confsed "s/6000/6002/g" redis-6000.conf > redis-6002.conf
配置master
echo "slaveof 127.0.0.1 6000" >>redis-6001.confecho "slaveof 127.0.0.1 6000" >>redis-6002.conf
启动从
redis-server redis-6001.confredis-server redis-6002.conf
进入 6000 执行 info replication
可以看到主从情况:
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6001,state=online,offset=826,lag=0
slave1:ip=127.0.0.1,port=6002,state=online,offset=826,lag=0
master_replid:b694acfb186ed42efe119c5986bbf44f4d5d2301
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:826
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:826
sentinel 高可用
sentinel.conf 配置文件的注释很多,参数很少, 去掉注释、空行复制到新的配置文件
cat sentinel.conf | grep -v "#" | grep -v ^$ > ./config/sentinel-26379.conf
修改 sentinel-26379.conf 文件为:
port 26379
daemonize yes
pidfile /var/run/redis-sentinel-26379.pid
logfile "/opt/soft/redis/data/sentinel-26379.log"
dir /opt/soft/redis/data
sentinel monitor mymaster 127.0.0.1 6000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
复制两个配置文件并修改端口号:
sed "s/26379/26380/g" sentinel-26379.conf > sentinel-26380.confsed "s/26379/26381/g" sentinel-26379.conf > sentinel-26381.conf
启动三个sentinel
redis-sentinel sentinel-26379.conf
redis-sentinel sentinel-26380.conf
redis-sentinel sentinel-26381.conf
故障转移实验:
redis-cli -p 6000 shutdown关掉master 6000redis-cli -p 26379 info sentinel查看
master 节点信息还是6000
master0:name=mymaster,status=odown,address=127.0.0.1:6000,slaves=2,sentinels=3
过十几秒后:
master0:name=mymaster,status=ok,address=127.0.0.1:6002,slaves=2,sentinels=3
6002 已经升为master
在生产环境下建议sentinel节点的数量能在3个以上,并且最好不要在同一台机器上(使用同一网卡)。
redis cluster 集群
官方文档:https://redis.io/topics/cluster-tutorial
redis5.0使用redis-cli作为创建集群的命令,使用c语言实现,不再使用ruby语言,创建集群的命令相似但是不一样的。
查看帮助:redis-cli --cluster help
-
kill掉之前的redis相关进程
ps -ef | grep redis | awk '{print $2}' | xargs kill -9 -
复制配置文件并修改端口
sed "s/6000/7000/g" redis-6000.conf | grep -v "#" | grep -v ^$ > ./redis-7000.conf -
增加集群参数配置
cluster-enabled yes
cluster-config-file node-7000.conf
cluster-require-full-coverage no
- 再复制五个配置文件:
sed "s/7000/7001/g" redis-7000.conf | grep -v "#" | grep -v ^$ > ./redis-7001.conf
sed "s/7000/7002/g" redis-7000.conf | grep -v "#" | grep -v ^$ > ./redis-7002.conf
sed "s/7000/7003/g" redis-7000.conf | grep -v "#" | grep -v ^$ > ./redis-7003.conf
sed "s/7000/7004/g" redis-7000.conf | grep -v "#" | grep -v ^$ > ./redis-7004.conf
sed "s/7000/7005/g" redis-7000.conf | grep -v "#" | grep -v ^$ > ./redis-7005.conf
- 创建集群
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1
[ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
提示节点内有数据,不是空的,要先清空 flushall
redis-cli -p 7005 cluster nodes 查看集群节点信息
优化
查看redis日志发现三个警告,安装提示修复即可
-
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
-
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
-
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
update
浙公网安备 33010602011771号