coder思维

科学尚未普及

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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
  • make
  • make 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.conf
  • sed "s/6000/6002/g" redis-6000.conf > redis-6002.conf

配置master

  • echo "slaveof 127.0.0.1 6000" >>redis-6001.conf
  • echo "slaveof 127.0.0.1 6000" >>redis-6002.conf

启动从

  • redis-server redis-6001.conf
  • redis-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.conf
  • sed "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 6000
  • redis-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.

posted on 2021-04-17 01:26  浩琪  阅读(12)  评论(0)    收藏  举报