Redis构建缓存服务器

发布于:2025-07-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

环境信息:
redis-master----192.168.12.135
redis-slave-1-----192.168.12.136
redis-slave-2-----192.168.12.137

单机版Redis

安装Redis

yum install -y gcc make jemalloc jemalloc-devel gcc-c++ wget tcl
yum groupinstall -y "Development Tools"
wget http://download.redis.io/releases/redis-8.0.2.tar.gz
tar xzf redis-8.0.2.tar.gz -C /usr/local/
mv /usr/local/redis-8.0.2  /usr/local/redis
cd /usr/local/redis
mkdir /usr/local/redis/data
vim redis.conf
#找到以下内容进行修改
bind 0.0.0.0    #监听ip地址
protected-mode no    #关闭保护模式
daemonize yes    #后台运行
logfile "/var/log/redis.log"   #日志存放位置
save 3600 1 300 100 60 10000    #RDB持久化触发设置
dir /usr/local/redis/data    #持久化生成文件存放位置
appendonly yes    #开启AOF持久化
	
	
make MALLOC=libc
make MALLOC=libc install

编写使用system管理

vim /lib/systemd/system/redis.service    #编写使用system管理
[Unit]
Description=Redis
After=network.target

[Service]
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf  --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown

[Install]
WantedBy=multi-user.target

连接数据库

systemctl daemon-reload    #重新加载system
systemctl start redis    #启动redis
systemctl status redis    #查看redis是否启动
netstat -tnlp    #查看6379端口是否监听
cd /usr/local/redis/src/
./redis-cli -h 192.168.12.135 -p 6379    #连接数据库
#输入ping,返回pong测试连接成功

Redis主从

设置主从

从节点根据单机版先进行安装redis

#以下操作在两个从节点进行操作
cd /usr/local/redis/
vim redis.conf
replicaof 192.168.12.135 6379    #添加主节点ip及端口号
protected-mode no    #关闭保护模式
#保护模式单节点部署已经关闭

systemctl restart redis.service

测试主从

#主节点
cd /usr/local/redis/src/
./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name Disallow
OK
127.0.0.1:6379> get name
"Disallow"
#从节点
127.0.0.1:6379> get name
"Disallow"

查看复制状态

#主节点
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.12.137,port=6379,state=online,offset=1469,lag=0
slave1:ip=192.168.12.136,port=6379,state=online,offset=1469,lag=0
master_failover_state:no-failover
master_replid:a737b93a8106e8505a1ed2e92435e5cc6977a0f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1469
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1455

#从节点
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.12.135
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_read_repl_offset:1469
slave_repl_offset:1469
replica_full_sync_buffer_size:0
replica_full_sync_buffer_peak:0
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:a737b93a8106e8505a1ed2e92435e5cc6977a0f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1469
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1455

Redis哨兵

设置哨兵

#三台机器都操作
cd /usr/local/redis/
vim sentinel.conf
daemonize yes    #设置哨兵放后台运行
logfile "/var/log/sentinel.log"    #设置哨兵日志
sentinel monitor mymaster 192.168.12.135 6379 2    #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel down-after-milliseconds mymaster 3000    #单位毫秒,默认是30000,根据自己需求修改
sentinel failover-timeout mymaster 10000    ##若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败
protected-mode no    #关闭加密模式--新添加到sentinel配置文件中  ----老版本中需需要添加

./src/redis-sentinel sentinel.conf    #运行redis 
#老版本:./src/redis-sentinel sentinel.conf & 

测试哨兵

#主节点停止redis
systemctl stop redis.service    
#从节点登录数据库查看主从状态
cd /usr/local/redis/src
./redis-cli
127.0.0.1:6379> info replication

Redis集群搭建

本次搭建使用3台机器搭建,每台机器上面两个redis实例,一个master一个slave,第一列做主库,第二列做备库。
redis-cluster1 192.168.12.135 7000、7001
redis-cluster2 192.168.12.136 7002、7003
redis-cluster3 192.168.12.137 7004、7005

Redis安装及配置文件修改

三台机器Redis安装按照单机版先进行按照

#分别在三台机器创建集群目录、持久化目录、配置文件及修改配置文件
#redis-cluster1
mkdir -p /usr/local/redis/cluster/{7000,7001}
mkdir -p /usr/local/redis/data/{7000,7001}
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7000
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7001
vim /usr/local/redis/data/7000/redis.conf
bind 192.168.12.135    #每个实例的配置文件修改为对应节点的ip地址
port 7000
daemonize yes
pidfile /var/run/redis_7000.pid    #pid文件,运行多个实例时,需要指定不同的pid文件
logfile /var/log/redis_7000.log    #日志文件位置,运行多实例时,需要将文件修改的不同。
dir /usr/local/redis/data/7000
appendonly yes    #开启AOF持久化
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes    #启用集群
cluster-config-file nodes-7000.conf    #集群配置文件,由redis自动更新,不需要手动配置,运行多实例时请注修改为对应端口
cluster-node-timeout 15000    #单位毫秒。集群节点超时时间,即集群中主从节点断开连接时间阈值,超过该值则认为主节点不可以,从节点将有可能转为master
cluster-replica-validity-factor 10    #在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。
cluster-migration-barrier 1    #一个主机将保持连接的最小数量的从机,以便另一个从机迁移到不再被任何从机覆盖的主机
cluster-require-full-coverage yes  #集群中的所有slot(16384个)全部覆盖,才能提供服务

#7001配置文件将7000内的所有7000更换成7001即可


#redis-cluster2
mkdir -p /usr/local/redis/cluster/{7002,7003}
mkdir -p /usr/local/redis/data/{7002,7003}
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7002
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7003

