admin管理员组

文章数量:1794759

redis主从集群部署+哨兵模式并设置开机自启动及集成SpringBoot

redis主从集群部署+哨兵模式并设置开机自启动及集成SpringBoot

目录

1、redis安装部署

2、主从配置

3、哨兵模式配置

4、部署验证

5、配置redis哨兵开机自启动

 6、Springboot集成redis集群配置方式

7、验证效果


1、redis安装部署

        redis集群部署方式    采用一主二从三哨兵模式。    

1)把redis上传到/data/redis下并解压,同时在此目录创建redis_1,redis_2,redis_3三个文件夹

 2)进入redis-6.2.6目录执行以下命令安装redis,详细安装参考​​​​

cd /data/redis/redis-6.2.6 make && make install

 3)创建用于存放数据和日志的目录文件夹。

 4)进入/data/redis/redis-6.2.6/log,创建日志文件

 5)将redis-6.2.6复制到新建的redis_1,redis_2,redis_3中

cp -r redis-6.2.6 /data/redis/redis_1 cp -r redis-6.2.6 /data/redis/redis_2 cp -r redis-6.2.6 /data/redis/redis_3

2、主从配置

1)Redis_1作为主节点,redis_2和redis_3作为从节点 

修改redis.conf配置如下:

redis_1-配置:

# 监听端口 port 7000 # 开启保护模式就不能远程连接,默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。 bind 0.0.0.0 # yes    保护模式,只允许本地链接,no保护模式关闭。 protected-mode no //设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH <password> 命令提供密码,默认关闭 requirepass 123456 //当 master 服务设置了密码保护时,slave 服务连接 master 的密码 masterauth 123456 //redis数据库文件名称,可以自定义 dbfilename dump_7000.rdb # 作为守护程序运行,设置为后台启动。 daemonize yes # 当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定 pidfile /data/redis/redis_1/redis-6.2.6/redis_7000.pid # 日志级别 loglevel notice # 指定日志文件存放位置 logfile "/data/redis/redis_1/redis-6.2.6/log/redis.log" # 指定本地数据库存放目录 dir /data/redis/redis_1/redis-6.2.6/data # 服务器默认(yes)只读 replica-read-only no

redis_2-配置:

# 监听端口 port 7001 # 开启保护模式就不能远程连接,默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。 bind 0.0.0.0 # yes    保护模式,只允许本地链接,no保护模式关闭。 protected-mode no //设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH <password> 命令提供密码,默认关闭 requirepass 123456 //当 master 服务设置了密码保护时,slave 服务连接 master 的密码 masterauth 123456 //redis数据库文件名称,可以自定义 dbfilename dump_7001.rdb # 作为守护程序运行,设置为后台启动。 daemonize yes # 当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定 pidfile /data/redis/redis_2/redis-6.2.6/redis_7001.pid # 日志级别 loglevel notice # 指定日志文件存放位置 logfile "/data/redis/redis_2/redis-6.2.6/log/redis.log" # 指定本地数据库存放目录 dir /data/redis/redis_2/redis-6.2.6/data # 服务器默认(yes)只读 replica-read-only no # 用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点。replicaof指定主机(master)的IP地址和端口 replicaof 198.X.X.1 7000

redis_3-配置:

# 监听端口 port 7002 # 开启保护模式就不能远程连接,默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。 bind 0.0.0.0 # yes    保护模式,只允许本地链接,no保护模式关闭。 protected-mode no //设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH <password> 命令提供密码,默认关闭 requirepass 123456 //当 master 服务设置了密码保护时,slave 服务连接 master 的密码 masterauth 123456 //redis数据库文件名称,可以自定义 dbfilename dump_7002.rdb # 作为守护程序运行,设置为后台启动。 daemonize yes # 当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定 pidfile /data/redis/redis_3/redis-6.2.6/redis_7002.pid # 日志级别 loglevel notice # 指定日志文件存放位置 logfile "/data/redis/redis_3/redis-6.2.6/log/redis.log" # 指定本地数据库存放目录 dir /data/redis/redis_3/redis-6.2.6/data # 服务器默认(yes)只读 replica-read-only no # 用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点。replicaof指定主机(master)的IP地址和端口 replicaof 198.X.X.1 7000

