Redis-HA部署

链接:https://pan.baidu.com/s/1cj5H9snQXqWaC0od1mUuig

提取码:jdqf

复制这段内容后打开百度网盘手机App,操作更方便哦

1. 安装环境

1.1 安装环境

主机名 IP 用途
Master-redis 192.168.200.5 主Redis
Slave-redis 192.168.200.6 从Redis
192.168.200.7 Redis-VIP

1.2 准备工作(主备同时进行)

1.2.1 Redis部署环境

[root@Master-redis ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) [root@Master-redis ~]# uname -r
3.10.0-957.12.1.el7.x86_64

1.2.2 确保防火墙关闭

[root@Master-redis ~]# systemctl stop firewalld.service
[root@Master-redis ~]# systemctl disable firewalld.service

1.2.3 确保selinux关闭

[root@Master-redis ~]# grep -Ev "#|^$" /etc/sysconfig/selinux | grep -w SELINUX
SELINUX=disabled #以此为准 [root@Master-redis ~]# setenforce 0 #此命令为临时关闭selinux

1.2.4 确保系统及用户级可用资源

[root@Master-redis ~]# sed -i.ori '$a DefaultLimitNOFILE=65535\nDefaultLimitNOFILE=65535' /etc/systemd/system.conf
[root@Master-redis ~]# tail -2 /etc/systemd/system.conf
DefaultLimitNOFILE=65535
DefaultLimitNOFILE=65535 [root@Master-redis ~]# sed -i.ori '$a DefaultLimitNOFILE=65535\nDefaultLimitNOFILE=65535' /etc/systemd/user.conf
[root@Master-redis ~]# tail -2 /etc/systemd/user.conf
DefaultLimitNOFILE=65535
DefaultLimitNOFILE=65535

1.2.5 确保禁用chronyd

[root@Master-redis ~]# systemctl disable chronyd.service
Removed symlink /etc/systemd/system/multi-user.target.wants/chronyd.service.

1.2.6 确保ntp服务时钟源配置正确,确保ntpd.service开始正常工作,确保系统时间已经正确无疑(已生产为主,本文两台虚机时间以本地cp为主)

[root@Master-redis ~]# date
2019年 06月 05日 星期三 14:41:09 CST [root@Slave-redis ~]# date
2019年 06月 05日 星期三 14:41:09 CST

2. Centos7.6-Upssh-redisHA技术方案-部署开始

两台redis服务器进行openssh升级,以下操作全部使用root,两台同时适配

2.1 上传技术包里的rpm包

[root@Master-redis ~]# mkdir -p /soft

#将技术包中的,gcc-c++,openssl-devel,两个目录传入/soft
#将技术包中的openssh-8.0p1.tar.gz 传入/soft [root@Master-redis ~]# cd /soft/
[root@Master-redis soft]# ll -d gcc-c++ openssl-devel openssh-8.0p1
drwxr-xr-x 2 root root 4096 6月 6 10:23 gcc-c++
drwxr-xr-x 5 1000 1000 16384 6月 6 11:09 openssh-8.0p1
drwxr-xr-x 2 root root 4096 6月 6 10:23 openssl-devel

2.2 进入gcc-c++目录,安装里面的rpm包

[root@Master-redis ~]# cd /soft/gcc-c++/
[root@Master-redis gcc-c++]# yum -y install * #如果系统已安装过或已经是最新的包,会有保错但无需理会

2.3 进入openssl-devel目录,安装里面的rpm包

[root@Master-redis gcc-c++]# cd /soft/openssl-devel/
[root@Master-redis openssl-devel]# yum install * #如果系统已安装过或已经是最新的包,会有保错但无需理会
[root@Master-redis openssl-devel]# rpm -e --nodeps openssh-clients
[root@Master-redis openssl-devel]# rpm -e --nodeps openssh
[root@Master-redis openssl-devel]# rpm -e --nodeps openssh-server
警告:/etc/ssh/sshd_config 已另存为 /etc/ssh/sshd_config.rpmsave

2.4 将openssh-8.0p1.tar.gz包在当前目录解压,并进入解压目录

[root@Master-redis openssl-devel]# cd ..
[root@Master-redis soft]# tar -zxvf openssh-8.0p1.tar.gz
[root@Master-redis soft]# cd openssh-8.0p1/

2.5 执行以下命令,(如报用户或组存在,则无视继续,此步只为确保该有的要有)

[root@Master-redis openssh-8.0p1]# install -v -m700 -d /var/lib/sshd
install: 正在创建目录"/var/lib/sshd" [root@Master-redis openssh-8.0p1]# chown -v root:sys /var/lib/sshd
changed ownership of "/var/lib/sshd" from root:root to root:sys [root@Master-redis openssh-8.0p1]# groupadd -g 50 sshd
groupadd:“sshd”组已存在 [root@Master-redis openssh-8.0p1]# useradd -c 'sshd PrivSep' -d /var/lib/sshd -g sshd -s /bin/false -u 50 sshd
useradd:用户“sshd”已存在

