文章目录
1. redis twemproxy代理
一般情况下,没有部署负载均衡时,用户在使用redis过程中会导致某个master节点负载过高,并且其它节点资源也不能被充分利用,因此我们的目标是利用twemproxy实现对redis master的负载均衡
1.1 3个节点都设置为master
##server11 12 13 都注释
[root@server11 redis]# vim /etc/redis/redis.conf
#min-replicas-to-write 1
#user default on nopass ~* &* +@all
#replicaof 192.168.0.13 6379
[root@server11 redis]# systemctl restart redis_server.service
[root@server11 redis]# systemctl status redis_server.service
1.2 部署
[root@server14 ~]# yum install -y unzip
[root@server14 ~]# unzip twemproxy-master.zip
[root@server14 ~]# cd twemproxy-master/
[root@server14 twemproxy-master]# vim README.md
[root@server14 twemproxy-master]# yum install -y automake libtool
[root@server14 twemproxy-master]# autoreconf -fvi
[root@server14 twemproxy-master]# ls
aclocal.m4 ChangeLog config configure contrib m4 Makefile.in notes README.md src travis.sh
autom4te.cache conf config.h.in configure.ac LICENSE Makefile.am man NOTICE scripts tests
[root@server14 twemproxy-master]# ./configure
[root@server14 twemproxy-master]# make
[root@server14 twemproxy-master]# make install
[root@server14 twemproxy-master]# which nutcracker
/usr/local/sbin/nutcracker
[root@server14 twemproxy-master]# cd conf/
[root@server14 conf]# ls
nutcracker.leaf.yml nutcracker.root.yml nutcracker.yml
[root@server14 conf]# pwd
/root/twemproxy-master/conf
[root@server14 conf]# mkdir /etc/twemproxy
[root@server14 conf]# cp nutcracker.yml /etc/twemproxy ##复制配置文件到指定目录下,便于后续启动
[root@server14 conf]# cd /etc/twemproxy
[root@server14 twemproxy]# vim nutcracker.yml ##编辑配置文件,指定redis master
alpha:
listen: 0.0.0.0:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 192.168.0.11:6379:1 app1
- 192.168.0.12:6379:1 app2
- 192.168.0.13:6379:1 app3
[root@server14 twemproxy]# nutcracker -d -c /etc/twemproxy/nutcracker.yml
[root@server14 twemproxy]# netstat -antlp
启动后端口开启
1.3 测试
[root@server14 twemproxy]# redis-cli -p 22121
127.0.0.1:22121> info
Error: Server closed the connection
127.0.0.1:22121> get name
"westos"
127.0.0.1:22121> get name
(nil)
127.0.0.1:22121> set name westos
OK
127.0.0.1:22121> get name
"westos"
127.0.0.1:22121> set demo test
OK
127.0.0.1:22121> get demo
"test"
server11 13 与server14完全同步
server4上通过redis-cli -p 22121连接redis,并且写入数据时会均衡调度到三个master节点上,并且当某个节点shutdown之后在server4端同样也能检测到
[root@server11 bin]# redis-cli
127.0.0.1:6379> SHUTDOWN
[root@server14 twemproxy]# redis-cli -p 22121
127.0.0.1:22121> get name
(error) ERR Connection refused
127.0.0.1:22121> set name westos
(error) ERR Connection refused
127.0.0.1:22121> set name westos
OK
127.0.0.1:22121> get name
"westos"
[root@server12 ~]# redis-cli
127.0.0.1:6379> get name
"westos"
2. redis-cluster
集群模型图:
参考链接 :http://www.redis.cn/topics/cluster-tutorial.html
2.1 部署
搭建集群的第一件事情我们需要一些运行在 集群模式的Redis实例. 这意味这集群并不是由一些普通的Redis实例组成的,集群模式需要通过配置启用,开启集群模式后的Redis实例便可以使用集群特有的命令和特性了。我们选择在一个redis节点上创建多个redis实例来快速构建redis集群
[root@server11 create-cluster]# pwd
/root/redis-6.2.1/utils/create-cluster
[root@server11 create-cluster]# ls
create-cluster README
[root@server11 create-cluster]# ./create-cluster start ##redis自带的集群启动脚本
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006
[root@server11 create-cluster]# ./create-cluster create ##创建集群
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
开启的六个实例
2.2 集群无中心化
访问时集群自动重定向,集群中每个节点均可读写, 从任意一个节点接入到集群,就可以访问和操作这个集群内的数据,无中心化。
[root@server11 create-cluster]# redis-cli -c -p 30001
[root@server11 create-cluster]# redis-cli -c -p 30006
[root@server11 create-cluster]# redis-cli -c -p 30005
127.0.0.1:30005> get name
-> Redirected to slot [5798] located at 127.0.0.1:30002
"westos"
2.3 自带高可用
内部自带高可用,server2 down掉后,server4 接管server2的master,不影响访问集群资源。
server4 down掉后集群彻底挂掉,因为16384个哈希槽已经不完整了,哈希槽只要丢失一个,集群将会出现故障,此时若要恢复集群,重新执行启动脚本即可。
127.0.0.1:30002> SHUTDOWN
not connected>
[root@server11 create-cluster]# redis-cli -c -p 30002
Could not connect to Redis at 127.0.0.1:30002: Connection refused
not connected>
[root@server11 create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001>
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
[root@server11 create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> get name
-> Redirected to slot [5798] located at 127.0.0.1:30004
"westos"
127.0.0.1:30004> SHUTDOWN
not connected>
[root@server11 create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> get name
(error) CLUSTERDOWN The cluster is down
127.0.0.1:30001>
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
[root@server11 create-cluster]# ./create-cluster start
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
[root@server11 create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> get name
-> Redirected to slot [5798] located at 127.0.0.1:30004
"westos"
127.0.0.1:30004>
2.4 增加节点
如果想要增加节点,只需要更改脚本中定义的节点数量并重新执行即可
[root@server11 create-cluster]# vim create-cluster
8 NODES=8
[root@server11 create-cluster]# ./create-cluster start
命令添加节点
[root@server11 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30007 127.0.0.1:30001 ##添加节点并指定集群
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
[root@server11 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30008 127.0.0.1:30001 --cluster-slave --cluster-master-id ce3f7a27be9c1fc64704970f4a91d11c8589a992 ##添加slave节点并指定master
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
2.5 分配哈希槽
此时上述添加的master并没有分配哈希槽,因此无法存储数据,我们需要为其分配哈希槽,交互式迁移:
[root@server11 create-cluster]# redis-cli --cluster reshard 127.0.0.1:30001
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
all是指哈希槽会从不同的区间内分配。
在使用上述的redis集群时注意两点
1、要始终保证哈希槽的完整性
2、不要一次性down掉集群中过半的master
3. redis持久化
Redis 提供了不同级别的持久化方式:
RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.
AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.
如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下`AOF文件保存的数据集要比RDB文件保存的数据集要完整.rdb方式一般在主从复制中用的比较多
参考链接http://www.redis.cn/topics/persistence.html.
redis默认的持久化方式是RDB
配置文件中关于持久化的相关设置:
save 900 1 %当有一条Keys数据被改变时,900秒刷新到Disk一次
save 300 10 %当有10条Keys数据被改变时,300秒刷新到Disk一次
save 60 10000 %当有10000条Keys数据被改变时,60秒刷新到Disk一次
appendonly yes %启用AOF持久化方式
appendfsync everysec %每秒钟强制写入磁盘一次
[root@server11 ~]# systemctl start redis_server.service
[root@server11 ~]# redis-cli
127.0.0.1:6379> INCR key
(integer) 1
127.0.0.1:6379> INCR key
(integer) 2
127.0.0.1:6379> INCR key
(integer) 3
[root@server11 ~]# cd /var/lib/redis/
[root@server11 redis]# ls
dump.rdb
[root@server11 redis]# vim /etc/redis/redis.conf
1229 appendonly yes
[root@server11 redis]# systemctl restart redis_server.service
[root@server11 redis]# ls
appendonly.aof dump.rdb
[root@server11 redis]# redis-cli ##登陆redis,计数器,使用计数器命令测试
127.0.0.1:6379> INCR key
(integer) 1
127.0.0.1:6379> INCR key
(integer) 2
[root@server11 redis]# cat appendonly.aof #记录redis中每次操作的信息
*2
$6
SELECT
启用aof,默认生成apf文件
重启服务,配置生效后产生appendonly.aof 文件
登陆redis,计数器,使用计数器命令测试
aof文件记录redis中每次操作的信息