注意点:IP地址最好不要写127.0.0.1防止访问请求被拒绝

3、哨兵模式配置

1)修改sentinel.conf配置如下:

redis_1的sentinel.conf配置如下:

# 监听端口 port 8000 //yes    保护模式,只允许本地链接,no保护模式关闭。 protected-mode:no # 开启保护模式就不能远程连接,默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。 bind 0.0.0.0 # 作为守护程序运行,设置为后台启动。 daemonize yes # 当 哨兵 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis-sentinel.pid 文件,可以通过 pidfile 指定 pidfile "/data/redis/redis_1/redis-6.2.6/redis-sentinel.pid" # 指定日志文件名。 如果值为空,将强制Sentinel日志标准输出。守护进程下,如果使用标准输出进行日志记录,则日志将发送到/dev/null logfile /data/redis/redis_1/redis-6.2.6/log/sentinel.log # 每个长时间运行的进程都应该有一个明确定义的工作目录。对于Redis Sentinel来说,/tmp就是自己的默认工作目录,可以自定义。 dir /data/redis/redis_1/redis-6.2.6 # 指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。 sentinel monitor mymaster 198.X.X.1 7000 2 # 当在Redis实例中开启了requirepass,这里就需要提供密码。 sentinel auth-pass mymaster 123456 # 这里设置了主机多少秒无响应,则认为挂了默认3000 sentinel down-after-milliseconds mymaster 50000 # 主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。 sentinel parallel-syncs mymaster 1

redis_2的sentinel.conf配置如下:

# 监听端口 port 8001 //yes    保护模式,只允许本地链接,no保护模式关闭。 protected-mode:no # 开启保护模式就不能远程连接,默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。 bind 0.0.0.0 # 作为守护程序运行,设置为后台启动。 daemonize yes # 当 哨兵 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis-sentinel.pid 文件,可以通过 pidfile 指定 pidfile "/data/redis/redis_2/redis-6.2.6/redis-sentinel.pid" # 指定日志文件名。 如果值为空,将强制Sentinel日志标准输出。守护进程下,如果使用标准输出进行日志记录,则日志将发送到/dev/null logfile /data/redis/redis_2/redis-6.2.6/log/sentinel.log # 每个长时间运行的进程都应该有一个明确定义的工作目录。对于Redis Sentinel来说,/tmp就是自己的默认工作目录,可以自定义。 dir /data/redis/redis_2/redis-6.2.6 # 指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。 sentinel monitor mymaster 198.X.X.1 7000 2 # 当在Redis实例中开启了requirepass,这里就需要提供密码。 sentinel auth-pass mymaster 123456 # 这里设置了主机多少秒无响应,则认为挂了默认3000 sentinel down-after-milliseconds mymaster 50000 # 主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。 sentinel parallel-syncs mymaster 1

redis_3的sentinel.conf配置如下:

# 监听端口 port 8002 //yes    保护模式,只允许本地链接,no保护模式关闭。 protected-mode:no # 开启保护模式就不能远程连接,默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。 bind 0.0.0.0 # 作为守护程序运行,设置为后台启动。 daemonize yes # 当 哨兵 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis-sentinel.pid 文件,可以通过 pidfile 指定 pidfile "/data/redis/redis_3/redis-6.2.6/redis-sentinel.pid" # 指定日志文件名。 如果值为空,将强制Sentinel日志标准输出。守护进程下,如果使用标准输出进行日志记录,则日志将发送到/dev/null logfile /data/redis/redis_3/redis-6.2.6/log/sentinel.log # 每个长时间运行的进程都应该有一个明确定义的工作目录。对于Redis Sentinel来说,/tmp就是自己的默认工作目录,可以自定义。 dir /data/redis/redis_3/redis-6.2.6 # 指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。 sentinel monitor mymaster 198.X.X.1 7000 2 # 当在Redis实例中开启了requirepass,这里就需要提供密码。 sentinel auth-pass mymaster 123456 # 这里设置了主机多少秒无响应,则认为挂了默认3000 sentinel down-after-milliseconds mymaster 50000 # 主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。 sentinel parallel-syncs mymaster 1

