用到的安装包

https://pan.baidu.com/s/1wwLm3C7oWcM9ptwMjRltGA

提取码:vdfp

系统环境:centos7

---------------------------------------------------------------------------------------------------------------------------------------------------

1.虚拟机配置网络

vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改
BOOTPROTO=static
ONBOOT=yes
增加
IPADDR=192.168.10.101
PREFIX=24
GATEWAY=192.168.10.2
DNS1=10.8.1.10

  重启服务

systemctl restart network.service

2.安装gcc,安装ruby需要

yum -y install gcc gcc-c++

3.安装redis

tar -zxf redis-4.0.1.tar.gz
cd /usr/local/src/redis-4.0.1

  安装两个redis,MALLOC=libc解决jemalloc 重载了Linux下的 ANSIC 的 malloc 和 free 函数问题

make PREFIX=/usr/local/bin/redis/redis1 install
make PREFIX=/usr/local/bin/redis/redis2 install

  安装目录的redis.conf拷到redis1下并修改redis.conf文件参数

cp redis.conf /usr/local/bin/redis/redis1
cd /usr/local/bin/redis/redis1
vi redis.conf
##########################################
bind 192.168.10.101    // 绑定机器的机器IP,不用127.0.0.1,否则创建集群可能失败
port 7001 // 修改成对应的端口号
daemonize yes // 后台运行
pidfile /var/run/redis_7001.pid // pid文件
logfile "./redis.log" // 日志
appendonly yes // 开启 aop 备份
appendfsync always // 每写一条 备份 一次
cluster-enabled yes // 开启 Redis Cluster
cluster-config-file nodes-7001.conf // 记录集群信息,不用手动维护,Redis Cluster 会自动维护
cluster-node-timeout 15000 // Cluster 超时时间 节点宕机发现时间,可以理解为主节点宕机后从节点升级为主节点时间
cluster-require-full-coverage no // 只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no
##########################################

  copy一份上边修改好的conf到redis2,然后快速修改配置文件的参数例

cp redis.conf /usr/local/bin/redis/redis2
sed -i 's/7001/8001/g' /usr/local/bin/redis/redis2/redis.conf

  如果拷到其他机器上配置除了修改端口也注意修改下conf的绑定ip,例

sed -i 's/192.168.10.101/192.168.10.102/g' /usr/local/redis/redis1/redis.conf

  redis目录下启动redis脚本

vi startup.sh

cd /usr/local/bin/redis/redis1/bin/
./redis-server ../redis.conf
cd
cd /usr/local/bin/redis/redis2/bin/
./redis-server ../redis.conf
cd

  关闭脚本

vi shutdown.sh
cd /usr/local/bin/redis/redis1/bin/
./redis-cli -h 192.168.10.101 -p 7001 shutdown
./redis-cli -h 192.168.10.101 -p 8001 shutdown
./redis-cli -h 192.168.10.102 -p 7002 shutdown
./redis-cli -h 192.168.10.102 -p 8002 shutdown
./redis-cli -h 192.168.10.103 -p 7003 shutdown
./redis-cli -h 192.168.10.103 -p 8003 shutdown

  删除备份脚本

vi remove.sh

cd /usr/local/bin/redis/redis1/bin/
rm appendonly.aof dump.rdb nodes-*.conf redis.log
cd /usr/local/bin/redis/redis2/bin/
rm appendonly.aof dump.rdb nodes-*.conf redis.log

  授权脚本执行权限

chmod +x startup.sh
chmod +x shutdown.sh
chmod +x remove.sh

  启动redis

sh startup.sh

  查看是否启动

ps aux|grep redis

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

///////////////////////////////////////////////////////////
// 以下用于redis集群的工具只在一台机器上安装就可以了 //
///////////////////////////////////////////////////////////

4.安装ruby

cd /usr/local/src
tar -zxf ruby-2.6.3.tar.gz
cd /usr/local/src/ruby-2.6.3
./configure --prefix=/usr/local/bin/ruby
make && make install

  解决-bash: ruby: command not found问题

