sudo apt-get install redis-server
sudo gedit /etc/redis/redis.conf
注释掉**#bind 127.0.0.1**行
sudo redis-server /etc/redis/redis.conf
ps -ef | grep redis
要想搭建高可用的redis集群,至少需要三台主库,每个主库需要一台从库。每个主库的数据是不同的,每个从库的数据跟主库同步,redis会将需要存放的数据放到某一个主库中。我们开八台虚拟机,使用前六台搭建一个高可用的redis集群,服务器分配如下:
分别进入1-6号主机,建立redis的集群目录,要有权限,以服务端口为文件夹名,在下面把redis的配置文件拷贝一份:
mkdir -p /home/wang/redis-cluster/7001
sudo cp /etc/redis/redis.conf /home/wang/redis-cluster/7001/redis-7001.conf
chmod 777 redis-7001.conf
其余5台服务器操作类似,只需要改服务端口。
修改redis-7001.conf的内容,注意以下配置:
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
其余五台服务器只需要变更端口号。
改好后,要以全新的配置文件来启动redis:
sudo redis-server /home/wang/redis-cluster/7001/redis.conf
ps -ef|grep redis
如果发现默认的6379的redis还开着,就把它关掉:
sudo /etc/init.d/redis-server stop
此时redis的进程应该是这样的:
确认六台redis都按照指定的配置和端口启动后,就可以创建集群了。
sudo apt-get install ruby
sudo apt-get install rubygems
sudo gem install redis
找到创建集群的脚本文件redis-trib.rb,把它拷贝到bin目录下:
cp redis-trib.rb /usr/local/bin/redis-trib
随便找一台服务器,执行一次集群的创建命令:
sudo redis-trib create --replicas 1 192.168.252.128:7001 192.168.252.130:7002 192.168.252.131:7003 192.168.252.132:7004 192.168.252.134:7005 192.168.252.135:7006
看到如下提示:
确认主从没问题,输入yes,即可创建成功。
我们输入以下命令确认集群的状态:
redis-trib check 192.168.252.130:7002
redis-cli -p 7111 cluster nodes
进入192.168.252.128:7001,杀掉redis的进程,过几秒,看看集群的状态,发现7001的主节点已经挂掉,对应的从节点7004已经变为主节点:
下面恢复192.168.252.128:7001
sudo redis-server /home/wang/redis-cluster/7001/redis.conf
redis-cli -c -p 7001
cluster nodes
发现挂掉的7001节点已经变为7004的从节点。这说明,在master节点下线后,slave节点会自动提升为master节点,保存集群持续提供服务;fail节点恢复后,会自动添加到集群中,变成slave节点。
为了演示redis集群的扩展,我们使用7和8两台服务器扩展现有的6台集群。
进入7号和八号服务器,按照前面的方式,分别安装redis,创建集群的目录和配置文件并启动。
使用redis-trib脚本的add-node命令将一个节点添加到集群里面,第一个是新节点 ip:port,第二个是任意一个已存在节点 ip:port。
cp redis-trib.rb /usr/local/bin/redis-trib
redis-trib add-node 192.168.252.150:7007 192.168.252.128:7001
以上操作结果表示节点添加成功,新增的节点不包含任何数据, 因为它没有分配任何 slot。
为新节点分配哈希槽(slot):你只需要指定集群中其中一个节点的地址,redis-trib 就会自动找到集群中的其他节点。目前redis-trib只能在管理员的协助下完成重新分片的工作,命令如下:
redis-trib reshard 192.168.252.150:7007
它会问你想分配多少个槽位过来,填个500吧。他又问你要分配主机(7号服务器)的ID,我的是e131a6564a1e935da2ceab59813c5ccb5dfd9c11。他又问你从哪些服务器取槽位过来,就填all表示所有。输入yes确认即可。
可以通过下图看到集群的状态,可以看到7号机的槽位分配成功。
以上集群状态输出信息解析:
进入八号服务器192.168.252.133,输入:
redis-trib add-node 192.168.252.133:7008 192.168.252.128:7001
这时新增的服务器还是master,我们将其转为slave,命令后跟7号服务器的id:
redis-cli -c -p 7008
cluster replicate ab31611b3424990e2b9bbe73135cb4cb0ace394f
这时就变为slave了:
cluster nodes
redis-trib del-node 192.168.252.133:7008 5256e05a17c106c93285a03aff1b1b9e7ca7bf0c
先移走master节点的槽位,再移除服务器:
redis-trib reshard 192.168.252.150:7007
要删除槽位的数量,填499,接收槽位的 master 节点 ID,填4号服务器ID,删除槽位的master节点ID,填7号的ID.最后输入done。
redis-cli -c -p 7006 cluster nodes
redis-trib del-node 192.168.252.150:7007 ab31611b3424990e2b9bbe73135cb4cb0ace394f