redis环境搭建

一、服务器配置
配置网络

	[root@localhost ~]#  vi /etc/sysconfig/network-scripts/ifcfg-ens33
	TYPE=Ethernet
	PROXY_METHOD=none
	BROWSER_ONLY=no
	BOOTPROTO=dhcp
	DEFROUTE=yes
	IPV4_FAILURE_FATAL=no
	IPV6INIT=yes
	IPV6_AUTOCONF=yes
	IPV6_DEFROUTE=yes
	IPV6_FAILURE_FATAL=no
	IPV6_ADDR_GEN_MODE=stable-privacy
	NAME=ens33
	UUID=2e91e171-c520-4f9a-84cb-6f1577e2eafd
	DEVICE=ens33
	ONBOOT=yes
	ZONE=public

设置主机名

	[root@localhost ~]#  vi /etc/sysconfig/network 
	# Created by anaconda
	NETWORKING=yes
	HOSTNAME=mical-redis

设置 IP 与主机名的映射

	[root@localhost ~]#  vi /etc/hosts 
	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
	127.0.0.1 mical-redis
	192.168.136.19 mical-redis

重启操作系统

	[root@localhost ~]#  reboot
	
	改防火墙设置,打开 8001 端口
	[root@mical-redis ~]# vi /etc/sysconfig/iptables
	# redis for 8001 ~ 18001
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 8001 -j ACCEPT
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 18001 -j ACCEPT  

集群;

	# redis for 8001 ~ 18001
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 8001 -j ACCEPT
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 18001 -j ACCEPT

	# redis for 8002 ~ 18002
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 8002 -j ACCEPT
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 18002 -j ACCEPT
	
	# redis for 8003 ~ 18003
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 8003 -j ACCEPT
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 18003 -j ACCEPT
	
	# redis for 8004 ~ 18004
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 8004 -j ACCEPT
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 18004 -j ACCEPT
	
	# redis for 8005 ~ 18005
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 8005 -j ACCEPT
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 18005 -j ACCEPT
	
	# redis for 8006 ~ 18006
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 8006 -j ACCEPT
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 18006 -j ACCEPT

重启防火墙,查看防火墙状态

	[root@mical-redis ~]#  service iptables restart
	Redirecting to /bin/systemctl restart iptables.service
	[root@mical-redis ~]# iptables -L -n
	Chain INPUT (policy ACCEPT)
	target     prot opt source               destination         
	ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
	ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
	ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:21
	ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
	ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
	ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8
	ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
	ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:8001
	ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:18001
	
	Chain FORWARD (policy ACCEPT)
	target     prot opt source               destination         
	
	Chain OUTPUT (policy ACCEPT)
	target     prot opt source               destination         
	[root@mical-redis ~]# 

编译和安装所需的包

	[root@mical-redis ~]# yum install gcc tcl

下载(或上传)Redis3 最新稳定版

	[root@mical-redis ~]# cd /usr/local/src
	[root@mical-redis src]# 
	[root@mical-redis src]# wget http://download.redis.io/releases/redis-3.0.3.tar.gz

创建安装目录

	[root@mical-redis src]#  mkdir /usr/local/redis3

解压下载好的安装包

	[root@mical-redis src]#  tar -zxvf redis-3.0.3.tar.gz
	[root@mical-redis src]# ll
	total 1336
	drwxrwxr-x. 6 root root    4096 Jul 17  2015 redis-3.0.3
	-rw-r--r--. 1 root root 1360959 Jul 17  2015 redis-3.0.3.tar.gz
	[root@mical-redis src]# 
	[root@mical-redis src]#  cd redis-3.0.3

安装(使用 PREFIX 指定安装目录)
创建安装目录:

	root@mical-redis redis-3.0.3]#  mkdir /usr/local/redis3 
	[root@mical-redis redis-3.0.3]# make PREFIX=/usr/local/redis3 install

