Redis集群模式部署(包含联网和离线安装)
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,系统环境系统版本:CentOS 6.8 x86_64(适用于CentOS 7.*)gcc 版本 4.4.7 redis版本:4.0.8安装方式:源码安装redis软件包路径:/opt/tools/安装
千家信息网最后更新 2024年11月11日Redis集群模式部署(包含联网和离线安装)
系统环境
系统版本:CentOS 6.8 x86_64(适用于CentOS 7.*)gcc 版本 4.4.7 redis版本:4.0.8安装方式:源码安装redis软件包路径:/opt/tools/安装路径:/usr/local/
依赖环境:
Ruby环境(集群搭建需要用ruby创建, ruby环境在2.2以上。)rubygems:ruby的一个包管理工具redis.gem :redis集群需要的ruby插件,通过rubygems安装redis-4.0.1.gem。
1 Redis单节点部署
1.1 下载和编译
[root@redis_1 ~]# cd /opt/tools/[root@redis_1 tools ]# wget http://download.redis.io/releases/redis-4.0.8.tar.gz[root@redis_1 tools ]# tar xf redis-4.0.8.tar.gz -C /usr/local/[root@redis_1 tools ]# cd /usr/local/redis-4.0.8/[root@redis_1 redis-4.0.8 ]# make[root@redis_1 redis-4.0.8 ]# make install
编译完成后会在src目录下生成Redis服务端程序redis-server和客户端程序redis-cli。
1.2 前台启动服务
[root@redis_1 redis-4.0.8 ]# redis-server
该方式启动默认为前台方式运行,使用默认配置。
1.3 后台启动服务
可以修改redis.conf文件的daemonize参数为yes,指定配置文件启动,例如:
[root@redis_1 redis-4.0.8 ]# cp -a redis.conf{,_$(date +%F)}[root@redis_1 redis-4.0.8 ]# vim redis.conf# By default Redis does not run as a daemon. Use 'yes' if you need it.# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.daemonize yes或者执行sed替换命令:[root@redis_1 redis-4.0.8 ]# sed -i 's#daemonize no#daemonize yes#g' redis.conf[root@redis_1 redis-4.0.8 ]# grep 'daemonize yes' redis.confdaemonize yes
指定配置文件启动。
[root@redis_1 redis-4.0.8 ]# redis-server redis.conf
停止后台启动的redis-server进程:
[root@redis_1 redis-4.0.8 ]# redis-cli -h $(hostname -i) -c -p ${端口}192.168.1.101:7000> SHUTDOWNnot connected> exit
例如:
# 指定配置文件后台启动
[root@redis_1 redis-4.0.8]# src/redis-server redis.conf95778:C 30 Jan 00:44:37.633 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo95778:C 30 Jan 00:44:37.634 # Redis version=4.0.7, bits=64, commit=00000000, modified=0, pid=95778, just started95778:C 30 Jan 00:44:37.634 # Configuration loaded
# 查看Redis进程
[root@redis_1 redis-4.0.8]# ps aux|grep redisroot 95779 0.0 0.0 145268 468 ? Ssl 00:44 0:00 src/redis-server 127.0.0.1:6379
更多启动参数如下:
[root@redis_1 src]# ./redis-server --helpUsage: ./redis-server [/path/to/redis.conf] [options] ./redis-server - (read config from stdin) ./redis-server -v or --version ./redis-server -h or --help ./redis-server --test-memoryExamples: ./redis-server (run the server with default conf) ./redis-server /etc/redis/6379.conf ./redis-server --port 7777 ./redis-server --port 7777 --slaveof 127.0.0.1 8888 ./redis-server /etc/myredis.conf --loglevel verboseSentinel mode: ./redis-server /etc/sentinel.conf --sentinel
1.4 客户端测试
[root@redis_1 redis-4.0.8]# src/redis-cli redis> set foo bar OK redis> get foo "bar"
2. Redis集群配置文件设置及启动实例
2.1 设置配置文件
Redis的集群部署需要在每台集群部署的机器上安装Redis;可参考上述的Redis部署,然后修改配置以集群的方式启动。我们要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群。需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。最小集群模式需要三个master实例,一般建议起六个实例,即三主三从。因此我们创建6个以端口号命名的目录存放实例的配置文件和其他信息。
[root@redis_1 redis-4.0.8]# mkdir -pv redis-cluster/{7000,7001,7002,7003,7004,7005}[root@redis_1 redis-4.0.8]# cd redis-cluster/7000
在对应端口号的目录中创建redis.conf的文件,配置文件的内容可参考如下的集群模式配置。每个配置文件中的端口号port参数改为对应目录的端口号。修改配置文件redis.conf,集群模式的配置文件如下:
[root@redis_1 7000]# vim redis.confdaemonize yes //redis后台运行;port 7000 //端口7000,7001,7002,7003,7004,7005;timeout 600 // 客户端无响应连接超时时间;默认关闭bind 192.168.1.91 //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群;pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002,7003,7004,7005;cluster-enabled yes //开启集群 把注释#去掉;cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002,7003,7004,7005 ;cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置;appendonly yes //aof日志开启 有需要就开启,每次写操作都记录一条日志;# 查看[root@redis_1 7000]# egrep "^daemonize|^port|^timeout|^bind|^pidfile|^cluster-|^appendonly" redis.conf
更多集群配置参数可参考默认配置文件redis.conf中Cluster模块的说明。
2.2 启动实例
复制redis-server的二进制文件到redis-cluster目录中,通过指定配置文件的方式启动redis服务,例如:
[root@redis_1 7000]# pwd/usr/local/redis-4.0.8/redis-cluster/7000[root@redis_1 7000]# redis-server ./redis.conf # 需在指定实例目录中执行文件,会在命令当前目录生成文件。2497:C 18 May 13:42:24.279 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo2497:C 18 May 13:42:24.279 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=2497, just started2497:C 18 May 13:42:24.279 # Configuration loaded
如果是以前台方式运行,则会在控制台输出以下信息:
[82462] 26 Nov 11:56:55.329 * No cluster configuration found, I'm 97a3a64667477371c4479320d683e4c8db5858b1
每个实例都会生成一个Node ID,类似97a3a64667477371c4479320d683e4c8db5858b1,用来作为Redis实例在集群中的唯一标识,而不是通过IP和Port,IP和Port可能会改变,该Node ID不会改变。目录结构可参考:
redis-cluster/ ├── 7000 │ ├── appendonly.aof │ ├── dump.rdb │ ├── nodes.conf │ └── redis.conf ├── 7001 │ ├── appendonly.aof │ ├── dump.rdb │ ├── nodes.conf │ └── redis.conf ├── 7002 │ ├── appendonly.aof │ ├── dump.rdb │ ├── nodes.conf │ └── redis.conf ├── 7003 │ ├── appendonly.aof │ ├── dump.rdb │ ├── nodes.conf │ └── redis.conf ├── 7004 │ ├── appendonly.aof │ ├── dump.rdb │ ├── nodes.conf │ └── redis.conf ├── 7005 │ ├── appendonly.aof │ ├── dump.rdb │ ├── nodes.conf │ └── redis.conf ├── redis-cli └── redis-server
注:其中dump.rdb为数据存放文件,第一次启动集群时没有。Redis的实例全部运行之后,还需要redis-trib.rb工具来完成集群的创建,redis-trib.rb二进制文件在Redis包主目录下的src目录中,运行该工具依赖Ruby环境和gem。
说明:下面步骤3和步骤4针对不同环境,服务器可以连外网推荐步骤3,无法连外网推荐步骤4源码安装依赖包,安装一个即可。
3 在线安装Redis集群依赖(Ruby和RubyGems和rvm和gem)
3.1 安装Ruby
[root@redis_1 src]# yum install ruby rubygems -y
查看Ruby版本信息。
[root@redis_1 src]# ruby --versionruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
由于centos6系统默认支持Ruby版本为1.8.7(centos7系统默认支持Ruby版本为2.0.0),因此执行gem install redis命令时会报以下错误。
[root@redis_1 src]# gem install redisFetching: redis-4.0.1.gem (100%)ERROR: Error installing redis: redis requires Ruby version >= 2.2.2.
解决方法是先安装rvm,再升级ruby版本。
3.2 安装rvm
curl -L get.rvm.io | bash -s stable如果遇到以下报错,则执行报错中的gpg2 --recv-keys的命令。
[root@redis_1 ~]# curl -L get.rvm.io | bash -s stable % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 194 100 194 0 0 335 0 --:--:-- --:--:-- --:--:-- 335100 24090 100 24090 0 0 17421 0 0:00:01 0:00:01 --:--:-- 44446Downloading https://github.com/rvm/rvm/archive/1.29.3.tar.gzDownloading https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.ascgpg: 于 2017年09月11日 星期一 04时59分21秒 CST 创建的签名,使用 RSA,钥匙号 BF04FF17gpg: 无法检查签名:没有公钥Warning, RVM 1.26.0 introduces signed releases and automated check of signatures when GPG software found. Assuming you trust Michal Papis import the mpapis public key (downloading the signatures).GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.29.3.tgz' - 'https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc'! Try to install GPG v2 and then fetch the public key: gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 or if it fails: command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -the key can be compared with: https://rvm.io/mpapis.asc https://keybase.io/mpapisNOTE: GPG version 2.1.17 have a bug which cause failures during fetching keys from remote server. Please downgrade or upgrade to newer version (if available) or use the second method described above.
执行报错中的gpg2 --recv-keys的命令。例如:
[root@redis_1 ~]# gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3gpg: 钥匙环'/root/.gnupg/secring.gpg'已建立gpg: 下载密钥'D39DC0E3',从 hkp 服务器 keys.gnupg.netgpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库gpg: 密钥 D39DC0E3:公钥"Michal Papis (RVM signing)"已导入gpg: 没有找到任何绝对信任的密钥gpg: 合计被处理的数量:1gpg: 已导入:1 (RSA: 1)
再次执行命令curl -L get.rvm.io | bash -s stable。
[root@redis_1 ~]# curl -L get.rvm.io | bash -s stable % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 194 100 194 0 0 310 0 --:--:-- --:--:-- --:--:-- 309100 24090 100 24090 0 0 18230 0 0:00:01 0:00:01 --:--:-- 103kDownloading https://github.com/rvm/rvm/archive/1.29.3.tar.gzDownloading https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.ascgpg: 于 2017年09月11日 星期一 04时59分21秒 CST 创建的签名,使用 RSA,钥匙号 BF04FF17gpg: 完好的签名,来自于"Michal Papis (RVM signing)"gpg: 亦即"Michal Papis "gpg: 亦即"[jpeg image of size 5015]"gpg: 警告:这把密钥未经受信任的签名认证!gpg: 没有证据表明这个签名属于它所声称的持有者。主钥指纹: 409B 6B17 96C2 7546 2A17 0311 3804 BB82 D39D C0E3子钥指纹: 62C9 E5F4 DA30 0D94 AC36 166B E206 C29F BF04 FF17GPG verified '/usr/local/rvm/archives/rvm-1.29.3.tgz'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.
以上表示执行成功,然后执行以下命令。
[root@redis_1 ~]# source /usr/local/rvm/scripts/rvm
查看rvm库中已知的ruby版本rvm list known例如:
[root@redis_1 ~]# rvm list known # MRI Rubies [ruby-]1.8.6[-p420] [ruby-]1.8.7[-head] # security released on head [ruby-]1.9.1[-p431] [ruby-]1.9.2[-p330] [ruby-]1.9.3[-p551] [ruby-]2.0.0[-p648] [ruby-]2.1[.10] [ruby-]2.2[.7] [ruby-]2.3[.4] [ruby-]2.4[.1] ruby-head ...
3.3 升级Ruby
#安装ruby
rvm install 2.4.0
#使用新版本
rvm use 2.4.0
#移除旧版本
rvm remove 1.8.7
#查看当前版本
ruby --version
例如:
[root@redis_1 ~]# rvm install 2.4.0 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.4.0.tar.bz2 Checking requirements for centos. Installing requirements for centos. Installing required packages: autoconf, automake, bison, bzip2, gcc-c++, libffi-devel, libtool, readline-devel, sqlite-devel, zlib-devel, libyaml-devel, openssl-devel................................ Requirements installation successful. ruby-2.4.0 - #configure ruby-2.4.0 - #download % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 14.0M 100 14.0M 0 0 852k 0 0:00:16 0:00:16 --:--:-- 980kNo checksum for downloaded archive, recording checksum in user configuration.ruby-2.4.0 - #validate archiveruby-2.4.0 - #extractruby-2.4.0 - #validate binaryruby-2.4.0 - #setupruby-2.4.0 - #gemset created /usr/local/rvm/gems/ruby-2.4.0@globalruby-2.4.0 - #importing gemset /usr/local/rvm/gemsets/global.gems..............................ruby-2.4.0 - #generating global wrappers........ruby-2.4.0 - #gemset created /usr/local/rvm/gems/ruby-2.4.0ruby-2.4.0 - #importing gemsetfile /usr/local/rvm/gemsets/default.gems evaluated to empty gem listruby-2.4.0 - #generating default wrappers........[root@redis_1 ~]# rvm use 2.4.0Using /usr/local/rvm/gems/ruby-2.4.0[root@redis_1 ~]# rvm remove 1.8.7ruby-1.8.7-p648 - #already goneUsing /usr/local/rvm/gems/ruby-2.4.0[root@redis_1 ~]# ruby --versionruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
3.4 安装gem
[root@redis_1 ~]# gem install redisFetching: redis-4.0.1.gem (100%)Successfully installed redis-4.0.1Parsing documentation for redis-4.0.1Installing ri documentation for redis-4.0.1Done installing documentation for redis after 2 seconds1 gem installed
4 源码安装Redis集群依赖(Ruby和RubyGems和OpenSSL和Zlib-devel和gem)
4.1 安装Zlib-devel
官网:https://pkgs.org/download/zlibhttps://pkgs.org/download/zlib-devel选择对应系统版本的zlib和zlib-devel包;本实验为CentOS 6 64位,选择el6的zlib-1.2.3-29.el6.x86_64.rpm和zlib-devel-1.2.3-29.el6.x86_64.rpm包
有yum源:[root@redis_1 tools]# yum install zlib zlib-devel -y没有yum源:[root@redis_1 tools]# wget http://mirror.centos.org/centos/6/os/x86_64/Packages/zlib-1.2.3-29.el6.x86_64.rpm[root@redis_1 tools]# wget http://mirror.centos.org/centos/6/os/x86_64/Packages/zlib-devel-1.2.3-29.el6.x86_64.rpm [root@redis_1 tools]# rpm -ivh zlib-1.2.3-29.el6.x86_64.rpm zlib-devel-1.2.3-29.el6.x86_64.rpm
4.2 安装Ruby:
到Ruby官网:https://www.ruby-lang.org/en/downloads/找到2.2版本以上Ruby的稳定版,本实验用ruby-2.3.6注意:ruby-2.5.0版本在CentOS6.*上安装需升级GCC(4.8)进入linux,选择一个位置存放安装包,我的位置是/opt/tools输入命令wget + 刚刚复制的安装包URL
[root@redis_1 tools]# pwd/opt/tools[root@redis_1 tools]# wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.6.tar.gz[root@redis_1 tools]# tar zxf ruby-2.3.6.tar.gz -C /usr/local/[root@redis_1 tools]# cd /usr/local/ruby-2.3.6[root@redis_1 ruby-2.3.6]# ./configure # 可以指定安装路径./configure --prefix=/usr/local/ruby[root@redis_1 ruby-2.3.6]# make[root@redis_1 ruby-2.3.6]# make install
验证:
[root@redis_1 ruby-2.3.6]# source /etc/profile[root@redis_1 ruby-2.3.6]# ruby -vruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-linux][root@redis_1 ruby-2.3.6]# cd ext/zlib/[root@redis_1 zlib]# pwd/usr/local/ruby-2.3.6/ext/zli[root@redis_1 zlib]# ruby ./extconf.rbchecking for deflateReset() in -lz... yeschecking for zlib.h... yeschecking for crc32_combine() in zlib.h... yeschecking for adler32_combine() in zlib.h... yeschecking for z_crc_t in zlib.h... nocreating Makefile[root@redis_1 zlib]# makecompiling zlib.clinking shared-object zlib.so[root@redis_1 zlib]# make install/usr/bin/install -c -m 0755 zlib.so /usr/local/lib/ruby/site_ruby/2.3.0/x86_64-linux[root@redis_1 zlib]#
4.3 安装RubyGems:
官网 https://rubygems.org/pages/downloadwget + URL,在线下载安装包:
[root@redis_1 tools]# wget https://rubygems.org/rubygems/rubygems-2.7.6.tgz[root@redis_1 tools]# tar xf rubygems-2.7.6.tgz -C /usr/local/[root@redis_1 tools]# cd /usr/local/rubygems-2.7.6/[root@redis_1 rubygems-2.7.6]# ruby setup.rbBundler 1.16.1 installedRubyGems 2.7.6 installed... ...RubyGems installed the following executables: /usr/local/bin/gem /usr/local/bin/bundleRuby Interactive (ri) documentation was installed. ri is kind of like manpages for Ruby libraries. You may access it like this: ri Classname ri Classname.class_method ri Classname#instance_methodIf you do not wish to install this documentation in the future, use the--no-document flag, or set it as the default in your ~/.gemrc file. See'gem help env' for details.
验证:
[root@redis_1 rubygems-2.7.6]# gem -v2.7.6
4.4 安装OpenSSL:
官网: https://www.openssl.org/source/wget 下载安装包:
[root@redis_1 tools]# wget https://www.openssl.org/source/openssl-1.1.1-pre6.tar.gz[root@redis_1 tools]# tar xf openssl-1.1.1-pre6.tar.gz -C /usr/local/[root@redis_1 tools]# cd /usr/local/openssl-1.1.1-pre6/[root@redis_1 openssl-1.1.1-pre6]# mkdir -v /usr/local/opensslmkdir: 已创建目录 "/usr/local/openssl"[root@redis_1 openssl-1.1.1-pre6]# ./config --prefix=/usr/local/openssl --shared[root@redis_1 openssl-1.1.1-pre6]# make[root@redis_1 openssl-1.1.1-pre6]# make install添加"/usr/local/openssl/lib"到系统类包:[root@redis_1 openssl-1.1.1-pre6]# echo -e "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl.conf[root@redis_1 openssl-1.1.1-pre6]# cat /etc/ld.so.conf.d/openssl.conf/usr/local/openssl/lib [root@redis_1 openssl-1.1.1-pre6]# ldconfig # 重新加载类添加到环境变量:[root@redis_1 openssl-1.1.1-pre6]# echo -e "# openssl\nexport OPENSSL=/usr/local/openssl/bin\nexport PATH=\$OPENSSL:\$PATH:\$HOME/bin" > /etc/profile.d/openssl.sh[root@redis_1 openssl-1.1.1-pre6]# cat /etc/profile.d/openssl.sh # openssl export OPENSSL=/usr/local/openssl/bin export PATH=$OPENSSL:$PATH:$HOME/bin[root@redis_1 openssl-1.1.1-pre6]# source /etc/profile # 重新加载环境变量
# 验证:
[root@redis_1 openssl-1.1.1-pre6]# echo $OPENSSL/usr/local/openssl/bin[root@redis_1 openssl-1.1.1-pre6]#
4.5 安装redis.gem
官网:https://rubygems.org/gems/redis
[root@redis_1 redis-4.0.8]# cd /usr/local/redis-4.0.8/[root@redis_1 redis-4.0.8]# pwd/usr/local/redis-4.0.8[root@redis_1 redis-4.0.8]# wget https://rubygems.org/downloads/redis-4.0.1.gem[root@redis_1 redis-4.0.8]# gem install -l ./redis-4.0.1.gemSuccessfully installed redis-4.0.1Parsing documentation for redis-4.0.1Done installing documentation for redis after 3 seconds1 gem installed
5 redis-trib创建集群
#执行redis-trib.rb命令
[root@redis_1 redis-4.0.8]# cd /usr/local/redis-4.0.8/src/[root@redis_1 src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \> 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
参数create表示创建一个新的集群,--replicas 1表示为每个master创建一个slave。如果创建成功会显示以下信息
[OK] All 16384 slots covered
例如:
[root@redis_1 src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \ > 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 Adding replica 127.0.0.1:7004 to 127.0.0.1:7000 Adding replica 127.0.0.1:7005 to 127.0.0.1:7001 Adding replica 127.0.0.1:7003 to 127.0.0.1:7002 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: d5a834d075fd93eefab877c6ebb86efff680650f 127.0.0.1:7000 slots:0-5460 (5461 slots) master M: 13d0c397604a0b2644244c37b666fce83f29faa8 127.0.0.1:7001 slots:5461-10922 (5462 slots) master M: be2718476eba4e56f696e56b75e67df720b7fc24 127.0.0.1:7002 slots:10923-16383 (5461 slots) master S: 3d02f59b34047486faecc023685379de7b38076c 127.0.0.1:7003 replicates 13d0c397604a0b2644244c37b666fce83f29faa8 S: dedf672f0a75faf37407ac4edd5da23bc4651e25 127.0.0.1:7004 replicates be2718476eba4e56f696e56b75e67df720b7fc24 S: 99c07119a449a703583019f7699e15afa0e41952 127.0.0.1:7005 replicates d5a834d075fd93eefab877c6ebb86efff680650f Can I set the above configuration? (type 'yes' to accept): yes # 同意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 127.0.0.1:7000) M: d5a834d075fd93eefab877c6ebb86efff680650f 127.0.0.1:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: be2718476eba4e56f696e56b75e67df720b7fc24 127.0.0.1:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: 13d0c397604a0b2644244c37b666fce83f29faa8 127.0.0.1:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 3d02f59b34047486faecc023685379de7b38076c 127.0.0.1:7003 slots: (0 slots) slave replicates 13d0c397604a0b2644244c37b666fce83f29faa8 S: 99c07119a449a703583019f7699e15afa0e41952 127.0.0.1:7005 slots: (0 slots) slave replicates d5a834d075fd93eefab877c6ebb86efff680650f S: dedf672f0a75faf37407ac4edd5da23bc4651e25 127.0.0.1:7004 slots: (0 slots) slave replicates be2718476eba4e56f696e56b75e67df720b7fc24 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
6 集群部署结果验证
6.1 客户端验证
使用客户端redis-cli二进制访问某个实例,执行set和get的测试。语法:redis-cli -h $IP -c -p $PORT -a $PASSWORD
[root@redis_1 src]# redis-cli -c -p 7000redis 127.0.0.1:7000> set foo bar-> Redirected to slot [12182] located at 127.0.0.1:7002OKredis 127.0.0.1:7002> set hello world-> Redirected to slot [866] located at 127.0.0.1:7000OKredis 127.0.0.1:7000> get foo-> Redirected to slot [12182] located at 127.0.0.1:7002"bar"redis 127.0.0.1:7000> get hello-> Redirected to slot [866] located at 127.0.0.1:7000"world"
6.2 集群状态
使用cluster info命令查看集群状态。
127.0.0.1:7000> cluster infocluster_state:ok #集群状态cluster_slots_assigned:16384 #被分配的槽位数cluster_slots_ok:16384 #正确分配的槽位cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6 #当前节点cluster_size:3cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_ping_sent:48273cluster_stats_messages_pong_sent:49884cluster_stats_messages_sent:98157cluster_stats_messages_ping_received:49879cluster_stats_messages_pong_received:48273cluster_stats_messages_meet_received:5cluster_stats_messages_received:98157
6.3 节点状态
使用cluster nodes命令查看节点状态。
127.0.0.1:7000> cluster nodesbe2718476eba4e56f696e56b75e67df720b7fc24 127.0.0.1:7002@17002 master - 0 1517303607000 3 connected 10923-1638313d0c397604a0b2644244c37b666fce83f29faa8 127.0.0.1:7001@17001 master - 0 1517303606000 2 connected 5461-109223d02f59b34047486faecc023685379de7b38076c 127.0.0.1:7003@17003 slave 13d0c397604a0b2644244c37b666fce83f29faa8 0 1517303606030 4 connectedd5a834d075fd93eefab877c6ebb86efff680650f 127.0.0.1:7000@17000 myself,master - 0 1517303604000 1 connected 0-546099c07119a449a703583019f7699e15afa0e41952 127.0.0.1:7005@17005 slave d5a834d075fd93eefab877c6ebb86efff680650f 0 1517303607060 6 connecteddedf672f0a75faf37407ac4edd5da23bc4651e25 127.0.0.1:7004@17004 slave be2718476eba4e56f696e56b75e67df720b7fc24 0 1517303608082 5 connected
7 参考:
https://redis.io/downloadhttps://redis.io/topics/cluster-tutorialhttp://blog.csdn.net/huwh_/article/details/79242625http://blog.csdn.net/michaelehome/article/details/79533496
8 附:redis集群密码设置
8.1 密码设置(推荐)
方式一:修改所有Redis集群中的redis.conf文件加入:
masterauth passwd123 requirepass passwd123
说明:这种方式需要重新启动各节点方式二:进入各个实例进行设置:redis-cli -h $IP -c -p 端口
./redis-cli -c -p 7000 config set masterauth passwd123 config set requirepass passwd123 config rewrite
之后分别使用./redis-cli -c -p 7001,./redis-cli -c -p 7002…..命令给各节点设置上密码。注意:各个节点密码都必须一致,否则Redirected就会失败, 推荐这种方式,这种方式会把密码写入到redis.conf里面去,且不用重启。用方式二修改密码,./redis-trib.rb check 10.104.111.174:6379执行时可能会报[ERR] Sorry, can't connect to node 10.104.111.174:6379,因为6379的redis.conf没找到密码配置。
8.2 设置密码之后如果需要使用redis-trib.rb的各种命令
如:./redis-trib.rb check 127.0.0.1:7000,则会报错ERR] Sorry, can't connect to node 127.0.0.1:7000 解决办法:
vim /usr/local/rvm/gems/ruby-2.3.0/gems/redis-4.0.1/lib/redis/client.rb # 联网安装路径vim /usr/local/lib/ruby/gems/2.3.0/gems/redis-4.0.1/lib/redis/client.rb # 源码安装路径
注意:client.rb路径可以通过find命令查找:find / -name 'client.rb'然后修改passord
class Client DEFAULTS = { :url => lambda { ENV["REDIS_URL"] }, :scheme => "redis", :host => "127.0.0.1", :port => 6379, :path => nil, :timeout => 5.0, :password => "passwd123", :db => 0, :driver => nil, :id => nil, :tcp_keepalive => 0, :reconnect_attempts => 1, :inherit_socket => false }
带密码访问集群
./redis-cli -c -p 7000 -a passwd123
END
集群
文件
配置
命令
方式
版本
实例
目录
密码
节点
环境
服务
系统
路径
参数
客户
客户端
状态
端口
参考
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
诛仙服务端数据库弄不好怎么解决
web服务器常见的安全威胁
sql数据库 无法关闭吗
网络安全工程师这么考
数据库编程面试题
福田新洲软件开发培训学校
smtp服务器安全
蒲城软件开发最新招聘
广西crm软件开发排名
数据库怎么收回的所有权限
hp服务器及存储
香港服务器怎么申请支付宝收款
源码管理云服务器
网络安全模式360重装系统
网络技术计划的特点
国际互联网电脑服务器
nat123搭建服务器
php 命令行 服务器
深圳市精彩时代网络技术
龙岗区网络技术进出口价格走势
深圳市自由码软件开发有限公司
软件开发重要文档
个人网络安全彩页
财汇通福建网络技术有限公司
华为服务器虚拟化建设
欧洲服务器英雄联盟
牡丹江软件开发哪家好
上海erp软件开发哪家好
网络技术数据分析
2018年软件开发类展会