redis安装及哨兵

本文详细介绍了Redis的安装步骤,包括安装依赖、解压、编译安装、配置软连接、创建配置目录、启动服务和解决WARNING警告。此外,还讲解了如何设置Redis密码、命令别名以及数据存储。接着,文章深入探讨了Redis的多实例配置,包括修改配置文件、启动和停止实例、数据目录设置以及主从同步。最后,介绍了Redis哨兵的配置和启动,以及哨兵在故障转移中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、需要安装光盘yum
yum install vim gcc gcc-c++ make automake autoconf -y\


2、解压
tar xf redis-2.8.9.tar -C /usr/src/
cd /usr/src/redis-2.8.9/
make MALLOC=jemalloc
make PREFIX=/usr/local/redis install  #指定安装的路径位置

LANG=en
命令说明:
1. redis-server #Redis服务器的daemon启动程序
2. redis-cli #Redis命令操作工具。当然,你也可以用telnet根据其纯文本协议来操作
3. redis-benchmark #Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。
4. redis-check-aof #对更新日志appendonly.aof检查,是否可用,类似检查mysql binlog的工具
5. redis-check-dump #用于本地数据库rdb文件的检查


3、创建软连接
ln -s /usr/local/redis/bin/* /usr/local/bin/
帮助信息:
redis-server -h


4、进入解压后的目录
cd /usr/src/redis-2.8.9/
目录位置:
/usr/src/redis-2.8.9


5、创建redis的配置目录
mkdir /usr/local/redis/conf

6、拷贝源码中的配置文件到安装目录下的配置目录下
cp /usr/src/redis-2.8.9/redis.conf /usr/local/redis/conf/


7、启动redis服务
redis-server /usr/local/redis/conf/redis.conf &


8、解决WARNING警告信息:
#警示大概意思为:
overcommit_memory被设置为了0.如果内存不够的情况下后台保存可能会失败;要解决这个
问题,需要在/etc/sysctl.conf配置文件中将vm.overcommit_memory设置为1;或者通过
命令“sysctl vm.overcommit_memory=1”来修改。


9、执行命令:
sysctl vm.overcommit_memory=1
出现:vm.overcommit_memory = 1 信息为正常信息。
#此时重新启动redis时,就没有WARNING的警告信息提示了。


具体怎么操作redis数据库,查看具体资料


==================================================================


非交互式存储读取数据:
1、存储数据
redis-cli -h 10.0.0.135 -p 6379 set aaa 111
2、读取数据
redis-cli -h 10.0.0.135 -p 6379 get aaa
==================================================================

10、设置redis密码
vim /usr/local/redis/conf/redis.conf
339 # requirepass foobared
340 requirepass yunjisuan #云计算为密码


11、登陆方式
redis-cli #登陆本地redis
本地登陆后需要验证密码才可以正常访问:
auth yunjisuan #提交验证密码

redis-cli -a yunjisuan #登陆时提交密码


12、设置命令别名
vim /usr/local/redis/conf/redis.conf
set命令别名道行sset使用:
356 # rename-command CONFIG ""
357 rename-command CONFIG "sset"
使用时:
set xxx 555 #命令输入错误(因为修改过了)
应该使用:
sset renameset 555 #写入key-value正确


===========================================================================


1、停止redis数据库
a、pkill redis
b、redis-cli shutdown
redis-cli shutdown #关闭redis进程


2、客户端连接redis数据库
redis-cli -h 10.0.0.135 -p 6379
2-1、也可以通过telnet连接
telnet 10.0.0.135 6379

通过help命令来查找命令
1. #输入help + 空格 + 多次<Tab>键来切换所有命令
2. 10.0.0.135:6379> help @generic #这里需要狂按Tab键


===========================================================================
Redis 多实例
1、修改配置文件
vim /usr/local/redis/conf/redis.cnf
187 dir /usr/local/redis/data/


2、关闭Redis
redis-cli -a yunjisuan shutdown  #如果有密码 yunjisuan
redis-cli shutdown  #没有密码

3、创建数据目录
mkdir /usr/local/redis/data

3-1、测试添加数据是否能保存在指定的数据目录中:
redis-cli -a yunjisuan #指定密码登陆
set name yunjisuan
save
quit  
3-2、推出后查看数据目录是否有对应的数据文件
[root@master-01 redis]# ll /usr/local/redis/data/
总用量 4
-rw-r--r--. 1 root root 31 11月  2 17:59 dump.rdb


4、创建多实例需要的配置文件目录及文件。
mkdir -p /data/6380/data
mkdir -p /data/6381/data


4-1、拷贝对应的配置文件
cp /usr/local/redis/conf/redis.conf /data/6380
cp /usr/local/redis/conf/redis.conf /data/6381


4-2、修改对应实例配置文件中的信息
1、修改数据目录位置
vim /data/6380/redis.conf  #所有实例均修改为对应实例下的配置文件
41 pidfile /data/6380/redis.pid  #修改PID文件位置
45 port 6379  #修改端口号
187 dir /data/6380/data  #修改数据目录位置
450 appendonly yes  #开启持久化日志

340 requirepass yunjisuan  #可以修改对应实例的认证密码

4-3、启动对应实例
redis-server /data/6380/redis.conf &
redis-server /data/6381/redis.conf &


4-4、查看是否启动成功
netstat -antup | grep redis
#过滤出对应的接口表示启动成功


4-5、实例目录结构
[root@master-01 redis]# tree /data/
/data/
├── 6380
│   ├── data
│   │   └── appendonly.aof
│   └── redis.conf
└── 6381
├── data
│   └── appendonly.aof
└── redis.conf


4 directories, 4 files


5、登陆对应的实例
redis-cli -h 192.168.88.66 -p 6380
# -h 指定主机
# -p 指定端口


6、设置主从同步;一个主可以有多个从,从还可以再设置多个从。
主:6379
从:6380

6-1、修改从配置文件:
197 slaveof 192.168.88.66 6379  #指定主master的主机及端口号
205 masterauth yunjisuan  #指定验证密码

280 # repl-backlog-size 1mb  #记录从同步时的位置,默认是没有开启的。


6-2、关闭6380端口实例
redis-cli -p 6380 -a yunjisuan shutdown

6-3、启动6380端口实例
redis-server /data/6380/redis.conf
主输出信息:
[12550] 02 Nov 18:55:56.347 * RDB: 6 MB of memory used by copy-on-write
[12443] 02 Nov 18:55:56.402 * Background saving terminated with success
[12443] 02 Nov 18:55:56.402 * Synchronization with slave succeeded
从输出信息:
[12547] 02 Nov 18:55:55.306 # Server started, Redis version 2.8.9
[12547] 02 Nov 18:55:55.306 * DB loaded from append only file: 0.000 seconds
[12547] 02 Nov 18:55:55.306 * The server is now ready to accept connections on port 6380
[12547] 02 Nov 18:55:56.307 * Connecting to MASTER 192.168.88.66:6379   #连接master
[12547] 02 Nov 18:55:56.307 * MASTER <-> SLAVE sync started    #开始发送sync
[12547] 02 Nov 18:55:56.307 * Non blocking connect for SYNC fired the event.   #这是一个不阻塞事件
[12547] 02 Nov 18:55:56.308 * Master replied to PING, replication can continue...   #master应答了ping,同步开始
[12547] 02 Nov 18:55:56.308 * Partial resynchronization not possible (no cached master)   #重新进行同步不可能(master没有缓存内容)
[12547] 02 Nov 18:55:56.310 * Full resync from master: c3f5a232a162608abbd378a718ef4563176cbe96:1   #从master同步全
部数据 933d3b0123f2d72cf106d901434898aab24d2a6e:1
[12547] 02 Nov 18:55:56.402 * MASTER <-> SLAVE sync: receiving 31 bytes from master   #从master接收到31字节数据
[12547] 02 Nov 18:55:56.402 * MASTER <-> SLAVE sync: Flushing old data   #刷新旧数据
[12547] 02 Nov 18:55:56.403 * MASTER <-> SLAVE sync: Loading DB in memory   #数据放到内存
[12547] 02 Nov 18:55:56.403 * MASTER <-> SLAVE sync: Finished with success   #同步完成
[12547] 02 Nov 18:55:56.419 * Background append only file rewriting started by pid 12551   #AOF重写
[12551] 02 Nov 18:55:56.424 * SYNC append only file rewrite performed
[12551] 02 Nov 18:55:56.424 * AOF rewrite: 6 MB of memory used by copy-on-write
[12547] 02 Nov 18:55:56.521 * Background AOF rewrite terminated with success   #AOF重写成功
[12547] 02 Nov 18:55:56.521 * Parent diff successfully flushed to the rewritten AOF (0 bytes)
[12547] 02 Nov 18:55:56.521 * Background AOF rewrite finished successfully


测试主从是否同步:
1、查看redis的内存信息
redis-cli -a yunjisuan -p 6379  info cpu  #查看CPU信息
redis-cli -a yunjisuan -p 6379  info Memory  #查看那内存信息
redis-cli -a yunjisuan -p 6379  info Clients  #查看连接数
redis-cli -a yunjisuan -p 6379  info Replication   #查看同步状态,如果查看的是主上的信息,会显示所有从的IP地址等信息
,以及显示多少个从库

=================================================================================================================================================


redis的哨兵:


单个哨兵启动:
1、创建哨兵的配置文件
/usr/local/redis/conf/sentinel.conf 
2、配置文件的内容:
sentinel monitor mymaster 192.168.88.89 6379 1
3、启动哨兵
[root@web01 conf]# redis-sentinel sentinel.conf
#会显示出主、从的信息
###至此:单个哨兵启动成功


多个哨兵启动:
1、复制sentinel.conf配置文件到对应实例的目录中
[root@web01 ~]# ll /data/638{0,1} #分别拷贝一份 sentinel.conf的配置文件
[root@web01 ~]# ll /data/638{0,1}
/data/6380:
总用量 52
drwxr-xr-x. 2 root root  4096 12月  3 21:38 data
-rw-r--r--. 1 root root 41454 12月  3 21:37 redis.conf
-rw-r--r--. 1 root root   477 12月  3 21:43 sentinel.conf


/data/6381:
总用量 52
drwxr-xr-x. 2 root root  4096 12月  3 21:34 data
-rw-r--r--. 1 root root 41452 12月  3 21:43 redis.conf
-rw-r--r--. 1 root root   477 12月  3 21:43 sentinel.conf


2、对应实例中的sentinel.conf的配置文件一定要设置代理端口,否则是无法正常启动的。

3、实例中sentinel.conf的配置文件
[root@web01 ~]# cat /data/6381/sentinel.conf 
port 26679
sentinel monitor mymaster 192.168.88.89 6379 2
###在第一行加入: port 指定哨兵的代理端口,默认是:26479


====================================================================================================================
======================
====================== 一些关于redis哨兵的介绍
======================
====================================================================================================================


redis中文文档:
http://redis.majunwei.com/topics/sentinel.html


maxmemory 2mb 
maxmemory-policy allkeys-lru
设置redis的最大使用内存,以及过期算法。




sentinel.conf 配置文件的示例:


第一组:
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1


第二组:
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5


#一组实例叫mymaster,另一组叫 resque。 


========================================================================================================
Sentinel日志,以应该能看到很多动作:
========================================================================================================
    1、每个Sentinel检查到master挂掉,有一个+sdown事件。
    2、这个时间稍后升级到 +odown,这意味着多个Sentinel商定了master不可到达的事实。
    3、Sentinels投票选举一个Sentinel启动第一次故障转移。
    4、发生故障转移。
+sentinel [instance details] -- 发现添加一个sentinel。
+sdown [instance details] -- 指定的实例现在在主观上是Down状态。
-sdown [instance details] -- 指定的实例不再是主观上的Down状态。
+odown [instance details] -- 指定的实例现在在客观上是Down状态。
-odown [instance details] -- 指定的实例在客观上不再是Down状态。 

+failover-state-select-slave [instance details] -- 新的故障转移状态是 select-slave:尝试查找适当晋升的slave。
no-good-slave [instance details] -- 没有适当晋升的slave。稍后重试,但是这可能会发生改变并终止故障转移。
selected-slave [instance details] -- 找到适合晋升的slave。
failover-state-send-slaveof-noone [instance details] -- 尝试重新配置晋升的slave作为master,等待转换。
failover-end-for-timeout [instance details] -- 由于超时终止故障转移,不管怎样,slave最后将被配置为复制新master。
failover-end [instance details] -- 故障转移成功完成。所有slaves被重新配置为新master的从。




switch-master [master name] [oldip] [oldport] [newip] [newport] -- 在改变配置之后指定master新IP和地址。
这是大多数外部用户感兴趣的消息


=======================================================================================================
Slaves优先级:


Redis实例有一个salve-priority的配置参数。这个信息暴露在Redis slave的 INFO 输出里,
Sentinel使用它以便于在可用的salves中获取slave进行故障转移
    如果Slave优先级设置为0.slave永远不会晋升为master。
    优先级数字越低越被Sentinel优先选择。


=======================================================================================================
Sentinel和Redis身份验证


    requirepass 在master里,设置身份验证密码,并确定实例不处理没有身份验证的客户端请求。
    masterauth 在slave里,为了slave验证master以便于从master正确的复制数据。


提示:
在master和slaves的所有实例里都配置上上面的指令。
另一种情况:
然而在一些罕见的情况下你需要slave不进行身份验证就可以访问,你可以将slave的优先级设置为0,
放置这个slave升级为master,并在这个slave里只配置masterauth指令,不用requirepass指令,
以便于没有授权的客户端也可以访问。

=======================================================================================================


关于切换时减少数据丢失的配置:


min-slaves-to-write 1
min-slaves-max-lag 10


# 老master M1将会在10秒钟后变为不可用。
#在master检查到它不再能传输它的写入操作到指定数量的slave的时候停止接收写入操作。 
#一个Redis实例,当作为一个master,如果它不能写入至少1个slave将停止接收写入操作。(N个Slave以上不通就停止接收)
###如果两个slave挂掉,master将会停止接收写入操作。这是个权衡


==========================================================================================================


映射端口:


##这里我们假定实例已经运行在5000,5001,5002。还假定Redis master运行在6379端口,slave运行在6380端口
映射端口:
port 5000
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1


 上面的配置中需要注意一些事情:


    master 叫做 mymaster。它标识master和它的slave。因为每个master设置有个不同的名字,Sentinel可以同时监控不同组的master和slave。
    quorum设置为2(sentinel monitor指令的最后一个参数)。
    down-after-milliseconds 的值为5000毫秒,也就是5秒,所以一旦我们在这个时间范围内不能接收响应,master将会被标记为故障。



SENTINEL slaves mymaster
SENTINEL sentinels mymaster


第一个会打印连接到master的slave的信息,第二个是关于其他Sentinel的信息。 


======================================================================================================================================


###
###获取当前master地址
###
127.0.0.1:5000] SENTINEL get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6379"


=====================================================================================================


下面是SENTINEL的子命令清单,用于修改Sentinel实例的配置:
1、SENTINEL MONITOR  [name] [ip] [port] [quorum] - 这个命令告诉Sentinal开始使用指定的name、ip、port、quorum监控新master。
这个sentinel.conf配置文件里的指令完全相同,区别是这里不能使用主机名作为IP,你需要提供一个IPv4或IPv6地址。


2、SENTINEL REMOVE  [name] - 用于删除指定的master:master将不再受监控,并从Sentinel内部状态完全删除,
所以通过SENTINEL masters命令不会再列处理,等等。


3、SENTINEL SET [name] [option] [value] - SET命令和Redis的CONFIG SET 非常相似,用于修改指定master的配置参数。
可以指定多组option / value。所有通过sentinel.conf配置的参数都可以通过SET命令设置


4、下面是一个SENTINEL SET 命令的例子,用于修改名叫objects-cache的master的down-after-milliseconds:
SENTINEL SET objects-cache-master down-after-milliseconds 1000


5、更改quorum(票数)配置而不用删除和重新添加master,只是使用: 
SENTINEL SET objects-cache-master quorum 5


提示:
注意没有对应的GET命令因为SENTINEL MASTER以简单的格式提供了所有的配置参数。
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值