注:续上一篇博客《redis的安装及lnmp+redis配置》
一、redis主从同步
1、配置主从同步(配置52为51的从库)
(1)命令行配置模式,立即生效(重启redis后失效)
192.168.8.52:6352> SLAVEOF 192.168.8.51 6351 //设置为从库时,主库数据会覆盖从库数据
OK
192.168.8.52:6352> info replication //查看数据库角色
# Replication
role:slave
master_host:192.168.8.51
master_port:6351
master_link_status:up //状态为up表示配置成功
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:0
slave_priority:100
slave_read_only:1
connected_slaves:0
...
192.168.8.52:6352> SLAVEOF no one //将从库变为主库
OK
(2)通过客户端(50)主机登录主库(51)写入数据,查看同步情况
192.168.8.51:6351> info replication //查看主库的从库连接状态
# Replication
role:master
connected_slaves:1 //显示连接了1个从库
slave0:ip=192.168.8.52,port=6352,state=online,offset=1553,lag=0
master_replid:efb4df32479f84002565ae774ea3df543979b984
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1567
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1567
192.168.8.51:6351> keys *
1) "name"
192.168.8.51:6351> get name
"bob"
192.168.8.51:6351> set sex girl //写入数据
OK
192.168.8.51:6351> keys *
1) "sex"
2) "name"
192.168.8.51:6351> exit
[root@host50 ~]# redis-cli -h 192.168.8.52 -p 6352 //登录从库
192.168.8.52:6352> keys * //数据同步成功
1) "name"
2) "sex"
192.168.8.52:6352> get name
"bob"
192.168.8.52:6352> set age 23 //从库只能读,不能写
(error) READONLY You can't write against a read only slave.
(3)通过修改配置文件指定主库,永久生效
[root@host52 ~]# redis-cli -h 192.168.8.52 -p 6352 shutdown
[root@host52 ~]# vim /etc/redis/6379.conf
282 slaveof 192.168.8.51 6351 //指定51为主库
[root@host52 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host52 ~]# redis-cli -h 192.168.8.52 -p 6352
192.168.8.52:6352> info replication
# Replication
role:slave //角色为slave
master_host:192.168.8.51
master_port:6351
master_link_status:up //状显示为up
...
(4)有验证的主从配置
配置主库,指定登录密码
[root@host51 ~]# vim /etc/redis/6379.conf
501 requirepass 123456 //设置请求连接密码
[root@host51 ~]# vim /etc/init.d/redis_6379 //设置启动脚本,以便用脚本开关redis
43 $CLIEXEC -h 192.168.8.51 -p 6351 -a 123456 shutdown
[root@host51 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
配置从库,指定连接主库的密码
[root@host52 ~]# vim /etc/redis/6379.conf
282 slaveof 192.168.8.51 6351
289 masterauth "123456 //设置连接主库的密码
[root@host52 ~]# vim /etc/init.d/redis_6379 //修改启动脚本
43 $CLIEXEC -h 192.168.8.52 -p 6352 shutdown
[root@host52 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
验证主从
[root@host51 ~]# redis-cli -h 192.168.8.51 -p 6351 -a 123456
192.168.8.51:6351> info replication
# Replication
role:master
connected_slaves:1
...
--------------------------------------------------------------------------
[root@host52 ~]# redis-cli -h 192.168.8.52 -p 6352
192.168.8.52:6352> info replication
# Replication
role:slave
master_host:192.168.8.51
master_port:6351
master_link_status:up
...
(5)配置一主多从(51为主,52、53为从)
[root@host53 ~]# vim /etc/redis/6379.conf
282 slaveof 192.168.8.51 6351
289 masterauth "123456 //设置连接主库的密码
[root@host53 ~]# vim /etc/init.d/redis_6379 //修改启动脚本
43 $CLIEXEC -h 192.168.8.53 -p 6353 shutdown
[root@host53 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
(6)配置主从从(51为主,53为51的从,54为53的从)
[root@host54 ~]# vim /etc/redis/6379.conf
282 slaveof 192.168.8.53 6353
[root@host54 ~]# vim /etc/init.d/redis_6379 //修改启动脚本
43 $CLIEXEC -h 192.168.8.54 -p 6354 shutdown
[root@host54 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
(7)哨兵模式
- 哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
- 哨兵有两个作用
a.通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
b.当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机 - 一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式
这里以53配置哨兵模式为例,即53主机承担从库和哨兵的双重角色
- 创建哨兵服务的主配置文件
[root@host53 ~]# vim /etc/sentinel.conf
bind 0.0.0.0 //设置redis服务器可以跨网络与其他主机通信
sentinel monitor ser51 192.168.8.51 6351 1 //配置哨兵监视51主机,只要有1个哨兵发现主库故障,则从从库中选举主库
sentinel auth-pass ser51 123456 //主库设置连接密码后需要配置该选项
- 启动哨兵服务
[root@host53 ~]# redis-sentinel /etc/sentinel.conf
...
14818:X 03 May 21:40:54.511 # +monitor master ser51 192.168.8.51 6351 quorum 1 //监视的主库
14818:X 03 May 21:40:54.512 * +slave slave 192.168.8.53:6353 192.168.8.53 6353 @ ser51 192.168.8.51 6351 //监视的从库1
14818:X 03 May 21:47:45.881 * +slave slave 192.168.8.52:6352 192.168.8.52 6352 @ ser51 192.168.8.51 6351 //监视的从库2
...
- 测试哨兵模式
[root@host51 ~]# /etc/init.d/redis_6379 stop //关闭主库51主机的redis服务
Stopping ...
Redis stopped
[root@host53 ~]# redis-sentinel /etc/sentinel.conf
...
14818:X 03 May 21:51:43.072 # +switch-master ser51 192.168.8.51 6351 192.168.8.53 6353 //主库切换为53主机
14818:X 03 May 21:51:43.072 * +slave slave 192.168.8.52:6352 192.168.8.52 6352 @ ser51 192.168.8.53 6353
...
2、redis持久化之RDB
相关配置参数
恢复数据(数据库存储的数据文件/var/lib/redis/6379/dump.rdb)
3、redis持久化之AOF
相关配置参数
注:以上AOF
文件记录写操作的前两个方式在记录命令至内存同时,会将数据同步写入硬盘,第三种方式只记录在内存文件appendonly.aof中
- 写操作数据记录文件:/var/lib/redis/6379/appendonly.aof,一般情况下不要修改该文件,以免数据丢失
- RDB和AOF同时开启时,优先加载appendonly.aof文件
- 生产环境中,一般同时开启AOF和RDB,若redis服务器中途需要开启AOF,为避免RDB记录的数据被覆盖,应在redis登录状态下配置启用AOF
(1)通过修改配置文件启用AOF
[root@host50 ~]# vim /etc/redis/6379.conf
673 appendonly yes //启用AOF
677 appendfilename "appendonly.aof"
[root@host50 6379]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host50 6379]# ls
appendonly.aof dump.rdb
(2)在登录状态下启用AOF
[root@host50 6379]# redis-cli -h 192.168.8.50 -p 6350 -a 123456
192.168.8.50:6350> CONFIG SET appendonly yes //配置启用AOF
OK
192.168.8.50:6350> CONFIG REWRITE //将配置写入配置文件
OK
192.168.8.50:6350> exit
[root@host50 6379]# !ls
ls /var/lib/redis/6379/
appendonly.aof dump.rdb
4、redis数据类型
- string字符串
- list列表:字符队列,一个key可以存放多个值,先进后出
- hash表