ln -s /usr/local/bin/ruby/bin/ruby /usr/bin/ruby

5.安装zlib

tar -zxf zlib-1.2.11.tar.gz
cd /usr/local/src/zlib-1.2.11
./configure --prefix=/usr/local/bin/zlib
make && make install

  集成到ruby

cd /usr/local/src/ruby-2.6.3/ext/zlib
ruby ./extconf.rb --with-zlib-dir=/usr/local/bin/zlib
有的版本里边没有top_srcdir,make报错
vi Makefile
增加top_srcdir=../..
make && make install

6.安装perl,安装openssl需要

tar -zxf perl-5.10.0.tar.gz
cd /usr/local/src/perl-5.10.0
./configure.gnu --prefix=/usr/local/bin/perl
make && make install

7.安装openssl

tar -zxf openssl-1.1.0k.tar.gz
cd /usr/local/src/openssl-1.1.0k
./config --prefix=/usr/local/bin/openssl
make && make install

  设置openssl软链接,不然不能用openssl version

ln -s /usr/local/bin/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/bin/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

  集成到ruby

cd /usr/local/src/ruby-2.6.3/ext/openssl
ruby ./extconf.rb --with-openssl-dir=/usr/local/bin/openssl
vi Makefile
增加top_srcdir=../..
make && make install

8.安装rubygems

tar -zxf rubygems-3.0.6.tgz
cd /usr/local/src/rubygems-3.0.6
ruby setup.rb --prefix=/usr/local/bin/rubygems

  配置rubygems环境变量

vi /etc/profile
export RUBYGEMS_PATH=/usr/local/bin/rubygems
export PATH=$RUBYGEMS_PATH/bin:$PATH
source /etc/profile

9.创建集群

gem install redis-4.0.1.gem
gem list --local
cd /usr/local/src/redis-4.0.1/src
./redis-trib.rb create --replicas 1 192.168.10.101:7001 192.168.10.101:8001 192.168.10.102:7002 192.168.10.102:8002 192.168.10.103:7003 192.168.10.103:8003

如果执行不通,可以telnet试试,可能防火墙有拦截,需要开通端口号或者关闭防火墙。
开通端口【后边的17xxx和18xxx端口是在配置的redis端口+10000得到的,是集群总线端口,具体信息请查文档】
101机器 7001 8001 17001 18001
102机器 7002 8002 17002 18002
103机器 7003 8003 17003 18003

  首先安装iptables服务

关闭防火墙
systemctl stop firewalld.service
禁止开机启动
systemctl disable firewalld.service
安装iptables服务
yum install iptables-services

  添加完服务后添加规则

101机器

iptables -N REDIS
iptables -A REDIS -s 192.168.10.101 -j ACCEPT
iptables -A REDIS -s 192.168.10.102 -j ACCEPT
iptables -A REDIS -s 192.168.10.103 -j ACCEPT
iptables -A REDIS -j LOG --log-prefix "unauth-redis-access"
iptables -A REDIS -j REJECT --reject-with icmp-port-unreachable
iptables -I INPUT -p tcp --dport 7001 -j REDIS
iptables -I INPUT -p tcp --dport 8001 -j REDIS
iptables -I INPUT -p tcp --dport 17001 -j REDIS
iptables -I INPUT -p tcp --dport 18001 -j REDIS
iptables -I OUTPUT -p tcp --sport 7001 -j REDIS
iptables -I OUTPUT -p tcp --sport 8001 -j REDIS
iptables -I OUTPUT -p tcp --sport 17001 -j REDIS
iptables -I OUTPUT -p tcp --sport 18001 -j REDIS

102机器

