Redis Sentinel与Cluster安装部署(一)
1、部署规划
版本
redis5.0.8
目录规划
软件安装目录 | /usr/local/redis5 |
可执行文件目录 | /usr/local/redis5/bin |
数据目录 | /usr/local/redis5/dada/$redis_port |
日志目录 | /usr/lcoal/redis5/log |
配置文件目录 | /usr/lcoal/redis5/conf |
pid文件目录 | /usr/lcoal/redis5/run |
脚本文件目录 | /usr/lcoal/redis5/script |
集群文件所在目录 | /usr/lcoal/redis5/cluster |
Sentinel服务器规划
IP | 端口 | 角色 |
172.32.1.59 | 6379 | master |
172.32.1.91 | 6379 | slave-1 |
172.32.1.140 | 6379 | slave-2 |
172.32.1.59 | 26379 | sentinel-1 |
172.32.1.91 | 26380 | sentinel-2 |
172.32.1.140 | 26381 | sentinel-3 |
Cluster服务器规划
IP | 端口 | 角色 |
172.32.1.59 | 7000 | master-01 |
172.32.1.91 | 7001 | master-02 |
172.32.1.140 | 7002 | master-03 |
172.32.1.59 | 7012 | slave-02 |
172.32.1.91 | 7010 | slave-03 |
172.32.1.140 | 7011 | slave-01 |
2、架构图
sentinel架构图
cluster架构图
3、部署
3.1 sentinel部署
1、安装依赖 yum list installed|grep gcc yum -y install gcc yum -y install gcc-c++ 2、下载解压 wget http://download.redis.io/releases/redis-5.0.8.tar.gz tar zxf redis-5.0.8.tar.gz -C /usr/local cd /usr/local mv redis-5.0.8 redis5 cd redis5 make make PREFIX=/usr/local/redis5 install #make install会生成5个二进制文件,默认在生成在/usr/local/bin下,可以加上PREFIX手动指定生成的文件位置 #会生成以下5个二进制文件: # redis-server:Redis服务器 # redis-cli:Redis命令行客户端 # redis-benchmark:Redis性能测试工具 # redis-check-aof:AOF文件修复工具 # redis-check-rdb:RDB文件检查工具 3、修改环境变量 export PATH=$PATH:$REDIS_HOME/bin 4、创建相关目录,备份配置文件并将其复制至conf下 mkdir $redis/data $redis/data/redis_6379 $redis/log $redis/run $redis/conf $redis/script cp redis.conf ./redis_old.conf cp sentinel.conf ./redis_old.log cp ./redis_old.conf ./conf/redis_6379.conf cp ./sentinel_old.conf ./conf/sentinel_26379.conf 4、修改redis.conf配置文件(以6379端口为例) #network port 6379 //端口号 bind 172.32.1.59 172.32.1.91 172.32.1.140 //允许哪些IP能访问该redis实例 timeout 0 //设置客户端连接时的超时时间,单位为秒,默认值为0,表示不关闭,生产环境按需配置 #SECURITY requirepass dt2020 //当前redis节点的密码,生产环境一定要设置 rename-command //命令重命名,可将一些危险命令禁用或重命名 //危险命令如flushdb(清空数据库)、flushall(清空所有记录)、config(客户端连接后可配置服务器)、keys(客户端连接后可查看所有存在的键) //禁用FLUSHALL命令:rename-command FLUSHALL "" //重命名FLUSHALL命令:rename-command FLUSHALL abcdefg #GENERAL daemonize yes //设置为yes表示指定Redis以守护进程的方式启动(后台启动),默认为no pidfile /usr/local/redis5/run/redis_6379.pid //pid文件路径 logfile "/usr/local/redis5/log/error_6379.log" //系统日志文件路径 #SNAPSHOTTING //这里的配置与持久化有关 dir /usr/local/redis5/data/redis_6379 //数据目录,数据库的写入会在这个目录。rdb、aof文件以及redis cluster模式下的node.conf文件均会创建在这个目录下 dbfilename dump_6379.rdb //rdb的文件名 appendonly yes //开启aof,默认不开启,生产环境一定要开启 appendfilename "appendonly_6379.aof" //aof的文件名 aof-use-rdb-preamble yes //当redis重写aof文件时,redis可以先读一个rdb来加快重写的速度,当这个选项打开时,重写的aof文件由两部分组成:rdb文件+aof文件。 #replication replicaof <master ip> <master port> //主节点的IP、端口(slave节点需配置) masterauth <master-password> //主节点的密码(如果master节点设置了密码,slave节点需要配置此选项,建议master节点也配置该选项) #slow_log slowlog-log-slower-than 10000 //慢日志阈值,超过该值则记录到慢日志,单位us,如果该值=0则记录所有命令,如果<0则不记录任何命令,默认10ms slowlog-max-len 128 //慢查询列表,表示慢日志最大能存储多少条命令,线上建议调大该值 #MEMORY MANAGEMENT maxmemory <bytes> //表示redis最大可用内存,可带B、K、M、G等单位,不带单位则表示字节;如果maxmemory值为0,表示不做限制;一般推荐Redis设置内存为最大物理内存的四分之三 maxmemory-policy volatile-lru //表示当内存使用达到最大值时,redis使用的过期策略,建议设置为volatile-lru //volatile-lru -> 根据LRU算法移除设置过期时间的key //allkeys-lru -> 根据LRU算法删除任何key //volatile-random -> 根据过期设置来随机删除key //allkeys->random -> 无差别随机删除key //volatile-ttl -> 移除即将过期的key //noeviction -> 不移除任何key,内存满时再执行写操作直接返回错误(默认设置) 5、修改sentinel.conf(以26379端口为例) # 端口,默认26379 port 26379 #后台启动 daemonize yes #sentinel运行时临时文件存放位置 dir /tmp #sentinel的运行日志 logfile /usr/local/redis5/log/sentinel_26379.log #pid文件 pidfile /usr/lcoal/redis5/run/redis-sentinel_26379.pid # sentinel auth-pass <master-name> <password> # 设置redis主节点的密码 sentinel auth-pass mymaster dt2020 # sentinel monitor <master-name> <ip> <redis-port> <quorum> # sentinel监控Redis主节点的配置,master-name指为主节点自定义的名称,ip、redis-port分别是主节点的ip地址、端口地址 # quorum这个值可用于判断主节点客观下线、sentinel的leader选举;当有quorum个sentinel认为一个master失效时,master才算真正失效 sentinel monitor mymaster 172.32.1.59 6379 2 # sentinel down-after-milliseconds <master-name> <milliseconds> # 指定Sentinel认为Redis实例已经失效所需的毫秒数,默认30秒。当实例超过该时间没有返回PING或返回错误时,Sentinel会将这个实例标记为主观下线。当足够数量的Sentinel都将一个实例标记为主观下线后,实例会被标记为客观下线,这时才会执行自动故障迁移 sentinel down-after-milliseconds mymaster 30000 # sentinel parallel-syncs <master-name> <numslaves> # 指定了在执行故障转移时,最多可以有多少个Redis从实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长 sentinel parallel-syncs mymaster 1 # sentinel failover-timeout <master-name> <milliseconds> # 如果在milliseconds时间(ms)内未能完成failover操作,则认为该failover失败 sentinel failover-timeout mymaster 180000 6、启动各redis节点 $redis_file/src/redis-server $redis_file/conf/redis_$port.conf 7、启动各sentinel节点 $redis_file/src/redis-server $redis_file/conf/sentinel_port.conf --sentinel 或 $redis_file/src/redis-sentinel $redis_file/conf/sentinel_port.conf