Redis部署读写分离架构

发布 : 2017-06-12 分类 : 大数据 浏览 :
1
2
3
4
一主一从,往主节点去写,在从节点去读,可以读到,就代表主从架构搭建成功
192.168.31.231 matrix-cache01(redis主节点)
192.168.31.232 matrix-cache02(redis从节点)
192.168.31.233 matrix-cache03(redis从节点)

1.启用复制,部署slave node

1
2
3
4
5
6
7
8
9
10
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar -xzvf tcl8.6.1-src.tar.gz
cd tcl8.6.1/unix/
./configure
make && make install

使用redis-3.2.8.tar.gz(截止2017年4月的最新稳定版)
tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make && make install

(1).redis utils目录下,有个redis_init_script脚本

1
[root@matrix-cache01 ~]# cd redis-3.2.8/utils/

Markdown

(2).将redis_init_script脚本拷贝到linux的/etc/init.d目录中,将redis_init_script重命名为redis_6379,6379是我们希望这个redis实例监听的端口号

1
2
3
[root@matrix-cache01 utils]# cp redis_init_script /etc/init.d
[root@matrix-cache01 utils]# cd /etc/init.d
[root@matrix-cache01 init.d]# mv redis_init_script redis_6379

(3).修改redis_6379脚本的第6行的REDISPORT,设置为相同的端口号(默认就是6379)

1
[root@matrix-cache01 init.d]# vi redis_6379

Markdown

(4).创建两个目录

1
2
3
4
/etc/redis(存放redis的配置文件)
/var/redis/6379(存放redis的持久化文件)
[root@matrix-cache01 ~]# mkdir -p /etc/redis
[root@matrix-cache01 ~]# mkdir -p /var/redis/6379

(5).修改redis配置文件(默认在根目录下,redis.conf),拷贝到/etc/redis目录中,修改名称为6379.conf

1
2
3
4
5
[root@matrix-cache01 ~]# mv redis-3.2.8/redis.conf /etc/redis/6379.conf
[root@matrix-cache01 ~]# cd /etc/redis
[root@matrix-cache01 redis]# ll
总用量 48
-rw-r--r-- 1 root root 46709 6月 12 07:29 6379.conf

(6).修改6379.conf中的部分配置为生产环境

1
2
3
4
daemonize	yes                                 让redis以daemon进程运行
pidfile /var/run/redis_6379.pid 设置redis的pid文件位置
port 6379 设置redis的监听端口号
dir /var/redis/6379 设置持久化文件的存储位置

Markdown

Markdown

Markdown

Markdown

(7).让redis跟随系统启动自动启动

1
2
3
4
在redis_6379脚本中,最上面,加入两行注释

# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
1
2
[root@matrix-cache02 ~]# cd /etc/init.d
[root@matrix-cache02 init.d]# vi redis_6379

Markdown

1
[root@matrix-cache02 init.d]# chkconfig redis_6379 on

Markdown

2.强制读写分离

1
2
3
4
基于主从复制架构,实现读写分离
redis slave node只读,默认开启
会拒绝所有的写操作
这样可以强制搭建成读写分离的架构

在master node上配置

1
2
[root@matrix-cache01 ~]# vi /etc/redis/6379.conf
bind 192.168.31.231

在slave node上配置

1
2
3
4
[root@matrix-cache02 ~]# vi /etc/redis/6379.conf
slaveof 192.168.31.231 6379
bind 192.168.31.232
slave-read-only yes

Markdown

3.集群安全认证(所有主从服务器都要设置)

master上启用安全认证

1
2
[root@matrix-cache01 ~]# vi /etc/redis/6379.conf
requirepass redis-pass

slave连接master的口令,主从数据库都要设置

1
2
[root@matrix-cache01 ~]# vi /etc/redis/6379.conf
masterauth redis-pass

4.读写分离架构的测试

先启动主节点

