在主从模式的Redis系统中,从数据库在整个系统中起到了数据冗余备份和读写分离的作用。
节点类型 | IP地址 | 安装包 | 功能 |
---|---|---|---|
master | 192.168.100.128 | redis-5.0.7.tar.gz | 提供可读可写 |
slave1 | 192.168.100.131 | redis-5.0.7.tar.gz | 提供只读 |
slave2 | 192.168.100.132 | redis-5.0.7.tar.gz | 提供只读 |
1、先给每个节点安装redis
//安装编译工具
yum install -y gcc gcc-c++ make
//安装包可以用下面这个命令下载,但是慢。
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
#软件包解压到/usr/local目录下
tar -zxvf redis-5.0.7.tar.gz -C /usr/local
//编译安装
cd /usr/local
mv redis-5.0.7 redis
cd redis
make
cd src && make install
2、修改主、从节点的配置文件
主节点:
vi /usr/local/redis/redis.conf
69/bind 0.0.0.0
在研发、测试环境可以考虑bind 0.0.0.0,线上生产环境建议绑定从节点服务器的IP地址
sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/redis.conf
136行 daemonize no #开启守护进程yes
sed -i '136s/no/yes/' /usr/local/redis/redis.conf
171行 logfile "" 改成 logfile /usr/local/redis/redis.log
sed -i '171s/""/\/usr\/local\/redis\/redis.log/' /usr/local/redis/redis.conf
263行 dir ./ 改成 dir /usr/local/redis #本地数据库的存放目录
sed -i '263s/.\//\/usr\/local\/redis/' /usr/local/redis/redis.conf
699/appendonly no #启用AOF持久化
sed -i '699s/no/yes/' /usr/local/redis/redis.conf
从节点:
vi /usr/local/redis/redis.conf
69/bind 0.0.0.0
在研发、测试环境可以考虑bind 0.0.0.0,线上生产环境建议绑定从节点服务器的IP地址
sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/redis.conf
136行 daemonize no #开启守护进程yes
sed -i '136s/no/yes/' /usr/local/redis/redis.conf
171行 logfile "" 改成 logfile /usr/local/redis/redis.log
sed -i '171s/""/\/usr\/local\/redis\/redis.log/' /usr/local/redis/redis.conf
263行 dir ./ 改成 dir /usr/local/redis
sed -i '263s/.\//\/usr\/local\/redis/' /usr/local/redis/redis.conf
699/appendonly no #启用AOF持久化
sed -i '699s/no/yes/' /usr/local/redis/redis.conf
286/# replicaof 改成 replicaof 192.168.100.128 6379
sed -i '286creplicaof 192.168.100.128 6379' /usr/local/redis/redis.conf
3、设置防火墙,放通6379端口的信息流通
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
4、设置内存分配策略
cat >> /etc/sysctl.conf<
5、启动服务,先启动master redis,然后依次启动slave
/usr/local/redis/src/redis-server /usr/local/redis/redis.conf
6、 查看日志文件内容,可以看到两个slave节点连接成功的信息!
tail -99f /usr/local/redis/redis.log
进入主节点的数据库中,创建键值对,在从节点中可以进行查询,但是不能在从节点创建新的键值对。
主节点:
[root@localhost redis]# redis-cli
127.0.0.1:6379> set name zhangsan #创建一个键值对
OK
127.0.0.1:6379> keys * #查看所有键
1) "name"
127.0.0.1:6379> get name #查看name键的值
"zhangsan"
127.0.0.1:6379> exit
从节点服务器:
[root@localhost ~]# redis-cli
127.0.0.1:6379> get name #查看name键的值
"zhangsan"
127.0.0.1:6379> exit
redis2.8版本之前是主从复制模式,但是当数据库遇到异常中断服务后,我们只能通过手动的方式选择一个从数据库来升格为主数据库,显然这种方式很麻烦需要人工介入,这时通过哨兵模式可以实现自动化的系统监控和故障恢复。
哨兵模式是在主从复制的基础上加入监控机制,来实现自动化的系统监控和故障恢复功能。
具体功能如下:
哨兵集群的结构图:
每个节点都有一个哨兵进行监控。
master节点:
vi /usr/local/redis/sentinel.conf
17/protected-mode no #关闭保护模式
sed -i '17s/^#//' /usr/local/redis/sentinel.conf
sed -i '17s/^ //' /usr/local/redis/sentinel.conf
21/port 26379 #无需修改,sentinel的端口号
26/daemonize yes 指定sentinel为后台启动
sed -i '26s/no/yes/' /usr/local/redis/sentinel.conf
36/logfile /usr/local/redis/sentinel.log #日志存放路径
sed -i '36s/""/\/usr\/local\/redis\/sentinel.log/' /usr/local/redis/sentinel.conf
65/dir /tmp 改成 dir "/usr/local/redis" #数据库存放路径
sed -i '65s/tmp/usr\/local\/redis/' /usr/local/redis/sentinel.conf
84/sentinel monitor mymaster 192.168.100.128 6379 2
sed -i '84s/127.0.0.1/192.168.100.128/' /usr/local/redis/sentinel.conf
//sentinel monitor mymaster [主服务器节点IP] [主服务器节点port] [几个哨兵检测到主节点失联数量]
-- 至少有几个哨兵检测到主服务器故障了,才进行故障迁移
113/sentinel down-after-milliseconds mymaster 3000 #原来是30000,为了尽快看到效果,将时间缩短
sed -i '113s/30000/3000/' /usr/local/redis/sentinel.conf
146/sentinel failover-timeout mymaster 120000 #原来是180000
sed -i '146s/180000/120000/' /usr/local/redis/sentinel.conf
slave节点:
vi /usr/local/redis/sentinel.conf
17/protected-mode no #关闭保护模式
sed -i '17s/^#//' /usr/local/redis/sentinel.conf
sed -i '17s/^ //' /usr/local/redis/sentinel.conf
26/daemonize yes 指定sentinel为后台启动
sed -i '26s/no/yes/' /usr/local/redis/sentinel.conf
36/logfile /usr/local/redis/sentinel.log #日志存放路径
65/dir /tmp 改成 dir "/usr/local/redis" #数据库存放目录
84/sentinel monitor mymaster 192.168.100.128 6379 2 #填写主节点的地址
113/sentinel down-after-milliseconds mymaster 3000 #原来是30000,为了尽快看到效果,将时间缩短
sed -i '113s/30000/3000/' /usr/local/redis/sentinel.conf
146/sentinel failover-timeout mymaster 120000 #原来是180000
sed -i '146s/180000/120000/' /usr/local/redis/sentinel.conf
依次启动哨兵sentinel,先启动master 然后slave
//放在后台运行
/usr/local/redis/src/redis-sentinel /usr/local/redis/sentinel.conf &
查看哨兵信息,里面有master节点的IP地址
redis-cli -p 26379 INFO Sentinel
关闭主节点的redis-server服务
ps -ef | grep redis #查看redis-server进程数
kill -9 进程数 #关闭redis-server
//查看日志
tail -99f /usr/local/redis/sentinel.log
看到switch-master mymaster 192.168.100.128 6379 192.168.100.132 6379,即主节点down掉,从节点顶替主节点。
// 查看哨兵信息,可以看到master节点的IP地址改变
redis-cli -p 26379 INFO Sentinel