安装完成后,可以看到 /usr/local/redis3 目录下有一个 bin 目录,bin 目录里就是 redis 的命令脚本:

	[root@mical-redis redis3]# cd /usr/local/redis3/bin/
	[root@mical-redis bin]# ll
	total 8512
	-rwxr-xr-x. 1 root root 2077152 Feb 21 08:49 redis-benchmark
	-rwxr-xr-x. 1 root root   25088 Feb 21 08:49 redis-check-aof
	-rwxr-xr-x. 1 root root   55920 Feb 21 08:49 redis-check-dump
	-rwxr-xr-x. 1 root root 2201288 Feb 21 08:49 redis-cli
	lrwxrwxrwx. 1 root root      12 Feb 21 08:49 redis-sentinel -> redis-server
	-rwxr-xr-x. 1 root root 4343032 Feb 21 08:49 redis-server
	[root@mical-redis bin]# 

创建启动目录,并拷贝到配置文件到该目录下

	[root@mical-redis bin]# mkdir -p /usr/local/redis3/cluster/8001
	[root@mical-redis bin]# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/8001/redis-8001.conf 
	
	[root@mical-redis /]# mkdir -p /usr/local/redis3/cluster/8002
	[root@mical-redis bin]# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/8002/redis-8002.conf
	
	[root@mical-redis /]# mkdir -p /usr/local/redis3/cluster/8003
	[root@mical-redis bin]# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/8003/redis-8003.conf
	
	[root@mical-redis /]# mkdir -p /usr/local/redis3/cluster/8004
	[root@mical-redis bin]# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/8004/redis-80034conf
	
	[root@mical-redis /]# mkdir -p /usr/local/redis3/cluster/8005
	[root@mical-redis bin]# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/80035redis-8005.conf
	
	[root@mical-redis /]# mkdir -p /usr/local/redis3/cluster/8006
	[root@mical-redis bin]# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/8006/redis-8006.conf

修改配置文件中的下面选项
配置选项 选项值 说明

daemonize yes 是否作为守护进程运行 
pidfile /var/run/redis-8001.pid 如以后台进程运行,则需指定一个 pid, 默认为/var/run/redis.pid
port 8001 监听端口,默认为 6379注意:集群通讯端口值默认为此端口值+10000,如18001
databases 1 可用数据库数,默认值为 16,默认数据库存储在 DB 0 号 ID 库中,无特殊需求,建议仅设置一个数据库 databases 1 
cluster-enabled yes 打开 redis 集群
cluster-config-file /usr/local/redis3/cluster/8001/nodes.conf 集群配置文件(启动自动生成),不用人为干涉 
cluster-node-timeout 15000 节点互连超时时间。毫秒 
cluster-migration-barrier 1 1 数据迁移的副本临界数,这个参数表示的是,一个主节点在拥有多少个好的从节点的时候就要割让一个从节点出来给另一个没有任何从节点的主节点
cluster-require-full-coverage yes 如果某一些 key space 没有被集群中任何节点覆盖,集群将停止接受写入
appendonly yes 启用 aof 持久化方式,因为 redis 本身同步数据文件是按上面 save 条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为 no
dir /usr/local/redis3/cluster/8001 节点数据持久化存放目录(建议配置)

包含了最少选项的集群配置文件示例如下:

	daemonize yes
	pidfile /var/run/redis-8001.pid
	port 8001
	databases 1
	cluster-enabled yes
	cluster-config-file /usr/local/redis3/cluster/8001/nodes.conf
	cluster-node-timeout 15000
	cluster-migration-barrier 1
	cluster-require-full-coverage yes
	appendonly yes
	/usr/local/redis3/cluster/8001
	[root@mical-redis 8001]# vi redis-8001.conf 

使用如下命令启动这个 Redis 节点实例

	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8001/redis-8001.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8002/redis-8002.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8003/redis-8003.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8004/redis-8004.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8005/redis-8005.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8006/redis-8006.conf

启动之后用 PS 命令查看实例启动情况

	[root@mical-redis /]# ps -ef |grep redis
	root      14916      1  0 10:45 ?        00:00:00 /usr/local/redis3/bin/redis-server *:8001 [cluster]
	root      14920      1  0 10:45 ?        00:00:00 /usr/local/redis3/bin/redis-server *:8002 [cluster]
	root      14924      1  0 10:45 ?        00:00:00 /usr/local/redis3/bin/redis-server *:8003 [cluster]
	root      14928      1  0 10:45 ?        00:00:00 /usr/local/redis3/bin/redis-server *:8004 [cluster]
	root      14940      1  0 10:45 ?        00:00:00 /usr/local/redis3/bin/redis-server *:8005 [cluster]
	root      14944      1  0 10:45 ?        00:00:00 /usr/local/redis3/bin/redis-server *:8006 [cluster]
	root      14948  14441  0 10:46 pts/0    00:00:00 grep --color=auto redis
	[root@mical-redis /]#  

