主机环境:rhel7.3 selinux and firewalld disabled
主机名 | ip | 服务 |
---|---|---|
server1 | 172.25.254.1 | redis |
server2 | 172.25.254.2 | redis |
server3 | 172.25.254.3 | redis |
一、基础概念
1.什么是Redis?
redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了memcached 这类 key-value 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。
Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个 appendonly file(aof)里面(这称为“全持久化模式”)。
二、Redis主从复制搭建步骤:
1.获得资源包,解压,安装(redis可以不用编译,直接make)
[root@server1 redis]# tar zxf redis-5.0.3.tar.gz
[root@server1 redis]# cd redis-5.0.3
[root@server1 redis-5.0.3]# yum install gcc -y
[root@server1 redis-5.0.3]# make #redis里将编译安装放一起
[root@server1 redis-5.0.3]# make install #生成路径
server2、server3操作相同,此处将make好的目录发送过去,在执行make install
[root@server1 redis]# scp -r redis-5.0.3 server2:/root
[root@server1 redis]# scp -r redis-5.0.3 server3:/root
2.在主redis上进行初始化,并且修改配置文件
[root@server1 utils]# pwd
/root/redis/redis-5.0.3/utils
[root@server1 utils]# ./install_server.sh ##安装redis,安装完会自动启动
[root@server1 utils]# netstat -tnlp ##可以看到redis默认是开启127.0.0.1的6379端口,这样只能本地访问,需要配置所有接口都能访问
对配置文件进行修改,设置端口的绑定
[root@server1 redis]# pwd
/etc/redis
[root@server1 redis]# vim 6379.conf
70 bind 0.0.0.0
[root@server1 redis]# /etc/init.d/redis_6379 restart ##重启服务,也可以用systemctl restart redis_6379,但是重启好像不生效,可以开启服务
[root@server1 redis]# netstat -tnlp
在数据库里进行信息添加
[root@server1 redis]# redis-cli
127.0.0.1:6379> set name dd
OK
127.0.0.1:6379> get name
"dd"
127.0.0.1:6379> exit
3.在从库上进行安装,设置,并进行测试查看
【server2】:
[root@server2 ~]# ls
redis-5.0.3
[root@server2 ~]# cd redis-5.0.3/
[root@server2 redis-5.0.3]# make install
[root@server2 utils]# pwd
/root/redis-5.0.3/utils
[root@server2 utils]# ./install_server.sh
[root@server2 redis]# pwd
/etc/redis
[root@server2 redis]# vim 6379.conf
70 bind 0.0.0.0
1379 slaveof 172.25.254.1 6379
[root@server2 redis]# /etc/init.d/redis_6379 restart
[root@server2 redis]# netstat -antlup
[root@server2 redis]# redis-cli
127.0.0.1:6379> get name
"dd"
127.0.0.1:6379> set age 18
(error) READONLY You can't write against a read only replica.
【server3】:
[root@server3 redis-5.0.3]# make install
[root@server3 redis-5.0.3]# cd utils/
[root@server3 utils]# ./install_server.sh
[root@server3 utils]# cd /etc/redis/
[root@server3 redis]# vim 6379.conf
70 bind 0.0.0.0
1379 slaveof 172.25.254.1 6379
[root@server3 redis]# /etc/init.d/redis_6379 restart
[root@server3 redis]# netstat -antlup
[root@server3 redis]# redis-cli
127.0.0.1:6379> get name
"dd"
127.0.0.1:6379> set age 18 #从不能写
(error) READONLY You can't write against a read only replica.
三、Redis 高可用(哨兵机制)
Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
搭建步骤:
1.将哨兵配置文件发送到redis的配置目录下,修改哨兵配置文件
[root@server1 redis-5.0.3]# pwd
/root/redis/redis-5.0.3
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf sentinel.conf
[root@server1 redis]# vim sentinel.conf
17 protected-mode no ##关闭保护模式
84 sentinel monitor mymaster 172.25.254.1 6379 2 ##配置master信息,后面的2表示投票机制,至少有2个节点认为master挂了,才会切换
113 sentinel down-after-milliseconds mymaster 10000 ##改为10s,表示master挂后10s会切换
在server2和server3上同样要开启(将server1的哨兵配置文件scp一份#注意先发送再在1上打开)
[root@server1 redis]# scp sentinel.conf server2:/etc/redis/
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/
2.主从上都开启哨兵
[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel
[root@server2 redis]# redis-server /etc/redis/sentinel.conf --sentinel
[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel
测试:
另ssh连上server1查看端口发现哨兵26379进程开启
[root@server1 ~]# netstat -antlup
[root@server1 ~]# redis-cli
127.0.0.1:6379> info #查看状态信息,此时server1是master
查看sentinel信息
[root@server1 ~]# redis-cli -p 26379
127.0.0.1:26379> info
注意:此时显示主是server1,sentinels=3表示成功
测试1:挂掉server1的redis ------->会随机选择一个slave作master
[root@server1 ~]# redis-cli
127.0.0.1:6379> SHUTDOWN
not connected> exit
sentinel哨兵也能看到信息,看此时谁是master(此时显示是server2)
此时ssh连上server2,查看状态信息
[root@server2 ~]# redis-cli
在主上写入信息,在从上查看(server3)
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> get age
“18”
注意,此时可以连上server1,/etc/init.d/redis_6379 start(此时将server1变slave);哨兵的配置文件会自动生成内容
[root@server1 redis]# cat sentinel.conf