可以参考redis中文官网
http://www.redis.cn
http://www.redis.cn/documentation.html
1.编译安装redis
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz
[root@server1 ~]# yum install -y gcc
[root@server1 ~]# cd /root/redis-5.0.3
[root@server1 redis-5.0.3]# make ##这里不用configure
[root@server1 redis-5.0.3]# make install
[root@server1 redis-5.0.3]# cd /root/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 utils]# vim /etc/redis/6379.conf ##修改端口
70 bind 0.0.0.0
[root@server1 utils]# /etc/init.d/redis_6379 restart ##重启服务,也可以用systemctl restart redis_6379,但是重启好像不生效,可以开启服务
[root@server1 utils]# redis-cli #使用
2.主从复制
[root@server1 ~]# scp -r redis-5.0.3 root@172.25.0.2: # 把redis拷贝到server2上
[root@server2 redis-5.0.3]# make install #在server2上安装
[root@server2 redis-5.0.3]# cd utils/
[root@server2 utils]# ./install_server.sh #全部选默认
[root@server2 utils]# vim /etc/redis/6379.conf
bind 0.0.0.0 #修改默认端口
[root@server2 ~]# /etc/init.d/redis_6379 restart
##配置主从:在server2上配置从
[root@server2 ~]# vim /etc/redis/6379.conf
replicaof 172.25.0.1 6379
/etc/init.d/redis_6379 restart
测试
在server1上:
[root@server1 ~]# redis-cli
127.0.0.1:6379> set name wsp
OK
127.0.0.1:6379> get name
"wsp"
在server2上:
[root@server2 ~]# redis-cli
127.0.0.1:6379> get name
"wsp"
注意:在server1上存入的值,在server2上可以看到,但是在server2上不能写入
[root@server2 ~]# redis-cli
127.0.0.1:6379> get name
"wsp"
127.0.0.1:6379> set name westos
(error) READONLY You can't write against a read only replica.
#redis的数据保存在/var/lib/redis/6379/dump.rdb
如果有问题,redis起不来,可以删除这文件再试
#vim /etc/redis/6379.conf
219 save 900 1 ##这几行表示,有一个键值发生变化时,会过900s更新,下面依次类推,因为不停更新会耗费资源
220 save 300 10
221 save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改
先看60秒,如果有10000个更改,那就save了吧。
如果没有,那么等到300秒,看是否有10个更改,有就save了吧。
同理900秒。。。
配置redis高可用
#再开一台server3,配置redis
[root@server1 ~]# scp -r redis-5.0.3 root@172.25.0.3:
[root@server3 redis-5.0.3]# make install
[root@server3 utils]# ./install_server.sh
[root@server3 redis]# vim 6379.conf
70 bind 0.0.0.0
89 protected-mode no
287 replicaof 172.25.0.1 6379
[root@server3 redis]# /etc/init.d/redis_6379 restart
##配置哨兵
在server1上(master)编辑配置文件
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/ ##复制配置文件,sentinel哨兵
[root@server1 ~]# vim /etc/redis/sentinel.conf
17 protected-mode no ##关闭保护模式
121 sentinel monitor mymaster 172.25.0.1 6379 2 ##配置master信息,后面的2表示投票机制,至少有2个节点认为master挂了,才会切换
146 sentinel down-after-milliseconds mymaster 10000 ##改为10s,表示master挂后10s会切换
注意注意:一定要先把修改好的sentinel.conf文件scp到slave节点上再进行下面这一步启动
[root@server1 redis]# scp sentinel.conf server2:/etc/redis/
[root@server1 redis]# scp sentinel.conf server3:/etc/redis
[root@server1 ~]# redis-server /etc/redis/sentinel.conf --sentinel ##开启哨兵
#在server2和server3上同样要开启
[root@server2 ~]# redis-server /etc/redis/sentinel.conf --sentinel
[root@server3 ~]# redis-server /etc/redis/sentinel.conf --sentinel
#在server1上查看信息,看到以下信息说明配置成功
[root@server1 ~]# redis-cli
127.0.0.1:6379> info
#Replication
role:master
connected_slaves:2
slave0:ip=172.25.0.2,port=6379,state=online,offset=95268,lag=0
slave1:ip=172.25.0.3,port=6379,state=online,offset=95133,lag=0
#在server1上可以看到sentinel信息
[root@server1 ~]# redis-cli -p 26379
127.0.0.1:26379> info
#Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.25.0.1:6379,slaves=2,sentinels=3
#挂掉server1的redis
[root@server1 ~]# redis-cli
127.0.0.1:6379> SHUTDOWN
not connected>
可以看到server1的6379端口挂掉
sentinel哨兵也能看到信息,现在server2是master
1036:X 31 Mar 2019 17:49:21.927 # +odown master mymaster 172.25.0.1 6379 #quorum 3/2
1036:X 31 Mar 2019 17:49:22.546 # +switch-master mymaster 172.25.0.1 6379 172.25.0.2 6379
现在启动server1
[root@server1 redis-5.0.3]# vim /etc/redis/6379.conf
287 replicaof 172.25.0.1 6379
[root@server1 redis-5.0.3]# /etc/init.d/redis_6379 restart
#启动之后会看到两个WARNING
在server1上修改此参数的值:#此值表示内核允许分配所有的物理内存,而不管当前的内存状态如何,0表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程
[root@server1 ~]# sysctl -w vm.overcommit_memory=1
或者
[root@server1 ~]# cd /proc/sys
[root@server1 sys]# ls
abi crypto debug dev fs kernel net vm
[root@server1 sys]# cd vm
[root@server1 vm]# echo 1 > overcommit_memory
redis集群
http://www.redis.cn/topics/cluster-tutorial.html ##配置复制官网的
#先关闭之前的redis
[root@server1 ~]# /etc/init.d/redis_6379 stop
#新建redis目录
[root@server1 ~]# mkdir /usr/local/rediscluster
[root@server1 rediscluster]# mkdir 700{1..6}
#编辑配置文件
[root@server1 7001]# vim redis.conf
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
pidfile "/usr/local/rediscluster/7001/redis.pid"
logfile "/usr/local/rediscluster/7001/redis.log"
daemonize yes
dir "/usr/local/rediscluster/7001"
#启动
[root@server1 7001]# redis-server redis.conf
ps ax
1332 ? Ssl 0:00 redis-server *:7000 [cluster]
测试
[root@server1 7001]# redis-cli -p 7001
127.0.0.1:7001> info
#Cluster
cluster_enabled:1 ##集群激活
#同理配置7002~7006,并启动
ps ax
1348 ? Ssl 0:00 redis-server *:7001 [cluster]
1382 ? Ssl 0:00 redis-server *:7002 [cluster]
1388 ? Ssl 0:00 redis-server *:7003 [cluster]
1394 ? Ssl 0:00