2.6 编译

[root@Master-redis openssh-8.0p1]# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-privsep-path=/var/lib/sshd && make

#以下省略若干。。。

2.7 修改权限

[root@Master-redis openssh-8.0p1]# chmod 600 /etc/ssh/ssh_host_rsa_key
[root@Master-redis openssh-8.0p1]# chmod 600 /etc/ssh/ssh_host_ecdsa_key
[root@Master-redis openssh-8.0p1]# chmod 600 /etc/ssh/ssh_host_ed25519_key

2.8 开始安装

[root@Master-redis openssh-8.0p1]# make install

#以下省略若干。。。

2.9 执行以下操作(如发现第四个install报错,可无视,继续)

[root@Master-redis openssh-8.0p1]# install -v -m755 contrib/ssh-copy-id /usr/bin
"contrib/ssh-copy-id" -> "/usr/bin/ssh-copy-id" [root@Master-redis openssh-8.0p1]# install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1
"contrib/ssh-copy-id.1" -> "/usr/share/man/man1/ssh-copy-id.1" [root@Master-redis openssh-8.0p1]# install -v -m755 -d /usr/share/doc/openssh-8.0p1
install: 正在创建目录"/usr/share/doc/openssh-8.0p1" [root@Master-redis openssh-8.0p1]# install -v -m644 INSTALL LICENCE OVERVIEW README*
install: 目标"README.tun" 不是目录 [root@Master-redis openssh-8.0p1]# install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-8.0p1
"INSTALL" -> "/usr/share/doc/openssh-8.0p1/INSTALL"
"LICENCE" -> "/usr/share/doc/openssh-8.0p1/LICENCE"
"OVERVIEW" -> "/usr/share/doc/openssh-8.0p1/OVERVIEW"
"README" -> "/usr/share/doc/openssh-8.0p1/README"
"README.dns" -> "/usr/share/doc/openssh-8.0p1/README.dns"
"README.md" -> "/usr/share/doc/openssh-8.0p1/README.md"
"README.platform" -> "/usr/share/doc/openssh-8.0p1/README.platform"
"README.privsep" -> "/usr/share/doc/openssh-8.0p1/README.privsep"
"README.tun" -> "/usr/share/doc/openssh-8.0p1/README.tun"

2.10 对/etc/ssh/sshd_config内容进行修改

[root@Master-redis openssh-8.0p1]# echo X11Forwarding yes >> /etc/ssh/sshd_config
[root@Master-redis openssh-8.0p1]# echo PermitRootLogin yes >> /etc/ssh/sshd_config
[root@Master-redis openssh-8.0p1]# echo PasswordAuthentication yes >> /etc/ssh/sshd_config [root@Master-redis openssh-8.0p1]# tail -3 /etc/ssh/sshd_config
X11Forwarding yes
PermitRootLogin yes
PasswordAuthentication yes

2.11 修改端口号 2200(这里端口以生产环境为主)

[root@Master-redis openssh-8.0p1]# vim /etc/ssh/sshd_config
[root@Master-redis openssh-8.0p1]# cat /etc/ssh/sshd_config | grep -w Port
Port 2200

2.12 请确保sshd_config文件中 Subsystem sftp 的路径为/usr/libexec/sftp-server

[root@Master-redis openssh-8.0p1]# cat /etc/ssh/sshd_config | grep -w Subsystem
Subsystem sftp /usr/libexec/sftp-server

2.13 在当前目录下(/soft/openssh-8.0p1/)执行以下操作

[root@Master-redis openssh-8.0p1]# cp -p contrib/redhat/sshd.init /etc/init.d/sshd
[root@Master-redis openssh-8.0p1]# chmod +x /etc/init.d/sshd
[root@Master-redis openssh-8.0p1]# chkconfig --add sshd
[root@Master-redis openssh-8.0p1]# chkconfig sshd on
[root@Master-redis openssh-8.0p1]# chkconfig --list sshd 注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。 sshd 0:关 1:关 2:开 3:开 4:开 5:开 6:关
[root@Master-redis openssh-8.0p1]# systemctl restart sshd

2.14 验证openssh版本号是否为OpenSSH_8.0p1,升级完毕

[root@Master-redis openssh-8.0p1]# ssh -V
OpenSSH_8.0p1, OpenSSL 1.0.2k-fips 26 Jan 2017

3. 主redis节点,redis部署(注意,此章节只为主redis节点部署动作)

