Redis cluster deployment

Keywords: Redis network Ruby firewall

Experimental environment
Simulate 6 servers with 2 servers (add network card)

Primary server Redis1:
ens33: 192.168.52.150
ens36: 192.168.52.153
ens37: 192.168.52.154
From server Redis2:
ens33: 192.168.52.148
ens36: 192.168.52.155
ens37: 192.168.52.156

Install Redis on both servers

[root@localhost ~]# yum install gcc gcc-c++ make -y ##Install environment components
[root@localhost ~]# mkdir /mnt/tools
[root@localhost ~]# mount.cifs //192.168.100.100/tools /mnt/tools / ා񖓿mount
Password for root@//192.168.100.100/tools:
[root@localhost ~]# cd /mnt/tools/redis/
[root@localhost redis]# ls
redis-5.0.7.tar.gz
[root@localhost redis]# tar xf redis-5.0.7.tar.gz -C /opt/ ##decompression
[root@localhost redis]# cd /opt/
[root@localhost opt]# ls
redis-5.0.7 rh
[root@localhost opt]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make ##Compile
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install ##install
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh ##Execute script to configure
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] ##Default port
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] ##configuration file
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] ##log file
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] ##data file
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
##Executable path
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost utils]# ln -s /usr/local/redis/bin/ /usr/local/bin/ ##Easy system identification
[root@localhost utils]# netstat -ntap | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0: LISTEN 44510/redis-server

Modifying a profile on two servers

[root@localhost utils]# vim /etc/redis/6379.conf
#bind 127.0.0.1 - listen to 127 address on line 70 of the comment. All addresses have been listened to
Protected mode No: turn off security without comment on line 89
Port 6379 - open port 6379 without comment on line 93
daemonize yes remove the comment on line 137 to start a stand-alone process
Cluster enabled yes? Remove the comment on line 833 and enable the cluster function
cluster-config-file nodes-6379.conf remove the comment on line 841 and set the cluster name file
Cluster node timeout 15000. Remove the comment on line 847 and set the cluster timeout
appendonly yes - remove the comment on line 700 to enable aof persistence
[root @ localhost utils] × / etc / init.d/redis ×
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost utils]# cd /var/lib/redis/6379/
[root@localhost 6379]# ls
Appendonly.aof dump.rdb nodes-6379.conf generate aof,rdb and node files

Install rvm and Ruby control cluster software on the main server

[root@localhost utils]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
##Import key file
gpg: Directory created'/root/.gnupg'
gpg: New profile'/root/.gnupg/gpg.conf'Already established
gpg: Warning: in'/root/.gnupg/gpg.conf'The options in are not used during this run
gpg: Key ring'/root/.gnupg/secring.gpg'Already established
gpg: Key ring'/root/.gnupg/pubring.gpg'Already established
gpg: Download key'D39DC0E3',from hkp The server keys.gnupg.net
gpg: /root/.gnupg/trustdb.gpg: Established the trust database
gpg: secret key D39DC0E3: Public key " Michal Papis (RVM signing) <mpapis@gmail.com>"Imported
gpg: No absolute trust key found
gpg: Total processed quantity: 1
gpg: Imported: 1 (RSA: 1)
[root@localhost utils]# curl -sSL https://get.rvm.io | bash -s stable ##install rvm
........................//Ellipsis process
[root@localhost utils]# source /etc/profile.d/rvm.sh ##Execute environment variable
[root@localhost utils]# rvm list known ##list ruby Installable versions
[root@localhost utils]# rvm install 2.4.1 ##Install 2.4.1 Edition
[root@localhost utils]# rvm use 2.4.1 ##Use rubyruby2.4.1 Edition
Using /usr/local/rvm/gems/ruby-2.4.1
[root@localhost utils]# ruby -v ##View current ruby2.4.1 Edition
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
[root@localhost utils]# gem install redis #Re install Redis
Fetching redis-4.1.3.gem
Successfully installed redis-4.1.3
Parsing documentation for redis-4.1.3
Installing ri documentation for redis-4.1.3
Done installing documentation for redis after 1 seconds
1 gem installed
[root@localhost utils]#

Add two network cards to the primary server

