电商详情页缓存架构(二)环境搭建(搭建CentOS 集群、安装redis及启动方案)

2022-03-09 11:56:59 浏览数 (1)

在虚拟机中安装 CentOS

1、virtual box 官网下载最新 (opens new window)(本次笔记使用的是 VirtualBox-6.0.4-128413-Win.exe),安装完成之后,需要先配置下虚拟电脑的默认位置:管理 -> 全局设定 -> 虚拟电脑位置

2、下载 CentOS 6.5 镜像,本次课程使用的是CentOS-6.5-i386-minimal.iso

3、创建虚拟机,打开 Virtual Box,点击“新建”按钮

  • 虚拟机名称:eshop-cache01
  • 类型:Linux
  • 版本:Red Hat(32-bit)
  • 内存大小:1024MB
  • 硬盘创建:选项默认(位置也默认,因为修改了全局的虚拟电脑位置,会默认在该位置下)

桥接模式配置:选择和物理机相同的网卡,且网段和物理机在同一网段即可

4、设置虚拟机网卡:选择创建好的虚拟机,点击“设置”按钮,在网络一栏中,连接方式中,选择“Bridged Adapter” 桥接网卡。

5、安装虚拟机中的 CentOS 6.5 操作系统

  • 选择创建好的虚拟机,点击启动
  • 选择启动盘:选择安装介质(即本地的 CentOS-6.5-i386-minimal.iso 文件)后启动
  • 选择第一项:Install or upgrade an existing system
  • Disc Found 弹窗中选择 Skip;(按键盘右侧的 Ctrl 键,鼠标从虚拟机中回到本地电脑 )
  • 图形界面选择 Next
  • 语言选择:默认语言 English -> U.S.English
  • 选择 Baisc Storage Devices -> Yes,discard any data(丢弃所有数据)
  • 主机名:eshop-cache01
  • 选择时区:Asia/Shanghai 亚洲/上海
  • 设置初始密码(root 账户的):hadoop/123456
  • Replace Existing Linux System -> Write changes to disk(格式化)
  • 安装完以后,CentOS 会提醒你要重启一下,选择 reboot 重启。

6、配置网络

重启完成之后,使用 账号密码登录系统,

检测外网:ping www.baidu.com

检测宿主机:ping 192.168.99.111 ip 是你笔记本的局域网 ip

会发现都 ping 不通,此时需要配置网络为静态地址

代码语言:javascript复制
vi /etc/sysconfig/network-scripts/ifcfg-eth0

移动到要删除的行,连续按两下「d」删除几个默认的项目,文件内容最后保持如下内容

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp

按「i」键进入编辑模式,按esc退出,按:wq!保存并退出

使用 ifconfig 命令会发现没有 eth0 的信息
使用 service network restart 重启网络,如果失败了忽略继续执行

使用配置文件固定 ip 信息

vi /etc/sysconfig/network-scripts/ifcfg-eth0

修改为如下内容

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.99.170
NATMASK=255.255.255.0
GATEWAY=192.168.99.1

对于桥接网络模式来说:就是配置成和你宿主机同一个局域网即可

再次 service network restart 重启网络服务和 ifconfig 查看 ip 信息

7、配置 hosts

vi /etc/hosts 增加一行,可以通过 eshop-cache01 访问本机

代码语言:javascript复制
192.168.99.170 eshop-cache01

8、配置 SecureCRT

使用界面化虚拟机管理软件, SecureCRT 、xshell、MobaXterm都可以。然后就可以从本机连接到虚拟机进行操作了

9、关闭防火墙

一些软件如集群之间需要打开固定的端口,防止连接不上,先关闭防火墙

代码语言:javascript复制
service iptables stop
service ip6tables stop
chkconfig iptables off
chkconfig ip6tables off

还有一个策略需要关闭下(视频中没有解说是为什么这个是什么)

代码语言:javascript复制
vi /etc/selinux/config

内容修改为

SELINUX=disabled