1
2
3
[root@matrix-cache01 ~]# cd /etc/init.d
[root@matrix-cache01 init.d]# ./redis_6379 start
Starting Redis server...

启动从节点

1
2
3
[root@matrix-cache02 ~]# cd /etc/init.d
[root@matrix-cache02 init.d]# ./redis_6379 start
Starting Redis server...
1
2
3
[root@matrix-cache03 ~]# cd /etc/init.d
[root@matrix-cache03 init.d]# ./redis_6379 start
Starting Redis server...

4.1.在主节点上写数据,在从节点上读数据

主节点写数据

1
2
3
4
5
6
[root@matrix-cache01 ~]# redis-cli -h 192.168.31.231 -a redis-pass
192.168.31.231:6379> set myname sparsematrix
OK
192.168.31.231:6379> get myname
"sparsematrix"
192.168.31.231:6379> exit

Markdown

从节点读数据

1
2
3
4
[root@matrix-cache02 ~]# redis-cli -h 192.168.31.232 -a redis-pass
192.168.31.232:6379> get myname
"sparsematrix"
192.168.31.232:6379> exit

Markdown

1
2
3
4
[root@matrix-cache03 ~]# redis-cli -h 192.168.31.233 -a redis-pass
192.168.31.233:6379> get myname
"sparsematrix"
192.168.31.233:6379> exit

Markdown

关闭Redis

1
2
3
[root@matrix-cache01 ~]# redis-cli -a redis-pass -h 192.168.31.231 SHUTDOWN
[root@matrix-cache02 ~]# redis-cli -a redis-pass -h 192.168.31.232 SHUTDOWN
[root@matrix-cache03 ~]# redis-cli -a redis-pass -h 192.168.31.233 SHUTDOWN

注意

1
2
3
4
bind 127.0.0.1 -> 本地的开发调试的模式,就只能127.0.0.1本地才能访问到6379的端口
每个redis.conf中的bind 127.0.0.1 -> bind自己的ip地址
在每个节点上都可以通过这个命令放开端口:
iptables -A INPUT -ptcp --dport 6379 -j ACCEPT

5.Redus主从读写分离架构配置总结

在master node上配置

1
2
3
4
5
6
7
8
[root@matrix-cache01 ~]# vi /etc/redis/6379.conf
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
dir /var/redis/6379
bind 192.168.31.231
requirepass redis-pass
masterauth redis-pass

Markdown

在slave node上配置

1
2
3
4
5
6
7
8
9
10
[root@matrix-cache02 ~]# vi /etc/redis/6379.conf
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
dir /var/redis/6379
bind 192.168.31.232
slave-read-only yes
slaveof 192.168.31.231 6379
requirepass redis-pass
masterauth redis-pass

Markdown

1
2
3
4
5
6
7
8
9
10
[root@matrix-cache03 ~]# vi /etc/redis/6379.conf
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
dir /var/redis/6379
bind 192.168.31.233
slave-read-only yes
slaveof 192.168.31.231 6379
requirepass redis-pass
masterauth redis-pass

Markdown

6.查看Redis主从信息

master

1
2
3
4
5
6
7
8
9
10
11
12
[root@matrix-cache01 ~]# redis-cli -h 192.168.31.231 -a redis-pass
192.168.31.231:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.31.232,port=6379,state=online,offset=782,lag=0
slave1:ip=192.168.31.233,port=6379,state=online,offset=782,lag=0
master_repl_offset:782
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:781

Markdown

slave

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@matrix-cache02 ~]# redis-cli -h 192.168.31.232 -a redis-pass
192.168.31.232:6379> info replication
# Replication
role:slave
master_host:192.168.31.231
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:1090
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

Markdown

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@matrix-cache03 ~]# redis-cli -h 192.168.31.233 -a redis-pass
192.168.31.233:6379> info replication
# Replication
role:slave
master_host:192.168.31.231
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:1132
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

Markdown

本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2017/06/12/Redis部署读写分离架构/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