一、 环境准备
部署模式: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