此时,redis部署已经完成,启动完毕后,6 个 Redis 实例尚未构成集群

安装 ruby 和 rubygems(注意:需要 ruby 的版本在 1.8.7 以上)

	[root@mical-redis /]# yum install ruby rubygems
	[root@mical-redis /]#  ruby -v
	ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
	[root@mical-redis /]# 

gem 安装 redis ruby 接口

	[root@mical-redis /]#  gem install redis 
	Fetching: redis-4.1.0.gem (100%)
	ERROR:  Error installing redis:
		redis requires Ruby version >= 2.2.2.
	[root@mical-redis /]# 

报错,Ruby需要升级到2.2.2版本以上

升级版本

[root@mical-redis /]# \curl -sSL https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash
Downloading https://github.com/rvm/rvm/archive/master.tar.gz
Creating group 'rvm'
Installing RVM to /usr/local/rvm/
Installation of RVM in /usr/local/rvm/ is almost complete:

  * First you need to add all users that will be using rvm to 'rvm' group,
    and logout - login again, anyone using rvm will be operating with `umask u=rwx,g=rwx,o=rx`.

  * To start using RVM you need to run `source /etc/profile.d/rvm.sh`
    in all your open shell windows, in rare cases you need to reopen all shell windows.
  * Please do NOT forget to add your users to the rvm group.
     The installer no longer auto-adds root or users to the rvm group. Admins must do this.
     Also, please note that group memberships are ONLY evaluated at login time.
     This means that users must log out then back in before group membership takes effect!
Thanks for installing RVM 
Please consider donating to our open collective to help us maintain RVM.

  Donate: https://opencollective.com/rvm/donate
[root@mical-redis /]# 

是配置生效

	[root@mical-redis /]# source /usr/local/rvm/scripts/rvm

查看存在的版本

	[root@mical-redis /]# rvm list known

安装rvm install 2.3.3

[root@mical-redis /]# rvm install 2.3.3
Warning, new version of rvm available '1.29.7', you are using older version '1.29.7-next'.
You can disable this warning with:    echo rvm_autoupdate_flag=0 >> ~/.rvmrc
You can enable  auto-update  with:    echo rvm_autoupdate_flag=2 >> ~/.rvmrc
Searching for binary rubies, this might take some time.
Found remote file https://rvm_io.global.ssl.fastly.net/binaries/centos/7/x86_64/ruby-2.3.3.tar.bz2
Checking requirements for centos.
Installing requirements for centos.
Installing required packages: patch, autoconf, automake, bison, gcc-c++, libffi-devel, libtool, patch, readline-devel, sqlite-devel, zlib-devel, openssl-devel.....................
Requirements installation successful.
ruby-2.3.3 - #configure
ruby-2.3.3 - #download
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 25.2M  100 25.2M    0     0  22630      0  0:19:28  0:19:28 --:--:--  9550
No checksum for downloaded archive, recording checksum in user configuration.
ruby-2.3.3 - #validate archive
ruby-2.3.3 - #extract
ruby-2.3.3 - #validate binary
ruby-2.3.3 - #setup
ruby-2.3.3 - #gemset created /usr/local/rvm/gems/ruby-2.3.3@global
ruby-2.3.3 - #importing gemset /usr/local/rvm/gemsets/global.gems......................................................
ruby-2.3.3 - #generating global wrappers.......
ruby-2.3.3 - #gemset created /usr/local/rvm/gems/ruby-2.3.3
ruby-2.3.3 - #importing gemsetfile /usr/local/rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.3.3 - #generating default wrappers.......
[root@mical-redis /]# 

使用rvm use 2.3.3

	[root@mical-redis /]# rvm use 2.3.3
	Using /usr/local/rvm/gems/ruby-2.3.3
	[root@mical-redis /]# ruby --version
	ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
	[root@mical-redis /]# 

安装源

	[root@mical-redis /]# gem install redis
	Fetching: redis-4.1.0.gem (100%)
	Successfully installed redis-4.1.0
	Parsing documentation for redis-4.1.0
	Installing ri documentation for redis-4.1.0
	Done installing documentation for redis after 1 seconds
	1 gem installed
	[root@mical-redis /]# 

