Dubbo高可用 redis HA环境搭建及集群扩展

环境规划
主机名 IP 服务端口 默认 6379
集群端口 服务端口数+10000
主/从
master1 192.168.229.204 7111 17111 Master
master2 192.168.229.205 7112 17112 Master
master3 192.168.229.206 7113 17113 Master
slave1 192.168.229.207 7114 17114 Slave
slave2 192.168.229.208 7115 17115 Slave
slave3 192.168.229.209 7116 17116 Slave

yum install ansible -y

[root@master1 ~]# ansible all -m shell -a 'pwd'
[root@master1 ~]# ansible all -m shell -a 'yum install gcc tcl -y'

[root@master1 redis3]#  ansible all -m copy -a "src=/root/redis-3.0.3.tar.gz dest=/usr/local/src"
[root@master1 ~]# ansible all -m shell -a 'cd /usr/local/src/ && tar -zxvf redis-3.0.3.tar.gz'
[root@master1 ~]# ansible all -m shell -a 'cd /usr/local/src/redis-3.0.3 && make PREFIX=/usr/local/redis3 install'
[root@master1 ~]# ansible all -m shell -a 'ls /usr/local/redis3/bin'




创建集群配置目录,并拷贝 redid.conf 配置文件到各节点配置目录:
192.168.229.204
# mkdir -p /usr/local/redis3/cluster/7111
# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7111/redis-7111.conf
192.168.229.205
mkdir -p /usr/local/redis3/cluster/7112
cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7112/redis-7112.conf
192.168.229.206
mkdir -p /usr/local/redis3/cluster/7113
cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7113/redis-7113.conf

192.168.229.207
mkdir -p /usr/local/redis3/cluster/7114
cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7114/redis-7114.conf

192.168.229.208
mkdir -p /usr/local/redis3/cluster/7115
cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7115/redis-7115.conf

192.168.229.209
mkdir -p /usr/local/redis3/cluster/7116
cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7116/redis-7116.conf

每一台做相应变动
[root@master1 ~]# vi /usr/local/redis3/cluster/7111/redis-7111.conf
     37 daemonize yes
     41 pidfile /var/run/redis-7111.pid   #每一台不一样
     45 port 7111   #每一台不一样
    118 databases 1
    632 cluster-enabled yes
    640 cluster-config-file /usr/local/redis3/cluster/7111/nodes.conf
    646 cluster-node-timeout 15000
    710 cluster-migration-barrier 1
    723 cluster-require-full-coverage yes
    504 appendonly yes
    187 dir /usr/local/redis3/cluster/7111

包含了最少选项的集群配置文件示例如下:
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

启动redis集群

192.168.229.204
# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7111/redis-7111.conf
192.168.229.205
# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7112/redis-7112.conf
192.168.229.206
# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7113/redis-7113.conf
192.168.229.207
# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7114/redis-7114.conf
192.168.229.208
# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7115/redis-7115.conf
192.168.229.209
# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7116/redis-7116.conf

[root@master1 ~]# ansible all -m shell -a 'ps -ef | grep redis'

