在两台Ubuntu 16.04服务器上安装redis集群
参考:https://www.cnblogs.com/xwgcxk/p/10775805.html
安装环境:
主服务器:阿里云ECS,安装Ubuntu 16.04
备份服务器:腾讯云ECS,安装Ubuntu 16.04
Redis版本:5.0.5
一、背景
最近在兼职运维的工作,需要对Redis服务进行监控。由于公司比较小,前期是没有多余服务器的,因此只能在一台服务器上搭建Redis集群。最近公司新购了一台阿里云ECS服务器,正好趁此机会将各个服务配置成双机热备份。对于Redis,就利用其自身提供的集群功能来实现。
二、安装Redis
首先,在两台服务器上安装好Redis。要注意的是,通过ap-get install redis-server安装的是比较老的3.×版本,由于我希望采用最新的版本,因此需要通过源代码编译安装。以下是安装过程,以阿里云ECS服务器为例:(也可参考https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04
1、下载redis-5.0.5.tar.gz
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
2、解压、编译、安装
tar -zxvf redis-5.0.5.tar.gz
cd redis-5.0.5
make
make install PREFIX=/usr/local/redis
安装成功后,可以使用make test进行测试,但耗时比较长。
3、验证redis是否可以启动
(1)执行如下命令:
redis-server redis.conf
可能会提示找不到redis-server。检查发现在/usr/local/bin中没有redis-server脚本。解决办法是将/redis-5.0.5/src中的相关脚本都拷贝到/usr/local/bin中。我这里只拷贝三个:redis-server、redis-cli和后面创建集群会用到的redis-trib.rb。
(2)执行ps -ef | grep redis,如果出现redis进程,则表面redis启动成功。验证完毕后要记得停掉Redis,可以通过kill命令(没有开启守护进程时),或/etc/init.d/redis-server stop(开启守护进程时)来停掉。
三、配置Redis
过程就不多用文字描述了,这里只记录命令步骤。
mkdir /etc/redis
cd /etc/redis
mkdir 7000 7001 7002
cp ~/redis-5.0.5/redis.conf 7000
cd 7000
vi redis.conf
编辑以下项的值:
port 7000
bind 127.0.0.1
daemonize yes //redis后台运行
pidfile /var/run/redis/redis_7000.pid
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
dir /var/lib/redis/7000 //Redis工作目录,redis数据会写入该目录
logfile "/root/log/redis/7000/redis.log" //更改redis日志目录。注意,根据自己日志所在目录修改。
依次将redis.conf拷贝到7001和7002文件夹,修改上面的项并将7000改为7001、7002即可。
这里要注意的是,pidfile指定的路径和dir指定的路径中都没有redis,新建redis目录后要记得赋予相应的组和所有者。例如,腾讯云ECS默认账户不是root而是ubuntu,此时如果采用sudo mkdir /var/run/redis或sudo mkdir -p /var/lib/redis/7000来创建目录的话,它们的用户组是root,所有者也是root。这样会导致redis-server启动时报权限错误。解决办法是通过命令sudo chgrp -R ubuntu /var/run/redis来将redis的用户组改为ubuntu,sudo chown -R ubuntu /var/run/redis来将所有者也改为ubuntu。
四、启动redis
redis-server /etc/redis/7000/redis.conf
redis-server /etc/redis/7001/redis.conf
redis-server /etc/redis/7002/redis.conf
启动后,用命令ps -ef | grep redis来检查redis是否已在3个端口启动。如果某个端口没有启动成功,查看相应端口对于的日志找原因。
以上就是在阿里云ECS服务器上安装、配置redis集群的过程。阿里云配置好后,再在腾讯云中进行类似的配置即可,只不过为了区分,可以将腾讯云中的三个端口改为7003、7004、7005.
五、创建集群
创建集群前,需要到腾讯云和阿里云后台中开启端口,方法是到实例的安全组中配置入方向规则,每条规则对于一个端口。同时,还要将每个端口再加上10000后的端口打开,即对于7000端口,需要同时打开17000端口。规则配置好后见下图:
规则
在两台服务器上都启动redis后,再到其中一台服务器中执行下面的命令来创建集群:
redis-cli --cluster create 阿里云实例IP:7000 阿里云实例IP:7001 阿里云实例IP:7002 腾讯云实例IP:7003 腾讯云实例IP:7004 腾讯云实例IP:7005 --cluster-replicas 1
命令执行后会提示,输入yes即可。
创建成功
六、节点握手
虽然上面 的6个节点都启用了群集支持,但默认情况下它们是不相互信任或者说没有联系的。节点握手就是在各个节点之间创建链接(每个节点与其他节点相连),形成一个完整的网格,即集群。方法是进入某个节点,如阿里云ECS的7000节点(通过命令redis-cli -p 7000),然后执行下面的命令将其他节点连接起来:
cluster meet 阿里云实例IP 7001
cluster meet 阿里云实例IP 7002
cluster meet 腾讯云实例IP 7003
cluster meet 腾讯云实例IP 7004
cluster meet 腾讯云实例IP 7005
七、集群验证
在第一台机器上连接集群的7002端口的节点,在另外一台连接7005节点,连接方式为 redis-cli -h 192.168.31.245 -c -p 7002 ,加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。
在7005节点执行命令 set hello world ,执行结果如下:
image然后在另外一台7002端口,查看 key 为 hello 的内容, get hello ,执行结果如下:
image以上过程使用的方法和图片部分借用了博客https://www.cnblogs.com/xwgcxk/p/10775805.html,特此感谢!
另外还参考了一下博客:
(1)https://blog.csdn.net/XIANZHIXIANZHIXIAN/article/details/82391609
(2)https://www.cnblogs.com/esofar/p/10486621.html