创建redis集群,三主(M)三从(S)
分别启动6个节点

	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8001/redis-8001.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8002/redis-8002.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8003/redis-8003.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8004/redis-8004.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8005/redis-8005.conf
	[root@mical-redis /]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8006/redis-8006.conf

执行 Redis 集群创建命令(只需要在其中一个节点上执行一次则可)
将安装 /usr/local/src/redis-3.0.3/src/ 下面的 redis-trib.rb 拷贝到 /usr/local/bin 下

	[root@mical-redis /]# cp /usr/local/src/redis-3.0.3/src/redis-trib.rb /usr/local/bin/redis-trib
	[root@mical-redis /]# cd /usr/local/bin/
	[root@mical-redis bin]# ll
	total 48
	-rwxr-xr-x. 1 root root 48141 Feb 21 11:32 redis-trib
	[root@mical-redis bin]# 

通过redis-trib创建集群

[root@mical-redis bin]# redis-trib create --replicas 1 192.168.136.19:8001 192.168.136.19:8002 192.168.136.19:8003 192.168.136.19:8004 192.168.136.19:8005 192.168.136.19:8006
>>> Creating cluster
Connecting to node 192.168.136.19:8001: OK
Connecting to node 192.168.136.19:8002: OK
Connecting to node 192.168.136.19:8003: OK
Connecting to node 192.168.136.19:8004: OK
Connecting to node 192.168.136.19:8005: OK
Connecting to node 192.168.136.19:8006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.136.19:8001
192.168.136.19:8002
192.168.136.19:8003
Adding replica 192.168.136.19:8004 to 192.168.136.19:8001
Adding replica 192.168.136.19:8005 to 192.168.136.19:8002
Adding replica 192.168.136.19:8006 to 192.168.136.19:8003
M: 0b05174b6e8e239c1373a886a299531a0c74afb3 192.168.136.19:8001
   slots:0-5460 (5461 slots) master
M: 83841aee70f9d4fae23016298c0e51df76743ba7 192.168.136.19:8002
   slots:5461-10922 (5462 slots) master
M: 33d79702dc34da5e84370e785251fd366d2c16df 192.168.136.19:8003
   slots:10923-16383 (5461 slots) master
S: 64edaf7b9d56f76de181433851f8815e01548d9b 192.168.136.19:8004
   replicates 0b05174b6e8e239c1373a886a299531a0c74afb3
S: e25e602957c20ecbad1f049b7819389bdaa3d7c2 192.168.136.19:8005
   replicates 83841aee70f9d4fae23016298c0e51df76743ba7
S: ed82cf166ce966d9b093b4a8fb00496888a17189 192.168.136.19:8006
   replicates 33d79702dc34da5e84370e785251fd366d2c16df
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 192.168.136.19:8001)
M: 0b05174b6e8e239c1373a886a299531a0c74afb3 192.168.136.19:8001
   slots:0-5460 (5461 slots) master
M: 83841aee70f9d4fae23016298c0e51df76743ba7 192.168.136.19:8002
   slots:5461-10922 (5462 slots) master
M: 33d79702dc34da5e84370e785251fd366d2c16df 192.168.136.19:8003
   slots:10923-16383 (5461 slots) master
M: 64edaf7b9d56f76de181433851f8815e01548d9b 192.168.136.19:8004
   slots: (0 slots) master
   replicates 0b05174b6e8e239c1373a886a299531a0c74afb3
M: e25e602957c20ecbad1f049b7819389bdaa3d7c2 192.168.136.19:8005
   slots: (0 slots) master
   replicates 83841aee70f9d4fae23016298c0e51df76743ba7
M: ed82cf166ce966d9b093b4a8fb00496888a17189 192.168.136.19:8006
   slots: (0 slots) master
   replicates 33d79702dc34da5e84370e785251fd366d2c16df
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@mical-redis bin]# 

一切正常的情况下输出以下信息:

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
最后一行信息表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常