3.1 将技术包中的redis-4.0.10.tar.gz包传入/soft

[root@Master-redis openssh-8.0p1]# cd /soft
[root@Master-redis soft]# ll -d redis-4.0.10.tar.gz
-rw-r--r-- 1 root root 1738465 6月 6 11:48 redis-4.0.10.tar.gz

3.2 解压redis-4.0.10.tar.gz,进入redis-4.0.10目录 编译,安装,无需做多余选项配置

[root@Master-redis soft]# tar -zxvf redis-4.0.10.tar.gz
[root@Master-redis soft]# cd redis-4.0.10
[root@Master-redis redis-4.0.10]# make && make install #以下省略若干。。。

3.3 进入/soft/redis-4.0.10/utils 目录,执行install_server.sh脚本,进行守护进程部署(参考图示有样例参考)

[root@Master-redis redis-4.0.10]# cd utils/
[root@Master-redis utils]# ll -d install_server.sh
-rwxrwxr-x 1 root root 9567 6月 13 2018 install_server.sh #执行该脚本后会触发instd-input,请依次键入以下配置:
[root@Master-redis utils]# ll -d install_server.sh
-rwxrwxr-x 1 root root 9567 6月 13 2018 install_server.sh [root@Master-redis utils]# sh install_server.sh
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] 6565
Please select the redis config file name [/etc/redis/6565.conf] /etc/redis/redis.conf
Please select the redis log file name [/var/log/redis_6565.log] /var/log/redis_6565.log
Please select the data directory for this instance [/var/lib/redis/6565] /data/redis/6565
Please select the redis executable path [] /usr/local/bin/redis-server
Selected config:
Port : 6565
Config file : /etc/redis/redis.conf
Log file : /var/log/redis_6565.log
Data dir : /data/redis/6565
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort. #这里选择按Enter继续,或按Ctrl-C中止
Copied /tmp/6565.conf => /etc/init.d/redis_6565
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
/var/run/redis_6565.pid exists, process is already running or crashed
Installation successful!

3.4 编辑/etc/redis/redis.conf,做以下内容处理(redis主配置)

[root@Master-redis utils]# cd /etc/redis/
[root@Master-redis redis]# vim redis.conf
[root@Master-redis redis]# cat -n redis.conf | sed -n '70p;219p;220p;221p;222p;319p;320p;675p;747p;1167p;1168p'
70 #bind 127.0.0.1
219 #save 900 1
220 #save 300 10
221 #save 60 10000
222 save ""
319 slave-read-only no
320 requirepass admin@58991998
675 appendonly yes
747 auto-aof-rewrite-min-size 256mb
1167 client-output-buffer-limit slave 512mb 128mb 60
1168 client-output-buffer-limit pubsub 64mb 16mb 60

3.5 执行以下命令

[root@Master-redis redis]# echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
[root@Master-redis redis]# echo 'net.core.somaxconn = 65535' >> /etc/sysctl.conf
[root@Master-redis redis]# tail -2 /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 65535 [root@Master-redis redis]# sysctl -p
vm.overcommit_memory = 1
net.core.somaxconn = 65535
[root@Master-redis redis]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@Master-redis redis]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never] [root@Master-redis redis]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
[root@Master-redis redis]# tail -1 /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled

3.6 编辑/etc/init.d/redis_6565

#注意,请找到case-stop模块中以下内容
[root@Master-redis redis]# cat -n /etc/init.d/redis_6565 | grep '$CLIEXEC -p $REDISPORT shutdown'
43 $CLIEXEC -p $REDISPORT shutdown #将其修改为
[root@Master-redis redis]# cat /etc/init.d/redis_6565 | sed -n "43p"
$CLIEXEC -a "admin@58991998" -p $REDISPORT shutdown

3.7 service redis_6565 restart ,观察/var/log/redis_6565.log,是否成功启动无报错,redis主节点服务部署完毕

[root@Master-redis redis]# tail -100f /var/log/redis_6565.log
10331:C 06 Jun 11:57:47.291 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
10331:C 06 Jun 11:57:47.291 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=10331, just started
10331:C 06 Jun 11:57:47.291 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0.10 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6565
| `-._ `._ / _.-' | PID: 10332
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

3.8 如果连接不上,请重启redis,并测试6565端口有没有开启

[root@Master-redis redis]# service redis_6565 restart

3.9 请使用以下命令进行测试验证

[root@Master-redis redis]# /usr/local/bin/redis-cli -p 6565 -a admin@58991998 -h 192.168.200.5     (从redis节点ip)
Warning: Using a password with '-a' option on the command line interface may not be safe.
192.168.200.5:6565> set key ywb
OK
192.168.200.5:6565> get key
"ywb"

