redis集群模式部署

背景

部署的redis版本为4.0.10。集群为三主三备。由于只有三台主机,因此每台主机上部署2个节点。正式环境请使用至少6台主机。
为了方便管理,使用docker形式进行部署。

部署Redis单实例

1. 安装docker

用yum离线方式安装docker


---
- name: copy docker rpm package
  unarchive:
    src: /home/monitor/src/docker/docker-ce-18.09.3.zip
    dest: /root
    
- name: install package 
  shell: |
    yum install /root/containerd.io-1.2.4-3.1.el7.x86_64.rpm 
    yum install /root/container-selinux-2.9-4.el7.noarch.rpm 
    yum install /root/docker-ce-18.09.3-3.el7.x86_64.rpm 
    yum install /root/docker-ce-cli-18.09.3-3.el7.x86_64.rpm
    
- name: systemctl enable
  service:
    name: docker
    enabled: yes
- name: systemctl start
  service:
    name: docker
    state: started

2. 安装redis实例

  1. 创建数据目录、配置文件目录,日志文件,用于挂载docker
  2. 拷贝redis配置文件到配置目录下
  3. 需要映射redis服务端口和集群通信端口,集群通信端口一般为服务端口+10000,这里我们配置的节点信息如下:
    • master1: node1-ip:6379 16379
    • master2: node2-ip:6379 16379
    • master3: node3-ip:6379 16379
    • slave1: node1-ip:6378 16378
    • slave2: node1-ip:6378 16378
    • slave3: node1-ip:6378 16378

redis.conf配置:

################################GENERAL#####################################
daemonize no
pidfile /var/redis.pid
port 6379
bind 0.0.0.0
timeout 300
tcp-keepalive 60
loglevel verbose
logfile /var/redis.log
databases 16
#requirepass paic@123
################################SNAPSHOTTING(rdb)################################
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
# 数据目录
dir /data
maxclients 4096
############################## APPEND ONLY MODE(aof) ###############################
# 数据持久化
appendonly yes
appendfsync always
no-appendfsync-on-rewrite no
################################ REDIS CLUSTER###############################
# 开启集群模式
cluster-enabled yes
# 集群配置文件
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
cluster-require-full-coverage yes

---
  - name: mkdir /data/data02/redis
    file:
      dest: '{{ item }}'
      state: directory
      mode: 0755
      owner: root
      recurse: true
    with_items:
      - /data/data02/redis/conf
      - /data/data02/redis/data
  - name: touch redis.log
    file:
      dest: /data/data02/redis/redis.log
      state: touch
      mode: 0644
  - name: copy redis.conf
    copy:
      dest: /data/data02/redis/conf/redis.conf
      src: /home/monitor/redis/redis.conf
      mode: '0644'
  - name: start2
    shell: docker run -it --name redis-1 -v /data/data02/redis/redis.log:/var/redis.log -v /data/data02/redis/conf/redis.conf:/etc/redis/redis.conf -v /data/data02/redis/data:/data  -p 6378:6379 -p 16378:16379 -tid telredis:1.0.0 redis-server /etc/redis/redis.conf
  - name: start1
    shell: docker run -it --name redis -v /data/data01/redis/redis.log:/var/redis.log -v /data/data01/redis/conf/redis.conf:/etc/redis/redis.conf -v /data/data01/redis/data:/data  -p 6379:6379 -p 16379:16379 -tid telredis:1.0.0 redis-server /etc/redis/redis.conf

3. 配置集群模式

redis4.0.10版本的集群模式依赖于redis-trib.rb来实现。redis-trib.rb需要gem的redis模块,而安装gem则需要ruby环境。

3.1. 离线安装集群环境

通过yum info可以查看yum源支持的ruby版本为2.0.0,支持的gem版本为2.0.0。而gem的redis4.0.1模块需要至少gem2.2.3版本以上才能支持。
因此我们需要使用离线的方式进行安装。

3.1.1 下载源码包

ruby-2.2.3: https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz
rubygems-2.2.4: https://rubygems.org/rubygems/rubygems-2.2.4.tgz
redis-4.0.1.gem: https://rubygems.org/downloads/redis-4.0.1.gem
redis-4.0.10: http://download.redis.io/releases/redis-4.0.11.tar.gz

3.1.2 编译安装ruby
tar zxvf ruby-2.2.3.tar.gz
cd ruby-2.2.3/
#创建安装路径
mkdir -p /usr/local/ruby
./configure --prefix=/usr/local/ruby
make && make install
#创建软连接
ln -s /usr/local/ruby/bin/ruby /usr/local/bin/rub
#查看版本信息
ruby -v
3.1.3 编译安装gem
unzip rubygems-2.2.4.tgz
cd rubygems-2.2.4
ruby setup.rb
3.1.4 安装gem redis模块
gem install -l redis-4.0.1.gem

3.2. 使用redis-trib.rb创建集群

因为redis的docker镜像没有redis-trib.rb,需要从源码包中获取。