[root@localhost utils]# service network restart ##Restart NIC
[root@localhost utils]# systemctl stop firewalld.service ##Turn off firewall
[root@localhost utils]# setenforce 0
[root@localhost utils]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.52.150 netmask 255.255.255.0 broadcast 192.168.52.255
inet6 fe80::5134:22f5:842b:5201 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:0d:f1:75 txqueuelen 1000 (Ethernet)
RX packets 91575 bytes 119014065 (113.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 28442 bytes 2443621 (2.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.52.153 netmask 255.255.255.0 broadcast 192.168.52.255
inet6 fe80::84f1:53d8:a97a:d450 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:0d:f1:89 txqueuelen 1000 (Ethernet)
RX packets 128 bytes 18873 (18.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 42 bytes 6253 (6.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.52.154 netmask 255.255.255.0 broadcast 192.168.52.255
inet6 fe80::74f5:2344:c59b:4fdb prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:0d:f1:7f txqueuelen 1000 (Ethernet)
RX packets 107 bytes 16849 (16.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29 bytes 4601 (4.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Add two network cards to the slave server

[root@slave utils]# service network restart ##Restart NIC
[root@slave utils]# systemctl stop firewalld.service ##Turn off firewall
[root@slave utils]# setenforce 0
[root@localhost utils]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.52.148 netmask 255.255.255.0 broadcast 192.168.52.255
inet6 fe80::c776:9d00:618:88f2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:37:e9:25 txqueuelen 1000 (Ethernet)
RX packets 65481 bytes 86357533 (82.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21069 bytes 1892475 (1.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.52.155 netmask 255.255.255.0 broadcast 192.168.52.255
inet6 fe80::d3e5:cd6b:26f8:fd1f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:37:e9:39 txqueuelen 1000 (Ethernet)
RX packets 143 bytes 17342 (16.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 38 bytes 5940 (5.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.52.156 netmask 255.255.255.0 broadcast 192.168.52.255
inet6 fe80::222b:77ad:8da2:4ea6 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:37:e9:2f txqueuelen 1000 (Ethernet)
RX packets 114 bytes 14481 (14.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 30 bytes 4661 (4.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Create a cluster on the master server

##6 Instances are divided into three groups, each group has one master and one slave
[root@localhost utils]# redis-cli --cluster create 192.168.52.150:6379 192.168.52.153:6379 192.168.52.154:6379 192.168.52.148:6379 192.168.52.155:6379 192.168.52.156:6379 --cluster-replicas 1
##Create a cluster with one master and one slave in each group

Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.52.155:6379 to 192.168.52.150:6379
Adding replica 192.168.52.156:6379 to 192.168.52.153:6379
Adding replica 192.168.52.148:6379 to 192.168.52.154:6379
M: b9dfae79d92141a7bad172a344e0696f356a875f 192.168.52.150:6379
slots:[0-16383] (5461 slots) master ##128,129,135 Mainly
M: b9dfae79d92141a7bad172a344e0696f356a875f 192.168.52.153:6379
slots:[0-16383] (5462 slots) master
M: b9dfae79d92141a7bad172a344e0696f356a875f 192.168.52.154:6379
slots:[0-16383] (5461 slots) master
S: ebc69ee01cf293b3af9930cac2dba03b4475336b 192.168.52.148:6379
replicates b9dfae79d92141a7bad172a344e0696f356a875f ##136,137,138 Copy for
S: ebc69ee01cf293b3af9930cac2dba03b4475336b 192.168.52.155:6379
replicates b9dfae79d92141a7bad172a344e0696f356a875f
S: ebc69ee01cf293b3af9930cac2dba03b4475336b 192.168.52.156:6379
replicates b9dfae79d92141a7bad172a344e0696f356a875f
...
Can I set the above configuration? (type 'yes' to accept): yes ##Select 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.52.150:6379)
M: b9dfae79d92141a7bad172a344e0696f356a875f 192.168.52.150:6379
slots:[0-16383] (16384 slots) master
1 additional replica(s)
S: ebc69ee01cf293b3af9930cac2dba03b4475336b 192.168.52.155:6379
slots: (0 slots) slave
replicates b9dfae79d92141a7bad172a344e0696f356a875f
[OK] All nodes agree about slots configuration.
Check for open slots...
Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost utils]#

Verify cluster read-write principle

[root@localhost utils]# redis-cli -h 192.168.52.150 -p 6379 ##master server
192.168.52.150:6379> set name zhangsan ##Create key value pair
OK
192.168.52.150:6379> keys
1) "name"
192.168.52.150:6379> get name
"zhangsan"
192.168.52.150:6379> exit
[root@localhost utils]# redis-cli -h 192.168.52.148 -p 6379 ##from server
192.168.52.148:6379> keys ##View from above
1) "name"
192.168.52.148:6379> get name
"zhangsan"
192.168.52.148:6379> exit
[root@localhost utils]#

Posted by nostradamus on Mon, 30 Dec 2019 06:33:27 -0800