背景
由于业务的需求,线上的Redis服务需要部署到公网上。考虑到数据的敏感性,因此不希望数据在公网上是明文传输的。
所以需要引入SSL/TLS来加密传输的数据,从而保证数据在一定程度上的安全性。
鉴于目前的Redis并没有官方支持的ssl/tls通信功能。所以只能通过SSL代理来实现。在这里选择了Spiped作为SSL的代理工具。
Spiped的项目地址是:https://github.com/Tarsnap/spiped
官方地址是:http://www.tarsnap.com/spiped.html
部署
Redis2台机器,IP、端口分别为:
1. 192.168.1.100:36379(Master)
2. 192.168.1.101:36379(Slave)
分别在2台机器上执行如下安装操作:
下载redis
下载地址为:http://download.redis.io/releases/redis-3.2.3.tar.gz
编译redis
编译&安装的命令为:
tar zvxf redis-3.2.3.tar.gz && cd redis-3.2.3 && make && make install
启动redis
启动Master:
启动master的命令为:
cd src/ && ./redis-server ../redis.conf
启动Slave:
启动slave的操作为:
- 修改redis.conf。在 redis-3.2.3目录下。添加slaveof,对应结构是: slaveof 192.168.1.100 36379
- 启动Slave,启动命令为:
cd src/ && ./redis-server ../redis.conf
验证
在服务端启动redis-cli并写入测试数据:
# 登录redis-cli
./redis-cli -p 36379
# 写入测试数据
set "TEST_KEY" "FOO"
在客户端启动redis-cli并检查是否有测试数据正确同步
# 在slave端启动redis-cli
./redis-cli -p 36379
# 检查字段是否同步过来
KEYS *
部署Spiped
下载spiped
spiped的下载链接为:https://github.com/Tarsnap/spiped.git
安装spiped
安装命令为:
cd spiped && make
配置spiped
生成对应的key
生成key的命令为:dd if=/dev/urandom bs=32 count=1 of=spiped.key
服务端启动spiped
在服务端机器上执行如下命令:
cd spiped
./spiped -d -s [0.0.0.0]:46379 -t [192.168.1.100]:36379 -k /root/tools/etc/spiped.key
该命令表示启动一个spiped代理,监听46379端口,并转发到192.168.1.100的36379端口。
客户端启动spiped
首先需要从服务端scp回来生成的spiped.key 之后启动spiped的命令为:
cd spiped
./spiped -e -s [0.0.0.0]:46379 -t [192.168.1.100]:46379 -k ../../etc/spiped.key
该命令表示启动一个spiped代理,监听46379端口,并转发到192.168.1.100上的46379端口上。
验证spiped
- 修改slave的redis.conf的slaveof,改为: 12.0.0.1 46379。
- 重启slave的redis-server。
- 在Master上的redis中写入新的测试数据:
set "TEST_KEY3" "bla"
- 打开slave上的redis-cli。检查对应的key是否存在:KEYS *
如果在客户端能正确同步服务端新增加的key,则表示spiped配置正确。