集群创建过程说明:
给定 redis-trib 程序的命令是 create , 这表示我们希望创建一个新的集群;
这里的 --replicas 1 表示每个主节点下有一个从节点;
之后跟着的其它参数则是实例的地址列表,程序使用这些地址所指示的实例来创建新集群;
总的来说,以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。
接着,redis-trib 会打印出一份预想中的配置给你看,如果你觉得没问题的话(注意核对主从关系是否是
你想要的),就可以输入 yes , redis-trib 就会将这份配置应用到集群当中。

集群简单测试
使用 redis-cli 命令进入集群环境

[root@mical-redis /]# cd /usr/local/src/redis-3.0.3/src/ 
[root@mical-redis src]# ./redis-cli -c -p 8001
127.0.0.1:8001> set name admin

# 表示值保存成功,并且值保存在8002节点上
-> Redirected to slot [5798] located at 192.168.136.19:8002
OK
192.168.136.19:8002> keys *
1) "name"
192.168.136.19:8002> get name
"admin"
192.168.136.19:8002> 

# 进8003节点获取值
[root@mical-redis src]# ./redis-cli -c -p 8003
127.0.0.1:8003> get name

# 表示直接从 8003 节点上获取数据
-> Redirected to slot [5798] located at 192.168.136.19:8002
"admin"
192.168.136.19:8002> 

查看集群节点状态 id、ip+端口 主库标记、节点标记、处理hash槽范围

[root@mical-redis src]# ./redis-cli -p 8001 cluster nodes 
64edaf7b9d56f76de181433851f8815e01548d9b 192.168.136.19:8004 slave 0b05174b6e8e239c1373a886a299531a0c74afb3 0 1550767597294 4 connected
33d79702dc34da5e84370e785251fd366d2c16df 192.168.136.19:8003 master - 0 1550767598394 3 connected 10923-16383
ed82cf166ce966d9b093b4a8fb00496888a17189 192.168.136.19:8006 slave 33d79702dc34da5e84370e785251fd366d2c16df 0 1550767595230 6 connected
0b05174b6e8e239c1373a886a299531a0c74afb3 192.168.136.19:8001 myself,master - 0 0 1 connected 0-5460
83841aee70f9d4fae23016298c0e51df76743ba7 192.168.136.19:8002 master - 0 1550767596245 2 connected 5461-10922
e25e602957c20ecbad1f049b7819389bdaa3d7c2 192.168.136.19:8005 slave 83841aee70f9d4fae23016298c0e51df76743ba7 0 1550767593200 5 connected
[root@mical-redis src]# 

查看集群信息

127.0.0.1:8001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:1017
cluster_stats_messages_received:1017
127.0.0.1:8001> 

查看集群中已知的所有节点(node),以及这些节点相关 信息

127.0.0.1:8001> cluster nodes
70ae0ac751b4a3a404d3f5fdd7155f442b66ef27 192.168.74.137:8006 master - 0 1552745252188 3 connected 10923-16383
37dc8ee51d607b889556ea25d5fd9b802bbf2c3d 192.168.74.137:8001 myself,slave ae6b00a0be761dcc7b7c0c37869d73772d501cc0 0 0 4 connected
ae6b00a0be761dcc7b7c0c37869d73772d501cc0 192.168.74.137:8004 master - 0 1552745250142 1 connected 0-5460
a703d48a5ecbb3a77328aa623ae52499155df319 192.168.74.137:8003 slave 70ae0ac751b4a3a404d3f5fdd7155f442b66ef27 0 1552745253206 6 connected
523403de0687d25cf176fc5d1297e9c006cf0c81 192.168.74.137:8002 slave 226d820477ffce5ebb3df3ff4cad10a07d901c68 0 1552745251160 5 connected
226d820477ffce5ebb3df3ff4cad10a07d901c68 192.168.74.137:8005 master - 0 1552745254215 2 connected 5461-10922
127.0.0.1:8001> 

删除节点

[root@mical_linux_redis_cloud bin]# redis-trib del-node 192.168.74.137:8003 a703d48a5ecbb3a77328aa623ae52499155df319
>>> Removing node a703d48a5ecbb3a77328aa623ae52499155df319 from cluster 192.168.74.137:8003
Connecting to node 192.168.74.137:8003: OK
Connecting to node 192.168.74.137:8004: OK
Connecting to node 192.168.74.137:8002: OK
Connecting to node 192.168.74.137:8005: OK
Connecting to node 192.168.74.137:8006: OK
Connecting to node 192.168.74.137:8001: OK
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