iptables -N REDIS
iptables -A REDIS -s 192.168.10.101 -j ACCEPT
iptables -A REDIS -s 192.168.10.102 -j ACCEPT
iptables -A REDIS -s 192.168.10.103 -j ACCEPT
iptables -A REDIS -j LOG --log-prefix "unauth-redis-access"
iptables -A REDIS -j REJECT --reject-with icmp-port-unreachable
iptables -I INPUT -p tcp --dport 7002 -j REDIS
iptables -I INPUT -p tcp --dport 8002 -j REDIS
iptables -I INPUT -p tcp --dport 17002 -j REDIS
iptables -I INPUT -p tcp --dport 18002 -j REDIS
iptables -I OUTPUT -p tcp --sport 7002 -j REDIS
iptables -I OUTPUT -p tcp --sport 8002 -j REDIS
iptables -I OUTPUT -p tcp --sport 17002 -j REDIS
iptables -I OUTPUT -p tcp --sport 18002 -j REDIS

103机器

iptables -N REDIS
iptables -A REDIS -s 192.168.10.101 -j ACCEPT
iptables -A REDIS -s 192.168.10.102 -j ACCEPT
iptables -A REDIS -s 192.168.10.103 -j ACCEPT
iptables -A REDIS -j LOG --log-prefix "unauth-redis-access"
iptables -A REDIS -j REJECT --reject-with icmp-port-unreachable
iptables -I INPUT -p tcp --dport 7003 -j REDIS
iptables -I INPUT -p tcp --dport 8003 -j REDIS
iptables -I INPUT -p tcp --dport 17003 -j REDIS
iptables -I INPUT -p tcp --dport 18003 -j REDIS
iptables -I OUTPUT -p tcp --sport 7003 -j REDIS
iptables -I OUTPUT -p tcp --sport 8003 -j REDIS
iptables -I OUTPUT -p tcp --sport 17003 -j REDIS
iptables -I OUTPUT -p tcp --sport 18003 -j REDIS

  保存放行规则防止重启失效,每台虚机添加规则后即执行

保存放行规则防止重启失效,/etc/sysconfig/iptables
service iptables save
重启防火墙使配置生效
systemctl restart iptables.service
设置防火墙开机启动
systemctl enable iptables.service
关闭防火墙
systemctl stop iptables.service
打开防火墙
systemctl start iptables.service

10.虚机之间设置ssh免密访问

  修改机器名,分别操作

vi /etc/sysconfig/network
增加
NETWORKING=yes
HOSTNAME=server101

  修改hosts

vi /etc/hosts
增加
192.168.10.101 server101
192.168.10.102 server102
192.168.10.103 server103

  几台机器分别生成密钥对

ssh-keygen -t rsa
cd /root/.ssh下查看
生成了
~/.ssh/id_rsa.pub
~/.ssh/id_rsa

  把公钥发送给对方

scp /root/.ssh/id_rsa.pub root@server102:/root/.ssh/pub101

  然后对方机器上操作,将公钥内容加入到授权列表

cat pub101 >>authorized_keys

  授权

chmod 700 .ssh
chmod 600 .ssh/authorized_keys

 11.启动所有redis脚本,需要机器之间建立ssh免密登录设置

vi startall.sh
==============================================
#!/bin/sh
SHELLL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/ ssh root@server101 "bash" </usr/local/bin/redis/startup.sh
ssh root@server102 "bash" </usr/local/bin/redis/startup.sh
ssh root@server103 "bash" </usr/local/bin/redis/startup.sh

  删除所有备份,就把startall.sh中的最后startup.sh换成remove.sh即可

vi removeall.sh
==============================================
#!/bin/sh
SHELLL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/ ssh root@server101 "bash" </usr/local/bin/redis/remove.sh
ssh root@server102 "bash" </usr/local/bin/redis/remove.sh
ssh root@server103 "bash" </usr/local/bin/redis/remove.sh

  