#7002配置文件将7000内配置文件bind改为‘redis-cluster2’机器的ip,同时将配置文件内7000改为7002即可,7003同理


#redis-cluster3
mkdir -p /usr/local/redis/cluster/{7004,7005}
mkdir -p /usr/local/redis/data/{7004,7005}
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7004
cp /usr/local/redis/redis.conf  /usr/local/redis/data/7005

#7004配置文件将7000内配置文件bind改为‘redis-cluster3’机器的ip,同时将配置文件内7000改为7004即可,7005同理

Redis启动及集群创建

#启动三台机器上面的每个节点
#redis-cluster1
cd /usr/local/redis/src/
./redis-server ../cluster/7000/redis.conf 
./redis-server ../cluster/7001/redis.conf

#redis-cluster2
cd /usr/local/redis/src/
./redis-server ../cluster/7002/redis.conf 
./redis-server ../cluster/7003/redis.conf

#redis-cluster3
 cd /usr/local/redis/src/
./redis-server ../cluster/7004/redis.conf 
./redis-server ../cluster/7005/redis.conf

#创建集群:在其中一个节点操作就可以
#redis节点搭建起来后,需要完成redis cluster集群搭建,搭建集群过程中,需要保证6个redis实例都是运行状态。Redis是根据IP和Port的顺序,确定master和slave的,所以要排好序,再执行。
cd /usr/local/redis/src/
./redis-cli --cluster create --cluster-replicas 1 192.168.12.135:7000 192.168.12.135:7001 192.168.12.136:7002 192.168.12.136:7003 192.168.12.137:7004 192.168.12.137:7005
#--cluster-replicas 1:表示为集群中的每个主节点创建一个从节点.书写流程:主节点ip+port 对应一个从节点ip+port(正常是前面三个节点为主节点,后面的为从节点)

查看Redis集群状态

cd /usr/local/redis/src/
./redis-cli --cluster create --cluster-replicas 1 192.168.12.135:7000 192.168.12.135:7001 192.168.12.136:7002 192.168.12.136:7003 192.168.12.137:7004 192.168.12.137:7005

执行完这个显示类似如下内容则集群部署成功,中途需要输入yes确认

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.12.136:7003 to 192.168.12.135:7000
Adding replica 192.168.12.137:7005 to 192.168.12.136:7002
Adding replica 192.168.12.135:7001 to 192.168.12.137:7004
M: de5b4b2f6a559362ed56d4de1e3994fd529917b5 192.168.12.135:7000
   slots:[0-5460] (5461 slots) master
S: 2e8c1caa63ac4a1b9a6eea4f0fd5eab4c6b73c21 192.168.12.135:7001
   replicates 60e3755761c9cbdacb183f59e3d6205da5335e86
M: e0370608cd33ddf5bb6de48b5627799e181de3b6 192.168.12.136:7002
   slots:[5461-10922] (5462 slots) master
S: 4035841f20f07674671e6bff5d4c6db99c00626b 192.168.12.136:7003
   replicates de5b4b2f6a559362ed56d4de1e3994fd529917b5
M: 60e3755761c9cbdacb183f59e3d6205da5335e86 192.168.12.137:7004
   slots:[10923-16383] (5461 slots) master
S: e200afc33b10bd6975160bfeda7277d02371981a 192.168.12.137:7005
   replicates e0370608cd33ddf5bb6de48b5627799e181de3b6
Can I set the above configuration? (type 'yes' to accept): yes  #写yes同意
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.12.135:7000)
M: de5b4b2f6a559362ed56d4de1e3994fd529917b5 192.168.12.135:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: e0370608cd33ddf5bb6de48b5627799e181de3b6 192.168.12.136:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 2e8c1caa63ac4a1b9a6eea4f0fd5eab4c6b73c21 192.168.12.135:7001
   slots: (0 slots) slave
   replicates 60e3755761c9cbdacb183f59e3d6205da5335e86
M: 60e3755761c9cbdacb183f59e3d6205da5335e86 192.168.12.137:7004
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 4035841f20f07674671e6bff5d4c6db99c00626b 192.168.12.136:7003
   slots: (0 slots) slave
   replicates de5b4b2f6a559362ed56d4de1e3994fd529917b5
S: e200afc33b10bd6975160bfeda7277d02371981a 192.168.12.137:7005
   slots: (0 slots) slave
   replicates e0370608cd33ddf5bb6de48b5627799e181de3b6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

查看集群状态可连接集群中的任一节点,此处连接了集群中的节点192.168.12.135:7000

[root@redis-cluster1 src]# ./redis-cli -h 192.168.12.135 -c -p 7000
192.168.12.135:7000> ping
PONG
192.168.12.136:7002> cluster info  #查看集群信息
cluster_state:ok  #集群状态
cluster_slots_assigned:16384 #分配的槽
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6 #集群实例数
......

192.168.12.135:7000> cluster nodes  #查看集群实例

集群操作

客户端登陆–测试链接redis,存取数据(链接集群中任意一台机器就可以。)

[root@redis-cluster1 src]# ./redis-cli -h 192.168.12.135 -c -p 7000
192.168.12.135:7000> ping
PONG
192.168.12.135:7000> set name qianfeng
-> Redirected to slot [5798] located at 192.168.12.136:7002
OK
192.168.12.136:7002>[root@redis-cluster3 src]# ./redis-cli -h 192.168.12.136 -c -p 7002
192.168.12.136:7002> ping 
PONG
192.168.12.136:7002> get name
"qianfeng"
192.168.12.136:7002> exists name  #查看某一个key是否存在
(integer) 1

主从切换

将节点内主节点关闭,登录从节点查看执行CLUSTER nodes查看是否主从切换成功


网站公告

今日签到

点亮在社区的每一天
去签到