删除节点后查看节点状态(记得将改节点下的 nodes.conf 节点文件删除)

[root@mical_linux_redis_cloud bin]# ./redis-cli -p 8001 cluster nodes
70ae0ac751b4a3a404d3f5fdd7155f442b66ef27 192.168.74.137:8006 master - 0 1552746266011 3 connected 10923-16383
37dc8ee51d607b889556ea25d5fd9b802bbf2c3d 192.168.74.137:8001 myself,slave ae6b00a0be761dcc7b7c0c37869d73772d501cc0 0 0 4 connected
ae6b00a0be761dcc7b7c0c37869d73772d501cc0 192.168.74.137:8004 master - 0 1552746263973 1 connected 0-5460
523403de0687d25cf176fc5d1297e9c006cf0c81 192.168.74.137:8002 slave 226d820477ffce5ebb3df3ff4cad10a07d901c68 0 1552746264985 5 connected
226d820477ffce5ebb3df3ff4cad10a07d901c68 192.168.74.137:8005 master - 0 1552746262966 2 connected 5461-10922
[root@mical_linux_redis_cloud bin]# 
[root@mical_linux_redis_cloud bin]# rm -rf /usr/local/redis3/cluster/8003/nodes.conf 
[root@mical_linux_redis_cloud bin]# ls /usr/local/redis3/cluster/8003/
appendonly.aof  dump.rdb  redis-8003.conf
[root@mical_linux_redis_cloud bin]# 

删除节点后该节点已经停止,想重新添加该节点,先启动该节点

[root@mical_linux_redis_cloud bin]# ps -ef |grep redis
root      34945      1  0 20:55 ?        00:00:06 /usr/local/redis3/bin/redis-server *:8001 [cluster]
root      34949      1  0 20:55 ?        00:00:06 /usr/local/redis3/bin/redis-server *:8002 [cluster]
root      34957      1  0 20:56 ?        00:00:06 /usr/local/redis3/bin/redis-server *:8004 [cluster]
root      34970      1  0 20:56 ?        00:00:05 /usr/local/redis3/bin/redis-server *:8005 [cluster]
root      34974      1  0 20:56 ?        00:00:06 /usr/local/redis3/bin/redis-server *:8006 [cluster]
root      52423   7940  0 22:40 pts/0    00:00:00 grep --color=auto redis
[root@mical_linux_redis_cloud bin]# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/8003/redis-8003.conf
[root@mical_linux_redis_cloud bin]# ps -ef |grep redis
root      34945      1  0 20:55 ?        00:00:06 /usr/local/redis3/bin/redis-server *:8001 [cluster]
root      34949      1  0 20:55 ?        00:00:06 /usr/local/redis3/bin/redis-server *:8002 [cluster]
root      34957      1  0 20:56 ?        00:00:06 /usr/local/redis3/bin/redis-server *:8004 [cluster]
root      34970      1  0 20:56 ?        00:00:05 /usr/local/redis3/bin/redis-server *:8005 [cluster]
root      34974      1  0 20:56 ?        00:00:06 /usr/local/redis3/bin/redis-server *:8006 [cluster]
root      52426      1  0 22:41 ?        00:00:00 /usr/local/redis3/bin/redis-server *:8003 [cluster]
root      52430   7940  0 22:41 pts/0    00:00:00 grep --color=auto redis
[root@mical_linux_redis_cloud bin]# 

此事的集群节点状态(只有5个节点,三个主节点,两个从节点)

[root@mical_linux_redis_cloud bin]# ./redis-cli -p 8001 cluster nodes
70ae0ac751b4a3a404d3f5fdd7155f442b66ef27 192.168.74.137:8006 master - 0 1552747321692 3 connected 10923-16383
37dc8ee51d607b889556ea25d5fd9b802bbf2c3d 192.168.74.137:8001 myself,slave ae6b00a0be761dcc7b7c0c37869d73772d501cc0 0 0 4 connected
ae6b00a0be761dcc7b7c0c37869d73772d501cc0 192.168.74.137:8004 master - 0 1552747316642 1 connected 0-5460
523403de0687d25cf176fc5d1297e9c006cf0c81 192.168.74.137:8002 slave 226d820477ffce5ebb3df3ff4cad10a07d901c68 0 1552747320683 5 connected
226d820477ffce5ebb3df3ff4cad10a07d901c68 192.168.74.137:8005 master - 0 1552747319674 2 connected 5461-10922
[root@mical_linux_redis_cloud bin]# 