tar zxvf redis-4.0.11.tar.gz
cd redis-4.0.11
./src/redis-trib.rb create --replicas 1 \
30.105.16.132:6379 \
30.105.16.131:6379 \
30.105.16.130:6379 \
30.105.16.132:6378 \
30.105.16.131:6378 \
30.105.16.130:6378

结果:

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
...
...
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

集群创建成功

3.3 测试集群模式

[root@CNSH431181 redis-4.0.11]# /opt/module/redis-4.0.10/bin/redis-cli -c -h 30.105.16.132 -p 6379
30.105.16.132:6379> ping
PONG
30.105.16.132:6379> set xpp sb
OK
30.105.16.132:6379> exit
You have mail in /var/spool/mail/root
[root@CNSH431181 redis-4.0.11]# /opt/module/redis-4.0.10/bin/redis-cli -c -h 30.105.16.132 -p 6379
30.105.16.132:6379> KEYS *
1) "xpp"
30.105.16.132:6379> get xpp
"sb"
30.105.16.132:6379> 
 [root@CNSH431181 redis-4.0.11]# /opt/module/redis-4.0.10/bin/redis-cli -c -h 30.105.16.132 -p 6378
30.105.16.132:6378> KEYS *
(empty list or set)
30.105.16.132:6378> get xpp
-> Redirected to slot [1895] located at 30.105.16.132:6379
"sb"
30.105.16.132:6379>

4. 集群安全配置

上述集群部署验证完成后,我们还需要对节点、集群设置密码。以提高安全性。

4.1 设置密码

在redis.conf文件中添加

masterauth yourpasswd
requirepass yourpasswd

4.2 重启集群

docker restart redis

4.3 修改redis-trib.rb脚本

其实到步骤4.2,集群通过密码鉴权已经建立。这一步主要是我们需要去验证、观察集群是否正常

#修改前
@r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60)
#修改后
@r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60, :password => yourpasswd)

4.4 验证

[root@CNSH431181 src]# /opt/module/redis-4.0.10/bin/redis-cli -c -p 6379 -h 30.105.16.132
30.105.16.132:6379> ping
(error) NOAUTH Authentication required.
30.105.16.132:6379> AUTH
(error) ERR wrong number of arguments for 'auth' command
30.105.16.132:6379> AUTH passwd12
OK
30.105.16.132:6379> ping
PONG
30.105.16.132:6379> exit
[root@CNSH431181 src]# ./redis-trib.rb check 30.105.16.132:6378
>>> Performing Cluster Check (using node 30.105.16.132:6378)
S: 4458d6ec81184efaa1817cecdb70c717103b3d9b 30.105.16.132:6378
   slots: (0 slots) slave
   replicates 1ceaeb829b441f39b0a20b3e6367b8c9188eb2c2
M: a7f2414fe27d293f37371bab864e882b759f514c 30.105.16.131:6379
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
M: 80fc03f5dcc7ee4785831ab1bffd5131aa3ab7d6 30.105.16.132:6379
   slots:0-5460 (5461 slots) master
   0 additional replica(s)
M: 1ceaeb829b441f39b0a20b3e6367b8c9188eb2c2 30.105.16.130:6379
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/765800.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

老师怎样将期末成绩怎样私发家长?

作为老师,期末成绩的发布不仅是对学生一学期学习成果的评价,更是家校沟通的重要环节。然而,这一过程往往比我们想象的更为复杂和繁琐。 我们需要确保每个学生的成绩准确无误。这意味着在成绩录入之后,必须进行多次核对&#xff0c…

Java将list数组中重复的对象进行去重