注意点:IP地址最好不要写127.0.0.1防止访问请求被拒绝

2)启动redis_1,redis_2,redis_3。启动顺序主-从-哨兵。启动命令如下:

启动主从 1)cd /data/redis/redis_1/redis-6.2.6 进入到redis1的redis-6.2.6目录下 ./src/redis-server ./redis.conf 2)cd /data/redis/redis_2/redis-6.2.6 进入到redis2的redis-6.2.6目录下 ./src/redis-server ./redis.conf 3)cd /data/redis/redis_3/redis-6.2.6 进入到redis3的redis-6.2.6目录下 ./src/redis-server ./redis.conf 启动哨兵 1)cd /data/redis/redis_1/redis-6.2.6 进入到redis1的redis-6.2.6目录下 ./src/redis-sentinel ./sentinel.conf 2)cd /data/redis/redis_1/redis-6.2.6 进入到redis2的redis-6.2.6目录下 ./src/redis-sentinel ./sentinel.conf 3)cd /data/redis/redis_3redis-6.2.6 进入到redis3的redis-6.2.6目录下 ./src/redis-sentinel ./sentinel.conf

启动之后,任何目录下输入:ps -ef|grep redis 查看redis进程。可以看到如下效果表示redis启动成功。下图显示ip应该为大家的服务器ip。

4、部署验证

1)主从部署验证

      进入reids_1服务中,执行以下命令:

cd /data/redis/redis_1/redis-6.2.6

redis-cli -h 1XX.XX.XX.X1 -c -p 7000

info replication

进入reids_2服务中,执行以下命令:

cd /data/redis/redis_2/redis-6.2.6

redis-cli -h 1XX.XX.XX.X1 -c -p 7001

info replication

 进入reids_3服务中,执行以下命令:

cd /data/redis/redis_3/redis-6.2.6

redis-cli -h 1XX.XX.XX.X1-c -p 7002

info replication

可以看出reids_1是主服务,reids_2和reids_3是从服务。

2)哨兵部署验证

进入reids_1(sentinel)哨兵中,执行以下命令:

cd /data/redis/redis_1/redis-6.2.6

redis-cli -h 1XX.XX.XX.X1-c -p 8000

info sentinel

 进入reids_2(sentinel)哨兵中,执行以下命令:

cd /data/redis/redis_2/redis-6.2.6

redis-cli -h 1XX.XX.XX.X1-c -p 8001

info sentinel

 进入reids_3(sentinel)哨兵中,执行以下命令:

cd /data/redis/redis_3/redis-6.2.6

redis-cli -h 1XX.XX.XX.X1-c -p 8002

info sentinel

 可以看出哨兵部署正常。

3)验证主从数据是否同步

[root@MiWiFi-R3-srv redis-6.2.6]# redis-cli -h 1XX.XX.XX.X1 -c -p 7000 1XX.XX.XX.X1:7000> auth 123456 OK 1XX.XX.XX.X1:7000> keys * 1) "a" 1XX.XX.XX.X1:7000> set c 123456 OK 1XX.XX.XX.X1:7000> keys * 1) "c" 2) "a" 1XX.XX.XX.X1:7000> 

[root@MiWiFi-R3-srv redis-6.2.6]# redis-cli -h 1XX.XX.XX.X1 -c -p 7001 1XX.XX.XX.X1:7001> auth 123456 OK 1XX.XX.XX.X1:7001> keys * 1) "a"

  [root@MiWiFi-R3-srv redis-6.2.6]# redis-cli -h 1XX.XX.XX.X1 -c -p 7002 1XX.XX.XX.X1:7002> auth 123456 OK 1XX.XX.XX.X1:7002> keys * 1) "a"

