Redis 是咱们目前大规模使用的缓存中间件,因为它强大高效而又便捷的功能,获得了普遍的使用。单节点的Redis已经就达到了很高的性能,为了提升可用性咱们可使用Redis集群。 固然了,如今集群的方式有不少,隧道模式(还有更高级的虚拟隧道模式)、行星模型、智能路由、P2P模式,各类各样的,算是各有各的好处吧,也有官方给了一种cluster工具,不过本文不用官方的,由于他的官方的这个是在一个服务器上折腾。。。一台机器死了,直接全崩,有点不必,本文主要讲 主从模式的redis.node
分布式 - linux
内存数据存储 - noSQLredis
请求、数据、计算分散出去数据库
好比有十我的,一人负责一种数据,如今有一堆数据在等着,数据末尾是1的找第一我的,数据末尾是2的找第二我的。。。提及来很简单,可是这个怎么分散,以及分散以后万一有人挂了备份怎么备,怎么找,备份机器也挂了该怎么办,学文仍是不少的。vim
本文须要用到至少三个服务器最好是四个,由于一台单独的机器去控制方便查看,你们请自行配好防火墙网关等配置且克隆,若是遇到问题可留言缓存
如今完这些后在服务器中先打开刚刚解压的redis文件: bash
cd redis-5.0.5
复制代码
而后能够ls看一下里面的目录,有一个deps文件夹,也打开它:服务器
cd deps
复制代码
接下来我们就能够make了,编译redis里的几个模块,它里面有四大模块,接下来还有另外一件事,就是把这些编译好的模块组装成程序。在linux下不少东西都是这样,先编译再组装,不少玩法。微信
make hiredis jemalloc linenoise lua
复制代码
安装markdown
make install
复制代码
systemctl enable redis_port
前面说了分布式的原理,这里说一下,集群和分布式基本上是一个意思,可是集群能够表明除分布式之外的意思。
还拿以前分布式的例子来讲,好比如今有三个服务,我须要 set 'name' 'aaa'
或者是 get name
这样一个操做,他会拿着你这个 key
,也就是例子说的 name
,去计算一个所谓的 crc
。 crc
是所谓的 循环冗余校验
是一种数据里经常使用的一种专门作散列、哈希的方法。说白了就是吧这个key转换成一个数字,转成一个数字以后会去%一个数,这个是redis本身定的,反正就是可能会有余数,好比%完以后是0的,找第0个服务,1的是第一个服务,大概是这意思。
并且,还有一个很重要的一点,就是备份,若是其中的一个挂了,服务要马上去找别的机器上的这个服务,并且要交叉着备,全放在一个里也跟没作同样。
这种方案基本上能解决99%的错误了,由于硬件不可能常常坏,若是要99.999%,那可能就须要两套交叉备份方案,看我的需求。
我们这边讲的主要是主从服务。好比说一台服务器里,开了两个,一个是主服务,一个是从服务,若是服务器挂了那确定两个一块死,若是是主服务死了,那个从服务会立马跟上,变成主服务,过一会刚才死的主服务恢复了又回变成从服务,而后他继续运行。
再次强调一下,配集群前最好准备四台虚拟机,最好网卡配上static,要否则每次重启会很抓狂
redis集群我比较喜欢手动配置,由于官方提供了一个一键配置的方法,可是它有个要求,这个集群必须工做在一台服务器上,这。。。纯属字就给本身找事儿干。直接开个进程完事儿了
而后先在一台机器上建一个配置文件,名字随便取,我比较喜欢叫 redis.conf
vim redis.conf
复制代码
redis.conf
#端口7000
port 7000
#关闭保护模式——不带密码启动
protected-mode no
#集群特性启用
cluster-enabled yes
#存储节点信息配置文件——全部节点会互相同步
cluster-config-file nodes.conf
#存活时间——超过5s没有心跳自动删除节点并广播
cluster-node-timeout 5000
#只追加,不删除
appendonly yes
复制代码
接下来,我们就能够直接按着我们的配置跑一下redis试一,直接
redis-server ./redis.conf
复制代码
若是没问题的话,你会看到这个页面 刚才我们说了我们的模式是是主从模式,有了一个主节点以后,还须要一个从节点,直接
cp redis.conf redis2.conf
复制代码
而后把 redis2.conf
里的端口改一下,改为你心动的那个数字,还有就是 cluster-config-file
这个配置文件也换一个名字,要否则启动的时候就报错了
接下来,就是scp 把这个 redis.conf
以及 redis2.conf
分别传到另外克隆的两台虚拟机上,这里就很少介绍了。 scp 本地文件路径 远程用户@服务器地址:对方服务器路径
最后的最后,就是启动我们的集群了
顺便一说,若是走到这一步了你尚未开防火墙的话,而且没注意到我这句话你就要无比的酸爽了,由于意味着上边一半的步骤你要删了重来
直接每台服务器来一句
firewall-cmd --add-port=7000/tcp --permanent
firewall-cmd --add-port=17000/tcp --permanent
复制代码
为何开两个端口呢,由于redis定的。。。。 一个是你本身指定的,好比说7000,另外一个就是你的数+ 10000 7000 是负责数据通讯的 17000 专门来作命令通讯的,走redis本身的一套协议
redis-cli --cluster create 192.168.181.130:7000 192.168.181.130:7001 192.168.181.131:7000 192.168.181.131:7001 192.168.181.132:7000 192.168.181.132:7001 --cluster-replicas 1
复制代码
--cluster 集群配置 create 建立 --cluster-replicas 1 集群冗余 1
这里把这些地址改为你虚拟机的地址便可
缘由:为了性能考虑
解决方法
参考微信头像换了以后偶尔换完了以后别人半天刷新不过来
上面扯了这么多,有不少东西是及其的不方便的,好比redis的控制,如今是三台服务器,100台一个个搞公司离职率会出奇的搞,因此干脆写一个脚原本统一控制一下会很方便。 这里我秉承这linux社区一贯“会用用,不会用滚”的这么一个友好的态度,把脚本放出来你们本身会用用不会留言吧,反正我也不会看的。。。。。。
#!/usr/bin/env bash
if [ ! $1 ]
then
echo 'command:' $0 '[cmd]'
exit
fi
cmd=$1;
if [ $cmd == 'initall' ]
then
for item in `cat server_list.txt`
do
echo init $item;
scp redis_sh.sh root@$item:/root/;
ssh root@$item '/root/redis_sh.sh init 7000';
ssh root@$item '/root/redis_sh.sh init 7001';
done
elif [ $cmd == 'startall' ]
then
for item in `cat server_list.txt`
do
echo start $item;
ssh root@$item '/root/redis_sh.sh start 7000';
ssh root@$item '/root/redis_sh.sh start 7001';
done
elif [ $cmd == 'ps' ]
then
for item in `cat server_list.txt`
do
echo $item;
ssh root@$item 'ps -ef | grep [r]edis';
done
elif [ $cmd == 'stopall' ]
then
for item in `cat server_list.txt`
do
echo stopall $item;
ssh root@$item '/root/redis_sh.sh stopall';
done
elif [ $cmd == 'create' ]
then
servers=''
for item in `cat server_list.txt`
do
servers+=$item:7000' ';
servers+=$item:7001' ';
done
redis-cli --cluster create $servers --cluster-replicas 1
else
echo no this command: $1
fi
复制代码
有什么感兴趣的,或者遇到什么问题能够直接加我好友,我们一块儿沟通
微信:Dyy916829411 qq: 916829411