主从复制、哨兵模式,数据持久化机制与数据类型
> 环境配置
>
> ```
> host61:master服务器
> -> 192.168.88.61
> host62:slave服务器
> -> 192.168.88.62
> host63:slave服务器
> -> 192.168.88.63
> ------------------------------------------------
> host67:master服务器
> -> 192.168.88.67
> host68:slave服务器
> -> 192.168.88.68
> host69:哨兵服务器
> -> 192.168.88.69
> ------------------------------------------------
> host70:持久化
> -> 192.168.88.70
> ```
#### 一、主从复制
> 前置准备:
>
> ```
> vm clone host6{1..3}
> for i in 6{1..3}
> do
> vm setip host$i 192.168.88.$i
> ssh-copy-id root@192.168.88.$i
> done
>
> [host]
> host61 ansible_ssh_host=192.168.88.61
> host62 ansible_ssh_host=192.168.88.62
> host63 ansible_ssh_host=192.168.88.63
>
> - hosts: all
> tasks:
> - yum:
> name: redis
> - hosts: host61
> tasks:
> - shell: scp root@192.168.88.61:/etc/redis.conf /root/redis.test
> - hosts: host62,host63
> tasks:
> - copy:
> src: /etc/redis.test
> dest: /etc/redis.conf
> - hosts: all
> tasks:
> - service:
> name: redis
> state: started
> enabled: yes
> ```
##### 一主多从
冷备
```shell
# 修改配置文件
+286 replicaof <masterip> <masterport> # 配置主服务器的ip、端口
+293 masterauth <master-password> # 配置登录主服务器的密码
# 重启服务后生效
```
热备
```shell
redis-cli -h 192.168.88.61 # 登录到redis命令行
replicaof 192.162.88.61 6379 # 加入从服务器
config rewrite # 写入硬盘
```
> 若服务器中含有数据,在加入从服务器后所有数据都将被清空,主服务器的数据自动备份到从服务器中
##### 链式复制
```shell
replicaof no one # 恢复独立服务器
redis-cli -h 192.168.88.62 # 将63接入62从服务器,使63成为61的2级从服务器
```
> 如果63在第一次接入61前还有数据,接入61成为从服务器数据被清空,恢复独立服务器后这些被清空的源数据不会恢复
##### 配置带验证的主从复制
```redis
# 配置61密码
192.168.88.61:6379> config get requirepass
1) "requirepass"
2) ""
192.168.88.61:6379> config set requirepass 1234
OK
192.168.88.61:6379> config rewrite #上一步设置密码已经生效
(error) NOAUTH Authentication required. #写入硬盘需要密码认证
192.168.88.61:6379> auth 1234
OK
192.168.88.61:6379> config rewrite
OK
192.168.88.61:6379> info replication #查看从服务器
# Replication
role:master
connected_slaves:0 #修改密码后slave也需要认证
...
----------------------------------------------------------------
# 配置62密码认证
192.168.88.62:6379> config get masterauth
1) "masterauth"
2) ""
192.168.88.62:6379> config set masterauth 1234
OK
192.168.88.62:6379> config rewrite
OK
或者修改配置文件,重启服务
```
#### 二、哨兵模式
> 前置准备:
>
> ```
> vm remove host6{1..3}
> vm clone host6{7..9}
> for i in 6{7..9}
> do
> vm setip host$i 192.168.88.$i
> ssh-copy-id root@192.168.88.$i
> done
>
> [host]
> host67 ansible_ssh_host=192.168.88.67
> host68 ansible_ssh_host=192.168.88.68
> host69 ansible_ssh_host=192.168.88.69
>
> - hosts: all
> tasks:
> - yum:
> name: redis
> - lineinfile:
> path: /etc/redis.conf
> regexp: "^bind .*$"
> line: "bind 0.0.0.0"
> insertafter: "^# bing 127.0.0.1"
> state: present
> backup: yes
> - service:
> name: redis
> state: started
> enabled: yes
> ```
配置哨兵模式
```shell
# 修改哨兵配置文件: /etc/redis-sentinel.conf
+15 bind 0.0.0.0 #配置ip
+21 port 26379 #配置端口号
+26 daemonize yes #允许守护线程运行
+84 sentinel monitor myRedisGroup 192.168.88.67 6379 1 #声明服务器组
最后的1表示redis哨兵集群的投票过半数量,本行在生效后会被哨兵hash加密重写
端口默认加2万不用修改
# 重启哨兵服务生效
systemctl restart redis-sentinel.service
# 验证
关闭67redis节点
验证68redis节点是否接替master
重启67redis节点
验证67是否会加入68成为redis子节点
```
> 哨兵模式实现高可用,哨兵集群至少三台服务器
#### 三、数据持久化机制、数据类型
> 前置准备
>
> ```
> #创建redis服务器
> vm remove host6{7..9}
> vm clone redis70
> ```
RDB数据持久化方式之一,也是默认方式
```
+218~220 save 600 20 #由数据的存储频率动态地调整保存频率
+253 dbfilename dump.rbp #保存文件名
+263 dir /var/lib/redis #保存路径
```
数据恢复
systemctl stop redis会自动备份
在恢复备份前要先停止服务,否则恢复备份前数据会先被stop的保存机制覆盖掉
##### RDB优缺点


AOF日志文件,默认不启用
```
config get appendonly #查看
config set appendonly yes #启用
config rewrite #保存
热启用,可以修改配置文件冷启用
文件第一行是加密行调用dump.rdb文件,使用cat查看文件导致全文乱码,只能使用tail从尾部看避开第一行加密
```
##### AOF优缺点


##### 数据类型
ex、px、nx、xx
字符
set、get、mset、mget、strlen、append、getrange、incr、incrby、decr、decrby
列表
lpush、rpush、lrange(lrevrange)、llen、lindex、lset、lpop、rpop
散列
hset、hmset、hget、hmget、hlen、hdel、hkeys、hvals、hgetall
无序
sadd、smembers、scard、sismember、srem、srandmember、spop、sinter、sunion、sdiff
有序
zadd、zcard、zrange、zrevrange、zscore、zrangebyscore、zincrby、zrank、zrevrank