4. 从redis节点,redis部署(此章节为从redis节点部署动作)

4.1 将技术包中的redis-4.0.10.tar.gz包传入/soft

[root@Slave-redis openssh-8.0p1]# cd /soft
[root@Slave-redis soft]# ll -d redis-4.0.10.tar.gz
-rw-r--r-- 1 root root 1738465 6月 6 11:48 redis-4.0.10.tar.gz

4.2 解压redis-4.0.10.tar.gz,进入redis-4.0.10目录 编译,安装,无需做多余选项配置

[root@Slave-redis soft]# tar -zxvf redis-4.0.10.tar.gz
[root@Slave-redis soft]# cd redis-4.0.10
[root@Slave-redis redis-4.0.10]# make && make install #以下省略若干。。。

4.3 进入/soft/redis-4.0.10/utils 目录,执行install_server.sh脚本,进行守护进程部署

[root@Slave-redis redis-4.0.10]# cd utils/
[root@Slave-redis utils]# ll -d install_server.sh
-rwxrwxr-x 1 root root 9567 6月 13 2018 install_server.sh #执行该脚本后会触发instd-input,请依次键入以下配置:
[root@Slave-redis utils]# sh install_server.sh
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] 6565
Please select the redis config file name [/etc/redis/6565.conf] /etc/redis/redis.conf
Please select the redis log file name [/var/log/redis_6565.log] /var/log/redis_6565.log
Please select the data directory for this instance [/var/lib/redis/6565] /data/redis/6565
Please select the redis executable path [] /usr/local/bin/redis-server
Selected config:
Port : 6565
Config file : /etc/redis/redis.conf
Log file : /var/log/redis_6565.log
Data dir : /data/redis/6565
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort. #这里选择按Enter继续,或按Ctrl-C中止
Copied /tmp/6565.conf => /etc/init.d/redis_6565
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

4.4 编辑 /etc/redis/redis.conf,做以下内容处理(redis从配置)

[root@Slave-redis utils]# cd /etc/redis/
[root@Slave-redis redis]# vi redis.conf
[root@Slave-redis redis]# cat -n redis.conf | sed -n '70p;219p;220p;221p;222p;223p;224p;321p;322p;677p;749p;1169p;1170p'
70 #bind 127.0.0.1
219 #save 900 1
220 #save 300 10
221 #save 60 10000
222 save ""
223 slaveof 192.168.200.5 6565
224 masterauth admin@58991998
321 slave-read-only no
322 requirepass admin@58991998
677 appendonly yes
749 auto-aof-rewrite-min-size 256mb
1169 client-output-buffer-limit slave 512mb 128mb 60
1170 client-output-buffer-limit pubsub 64mb 16mb 60

4.5 执行以下命令

[root@Slave-redis redis]# echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
[root@Slave-redis redis]# echo 'net.core.somaxconn = 65535' >> /etc/sysctl.conf
[root@Slave-redis redis]# tail -2 /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 65535 [root@Slave-redis redis]# sysctl -p
vm.overcommit_memory = 1
net.core.somaxconn = 65535

4.6 编辑/etc/init.d/redis_6565

#注意,请找到case-stop模块中以下内容
[root@Slave-redis redis]# cat -n /etc/init.d/redis_6565 | grep '$CLIEXEC -p $REDISPORT shutdown'
43 $CLIEXEC -p $REDISPORT shutdown #将其修改为
[root@Slave-redis redis]# cat /etc/init.d/redis_6565 | sed -n "43p"
$CLIEXEC -a "admin@58991998" -p $REDISPORT shutdown

4.7 service redis_6565 restart ,观察/var/log/redis_6565.log,成功启动,redis从节点服务部署完毕 (有图示样例)

[root@Slave-redis redis]# tail -100f /var/log/redis_6565.log
10442:C 06 Jun 15:18:43.829 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
10442:C 06 Jun 15:18:43.829 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=10442, just started
10442:C 06 Jun 15:18:43.829 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0.10 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6565
| `-._ `._ / _.-' | PID: 10443
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

4.8 如果连接不上,请重启redis,并测试6565端口有没有开启

[root@Slave-redis redis]# service redis_6565 restart

4.9 请使用以下命令登入从redis服务器进行测试验证

[root@Slave-redis redis]# /usr/local/bin/redis-cli -p 6565 -a admin@58991998 -h 192.168.200.6     (从redis节点ip)
Warning: Using a password with '-a' option on the command line interface may not be safe.
192.168.200.6:6565> get key
"ywb"

5. HA-redis高可用集群技术方案部署(此章节只为主redis节点部署动作)

5.1 请确保系统时间的准确性,然后同步硬件时钟,执行命令

