Redis集群搭建笔记
第一步:安装并编译redis
把安装包放在服务器中,比如放到根目录
切换到 /usr/local 目录下,解压安装包
解压后在目录中会看到解压的redis文件夹
接下来编译安装:make && make install
如果发生报错:
可能是GCC没有安装或版本不对,安装一下
yum install gcc
如果GCC也安装失败,可能是错误的缓存源导致,没有配置/etc/resolv.conf,解决方法:编辑resolv.conf文件,添加:nameserver 8.8.8.8 ,然后保存退出即可。
然后执行命令
yum clean all 和yum makecache
然后等待命令执行完。
再次尝试安装GCC,中途需要输入y确认
然后GCC就安装成功了。
OK,我们回到 /usr/local/redis-4.0.11 目录继续编译安装redis
如果这时又出现如下错误:
原因是没有安装jemalloc内存分配器,需要安装jemalloc
执行命令make MALLOC=libc && make install
Ok,命令执行成功!redis安装成功。
要安装redis集群需要提前安装好ruby组件
yum install ruby
再用 gem 这个命令来安装 redis接口 gem是ruby的一个工具包.
gem install redis
如果这里执行失败了
原因,ruby版本小于了2.2.2。查了资料发现是Centos默认支持ruby到2.0.0, 可是gem 安装redis需要最低是2.2.2
解决办法是 先安装rvm,再把ruby版本提升:
1.安装curl (有此组件请忽略)
sudo yum install curl
2.安装rvm
curl -L get.rvm.io | bash -s stable
到下面这个目录去解压和安装tgz文件,还是使用tar –zxvf命令,然后进入解压出来的文件夹中 执行 ./install 命令即可。
/usr/local/rvm/archives
然后执行命令
source /usr/local/rvm/archives/rvm-1.29.4/scripts/rvm
(如果找不到这个rvm文件,可以搜索出来)
3.查看rvm库中已知的ruby版本
rvm list known
我们发现有2.2.2以上的版本,安装比这个高的就行
4.先删除不能用的2.0.0版本
rvm remove 2.0.0
5.安装一个ruby版本
rvm install 2.3.3
6.选择使用这个版本
rvm use 2.3.3
以上步骤受到虚拟机本身的影响,可能由于其他复杂原因导致无法安装,这个时候可以手动安装:直接下载 https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.3.tar.gz, 手动解压后,进入解压目录,运行 ./configure 命令安装,执行编译命令
make&&make install
等待安装,可能要几分钟…….结束后执行命令 ruby –v 可查看版本信息
7.再次尝试安装
gem install redis,正常情况下会这样
但是万一报错了,失败了,就搜索gem,到目录下去执行
安装成功!到这里我们才完成第一步。
第二步:创建redis节点
首先在第一台机器上的 /usr/local/redis-4.0.11目录下创建 redis-cluster 目录。然后在 redis-cluster 目录下,创建名为7000、7001、7002的目录
把redis-4.0.1目录下的redis.conf 配置文件复制到这3个目录中,分别修改这三个配置文件
主要修改一下几点:
Bind: 默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群;确认和修改端口port:7000
daemonize 的值为 yes (表示redis后台运行);pidfile /var/run/redis_7000.pid ;让pidfile文件与端口对应起来
appendonly 的值为 yes (表示aof日志开启,有需要就开启,它会每次写操作都记录一条日志)
cluster-enabled 的值为 yes (表示开启集群,把注释#去掉);cluster-config-file nodes_7000.conf (集群的配置,配置文件首次启动自动生成 7000,7001,7002);还可以自定义设置一下超时时间
第三步:部署其他服务器
这里部署多台服务器的集群。需要在每台服务器上都装上redis,每台服务器都按照第一步和第二步来操作,然后继续下面的步骤。这里以两台服务器为例:
第一台节点设置为7000 , 7001 , 7002;第二台节点设置为 7003 , 7004 , 7005
第四步:启动节点
在两台服务器上依次执行命令 (第一台机器上执行 3个节点)
第一台机器上执行 3个节点
for((i=0;i<=2;i++)); do /usr/local/redis-4.0.3/src/redis-server /usr/local/redis-4.0.1/redis-cluster/700$i/redis.conf; done
第二台机器上执行 3个节点
for((i=3;i<=5;i++)); do /usr/local/redis-4.0.3/src/redis-server /usr/local/redis-4.0.1/redis-cluster/700$i/redis.conf; done
如果遇到redis-server命令不存在,可能是redis没有编译成功,这个时候去src目录下执行 make install,但是我这里又遇到一个问题
Install无效,要执行make test,但是又报错了,只有按照提示来安装tcl8.5。安装过程不再赘述,用wget或者yum,看哪个好使,解压后进入目录,./configure然后make install即可
安装完tcl后再回到redis-4.0.3/src目录下,执行启动节点的命令。单个依次执行或者for循环执行都行。
然后检查各 Redis 各个节点启动情况,查看监听端口,看redis是否启动成功
$ ps -ef | grep redis
$ netstat -tnlp | grep redis
第五步:串连集群
前面已经准备好了搭建集群的redis节点,接下来我们要把这些节点都串连起来搭建集群。使用官方提供一个工具:redis-trib.rb。前面我们已经安装的ruby,就是为了使用这个工具而安装的,否则无法使用。现在在第一台服务器上执行这个命令。
/usr/local/redis-4.0.11/src/redis-trib.rb create --replicas 1 172.16.16.13:7000 172.16.16.13:7001 172.16.16.13:7002 172.16.16.26:7003 172.16.16.26:7004 172.16.16.26:7005 (注意:--replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)。防火墙一定要开放监听的端口,否则会创建失败。)
执行上面的命令后,会自动配置节点关系,如图所示:将两台服务器的六个节点放到一起分配的,将172.16.16.13服务器的7000和7001、172.16.16.26的7003节点作为master主节点,其余三个座位从节点,然后会问你是否接受这样的主从关系,输入yes后会自动配置好,显示OK!这样,我们就搭建好了集群
第六步:内存和参数设置
设置虚拟机内存,否则启动redis客户端的时候会报错,需要设置内核参数overcommit_memory ,它是一种内存分配策略:可选值:0、1、2。
0表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程;1表示内核允许分配所有的物理内存,而不管当前的内存状态如何;2 表示内核允许分配超过所有物理内存和交换空间总和的内存。我们的虚拟机如果默认是0,就改为1
执行命令:echo 1 > /proc/sys/vm/overcommit_memory
如果使用的是透明大页,可能导致redis延迟和内存使用问题,需要执行命令修复echo never > /sys/kernel/mm/transparent_hugepage/enabled
还要修改TCP backlog设置值为511,因为 /proc/sys/net/core/somaxconn这个设置的是更小的128;echo 511 > /proc/sys/net/core/somaxconn
第七步:测试集群
搭建完集群后我们需要测试集群是否能够正常使用。先启动redis,命令:redis-server &
然后查看进程 ps -ef | grep redis
选择一个集群节点登录,比如7001redis-cli -h 172.16.16.13 -p 7001 –c(后面如果不带上-c会报错(error) MOVED),输入CLUSTER info 可以查看集群信息
输入CLUSTER nodes可以查看节点信息
测一下插入数据,redis是KEY-VALUE键值对形式存储数据。比如我们插入test1的内容为 OK,输入set test1 OK
这个时候会发现节点跳到了7000下面去了,证明节点之间是相通的,然后根据KEY取出我们刚才插入的VALUE值OK,输入 get test1
打印出了我们要的OK,到此,redis集群搭建基本完成!接下来是Java开发人员写代码对接redis
下一篇:使用 jsvc 启动tomcat