将已经启动的服务添加到多余的主节点中(添加从节点)

[root@mical_linux_redis_cloud bin]# redis-trib add-node --slave --master-id 70ae0ac751b4a3a404d3f5fdd7155f442b66ef27 192.168.74.137:8003 192.168.74.137:8006
>>> Adding node 192.168.74.137:8003 to cluster 192.168.74.137:8006
Connecting to node 192.168.74.137:8006: OK
Connecting to node 192.168.74.137:8005: OK
Connecting to node 192.168.74.137:8004: OK
Connecting to node 192.168.74.137:8001: OK
Connecting to node 192.168.74.137:8002: OK
>>> Performing Cluster Check (using node 192.168.74.137:8006)
M: 70ae0ac751b4a3a404d3f5fdd7155f442b66ef27 192.168.74.137:8006
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
M: 226d820477ffce5ebb3df3ff4cad10a07d901c68 192.168.74.137:8005
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: ae6b00a0be761dcc7b7c0c37869d73772d501cc0 192.168.74.137:8004
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 37dc8ee51d607b889556ea25d5fd9b802bbf2c3d 192.168.74.137:8001
   slots: (0 slots) slave
   replicates ae6b00a0be761dcc7b7c0c37869d73772d501cc0
S: 523403de0687d25cf176fc5d1297e9c006cf0c81 192.168.74.137:8002
   slots: (0 slots) slave
   replicates 226d820477ffce5ebb3df3ff4cad10a07d901c68
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Connecting to node 192.168.74.137:8003: OK
>>> Send CLUSTER MEET to node 192.168.74.137:8003 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.74.137:8006.
[OK] New node added correctly.
[root@mical_linux_redis_cloud bin]# 

在查看集群状态(结果显示该服务已经添加到集群,并且是从节点,该节点的主节点为节点6)

[root@mical_linux_redis_cloud bin]# ./redis-cli -p 8001 cluster nodes
70ae0ac751b4a3a404d3f5fdd7155f442b66ef27 192.168.74.137:8006 master - 0 1552747496512 3 connected 10923-16383
37dc8ee51d607b889556ea25d5fd9b802bbf2c3d 192.168.74.137:8001 myself,slave ae6b00a0be761dcc7b7c0c37869d73772d501cc0 0 0 4 connected
ae6b00a0be761dcc7b7c0c37869d73772d501cc0 192.168.74.137:8004 master - 0 1552747492979 1 connected 0-5460
a4c22e9a49b70b832b062469931f9162ac360203 192.168.74.137:8003 slave 70ae0ac751b4a3a404d3f5fdd7155f442b66ef27 0 1552747497520 3 connected
523403de0687d25cf176fc5d1297e9c006cf0c81 192.168.74.137:8002 slave 226d820477ffce5ebb3df3ff4cad10a07d901c68 0 1552747498529 5 connected
226d820477ffce5ebb3df3ff4cad10a07d901c68 192.168.74.137:8005 master - 0 1552747499540 2 connected 5461-10922
[root@mical_linux_redis_cloud bin]# 

将 Redis 配置成服务(非伪集群适用,也就是每个节点都单独物理机部署的情况下)
按上面的操作步骤,Redis 的启动脚本为:

	/usr/local/src/redis-3.0.3/utils/redis_init_script

将启动脚本复制到/etc/rc.d/init.d/目录下,并命名为 redis

	cp /usr/local/src/redis-3.0.3/utils/redis_init_script /etc/rc.d/init.d/redis