[root@Master-redis redis]# hwclock
2019年06月13日 星期四 13时59分10秒 -0.974645 秒

5.2 将技术包中的keepalived-2.0.16.tar.gz包传入/soft,将技术包中的libnl目录传入/soft

[root@Master-redis redis]# cd /soft/
[root@Master-redis soft]# ll -d keepalived-2.0.16.tar.gz libnl
-rw-r--r-- 1 root root 983376 6月 13 14:09 keepalived-2.0.16.tar.gz
drwxr-xr-x 2 root root 84 6月 13 14:12 libnl

5.3 进入libnl目录,安装里面的rpm包

[root@Master-redis soft]# cd libnl/
[root@Master-redis libnl]# yum install *

5.4 解压keepalived-2.0.16.tar.gz

[root@Master-redis libnl]# cd /soft/
[root@Master-redis soft]# tar -zxvf keepalived-2.0.16.tar.gz

5.5 进入/soft/keepalived-2.0.16目录,执行以下命令进行编译安装

[root@Master-redis soft]# cd keepalived-2.0.16
[root@Master-redis keepalived-2.0.16]# ./configure --prefix=/opt/keepalived-2.0.16 #以下省略若干。。。
[root@Master-redis keepalived-2.0.16]# make

#以下省略若干。。。
[root@Master-redis keepalived-2.0.16]# make install

#以下省略若干。。。

5.6 创建keepalived目录

[root@Master-redis keepalived-2.0.16]# mkdir -p /etc/keepalived
[root@Master-redis keepalived-2.0.16]# ll -d /etc/keepalived
drwxr-xr-x 2 root root 6 6月 13 14:20 /etc/keepalived

5.7 在当前目录下/soft/keepalived-2.0.16执行以下命令

[root@Master-redis keepalived-2.0.16]# pwd
/soft/keepalived-2.0.16 [root@Master-redis keepalived-2.0.16]# cp keepalived/etc/init.d/keepalived /etc/init.d/
[root@Master-redis keepalived-2.0.16]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@Master-redis keepalived-2.0.16]# cp keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

5.8 编辑配置文件

[root@Master-redis keepalived-2.0.16]# cd /etc/keepalived/
[root@Master-redis keepalived]# vim keepalived.conf
[root@Master-redis keepalived]# cat keepalived.conf
#! Configuration File for keepalived global_defs {
notification_email {
ywb@huiyinxun.com
} notification_email_from ywb@aliyun.com # 通知邮件从哪个地址发出
#smtp_server smtp.aliyun.com # 通知邮件的smtp地址
#smtp_connect_timeout 30 # 连接smtp服务器的超时时间,单位秒
router_id redis-master # keepalived的机器标识,一个网络内保持唯一
} vrrp_script check_redis { ## 定义监控redis的脚本
script "/etc/keepalived/check_redis.sh"
interval 1 ## 监控时间间隔
weight 2 ## 负载参数
} vrrp_instance VI_1 {
state MASTER # 指定初始状态
interface ens32 # 注意这里绑定网卡的名称,用实际名称,中银商务物理机可能为bond0
virtual_router_id 51 # 一组lvs的虚拟路由标识>必须相同,这样才能切换
priority 100 # 优先级,数值越大,优先级越高,backup不能大于master
advert_int 1 # master和slave之间同步检查的时间间隔,单位为秒
authentication { # 通信验证
auth_type PASS # 认证类型
auth_pass 1111 # 认证密码,一组lvs服务器认证密码必须一致
} virtual_ipaddress { # 虚拟IP地址,可配置多个
192.168.200.7/24
} track_script {
#check_redis # 执行监控redis进程的脚本
}
}

5.9 编辑脚本

[root@Master-redis keepalived]# vim check_redis.sh
[root@Master-redis keepalived]# cat check_redis.sh
#!/bin/sh
redis_pid=`ps -elf|grep redis-server|grep -v grep |awk '{print $4}'`
#echo 0
echo "redis.pid=$redis_pid"
netstat -anpt |grep 0.0.0.0:6565
#echo $?
if [ 0 -ne $? ];then
echo 0.5
#这里再次尝试启动RD
kill -9 $redis_pid
echo 1
sleep 2
echo 2
service redis_6565 start
echo trying start redis
echo 3
netstat -anpt |grep 0.0.0.0:6565
[ $? -ne 0 ] && pkill keepalived && echo "keepalived stoped"
echo 4
fi

5.10 启动keepalived,观察日志,查看健康状态

