多台虚机redis cluster集群
用到的安装包
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
最新文章
- FullCalendar日历插件说明文档
- local认证
- jdk1.7和jdk1.8的String的getByte方法的差异
- 1编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果。2编写一个Java项目,定义包,在包下定义包含main方法的类。
- 上中下三个DIV,高度自适应(上高度固定,下固定,中间自适应)(代码来自X人)
- c语言指针占几个字节
- kuangbin_SegTree A (HDU 1166)
- grub条目示例
- atom初体验
- MySQL : interactive_timeout v/s wait_timeout
- 深入理解C# 静态类与非静态类、静态成员的区别
- nm命令详解
- JavaScript之将JS代码放在什么位置最合适
- Windows Azure应用系列:微软的云部署VPN
- vbs鼠标方法——模拟鼠标按键
- Java的数组,栈,队列
- 一丶Http协议
- Linux网络编程--socket
- CRM lookup筛选
- javax.crypto.BadPaddingException: Given final block not properly padded解决方案