可以看出,主从数据同步正常。 

4)容灾切换演示

现在模拟主机宕机,将主机7000机器的 redis 服务关闭,如下

这时候重新进一下7001,7002机器:

 

 可以看出哨兵(Sentinel)通过选举机制选举了从机(7001)作为了新的主机

 至此redis主从哨兵模式成功部署完成。

5、配置redis哨兵开机自启动

1)在/etc/init.d目录下创建 redis_master文件

touch redis_master

2)redis_master编辑配置如下:

vi /etc/init.d/redis_master

#!/bin/sh # chkconfig: 2345 10 90 #redis服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。 # description: Start and Stop redis # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. ### BEGIN INIT INFO # Provides: redis_6379 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Redis data structure server # Description: Redis data structure server. See redis.io ### END INIT INFO REDISPORT=6379 REDIS_SENTINELPORT=26379 EXEC=/data/redis-6.2.6/sbin/redis-server CLIEXEC=/data/redis-6.2.6/sbin/redis-cli CLIEXEC_SENTINEL=/data/redis-6.2.6/sbin/redis-sentinel PIDFILE=/data/redis-6.2.6/redis_${REDISPORT}.pid #Redis配置文件位置 CONF="data/redis-6.2.6/sbin/redis.conf" #sentinel 配置位置 SlCONF="data/redis-6.2.6/sbin/sentinel.conf --sentinel" REDISPASSWORD="cib@123456" sleep 10 case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed." else echo "Starting Redis server..." #redis启动在这里 配置从服务器启动sentinel在这里加上 $EXEC $SlCONF即可 SlCONF是上面定义好从服务器地址 $EXEC $CONF $EXEC $SlCONF fi if [ "$?"="0" ] then echo "Redis is running..." fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE exists, process is not running." else PID=$(cat $PIDFILE) echo "Stopping..." # -a $REDISPASSWORD 这里是redis服务密码 关闭redis服务需要该密码支持 $CLIEXEC -a $REDISPASSWORD -p $REDISPORT shutdown $CLIEXEC -p $REDIS_SENTINELPORT shutdown sleep 2 while [ -x $PIDFILE ] do echo "Waiting for Redis to shutdown..." sleep 1 done echo "Redis stopped." fi ;; restart|force-reload) ${0} stop ${0} start ;; *) echo "please use start or stop as first argument." exit 1 ;; esac

 以上配置保存好执行以下命令即可启动和停止

/etc/init.d/redis_master start       //启动redis服务

/etc/init.d/redis_master stop       //关闭redis服务

service redis_master start        //启动redis服务 service redis_master stop        //关闭redis服务 chkconfig redis_master on       //设为开机启动 chkconfig redis_master off       //设为开机关闭

3)编辑rc.local文件设置开机自启动

vi /etc/rc.local

添加以下命令:

/etc/init.d/redis_master restart

 4)最后修改rc.local文件的执行权限--一定要执行

chmod +x  /etc/rc.local

或 chmod 755 /etc/rc.local

5)重启服务器

reboot

6)查看进程

ps -ef | grep redis

 6、Springboot集成redis集群配置方式

application.yml配置如下:

spring: redis: password: 123456 # Redis服务器连接密码(默认为空) timeout: 50000ms # 连接超时时间 sentinel: master: mymaster nodes: 1XX.XX.XX.XX:8000,1XX.XX.XX.XX:8001,1XX.XX.XX.XX:8002 #哨兵地址及端口

RedisController:

package andanyoung.redis.rediscluster.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.*; /** * @author wengly * @since 2022/4/25 11:05 */ @RestController public class RedisController { @Autowired StringRedisTemplate stringRedisTemplate; @GetMapping("get") public String get(String key){ return stringRedisTemplate.opsForValue().get(key); } @RequestMapping("put") public String put(String key,String value){ stringRedisTemplate.opsForValue().set (key,value); return get(key); } } 7、验证效果

本文标签: 主从哨兵集群模式Redis