多台虚机redis cluster集群的更多相关文章

  1. redis cluster(集群)模式的创建方式

    redis常用的架构有三种,单例.哨兵.集群,其他的都说过了,这里只简单介绍集群搭建. 单例最简单没什么好说的. 哨兵之前说过,该模式下有哨兵节点监视master和slave,若master宕机可自动 ...

  2. Redis Cluster集群架构实现(四)--技术流ken

    Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)--技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)--技术流ken>,< ...

  3. centos6下redis cluster集群部署过程

    一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...

  4. Redis cluster集群:原理及搭建

    Redis cluster集群:原理及搭建 2018年03月19日 16:00:55 阅读数:6120 1.为什么使用redis? redis是一种典型的no-sql 即非关系数据库 像python的 ...

  5. redis cluster集群部署

    上一篇http://www.cnblogs.com/qinyujie/p/9029153.html,主要讲解了 redis cluster 集群架构 的优势.redis cluster 和 redis ...

  6. Redis Cluster 集群的实现和管理

    系统环境 CentOS 7 集群规划 在一台物理机(实际部署应当分散到多个物理机上),创建6个Redis节点,其中3个主节点.3个从节点. 节点表: IP 端口 主从 路径 192.168.1.21 ...

  7. Ubuntu 16.04下Redis Cluster集群搭建(官方原始方案)

    前提:先安装好Redis,参考:http://www.cnblogs.com/EasonJim/p/7599941.html 说明:Redis Cluster集群模式可以做到动态增加节点和下线节点,使 ...

  8. 借 redis cluster 集群,聊一聊集群中数据分布算法

    Redis Cluster 集群中涉及到了数据分布问题,因为 redis cluster 是多 master 的结构,每个 master 都是可以提供存储服务的,这就会涉及到数据分布的问题,在新的 r ...

  9. redis cluster集群的原理

    redis集群的概述: 在以前,如果前几年的时候,一般来说,redis如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有codis,或者twemproxy,都有.有一些red ...

随机推荐

  1. git分支案例

  2. 暑假自学java第九天

    1,接口回调是指:可以将接口实现类的对象赋给该接口声明的接口变量,那么该接口变量就可以调用接口实现类对象中的方法.不同的类在使用同一接口时,可能具有不同的功能体现,即接口实现类的方法体不必相同,因此, ...

  3. Linux alias 或者 unalias 设置别名

    设置别名 查看别名:alias 设置别名: 临时设置: alias show='ls -al' 上述设置方法存在一个问题,即设置的命令别名只针对当前回话有效,一旦连接断开并重连之前设置的别名别不在有效 ...

  4. QT从入门到入土(三)——信号和槽机制

    摘要 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号 (signal).这种发出是没有目的的,类似广播 ...

  5. java基础---类和对象(4)

    一. static关键字 使用static关键字修饰成员变量表示静态的含义,此时成员变量由对象层级提升为类层级,整个类共享一份静态成员变量,该成员变量随着类的加载准备就绪,与是否创建对象无关 使用st ...

  6. Java程序设计(2021春)——第三章类的重用笔记与思考

    Java程序设计(2021春)--第三章类的重用笔记与思考 本章概览: 3.1 类的继承(概念与语法) 3.2 Object类(在Java继承最顶层的类) 3.3 终结类和终结方法(只能拿来用,不可以 ...

  7. Beautifulsoup网页解析——爬取豆瓣排行榜分类接口

    我们在网页爬取的过程中,会通过requests成功的获取到所需要的信息,而且,在返回的网页信息中,也是通过HTML代码的形式进行展示的.HTML代码都是通过固定的标签组合来实现页面信息的展示,所以,最 ...

  8. C++11 左值引用和右值引用与引用折叠和完美转发

    1.左值与右值 最感性的认识. 当然,左值也是可以在右边的. 左值是可以被修改的,右值不能. 当然取地址也是. 生存周期一般左值会比右值的长,一般右值都计算时产生的无名临时对象,存在时间比较短. 下面 ...

  9. ThinkPHP3.2.3使用PHPExcel类操作excel导出excel

    如何导入excel请看:ThinkPHP3.2.3使用PHPExcel类操作excel导入读取excel // 引入PHPExcel类 import("Org.Util.PHPExccel& ...

  10. [NOIp2017]宝藏 题解

    非常巧妙的 \(O(n^23^n)\) 做法. 题目的本质是要求一棵生成树,使得其每条边的长度与这条边的起点深度乘积的和最小. 我们使用状压 DP,考虑到当前状态与已经打通的点和深度有关,不妨设 \( ...