/*** 数组去重*/ public class ArrayDistinct {public static void main(String[] args) {ArrayList<Object> list new ArrayList<>();JSONObject jsonObject1 new JSONObject();jsonObject1.put("name","张三");jsonObject1.put("age&…

序号不足两位前面补0

预期目标 原始效果 代码实现 {${(index 1).toString().padStart(2, 0)}. ${item.sentence}}要实现自动编号并确保显示为两位数的格式&#xff0c;可以在 {index 1} 的地方进行格式化。在 JavaScript 中&#xff0c;可以使用 String.prototype.padStart() 方法来补足数字到指定…

终极指南:RNNS、Transformers 和 Diffusion 模型

一、说明 作为广泛使用这些工具和模型的人&#xff0c;我的目标是解开 RNN、Transformer 和 Diffusion 模型的复杂性和细微差别&#xff0c;为您提供详细的比较&#xff0c;为您的特定需求提供正确的选择。 无论您是在构建语言翻译系统、生成高保真图像&#xff0c;还是处理时间…

kettle从入门到精通 第七十四课 ETL之kettle kettle调用https接口教程,忽略SSL校验

场景&#xff1a;kettle调用https接口&#xff0c;跳过校验SSL。&#xff08;有些公司内部系统之间的https的接口是没有SSL校验这一说&#xff0c;无需使用用证书的&#xff09; 解决方案&#xff1a;自定义插件或者自定义jar包通过javascript调用https接口。 1、http post 步…

为什么是视频传输用YUV格式,而放弃RGB格式?

&#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff0c;视频号&#xff1a;AI-行者Sun &#x1f388; 本文专栏&#xff1a;本文收录于《音视频》系列专栏&…

Linux系统之 — 线程

Linux系统之 — 线程 线程介绍线程使用死锁&#xff08;Deadlock&#xff09;竞态条件&#xff08;Race Condition&#xff09; 线程使用示例服务器端代码示例服务器端示例拆解1. 引入头文件和宏定义2. 定义全局变量3. 定义线程函数4. 主函数5. 错误处理和资源释放 客户端代码示…

Keil5 ST-LINK setting闪退问题解决

1. 官网下载新版驱动文件 MDK uVision crashes when using ST-Link debugger 2. 解压替换 STLinkUSBDriver6.1.2.0Signed 我的库文件目录&#xff1a; D:\Tool\Keil5\ARM\STLink

一文搞懂 java 线程池:ThreadPoolExecutor 和 FixedThreadPool 原理

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

Linux——shell原理和文件权限

1.shell原理 在我们使用云服务器时&#xff0c;需要通过shell进行使用&#xff0c;而shell则是一种外壳程序。 我们提到过&#xff0c;大部分的指令实际上就是文件&#xff0c;当用户需要执行某种功能时&#xff0c;由于用户不擅长和操作系统直接交互&#xff08;操作复杂&…

k8s部署单机版mysql8

一、创建命名空间 # cat mysql8-namespace.yaml apiVersion: v1 kind: Namespace metadata:name: mysql8labels:name: mysql8# kubectl apply -f mysql8-namespace.yaml namespace/mysql8 created# kubectl get ns|grep mysql8 mysql8 Active 8s二、创建mysql配…

论文学习——使用基于多项式拟合的预测算法求解动态多目标问题

论文题目&#xff1a;Solving dynamic multi-objective problems using polynomial fitting-based prediction algorithm 使用基于多项式拟合的预测算法求解动态多目标问题&#xff08;Qingyang Zhang , Xiangyu He,Shengxiang Yang , Yongquan Dong , Hui Song , Shouyong Ji…

配置WLAN 示例

规格 仅AR129CVW、AR129CGVW-L、AR109W、AR109GW-L、AR161W、AR161EW、AR161FGW-L、AR161FW、AR169FVW、AR169JFVW-4B4S、AR169JFVW-2S、AR169EGW-L、AR169EW、AR169FGW-L、AR169W-P-M9、AR1220EVW和AR301W支持WLAN-FAT AP功能。 组网需求 如图1所示&#xff0c;企业使用WLAN…

JDeveloper 12C 官网下载教程

首先、我们要登录Oracle官网 Oracle 甲骨文中国 | 云应用和云平台 登录进去如果不是中文可以点击右上角带有国旗的图标就行更改&#xff0c;选择一个你能看懂的文字。 然后&#xff0c;点击“资源”—点击“开发人员下载” 然后&#xff0c;点击“开发工具” 这里有很多工具可…

【设计模式】【行为型模式】【责任链模式】

系列文章目录 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录…

Python协作运动机器人刚体力学解耦模型

&#x1f3af;要点 &#x1f3af;腿式或固定式机器人模型 | &#x1f3af;网格、点云和体素网格碰撞检测 | &#x1f3af;正反向运动学和动力学 | &#x1f3af;机器人刚体力学计算 | &#x1f3af;编辑参考系姿势和路径 | &#x1f3af;软件接口实体机器人模拟 | &#x1f3a…

奇葩公司又发微博了,网友表示“乐”

多益网络 近日&#xff0c;多益网络官方微博发帖&#xff0c;公然表示对法院仲裁结果不服&#xff0c;认为劳动法有极多问题。 大家不要看微博内容似乎振振有词&#xff0c;极有可能只是多益网络单方面的选择性表达&#xff0c;毕竟多益网络的臭名早就家喻户晓。 况且对前员工直…

车载资料分享中:硬件在环、canoe、UDS诊断、OTA升级、TBOX测试

每日直播时间&#xff1a; 周一到周五&#xff1a;20&#xff1a;00-23&#xff1a;00 周六与周日&#xff1a;9&#xff1a;00-17&#xff1a;00 直播内容&#xff1a;&#xff08;车厂一比一测试&#xff09; HIL&#xff08;硬件在环&#xff09;测试、UDS功能诊断、UDS自动…

一首歌的时间 写成永远

大家好&#xff0c;我是秋意零。 就在&#xff0c;2024年6月20日。我本科毕业了&#xff0c;之前专科毕业挺有感触&#xff0c;也写了一篇文章进行记录。如今又毕业了&#xff0c;还是写一篇文章记录吧&#xff01;&#xff01; 专科毕业总结&#xff1a;大学三年总结&#xf…

使用ElementUI组件库

引入ElementUI组件库 1.安装插件 npm i element-ui -S 2.引入组件库 import ElementUI from element-ui; 3.引入全部样式 import element-ui/lib/theme-chalk/index.css; 4.使用 Vue.use(ElementUI); 5.在官网寻找所需样式 饿了么组件官网 我这里以button为例 6.在组件中使用…