windows 上的防火墙也需要关闭,后面要搭建集群,有的大数据技术的集群之间,在本地你给了防火墙的话,可能会没有办法互相连接,会导致搭建失败

10、配置 yum 工具

代码语言:javascript复制
yum clean all
# 生成缓存,安装的时候从缓存中查询相关数据,提高安装速度
yum makecache

11、安装 wget,可以通过该工具下载软件

代码语言:javascript复制
yum install wget

在每个 CentOS 中都安装 Java 和 Perl

lrzsz 安装

lrzsz 工具可以上传下载文件操作。所以比较方便

代码语言:javascript复制
yum -y install lrzsz

rz  # 弹出上传文件的选择框,选择你要上传的文件
sz 文件名 # 弹出下载保存文件框,把 虚拟机上的文件下载到本机

安装WinSCP,是在windows宿主机和linux虚拟机之间互相传递文件的一个工具

后面我们的软件都装在 /usr/local 中,使用 rm -rf ./* 清空该文件夹下的内容, 我看过该文件夹下的其他目录基本上都是空目录,所以放心删除

JDK 安装

本次使用jdk-7u65-linux-i586.rpm这个版本

代码语言:javascript复制
# 1.将jdk-7u60-linux-i586.rpm通过WinSCP上传到虚拟机中 /usr/local 

# 2.安装 jdk
rpm -ivh jdk-7u65-linux-i586.rpm

# 3.删除安装包
rm -rf jdk-7u65-linux-i586.rpm

配置环境变量

代码语言:javascript复制
vi ~/.bashrc

# 增加 java 环境变量
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin

# 刷新环境变量
source ~/.bashrc

# 检查是否安装成功
java -version

rpm 自动安装后的环境变量问题

通过 rpm 安装之后,可以通过以下方式查找生效的命令路径,通过以下命令查找之后,发现最终指向了 jre/bin/java; 也就是说不是通过环境变量,而是直接是软连方式

代码语言:javascript复制
[root@eshop-detail01 local]# which java
/usr/bin/java
[root@eshop-detail01 local]# ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Jul 15 23:09 /usr/bin/java -> /etc/alternatives/java
[root@eshop-detail01 local]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 40 Jul 15 23:09 /etc/alternatives/java -> /usr/java/jdk1.8.0_202-i586/jre/bin/java

安装 Perl

perl:是一个基础的编程语言的安装,如同 java 一样

为什么要装 perl?对于大型电商网站的详情页系统来说是很复杂的。nginx lua 的时候就需要依赖 perl

代码语言:javascript复制
# 1.先安装 gcc
yum install -y gcc

# 2.下载 per
wget http://www.cpan.org/src/5.0/perl-5.16.1.tar.gz

# 3.解压
tar -xzf perl-5.16.1.tar.gz

# 4.添加配置。记得,我们都在 /usr/local 中操作
cd perl-5.16.1
./Configure -des -Dprefix=/usr/local/perl

# 5.安装。该命令耗时很长,只能等着
make && make test && make install

# 6.检查是否安装成功
perl -v

在 4 个虚拟机中安装 CentOS 集群

按照上述步骤,再安装三台一模一样环境的linux机器

机器分布

hostName

ip

eshop-cache01

192.168.99.170

eshop-cache02

192.168.99.171

eshop-cache03

192.168.99.172

eshop-cache04

192.168.99.173

也可以选择使用 VirtualBox 的复制功能来完成其他 3 台机器的安装。(复制需要先关闭被复制的机器)

接下来修改每台机器的配置 2、另外三台机器的hostname分别设置为eshop-cache02,eshop-cache03,eshop-cache04 3、安装好之后,在每台机器的hosts文件里面,配置好所有的机器的ip地址到hostname的映射关系

对于复制的机器网络服务启动不起来,也就是使用 service network restart 命令失败出现该错误 device eth0 does not seem to be present,delaying initializationvim

解决方案:

如图,修改 vi /etc/udev/rules.d/70-persistent-net.rules 中的内容与桥接网卡的 mac 地址一致即可

配置 4 台 CentOS 为 ssh 免密码互相通信

代码语言:javascript复制
# 生成秘钥,命令中一直回车即可
ssh-keygen -t rsa
# 进入秘钥文件目录
cd /root/.ssh/
# 让自己本机使用 ssh 免密,把 pub 中的内容复制到 authorized_keys 文件中
cp id_rsa.pub authorized_keys
# 可使用 ssh 命令连接本机 hostname,提示输入 yes 即可登录
ssh eshop-cache01
# 退出 ssh 登录的终端
exit

把自己的公钥 copy 到要指定机器的 authorized_keys 文件中, 也就是说,你想要免密登录那一台机器就把自己的公钥写入 authorized_keys 文件夹中

代码语言:javascript复制
# 命令语法如下,在执行该命令的时候需要输入指定机器的密码
ssh-copy-id -i hostname

# 比如
ssh-copy-id -i eshop-cache01
ssh-copy-id -i eshop-cache02
ssh-copy-id -i eshop-cache03
ssh-copy-id -i eshop-cache04

一个小技巧,其他三台机器都使用 ssh-copy-id -i eshop-cache01 把公钥集中到一台机器上,这样 authorized_keys 中的文件内容就包含了 4 台机器的公钥,这个时候只需要把该文件内容 copy 到其他 3 台机器覆盖即可,可以使用如下命令来复制

在 eshop-cache01 上

代码语言:javascript复制
cd /root/.ssh
scp authorized_keys eshop-cache02:/root/.ssh
scp authorized_keys eshop-cache03:/root/.ssh
scp authorized_keys eshop-cache04:/root/.ssh

参考

虚拟机(virtualBox)下redhat7.2桥接网络设置:https://www.cnblogs.com/xiaohaier/p/7544152.html

VirtualBox虚拟机配置CentOS7网络图文详解教程:https://www.linuxidc.com/linux/2017-01/139345.htm

Virtualbox的centos7 nat和桥接网络配置:https://www.centos.bz/2017/08/virtualbox-centos7-nat-bridge/

https://zq99299.github.io/note-book/cache-pdp/006.html#在虚拟机中安装-centos

安装单机版 redis

TIP:都在 /usr/local 目录中安装和下载软件。有的会自动安装到目录。 有一部分就是我们手工安装到该目录下的

官网下载,安装依赖 tcl,如果先安装 redis 的话,会报错,所以需要安装一下 tcl

代码语言:javascript复制
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar -xzvf tcl8.6.1-src.tar.gz
cd  /usr/local/tcl8.6.1/unix/
./configure  
make && make install

安装 redis

代码语言:javascript复制
使用 redis-3.2.8.tar.gz(截止 2017 年 4 月的最新稳定版)
tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make && make test && make install

在等待很长时间后,最后有一个错误信息,提示日志打印失败

代码语言:javascript复制
!!! WARNING The following tests failed:

*** [err]: Server is able to generate a stack trace on selected systems in tests/integration/logging.tcl
expected stack trace not found into log file
*** [err]: Test replication partial resync: no backlog (diskless: yes, reconnect: 1) in tests/integration/replication-psync.tcl
Expected condition '[s -1 sync_partial_err] > 0' to be true ([s -1 sync_partial_err] > 0)
Cleanup: may take some time... OK
make[1]: *** [test] Error 1
make[1]: Leaving directory `/usr/local/redis-3.2.8/src'
make: *** [test] Error 2

由于这里的命令是 && 连接的,所以后面的 make install 没有被执行。再单独执行 make install

代码语言:javascript复制
[root@eshop-cache01 redis-3.2.8]# make install
cd src && make install
make[1]: Entering directory `/usr/local/redis-3.2.8/src'
Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: Leaving directory /usr/local/redis-3.2.8/src

安装还是会出现提示说 test 没有通过,但是这里是一个 Hint(提示),经过后面启动方案测试后,可以正常启动

redis 的生产环境启动方案

本地可以用 redis-server 启动一下 redis,做一些测试

在生产环境是要把 redis 作为一个系统的 daemon 进程去运行的,每次系统启动, redis 进程一起启动

1、将redis/utils 目录下 redis_init_script 脚本,拷贝到 /etc/init.d 目录中,并重命名为redis_6379

代码语言:javascript复制
cp redis_init_script /etc/init.d/
cd /etc/init.d/
mv redis_init_script redis_6379

6379是我们希望这个redis实例监听的端口号,也是 redis 的默认端口号

vi redis_6379可以看到脚本的第6行的REDISPORT,端口号就是6379

2、创建两个目录:

代码语言:javascript复制
mkdir /etc/redis
mkdir /var/redis/
mkdir /var/redis/6379
  • /etc/redis(存放 redis 的配置文件)
  • /var/redis/6379(存放 redis 的持久化文件)
  • /var/run/redis_6379.pid(存放redis的pid文件位置)

3、修改 redis 配置文件 redis.conf

该文件默认在 redis 安装目录下,拷贝到 /etc/redis 目录中,修改名称为 6379.conf

代码语言:javascript复制
cp /usr/local/redis-3.2.8/redis.conf /etc/redis/
cd /etc/redis/
mv redis.conf 6379.conf

为什么要这样修改呢?是因为 redis_init_script 脚本中的 conf 配置指定了该目录下的 端口号.conf 文件

代码语言:javascript复制
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

4、修改 redis.conf(6379.conf) 中的部分配置为生产环境

建议在 windows 下使用文本编辑器搜索修改后在上传覆盖

代码语言:javascript复制
daemonize	yes						// 让redis以daemon后台守护进程运行
pidfile /var/run/redis_6379.pid     // 设置redis的pid文件位置
port  6379						    // 设置 redis的监听端口号
dir /var/redis/6379				    //设置持久化文件的存储位置

5、启动 redis

代码语言:javascript复制
# 执行 redis_6379 脚本
cd /etc/init.d
# 如果没有执行权限的话,修改执行权限 ,可以使用 chmod u x redis_6379
# chmod 777 redis_6379
./redis_6379 start

6、确认 redis 进程是否启动,ps -ef | grep redis

7、让 redis 跟随系统启动自动启动

代码语言:javascript复制
使用 chkconfig 命令开启该文件的系统服务,
可以在 redis_6379 配置文件中上面添加  chkconfig 的注释信息
如下,不要在 #!/bin/sh 上面添加
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

# chkconfig:   2345 90 10
# description:  Redis is a persistent key-value database

8、添加完成之后,使用以下命令开启随系统启动

代码语言:javascript复制
chkconfig redis_6379 on

有关 chkconfig 命令的更多信息 (opens new window)参考百度

redis cli的使用

1、停止本机的 6379 端口的 redis 进程

代码语言:javascript复制
redis-cli shutdown

2、关闭指定机器的 redis,不加 shutdown 命令的话就是登陆到 cli

代码语言:javascript复制
redis-cli -h 127.0.0.1 -p 6379 shutdown

3、ping redis 的端口,看是否正常

代码语言:javascript复制
redis-cli PING

4、默认连接本机 6379 的redis

代码语言:javascript复制
redis-cli

5、在 cli 中可以使用 redis 的命令,下面使用最贱的 set 和 get 命令测试

代码语言:javascript复制
SET k1 v1
GET k1

小结

redis 的技术包括 4 块:

1、redis各种数据结构和命令的使用,包括 java api 的使用

2、针对特殊业务场景,redis作为解决方案的使用,pub/sub 消息系统、分布式锁、输入的自动完成,等等

3、日常的管理相关的命令

4、企业级的集群部署和架构

我们将从redis搭建,到深入集群架构的底层原理,讲解 redis 持久化、主从架构、复制原理、集群架构、数据分布式存储原理、哨兵原理、高可用架构,了解 redis 如何去支撑海量数据、高并发、高可用的

参考:

https://zq99299.github.io/note-book/cache-pdp/redis/007.html#安装单机版-redis

0 人点赞