[root@Master-redis keepalived]# service keepalived start
Starting keepalived (via systemctl): [ 确定 ] [root@Master-redis keepalived]# tail -f /var/log/messages
Jun 13 14:42:33 Master-redis Keepalived_vrrp[19981]: Sending gratuitous ARP on ens32 for 192.168.200.7
Jun 13 14:42:33 Master-redis Keepalived_vrrp[19981]: Sending gratuitous ARP on ens32 for 192.168.200.7
Jun 13 14:42:33 Master-redis Keepalived_vrrp[19981]: Sending gratuitous ARP on ens32 for 192.168.200.7
Jun 13 14:42:33 Master-redis Keepalived_vrrp[19981]: Sending gratuitous ARP on ens32 for 192.168.200.7
Jun 13 14:42:38 Master-redis Keepalived_vrrp[19981]: Sending gratuitous ARP on ens32 for 192.168.200.7
Jun 13 14:42:38 Master-redis Keepalived_vrrp[19981]: (VI_1) Sending/queueing gratuitous ARPs on ens32 for 192.168.200.7
Jun 13 14:42:38 Master-redis Keepalived_vrrp[19981]: Sending gratuitous ARP on ens32 for 192.168.200.7
Jun 13 14:42:38 Master-redis Keepalived_vrrp[19981]: Sending gratuitous ARP on ens32 for 192.168.200.7
Jun 13 14:42:38 Master-redis Keepalived_vrrp[19981]: Sending gratuitous ARP on ens32 for 192.168.200.7
Jun 13 14:42:38 Master-redis Keepalived_vrrp[19981]: Sending gratuitous ARP on ens32 for 192.168.200.7

6. HA-redis高可用集群技术方案部署(此章节只为从redis节点部署动作)

6.1 请确保系统时间的准确性,然后同步硬件时钟,执行命令

[root@Slave-redis redis]# hwclock
2019年06月13日 星期四 14时45分53秒 -0.833879 秒

6.2 将技术包中的keepalived-2.0.16.tar.gz包传入/soft,将技术包中的,libnl目录传入/soft

[root@Slave-redis redis]# cd /soft/
[root@Slave-redis soft]# ll -d keepalived-2.0.16.tar.gz libnl
-rw-r--r-- 1 root root 983376 6月 13 14:46 keepalived-2.0.16.tar.gz
drwxr-xr-x 2 root root 84 6月 13 14:47 libnl

6.3 进入libnl目录,安装里面的apm包

[root@Slave-redis soft]# cd libnl/
[root@Slave-redis libnl]# yum install *

6.4 解压keepalived-2.0.16.tar.gz

[root@Slave-redis soft]# tar -zxvf keepalived-2.0.16.tar.gz

6.5 进入/soft/keepalived-2.0.16目录,执行以下命令进行编译安装

[root@Slave-redis soft]# cd keepalived-2.0.16
[root@Slave-redis keepalived-2.0.16]# ./configure --prefix=/opt/keepalived-2.0.16 #以下省略若干。。。
[root@Slave-redis keepalived-2.0.16]# make

#以下省略若干。。。
[root@Slave-redis keepalived-2.0.16]# make install

#以下省略若干。。。

6.6 创建keepalived目录

[root@Slave-redis keepalived-2.0.16]# mkdir -p /etc/keepalived
[root@Slave-redis keepalived-2.0.16]# ll -d /etc/keepalived
drwxr-xr-x 2 root root 6 6月 13 17:21 /etc/keepalived

6.7 在当前目录下/soft/keepalived-2.0.16执行以下命令

[root@Slave-redis keepalived-2.0.16]# pwd
/soft/keepalived-2.0.16
[root@Slave-redis keepalived-2.0.16]# cp keepalived/etc/init.d/keepalived /etc/init.d/
[root@Slave-redis keepalived-2.0.16]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@Slave-redis keepalived-2.0.16]# cp keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

6.8 编辑配置文件

[root@Slave-redis keepalived-2.0.16]# cd /etc/keepalived/
[root@Slave-redis keepalived]# vim keepalived.conf
[root@Slave-redis keepalived]# cat keepalived.conf
#! Configuration File for keepalived
global_defs {
notification_email {
ywb@huiyinxun.com }
notification_email_from ywb@aliyun.com # 通知邮件从哪个地址发出
#smtp_server smtp.aliyun.com # 通知邮件的smtp地址
#smtp_connect_timeout 30 # 连接smtp服务器的超时时间,单位秒
router_id redis-slave # keepalived的机器标识,一个网络内保持唯一
} vrrp_script check_redis { ## 定义监控redis的脚本
script "/etc/keepalived/check_redis.sh"
interval 1 ## 监控时间间隔
weight 2 ## 负载参数
} vrrp_instance VI_1 {
state BACKUP # 指定初始状态 interface ens32 # 注意这里绑定网卡的名称,用实际名称,中银商务物理机可能为bond0
virtual_router_id 51 # 一组lvs的虚拟路由标识>必须相同,这样才能切换
priority 99 # 优先级,数值越大,优先级越高,backup不能大于master
advert_int 1 # master和slave之间同步检查的时间间隔,单位为秒
authentication { # 通信验证
auth_type PASS # 认证类型
auth_pass 1111 # 认证密码,一组lvs服务器认证密码必须一致
} track_script {
check_redis # 执行监控redis进程的脚本
} virtual_ipaddress { # 虚拟IP地址,可配置多个
192.168.200.7/24
}
}