接下来准备创建集群
安装 ruby 和 rubygems(注意:需要 ruby 的版本在 1.8.7 以上
[root@master1 ~]# ansible all -m shell -a ' yum install ruby rubygems -y'

查询ruby版本
[root@master1 ~]# ansible all -m shell -a ' ruby -v'

gem 安装 redis ruby 接口
[root@master1 ~]# ansible all -m shell -a ' yum install zlib-devel -y'

更换gem源
gem sources -a https://gems.ruby-china.com/
[root@master1 ~]# ansible all -m shell -a 'gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/'

查看所有源
[root@master1 ~]# ansible all -m shell -a 'gem sources -l'
增加源和删除源
$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
更新缓存
ansible all -m shell -a 'gem sources -u'


问题解决方法
[root@master1 ~]# gem install redis
Fetching: redis-4.1.3.gem (100%)
ERROR:  Error installing redis:
        redis requires Ruby version >= 2.3.0.
每台机器执行如下命令, 不能用ansible 执行,不能批量执行
yum install centos-release-scl-rh -y
yum install rh-ruby23 -y
scl enable rh-ruby23 bash
ruby -v
gem install redis

执行 Redis 集群创建命令(只需要在其中一个节点上执行一次则可)
ansible all -m shell -a 'cp /usr/local/src/redis-3.0.3/src/redis-trib.rb /usr/local/bin/redis-trib'
 [root@master1 ~]# redis-trib create --replicas 1 192.168.229.207:7114 192.168.229.208:7115 192.168.229.209:7116 192.168.229.204:7111 192.168.229.205:7112 192.168.229.206:7113

集群简单测试
[root@master1 ~]# cd /usr/local/redis3/bin/
[root@master1 bin]# ls
redis-benchmark  redis-check-aof  redis-check-dump  redis-cli  redis-sentinel  redis-server
[root@master1 bin]# ./redis-cli -c -p 7114



集群验证
1在slave节点上写入
[root@slave1 ~]# /usr/local/redis3/bin/redis-cli -c -p 7114
127.0.0.1:7114>  set wusc WuShuicheng
-> Redirected to slot [8559] located at 192.168.229.208:7115
OK
192.168.229.208:7115>

2在master1节点上读取
[root@master1 ~]#  /usr/local/redis3/bin/redis-cli -c -p 7111
127.0.0.1:7111> get wusc
-> Redirected to slot [8559] located at 192.168.229.208:7115
"WuShuicheng"
192.168.229.208:7115>

3在master2节点上读取
[root@master2 ~]# /usr/local/redis3/bin/redis-cli -c -p 7112
127.0.0.1:7112> get wusc
-> Redirected to slot [8559] located at 192.168.229.208:7115
"WuShuicheng"
192.168.229.208:7115>

4读取所有节点信息
查看Redis集群节点
[root@master1 bin]# ./redis-cli -p 7111 cluster nodes
b1565d8e0541389a815bfdedd320060a73ea34b3 192.168.229.209:7116 master - 0 1584421782703 3 connected 10923-16383
5804331faa018ee945faf40b9e80b13d14157488 192.168.229.204:7111 myself,slave c8f1e1e5ea944ae2b46f7c8f45fa626bbd18c779 0 0 4 connected
dca8a5ab378f99fb2245b9063853f5c91bf2ed43 192.168.229.208:7115 master - 0 1584421780687 2 connected 5461-10922
c6dc785b0c0a3ebcc5a5561601a587eff85c4185 192.168.229.206:7113 slave b1565d8e0541389a815bfdedd320060a73ea34b3 0 1584421777655 6 connected
69778143d0208880e52ac0015fa67c3986efd867 192.168.229.205:7112 slave dca8a5ab378f99fb2245b9063853f5c91bf2ed43 0 1584421781695 5 connected
c8f1e1e5ea944ae2b46f7c8f45fa626bbd18c779 192.168.229.207:7114 master - 0 1584421779671 1 connected 0-5460


将Redis配置成服务
参考资料
其它供参考资料
Redis 3.0 集群搭建测试(一) :http://blog.csdn.net/zhu_tianwei/article/details/44928779
Redis 3.0 集群搭建测试(二) :http://blog.csdn.net/zhu_tianwei/article/details/45009647
Redis 集群要点:http://5i.io/redis-3-0-cluster-configuration/


Redis的启动脚本为
[root@master1 ~]# ls /usr/local/src/redis-3.0.3/utils/redis_init_script
ansible all -m shell -a 'cp /usr/local/src/redis-3.0.3/utils/redis_init_script /etc/rc.d/init.d/redis'

master1为例子
[root@master1 ~]# vi /etc/rc.d/init.d/redis
      1 #!/bin/sh
      2 #chkconfig: 2345 80 9
      7 REDISPORT=7111
      8 EXEC=/usr/local/redis3/bin/redis-server
      9 CLIEXEC=/usr/local/redis3/bin/redis-cli

     11 PIDFILE=/var/run/redis-${REDISPORT}.pid
     12 CONF="/usr/local/redis3/cluster/${REDISPORT}/redis-${REDISPORT}.conf "

     20                 $EXEC $CONF &

以上配置操作完成后,便可将 Redis 注册成为服务:
# chkconfig --add redis
 启动 Redis 服务
# service redis start

将 Redis 添加到环境变量中:
# vi /etc/profile
在最后添加以下内容:
## Redis env
export PATH=$PATH:/usr/local/redis3/bin
使配置生效:
# source /etc/profile
现在就可以直接使用 redis-cli 等 redis 命令了:
# service redis stop

默认情况下,Redis 未开启安全认证,可以通过/usr/local/redis3/cluster/7111/redis-7111.conf 的
requirepass 指定一个验证密码

 

 

 

 

Redis集群扩展
一、安装新的 Redis 节点,将用于扩展性测试
1、在 192.168.229.210 虚拟机上以同样的方式安装 Redis3,并启动两个实例,规划如下:
主机名       IP 服务端口 默认 6379     集群端口 服务端口值+10000    主/从
slave4 192.168.229.210 7117 17117 Master
slave4 192.168.229.210 7118 17118 Slave
按规划:在 192.168.229.210 的防火墙中打开相应的端口


2、Redis 安装过程
可请参考《高可用架构篇--第 05 节--Redis 集群的安装(Redis3+CentOS) 》教程的文档,命令如下:
# yum install gcc tcl
# cd /usr/local/src
# wget http://download.redis.io/releases/redis-3.0.3.tar.gz
# mkdir /usr/local/redis3
# tar -zxvf redis-3.0.3.tar.gz
# cd redis-3.0.3
# make PREFIX=/usr/local/redis3 install
# yum install ruby rubygems
# gem install redis

3、创建集群配置目录,并拷贝 redid.conf 配置文件到各节点配置目录:
192.168.229.210
# mkdir -p /usr/local/redis3/cluster/7117
# mkdir -p /usr/local/redis3/cluster/7118
# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7117/redis-7117.conf
# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7118/redis-7118.conf

4、在 192.168.229.210 上使用如下命令启动这 2 个 Redis 实例:
# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7117/redis-7117.conf
# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7118/redis-7118.conf
# ps -ef | grep redis


二、Redis 集群的扩展性测试
1、redis-trib.rb 命令介绍:
[root@edu-redis-01 src]# /usr/local/src/redis-3.0.3/src/redis-trib.rb
redis-trib.rb 命令参数说明:
call:执行 redis 命令
create:创建一个新的集群(上一节教程有介绍)
add-node:将一个节点添加到集群里面,第一个是新节点 ip:port, 第二个是集群中任意一个正常节点
ip:port,--master-id
reshard:重新分片
check:查看集群信息
del-node:移除一个节点

2、添加新的 Master 节点:
add-node 将一个节点添加到集群里面,第一个是新节点 ip:port,第二个是任意一个已存在节点 ip:port
# /usr/local/src/redis-3.0.3/src/redis-trib.rb add-node 192.168.229.210:7117 192.168.1.111:7111

以上操作结果表示节点添加成功,新增的节点不包含任何数据, 因为它没有分配任何 slot。
新加入的节点是一个 master 节点,当集群需要将某个从节点升级为新的主节点时,这个新节点不会被选
中。

为新节点分配哈希槽(slot) :
你只需要指定集群中其中一个节点的地址,redis-trib 就会自动找到集群中的其他节点。目前 redis-trib
只能在管理员的协助下完成重新分片的工作,命令如下:
# /usr/local/src/redis-3.0.3/src/redis-trib.rb reshard 192.168.1.111:7111


输入 all 并按下回车之后, redis-trib 将打印出哈希槽的移动计划:
Do you want to proceed with the proposed reshard plan (yes/no)? yes

在重新分片操作执行完毕之后, 可以使用以下命令来检查集群是否正常:
# /usr/local/src/redis-3.0.3/src/redis-trib.rb check 192.168.1.111:7111

也可以用以下命令再次查看集群的节点状况:
# /usr/local/redis3/bin/redis-cli -c -p 7111 cluster nodes
以上集群状态输出信息解析:
(1)节点 ID
(2)IP:PORT
(3)节点状态标识: master、slave、myself、fail?、fail
(4)如果是从节点,表示主节点的 ID;如果是主节点,则为 '-'
(5)集群最近一次向各个节点发送 PING 命令后,过去多长时间还没有接到回复
(6)节点最近一次返回 PONG 的时间戳
(7)节点的配置纪元
(8)本节点的网络连接情况: connected、disconnected

3、添加新的 slave 节点
(1)添加节点
#/usr/local/src/redis-3.0.3/src/redis-trib.rb add-node 192.168.229.210:7118 192.168.1.111:7111
Connecting to node 192.168.229.210:7118: OK
>>> Send CLUSTER MEET to node 192.168.229.210:7118 to make it join the cluster.
[OK] New node added correctly.
新增的 7118 为一个 master

(2)redis-cli 连接上新节点 shell,输入命令:cluster replicate 对应 master 的 node-id
# /usr/local/redis3/bin/redis-cli -c -p 7118
127.0.0.1:7118>cluster replicate ab31611b3424990e2b9bbe73135cb4cb0ace394f
OK
在线添加 slave 时,需要 dump 整个 master 进程,并传递到 slave,再由 slave 加载 rdb 文件到内存,rdb
传输过程中 Master 可能无法提供服务,整个过程消耗大量 IO,因此要小心操作。
查看执行结果:
127.0.0.1:7116> cluster nodes

4、在线 reshard 数据
对于负载/数据不均匀的情况,可以在线 reshard slot 来解决,方法与添加新 master 的 reshard 一样,只
是需要 reshard 的 master 节点是老节点。

5、删除一个 slave 节点
# cd /usr/local/src/redis-3.0.3/src/
# ./redis-trib.rb del-node 192.168.229.210:7118 5256e05a17c106c93285a03aff1b1b9e7ca7bf0c
这时候,用下以下再查看集群状态,会发现该 slave 节点已成功移除
# /usr/local/redis3/bin/redis-cli -c -p 7116 cluster nodes
移除一个节点,对应的节点进程也会被关闭

6、删除一个 master 节点
删除 master 节点之前首先要使用 reshard 移除该 master 的全部 slot,然后再删除当前节点(目前只能把被
删除 master 的 slot 迁移到一个节点上),操作和分配 slot 类似,指定具体的 Source node 即可

How many slots do you want to move (from 1 to 16384)? 499
//接收 slot 的 master 节点 ID
What is the receiving node ID? 48db78bcc55c4c3a3788940a6458b921ccf95d44
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
//准备被删除 master 节点的 node-id Source node #1: ab31611b3424990e2b9bbe73135cb4cb0ace394f Source node #2:done

//输入 yes 执行 reshard
Do you want to proceed with the proposed reshard plan (yes/no)? yes

移除该 Master 节点的所有 slot 后,重新查看集群状态,会发现该节点不再占用 slot:
# /usr/local/redis3/bin/redis-cli -c -p 7116 cluster nodes

确认已清空该 Master 节点的所有 slot 后就可以删除该节点了(命令与删除 slave 节点一样) :
# cd /usr/local/src/redis-3.0.3/src/
# ./redis-trib.rb del-node 192.168.229.210:7117 ab31611b3424990e2b9bbe73135cb4cb0ace394f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值