编辑/etc/rc.d/init.d/redis,修改相应配置

	[root@mical-redis src]# vi /usr/local/src/redis-3.0.3/utils/redis_init_script
	#!/bin/sh
	#
	# Simple Redis init.d script conceived to work on Linux systems
	# as it does use of the /proc filesystem.
	
	REDISPORT=6379
	EXEC=/usr/local/bin/redis-server
	CLIEXEC=/usr/local/bin/redis-cli
	
	PIDFILE=/var/run/redis_${REDISPORT}.pid
	CONF="/etc/redis/${REDISPORT}.conf"
	
	case "$1" in
	    start)
	        if [ -f $PIDFILE ]
	        then
	                echo "$PIDFILE exists, process is already running or crashed"
	        else
	                echo "Starting Redis server..."
	                $EXEC $CONF
	        fi
	        ;;
	    stop)
	        if [ ! -f $PIDFILE ]
	        then
	                echo "$PIDFILE does not exist, process is not running"
	        else
	                PID=$(cat $PIDFILE)
	                echo "Stopping ..."
	                $CLIEXEC -p $REDISPORT shutdown
	                while [ -x /proc/${PID} ]
	                do
	                    echo "Waiting for Redis to shutdown ..."
	                    sleep 1
	                done
	                echo "Redis stopped"
	        fi
	        ;;
	    *)
	        echo "Please use start or stop as first argument"
	        ;;
	esac

查看以上 redis 服务脚本,关注标为橙色的几个属性,做如下几个修改的准备
在脚本的第一行后面添加一行内容如下

	#chkconfig: 2345 80 90 

(如果不添加上面的内容,在注册服务时会提示:

	service redis does not support chkconfig)

REDISPORT 端口修改各节点对应的端口;(注意,端口名将与下面的配置文件名有关)

 EXEC=/usr/local/bin/redis-server 改为 EXEC=/usr/local/redis3/bin/redis-server

 CLIEXEC=/usr/local/bin/redis-cli 改为 CLIEXEC=/usr/local/redis3/bin/redis-cli

配置文件设置,对 CONF 属性作如下调整

	CONF="/etc/redis/${REDISPORT}.conf"  改为
	CONF="/usr/local/redis3/cluster/${REDISPORT}/redis-${REDISPORT}.conf" 

更改 redis 开启的命令,以后台运行的方式执行

	$EXEC $CONF &    #“&”作用是将服务转到后面运行 

修改后的/etc/rc.d/init.d/redis 服务脚本内容为(注意各节点的端口不同)

	#!/bin/sh 
	#chkconfig: 2345 80 90 
	# 
	# Simple Redis init.d script conceived to work on Linux systems 
	# as it does use of the /proc filesystem. 
	 
	REDISPORT=8001
	EXEC=/usr/local/redis3/bin/redis-server 
	CLIEXEC=/usr/local/redis3/bin/redis-cli
	
	PIDFILE=/var/run/redis-${REDISPORT}.pid 
	CONF="/usr/local/redis3/cluster/${REDISPORT}/redis-${REDISPORT}.conf " 
	
	case "$1" in 
	    start) 
	        if [ -f $PIDFILE ] 
	        then 
	                echo "$PIDFILE exists, process is already running or crashed" 
	        else 
	                echo "Starting Redis server..." 
	                $EXEC $CONF & 
	        fi 
	        ;; 
	    stop) 
	        if [ ! -f $PIDFILE ] 
	        then 
	                echo "$PIDFILE does not exist, process is not running" 
	        else 
	                PID=$(cat $PIDFILE) 
	                echo "Stopping ..." 
	                $CLIEXEC -p $REDISPORT shutdown 
	                while [ -x /proc/${PID} ] 
	                do 
	                    echo "Waiting for Redis to shutdown ..." 
	                    sleep 1 
	                done 
	                echo "Redis stopped" 
	        fi 
	        ;; 
	    *) 
	        echo "Please use start or stop as first argument" 
	        ;; 
	esac 

以上配置操作完成后,便可将 Redis 注册成为服务

	chkconfig --add redis

防火墙中打开对应的端口,各节点的端口不同(前面已操作则可跳过此步)

	# vi /etc/sysconfig/iptables 
	添加: 
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 7111 -j ACCEPT 
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 17111 -j ACCEPT 

重启防火墙

	service iptables restart

启动 Redis 服务

	service redis start

将 Redis 添加到环境变量中:

	# vi /etc/profile

在最后添加以下内容:

	## Redis env 
	export PATH=$PATH:/usr/local/redis3/bin

使配置生效

source /etc/profile

关闭 Redis 服务

	service redis stop

默认情况下,Redis 未开启安全认证,可以通过

/usr/local/redis3/cluster/8001/redis-8001.conf 

的 requirepass 指定一个验证密码

其它供参考资料
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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值