6.9 编辑脚本

[root@Slave-redis keepalived]# vim check_redis.sh
[root@Slave-redis keepalived]# cat check_redis.sh
#!/bin/sh
redis_pid=`ps -elf|grep redis-server|grep -v grep |awk '{print $4}'`
#echo 0
echo "redis.pid=$redis_pid"
netstat -anpt |grep 0.0.0.0:6565
#echo $?
if [ 0 -ne $? ];then
echo 0.5
#这里再次尝试启动NG
kill -9 $redis_pid
echo 1
sleep 2
echo 2
service redis_6565 start
echo trying start redis
echo 3
netstat -anpt |grep 0.0.0.0:6565
[ $? -ne 0 ] && pkill keepalived && echo "keepalived stoped"
echo 4
fi

6.10 启动keepalived,观察日志,查看健康状态

[root@Slave-redis keepalived]# service keepalived start
Starting keepalived (via systemctl): [ 确定 ] [root@Slave-redis keepalived]# tail -f /var/log/messages
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: Opening file '/etc/keepalived/keepalived.conf'.
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: WARNING - default user 'keepalived_script' for script execution does not exist - please create.
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: WARNING - script '/etc/keepalived/check_redis.sh' is not executable for uid:gid 0:0 - disabling.
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: SECURITY VIOLATION - scripts are being executed but script_security not enabled.
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: Assigned address 192.168.200.6 for interface ens32
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: Assigned address fe80::20c:29ff:feb2:2ceb for interface ens32
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: Registering gratuitous ARP shared channel
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: (VI_1) removing VIPs.
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: (VI_1) Entering BACKUP STATE (init)
Jun 13 17:37:38 Slave-redis Keepalived_vrrp[17094]: VRRP sockpool: [ifindex(2), family(IPv4), proto(112), unicast(0), fd(11,12)]

7. HA-redis高可用预案之免密钥部署

7.1 root登录主节点redis服务器,执行以下命令

[root@Master-redis ~]# ssh-keygen -t rsa                   #指定加密算法为rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa) #保存私匙文件的路径
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): #密码可以为空
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub. #生成公匙
The key fingerprint is:
SHA256:PfesA8YMbmVXuW5mq7R8H5VIJ5XFzoUKv2DaCNC/Rcc root@Master-redis
The key's randomart image is:
+---[RSA 3072]----+
| . . =+|
| . . o E =.o|
| . . . + = =.|
| . o.* = = +|
| oS&oo.+ ..|
| * *o.o= .|
| . . ..+oo |
| o.oo .|
| =+ ..|
+----[SHA256]-----+
[root@Master-redis ~]# ssh-copy-id root@192.168.200.6 -p2200
#以上省略。。。
root@192.168.200.6's password: #输入对方密码 #以下省略。。。

7.2 root登录从节点redis服务器,执行以下命令

[root@Slave-redis ~]# ssh-keygen -t rsa                    #指定加密算法为rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #保存私匙文件的路径
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): #密码可以为空
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub. #生成公匙
The key fingerprint is:
SHA256:gTpZr22xjliJXaF72f50/u9CmlDUoCTCEctJNKmRpvM root@Slave-redis
The key's randomart image is:
+---[RSA 3072]----+
| +B+. . .o |
| +oo* o .. . |
| o o* o .. |
| o .+ o o . |
| o+ . S . |
| E+ * =. . |
| . * * ...+. |
| o = . .oo. |
| . . . ... .+=|
+----[SHA256]-----+
[root@Slave-redis ~]# ssh-copy-id root@192.168.200.5 -p2200
#以上省略。。。
root@192.168.200.5's password: #输入对方密码 #以下省略。。。

8. HA-redis高可用全部完成后的验证工作

8.1 down掉主节点的keepalived,并检查主备ip

#主节点
[root@Master-redis ~]# hostname -I
192.168.200.5 192.168.200.7
[root@Master-redis ~]# service keepalived stop
[root@Master-redis ~]# hostname -I
192.168.200.5
#备节点
[root@Slave-redis ~]# hostname -I
192.168.200.6 192.168.200.7

8.2 重启主节点的keepalived,并检查主备ip

