Redis主从复制、读写分离
一般主库可以做读写、从库做读。
过程:
从库启动时,会向主库发送sync命令。
主库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来。
当快照完成后,redis会将快照文件和所有缓存的命令发送给从库。
从库收到后,会载入快照文件并执行收到的缓存的命令。
配置:
只需在从库修改 redis.config(vim redis.config)文件,加入主库的IP地址,端口号,密码。
slaveof 192.168... 6379
masterauth 123456--- 主库没有密码就不用配
Redis-cluster集群
官方推荐三主三从,Redis-cluster集群至少需要6个节点,一个主配一个从。
服务器有点小贵,这里先创建一台虚拟机试试手,分配6个不同端口实现不同的节点。
7001、7002、7003、7004、7005、7006。
先把防火墙关闭了--
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl status firewalld.service #查看firewall的状态
- 创建redis-cluster目录
mkdir -p 7001/data
mkdir -p 7002/data
mkdir -p 7003/data
mkdir -p 7004/data
mkdir -p 7005/data
mkdir -p 7006/data
mkdir bin - 到redis的安装路径复制src的脚本到bin目录下(绿色的)
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis-cluster/bin - 复制redis 实例 到7001
cp -r /usr/local/redis /usr/local/redis-cluster/7001 - 修改7001的redis.conf脚本
port 7001(每个节点的端口号)
daemonize yes
bind 192.168.119.131(绑定当前机器 IP)
pidfile /var/run/redis_7001.pid(pid 7001和port要对应)
cluster-enabled yes(启动集群模式)
cluster-config-file nodes-7001.conf(pid 7001和port要对应)
cluster-node-timeout 15000
appendonly yes
dir /usr/local/redis-cluster/7001/data/(数据文件存放位置,这个放到脚本最后面一行)
- 我们再复制5个分别放到对应的端口号目录里
\cp -rf /usr/local/redis-cluster/7001/* /usr/local/redis-cluster/7002
\cp -rf /usr/local/redis-cluster/7001/* /usr/local/redis-cluster/7003
\cp -rf /usr/local/redis-cluster/7001/* /usr/local/redis-cluster/7004
\cp -rf /usr/local/redis-cluster/7001/* /usr/local/redis-cluster/7005
\cp -rf /usr/local/redis-cluster/7001/* /usr/local/redis-cluster/7006 - 然后进入7002-7006端口号对应的redis.conf脚本,修改成对应的端口号。
- 启动试试水
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7001/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7002/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7003/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7004/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7005/redis/etc/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7006/redis/etc/redis.conf -
测试节点
/usr/local/redis-cluster/7001/redis/bin/redis-cli -h 192.168.37.130 -p 7001
/usr/local/redis-cluster/7002/redis/bin/redis-cli -h 192.168.37.130 -p 7002
/usr/local/redis-cluster/7003/redis/bin/redis-cli -h 192.168.37.130 -p 7003
/usr/local/redis-cluster/7004/redis/bin/redis-cli -h 192.168.37.130 -p 7004
/usr/local/redis-cluster/7005/redis/bin/redis-cli -h 192.168.37.130 -p 7005
/usr/local/redis-cluster/7006/redis/bin/redis-cli -h 192.168.37.130 -p 7006
ping一下.
查看redis进程:ps -ef |grep redis
9.这时候set,会报错
报错.png - 安装ruby软件,直接复制到命令行运行。
yum install ruby
yum install rubygems
gem install redis (或者使用本地上传方式,不知道是不是国内问题,可能这个命令下载不来) - 找到刚刚下载gem install redis 的位置,运行命令。
gem install -l redis-3.2.1.gem - 最后测试集群:
/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 id地址:7001 id地址:7002 id地址:7003 id地址:7004 id地址:7005 id地址:7006
M主S从
测试:
往7001set数据,保存到了6007。
- 如果报错:
报错2.png
可能是 redis-trib.rb与你所安装的版本不符。
下载3.2.1版本的 redis-trib.rb。官网地址
解压后我们在src目录找到redis-trib.rb脚本,上传,再用这个redis-trib.rb运行集群。
在云服务器上搭建
基本步骤跟上面差不多,要注意几点:
- 需要protected-mode把改成no:protected-mode no
保护模式,yes就是不允许外网访问。 -
bind后面写主机ip地址,我的写了没用,我就直接注释了,或者写0.0.0.0。就上面IP都允许。
bind.png - protected-mode改为no,bind有注释了,运行的时候会报你什么安全的东西,意思就是你总的设置一个密码吧,不然什么人都能链。加个密码,requirepass 123。
-
看你是用什么云服务,腾讯云阿里云需要去安全组开放端口,端口+10000也要开放,6个节点的12个端口号。百度云就不需要了,默认就已经是全部端口号都开启了。
端口1.png
端口2.png - redis官方一般不建议加密码了,主要是只允许本机访问,bind后面加固定ip的方法比较好