目录
一、 环境准备
部署模式:1主2从3哨兵。
Redis版本:redis7.2.3 。
gcc版本:gcc9.3.1。
IP地址 | 操作系统 | 节点名称 | 角色 |
---|---|---|---|
192.168.122.120 | Centos7.6 | node2.vteamcloud.com | 哨兵节点 |
192.168.122.98 | Centos7.6 | node3.vteamcloud.com | 哨兵节点 |
192.168.122.226 | Centos7.6 | node4.vteamcloud.com | 哨兵节点 |
192.168.122.227 | Centos7.6 | node5.vteamcloud.com | 工作节点 |
192.168.122.237 | Centos7.6 | node6.vteamcloud.com | 工作节点 |
192.168.122.238 | Centos7.6 | node7.vteamcloud.com | 工作节 |
二、 安装gcc
centos默认的gcc最高版本是4.8.5,而redis7需要更高版本的gcc来支持。
#安装centos-release-scl
yum -y install centos-release-scl
#安装最新版本的GCC
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile #修改环境变量
source /etc/profile
gcc -v
三、 关闭防火墙
service iptables stop
service firewalld stop
如果不想关闭防火墙,则开放6379、16379、26379三个端口。
vim /etc/sysconfig/iptables
# 加入如下代码
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 16379 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 26379 -j ACCEPT
重启iptables服务
service iptables restart
四、 搭建主从集群
redis哨兵是基于主从模式搭建的,因此先要搭建一个主从集群。
4.1 解压安装包并编译
# 进入安装目录
cd /usr/local
# 解压
tar -zxvf redis-7.2.3.tar.gz
# 进入redis目录
cd redis-7.2.3/
# 编译
make && make install
# 创建bin目录
mkdir bin
# 创建配置文件目录
mkdir config
# 创建数据存放目录
mkdir data
# 进入src目录
cd src
# 将常用命令复制到bin目录
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis-7.2.3/bin
# 将配置文件复制到config目录
cp redis.config sentinel.conf /usr/local/redis-7.2.3/config
4.2 编写配置文件
主从节点的配置基本差不多,只是从节点要配置数据从哪个节点同步。
vim redis.conf
# 修改以下内容
# 端口
port 6379
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6379.pid # 把pid进程号写入pidfile配置的文件
# log文件输出位置
logfile "/usr/local/redis-7.2.3/logs/redis.log"
# 工作目录,注意,目录不存在则创建
dir /usr/local/redis-7.2.3/data
# 需要注释掉bind,127.0.0.1 是指只能本地访问
bind 0.0.0.0
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启;否则最好关闭设置为no。
protected-mode yes
# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass Redis@123456
# 当master设置了密码保护时,slave服务连接master的密码
masterauth Redis@123456
# 指定本地数据库文件名
dbfilename dump.rdb
# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save 900 1
save 300 10
save 60 10000
#(分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有10000 个更改。)
# 开启AOF持久化
appendonly no
# aof持久化文件名
appendfilename "appendonly.aof"
# aof持久化频率 每秒同步
appendfsync everysec
# 从哪个节点同步数据,只有从节点要这个配置,Redis 5.0之前使用slaveof
replicaof 192.168.0.60 6379
# 是否只读,这个配置只对从节点有效,所有节点配置为yes。
replica-read-only yes
4.3 启动服务
# 启动服务
./redis-server /usr/local/redis-7.2.3/config/redis.conf
# 连接服务
./redis-cli -h 192.168.122.227 -p 6379
# 输入密码:
auth Redis@123456
# 查看节点信息:
info replication
# 查看日志
tail -1000f redis.log
五、 搭建哨兵节点
搭建哨兵节点的步骤到解压、编译这一步与主从节点都是一致的。只是使用的配置文件不同。
5.1 编写配置文件
vim sentinel.conf
#端口默认为26379。
port:26379
#关闭保护模式,可以外部访问
protected-mode:no
#设置为后台启动
daemonize:yes
#日志文件
logfile:./sentinel-26379.log
#指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换
sentinel monitor mymaster 192.168.122.227 6379 2
#当在Redis实例中开启了requirepass,这里就需要提供密码
sentinel auth-pass mymaster Redis@123456
#这里设置了主机多少秒无响应,则认为挂了
sentinel down-after-milliseconds mymaster 3000
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1
sentinel parallel-syncs mymaster 1
#故障转移的超时时间,这里设置为三分钟
sentinel failover-timeout mymaster 180000
#sentinel工作目录(默认/tmp)
dir ./sentinel-work-26379
#守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)
pidfile /var/run/redis-sentinel_26379.pid
注意:如果要重新搭建集群,最好把data、logs和进程文件pidfile /var/run/redis_6379.pid都删掉。同时删除配置文件生成的进程id和底部的集群选举信息。
5.1 启动服务
./redis-sentinel /usr/local/redis-7.2.3/config/sentinel.conf
六、 搭建cluster集群模式
cluster模式的搭建与主从模式类似,只是要多一步集群初始化操作。
6.1 cluster节点配置
cluster的配置仍然使用redis.conf,它不需要配置从节点从哪个节点读取数据。但是配置允许cluster部署。
vim redis.conf
# 修改以下内容
# 端口
port 6379
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6379.pid # 把pid进程号写入pidfile配置的文件
# log文件输出位置
logfile "/usr/local/redis-7.2.3/logs/redis.log"
# 工作目录,注意,目录不存在则创建
dir /usr/local/redis-7.2.3/data
# 需要注释掉bind,127.0.0.1 是指只能本地访问
bind 0.0.0.0
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启;否则最好关闭设置为no。
protected-mode yes
# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass Redis@123456
# 当master设置了密码保护时,slave服务连接master的密码
masterauth Redis@123456
# 指定本地数据库文件名
dbfilename dump.rdb
# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save 900 1
save 300 10
save 60 10000
(分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改。)
# 开启AOF持久化
appendonly no
# aof持久化文件名
appendfilename "appendonly.aof"
# aof持久化频率 每秒同步
appendfsync everysec
# 启动集群模式
cluster-enabled yes
# 集群节点信息文件,这里6379最好和port对应上
cluster-config-file nodes-6379.conf
cluster-node-timeout 10000
# 是否只读,这个配置只对从节点有效,所有节点配置为yes。
replica-read-only yes
6.2 节点启动
# 启动服务
./redis-server /usr/local/redis-7.2.3/config/redis.conf
# 连接服务
./redis-cli -h 192.168.122.227 -p 6379
# 输入密码:
auth Redis@123456
# 查看节点信息:
info replication
# 查看日志
tail -1000f redis.log
6.3 集群初始化
# 此命令只要在一台机器上执行即可。6个节点,前面3个是主,后3个是从。一一对应的关系。
./redis-cli -a Redis@123456 --cluster create --cluster -replicas 1 192.168.122.227:6379 192.168.122.237:6379 192.168.122.238:6379 192.168.122.120:6379 192.168.122.98:6379 192.168.122.226:6379
6.4 集群验证
# 进入节点后输入下面命令查看集群节点状态
cluster info