#主节点
[root@Master-redis ~]# hostname -I
192.168.200.5
[root@Master-redis ~]# service keepalived start
Starting keepalived (via systemctl): [ 确定 ]
[root@Master-redis ~]# hostname -I
192.168.200.5 192.168.200.7
#备节点
[root@Slave-redis ~]# hostname -I
192.168.200.6

Redis-HA的更多相关文章

  1. 【Redis】使用Redis Sentinel实现Redis HA

    阅读目录 1 sentinel down-after-milliseconds mymaster 30000 sentinel failover-timeout mymaster 18000 sent ...

  2. redis HA高可用方案Sentinel和shard

    1.搭建redis-master.redis-slave以及seninel哨兵监控 在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的” ...

  3. CentOS安装Redis Sentinel HA集群

    安装了很多次,但是每次安装还要翻以前的配置,故列文备忘.下文依赖于2.x版本搭建主从节点实现基于sentinel机制的简单Redis HA(相对高可用Redis集群,真正高可用还要等3.0之后版本). ...

  4. Redis系列之(二):Redis主从同步,读写分离

    1. Redis主从同步 Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制. 2. 配置主从同步 Mater Slave的模式,从Slave向Maste ...

  5. Redis高可用分布式内部交流(九)

    这是上月在公司内部的一次分享,现把PPT及交流内容整理成博客. 阅读目录: 高可用 数据同步 分布式 分布式集群时代 总结 高可用 高可用(High Availability),是当一台服务器停止服务 ...

  6. redis高可用分布式集群

    一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...

  7. (转)基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案

    转载自:http://warm-breeze.iteye.com/blog/2020413 本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedi ...

  8. 基于Redis Sentinel的Redis集群(主从Sharding)高可用方案(转)

    本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在 ...

  9. Redis系列之(二):Redis主从同步,读写分离(转)

    1. Redis主从同步 Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制. 2. 配置主从同步 Mater Slave的模式,从Slave向Maste ...

  10. redis 一般性使用概述

    最近一段时间与redis接触比较频繁.发现有些东西还是工作中经常会用到的,自己也花了点时间巩固下.本篇文章主要是以总结性的方式梳理,因为redis的主题很大,任何一个技术点展开都是几篇文章的量.也可以 ...

随机推荐

  1. USACO2008 Jan 电话网络

    Time Limit: 10 Sec Memory Limit: 162 MB Description Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶 ...

  2. RabbitMQ:伪延时队列

    目录 一.什么是延时队列 二.RabbitMQ实现 三. 延时队列的问题 四.解决RabbitMQ的伪延时方案 ps:伪延时队列先卖个关子,我们先了解下延时队列. 一.什么是延时队列 所谓延时队列是指 ...

  3. Setting proxy for Windows CMD and Linux Terminal

    setting proxy for Windows CMD and Linux Terminal Linux Terminal: set http_proxy=http://127.0.0.1:811 ...

  4. 【LeetCode 76】最小覆盖子串

    题目链接 [题解] 尺取法. 用l和r代表一个合法的覆盖子串. 我们不断地扩大右指针. 直到l..r包含T中的所有字母为止(重复的就要两次以上.) 然后我们可以尝试的让l++. 看看新的l..r是不是 ...

  5. 【HDOJ6602】Longest Subarray(线段树,vector)

    题意:给定一个长为n的序列,第i个数a[i]都是一个[1,c]中的整数 如果一段序列[l,r]中出现过的数字出现次数都>=K则称其为好的序列 求最长的好的序列的长度 n,k,c,a[i]< ...

  6. SQLserver查询作业、视图、函数、存储过程中的关键字

    一.查询视图.函数.存储过程中的关键字 SELECT a.name,a.[type],b.[definition] FROM sys.all_objects a,sys.sql_modules b W ...

  7. 六. jenkins部署springboot项目(3)--windows环境--远程windows server服务器

    前提:jenkins服务器和windows server服务器不在一台机器上 对于jenkins服务器上编译好的jar或war包如何推送到windows server服务器上. 参照网上的,在wind ...

  8. python 3.x上安裝web.py

    python 3.x上安裝web.py 查询之后,安装时使用pip3 install web.py==0.40.dev0 最終可以运行 app.py import weburls=(    '/',' ...

  9. Ubuntu安装 docker

    安装docker首先要需要一台宿主机, 我目前用VMvare下安装的Ubuntu16.04系统为宿主机,进行docker安装测试. ubuntu安装时选的中文环境,生成的sources.list里面的 ...

  10. 抽象类 抽象方法 abstract

    abstract: * abstract修饰类: 抽象类 * > 此类不能被实例化 * > 抽象类中一定要有构造器, 便于子类对象实例时调用(涉及子类对象实例化过程) * > 开发中 ...