1.配置阿里yum源:
1.备份默认的yum仓库: (linux的yum仓库地址:/etc/yum.repos.d/xx.repo)
在这个目录的第一层文件夹下,名字以*.repo结尾的都会别识别为yum仓库
cd /etc/yum.repos.d
mkdir backrepo
mv * ./backrepo
2.在线下载yum仓库源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
-O 就是 改名,且指定位置
3.下载第二个源,epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2.安装python3 (将python3的环境变量配置在最前面)
1.1 解决python3安装所需的依赖关系
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
1.2 下载python3的源代码
wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
1.3 最终搞得到一个压缩包Python-3.6.7.tar.xz
tar -zxvf Python-3.6.7.tar.xz
1.4 进入python3的源码目录
cd Python-3.6.7
1.5 开始编译安装三部曲
1.释放makefile,编译文件,并且指定安装路径
./configure --prefix=/opt/python36/
2.开始编译,调用gcc编译器
make | make install 一般表示进行安装; make uninstall 是卸载; 不加参数就是默认的进行源代码编译。
3.开始安装,到/opt/python36目录下
make install
1.6 安装完毕之后,python3的解释器就出现在了/opt/python36/bin目录下
1.7 配置PATH环境变量,写入如下变量到/etc/profile
vim /etc/profile
PATH="/opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
1.8 读取/etc/profile
source /etc/profile #读取配置文件,让PATH生效
3.安装virtualenv——python的虚拟环境
1.安装virtualenv
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
2.创建虚拟环境
virtualenv --no-site-packages --python=python3 venv
--no-site-packages # 这个参数用于构建,干净的环境,没有任何的第三方包
--python=python3 # 指定虚拟环境的本体,是python的哪一个版本
venv # 相等于 ./venv , 就是一个虚拟环境的文件夹,是虚拟python解释器
3.激活虚拟环境
进入 : venv/bin
source activate
4.验证虚拟环境是否正确
which pip3 # 是否来自于自定义的 venv 路径
5.虚拟环境安装完毕。
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple 第三方库==版本号
6.退出虚拟环境
deactivate
4.安装virtualenvwrapper。 (统一管理虚拟环境)
1.安装 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenvwrapper
2.配置环境变量,每次开机都加载virtualenvwrapper这个工具,注意配置的是个人环境变量配置文件
vim ~/.bash_profile #打开文件
# 写入如下环境变量 export也是一个读取指令,让变量生效的
export WORKON_HOME=~/Envs(虚拟环境目录存放地址) #设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境
export VIRTUALENVWRAPPER_PYTHON=/opt/python362/bin/python3 #指定python解释器,虚拟环境以谁去分身
source /opt/python362/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
3.此时退出linux终端回话,重新登录,让virtualenvwrapper工具生效
4.学习virtualenvwrapper他的命令,管理虚拟环境
mkvirtualenv 虚拟环境的名字 #创建虚拟环境,存放目录是统一管理的
workon 虚拟环境的名字 #可以在任意目录直接激活虚拟环境
rmvirtualenv 虚拟环境的名字 #删除虚拟环境
lsvirtualenv #列出所有的虚拟环境
cdvirtualenv #进入虚拟环境的目录
cdsitepackages #进入虚拟环境的第三方包
5.保证本地开发环境和线上一致性:
1.导出本地python环境的所有模块
pip3 freeze > requirements.txt
2.将这个依赖文件,发送给服务器linux requirements.txt
3.服务器linux上,构建虚拟环境,安装这个文件,即可
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
6.安装nginx(tengine):
1.解除依赖
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
2.下载淘宝nginx的源代码包
wget http://tengine.taobao.org/download/tengine-2.3.0.tar.gz
3.解压缩源码包
tar -zxvf tengine-2.3.0.tar.gz
4.进入源码目录开始编译安装
cd tengine-2.3.0
./configure --prefix=/opt/tngx230/
make && make install
5.配置淘宝nginx的环境变量,写入/etc/profile
PATH="/opt/python362/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tngx230/sbin"
source /etc/profile
6.启动nginx
nginx 直接输入nginx 指令,默认代表启动,不得再执行第二次
nginx -s reload #平滑重启nginx,不重启nginx,仅仅是重新读取nginx配置文件
nginx -s stop #停止nginx进程
nginx -t #检测nginx.conf的语法
7.nginx 的负载均衡
1.环境准备,准备三台机器
192.168.16.37 资源服务器
192.168.16.140 资源服务器
192.168.16.241 充当代理服务器作用,以及负载均衡的作用
分别配置三台机器
192.168.16.37 资源服务器 提供dnf的页面
192.168.16.140 资源服务器 ,提供小猫咪的页面 (讲道理,应该是和192.168.16.37一样的代码配置,一样的页面)
192.168.16.241 负载均衡的配置
# 192.168.16.241 的 nginx.conf修改为如下的配置
1.添加负载均衡池,写入web服务器的地址
upstream mydjango(可以自定义) {
#负载均衡的方式,默认是轮训,1s一次
server 192.168.16.37 ;
server 192.168.16.140 ;
}
负载均衡的规则
轮询 按时间顺序逐一分配到不同的后端服务器(默认) (不做配置,默认轮询)
weight 加权轮询,weight值越大,分配到的访问几率越高,最常用的方式, 权重(优先级)
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器 (根据客户端ip哈希分配,不能和weight一起用)
url_hash 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn 最少链接数,那个机器链接数少就分发
2.负载均衡的配置方式第二步骤
# 192.168.16.241 的 nginx.conf 文件:
location / {
proxy_pass http://mydjango; # 负载均衡器,接收到请求后,转发给负载均衡的地址池
}
8.nginx 的动静分离的配置
1.配置动态请求的服务器
192.168.16.140 充当静态服务器,返回小猫咪的页面,以及一些图片资源
安装nginx即可
192.168.16.140 的 nginx.conf 配置文件如下:
# 当所有请求来自于 192.168.16.140/ 时,就进入如下路径匹配,返回 小猫咪 页面
location / {
root html;
index index.html index.htm;
}
# 当请求是192.168.16.140/**.jpg 就进入如下location匹配,返回/opt/images/目录下的内容
location ~* .*\.(png|jpg|gif)$ {
root /opt/images/;
}
2.配置静态请求的服务器
192.168.16.37 运行django页面
安装nginx,以及django动态页面
1.先后台运行django页面
python3 nginx_django/manage.py runserver 0.0.0.0:8000
2.修改 192.168.16.37 的 nginx的配置,可以转发,动静的请求
upstream mydjango {
server 192.168.16.37:8000;
}
upstream mystatic {
server 192.168.16.140:80;
}
server {
listen 80;
server_name 192.168.16.37; #当外部请求,是192.168.16.37:80时候,就进入如下location,返回django页面,反向代理
location / {
proxy_pass http://mydjango;
}
location ~ .*\.(png|jpg|gif)$ {
proxy_pass http://mystatic; #当外部请求时,192.168.16.37:80/**.jpg,就转发给那台静态资源服务器,去处理
}
}
3.在负载均衡器上,配置请求转发
192.168.16.241 配置负载均衡,动静分离
1.定义一个upstrem地址池,进行请求分发定义
upstream myserver {
server 192.168.16.37;
server 192.168.16.140;
}
2.通过location进行请求分发的操作
location / {
proxy_pass http://myserver;
}
9.linux配置多台虚拟机
配置方式如下
1.服务器准备好了,安装好 nginx
2.在windows中写入hosts假的域名
找到如下文件,编辑写入域名对应关系
C:\Windows\System32\drivers\etc\hosts
192.168.16.37 www.dnf.com
192.168.16.37 www.cf.com
3.修改nginx.conf的配置,实现多虚拟主机,多个server{}标签是同级的关系
#第一个虚拟主机,dnf网址
server {
listen 80;
server_name www.dnf.com;
location / {
root /opt/dnf/;
index index.html index.htm;
}
}
#第二个虚拟主机,日剧的页面
server {
listen 80;
server_name www.cf.com;
location / {
root /opt/cf/;
index index.html;
}
}
4.准备2个网站的文件夹,以及页面文件
/opt/dnf/index.html
/opt/cf/index.html
5.重启nginx
nginx -s reload
6.访问2个虚拟主机的页面,在windows浏览器中访问
www.s19dnf.com
www.s19riju.com
10.linux 配置反向代理
配置nginx实现反向代理的步骤:
环境准备2台机器
192.168.16.37 充当资源服务器,提供一个页面
1.提供了一个dnf的页面
192.168.16.140 充当代理服务器的角色 (也是安装nginx,转发请求,反向代理的功能也是nginx提供的)
1.安装好nginx
2.修改如下配置 nginx.conf
#当你的请求来自于192.168.16.140/ 这样的url时,就进入如下location路径匹配
server {
listen 80;
server_name 192.168.16.140;
location / {
proxy_pass 192.168.16.37:80; #当请求进来这个路径匹配,这个nginx代理角色,直接转发给资源服务器
}
}
3.测试访问反向代理的页面
访问 192.168.16.140即可看到192.168.16.37的页面了
11.配置部署 Django 项目
nginx + uwsgi + 虚拟环境 + mysql + supervisor 环境准备,准备一台linux 192.168.16.37 ,
第一步:先准备后端代码
修改django的settings.py
ALLOWED_HOSTS = ["*"] # 允许所有主机访问
注意:如果这个项目用的部是sqlite,所以需要配置数据库了
第二步:安装python3解释器,以及虚拟环境工具virtualenvwrapper
第三步:修改 nginx 的配置
收集django的所有静态文件,统一管理,丢给nginx去解析
1.修改django的settings.py,写入如下参数
STATIC_ROOT='/opt/static'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
2.执行命令,收集静态文件
python3 manage.py collectstatic
3.nginx配置:
1). nginx的反向代理功能
2). nginx解析静态文件的功能
location /{
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
}
location /static{
alias /opt/s19static; #别名
}
第四步:通过uwsgi启动 Django项目
1.激活虚拟环境在虚拟环境下,安装所需的模块 安装如下内容即可
(django-demo) [root@nginx1 django-demo]# cat requirements.txt
Django==1.11.20 django-multiselectfield==0.1.8 PyMySQL==0.9.3 pytz==2019.1
2.安装这个文件
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
3.安装uwsgi命令
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
4.1 通过uwsgi直接启动 Django项目
uwsgi --http :8088 --module xxx.wsgi --py-autoreload=1
--http 指定用http协议
:8088 指定ob_crm启动的端口
--module 指定django的wsgi.py的文件地址---django项目第二层的目录名,下面的wsgi.py
--py-autoreload=1 开启uwsgi的热加载功能
4.2 通过 uwsgi.ini 配置文件启动 Django项目
由于uwsgi的启动参数过多,我们可以选择配置文件的方式:
1.创建uwsgi.ini文件,写入如下参数
touch uwsgi.ini
写入如下内容,根据你自己的项目目录路径来更改
[uwsgi]
chdir = /opt/teaching_plan/ob_crm/ # 填写你项目的绝对路径,第一层
module = ob_crm.wsgi # 找到django的那个wsgi.py文件,根据上面一条参数,的相对路径来写
home = /root/Envs/ob_crm # 虚拟环境的绝对路径
master = true
processes = 4 # 根据cpu核数来定义这个参数,启动多少个进程
#指定你的django启动在什么地址上,并且是什么协议
socket = 0.0.0.0:8000 # 如果你用了nginx,进行反向代理,请用socket参数
#http = 0.0.0.0:8000 # 如果你没用nginx反向代理,想要直接访问django用这个参数
vacuum = true
py-autoreload = 1
~
2.通过配置文件启动项目
uwsgi --ini uwsgi.ini # uwsgi.ini 这里是 相对位置
第四步(2):配置进程管理工具supervisor的使用 (supervisor其实就是在帮咱们去执行命令)
退出虚拟环境,在物理环境下安装
1.安装supervisor,通过pip直接安装
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple supervisor
2.生成supervisor的配置文件
echo_supervisord_conf > /etc/supervisor.conf
3.修改配置,写入你管理ob_crm的命令参数
vim /etc/supervisor.conf #直接进入最底行,写任务
[program:s19_ob_crm]
command=/root/Envs/ob_crm/bin/uwsgi --ini /opt/teaching_plan/ob_crm/uwsgi.ini
stopasgroup=true
killasgroup=true
4.通过命令,启动supervisor,同时启动 (django-demo) [root@nginx1 conf]#
#启动服务端的命令
supervisord -c /etc/supervisor.conf
#通过客户端命令,管理
(django-demo) [root@nginx1 conf]# supervisorctl -c /etc/supervisor.conf
# 此时会进入一个 supervisor 的输入状态
supervisor> stop s19_ob_crm #停止任务
s19_ob_crm: stopped
supervisor> status s19_ob_crm #查看任务状态
s19_ob_crm STOPPED May 08 12:23 PM
supervisor> stop all s19_ob_crm #停止所有的任务
s19_ob_crm STOPPED May 08 12:23 PM
supervisor> start all s19_ob_crm #启动所有任务
s19_ob_crm RUNNING May 08 12:23 PM
12.部署一个前后端分离 Vue + Django的 项目
vue(js框架)(nginx返回vue的页面) + django rest freamwork(提供api数据接口的框架)(后端)+ 虚拟环境 + sqlite + redis(key-value型的数据库)
后端部署过程:
同 上面的 Django 项目的部署
前端部署过程:
因为使用的是 vue ,所有需要安装 nodejs
1.安装 nodejs 的环境
1.下载nodejs的解释器用于编译vue代码
wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
2.解压缩node的源代码包
tar -zxvf node-v8.6.0-linux-x64.tar.gz
[root@nginx1 bin]# pwd
/opt/s19luffy/node-v8.6.0-linux-x64/bin
[root@nginx1 bin]# ls
node npm npx
node如同python3.6是一个解释器
npm 如同pip是一个包管理工具
3.配置node的环境变量PATH
PATH="/opt/python362/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tngx230/sbin:/opt/s19luffy/node-v8.6.0-linux-x64/bin"
2.安装 vue 的环境
1.下载前端代码
wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip
2.解压缩代码包
unzip 07-luffy_project_01.zip
未更改过的vue代码,长这样
[root@nginx1 07-luffy_project_01]# ls
build config index.html package.json(vue包信息的) package-lock.json README.md src static
3.修改 vue 向后台发送数据的接口地址,修改为 django 项目所在 服务器IP , 端口也要对应与 django 启动的端口 ..
批量修改接口地址
sed -i "s/127.0.0.1:8000/192.168.16.37:8500/g" api.js # /opt/django/07-luffy_project_01/src/restful/api.js
4.安装vue的模块
npm install
5.模块安装完毕后,进行编译打包,生成dist,静态文件夹
npm run build
6.编译打包vue完成之后,会生成一个dist静态文件夹,里面存放了路飞学成首页所有的内容,交给nginx即可
/opt/django/07-luffy_project_01/dist
3:nginx配置方式如下:
1.支持vue的页面虚拟主机
location / {
root /opt/django/07-luffy_project_01/dist;
index index.html;
try_files $uri $uri/ /index.html; #保证路飞首页,刷新不出现404
}
2.反向代理的虚拟主机
server {
listen 8500;
server_name 192.168.16.37;
location / {
uwsgi_pass 192.168.16.37:9000; # 这里必须与 django 的 项目启动端口对应
include uwsgi_params;
}
}
13.redis的 conf 文件
redis.conf 其中配置文件内容如下:
bind 192.168.16.37 #redis绑定的地址
protected-mode yes #redis安全模式
port 6380 #redis的端口
daemonize yes #后台运行redis
requirepass password #redis的密码
14.配置redis的数据持久化
1.RDB
1.基于内存快照的数据持久化
持久化数据文件是一个压缩的二进制文件
通过save指令可以手动触发 持久化,也可以配置时间触发持久化
2.配置方式如下
vim redis-rdb.conf
写入:
bind 192.168.16.37
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379 #redis的数据存放目录
dbfilename dbmp.rdb #这里是配置redis 持久化rdb方式的核心文件,开启了rdb功能
save 900 1 #以下这三个是持久化的时间间隔机制 自动执行save持久化
save 300 10
save 60 10000
创建数据文件夹
mkdir -p /data/6379
3.指定支持持久化的redis配置文件启动
redis-server redis-rdb.conf
4.redis指定端口和主机登录
redis-cli -p 6379 -h 192.168.16.37
5.测试写入redis数据
>> set name test
>> save -->触发持久化 (要不通过 save ,要不就是等待 30秒) 此时就会生成一个 dump.rdb 数据文件在 /data/6379 目录
注意:rdb有缺点,可能会造成数据丢失,但是持久化速度最快
2.AOF持久化模式
1.在配置文件中,定义功能参数,即可使用aof
vim redis-aof.conf
写入:
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
appendonly yes
appendfsync everysec
2.指定aof配置文件启动
redis-server redis-aof.conf
3.启动redis服务端,查看aof日志变动,并且aof数据持久化
3.特殊:redis不重启从rdb切换到aof数据持久化
1.实现准备,准备一个rdb的redis数据库,写入数据
2.在登录了 rdb的数据库当中,进行切换aof,命令如下
3.配置aof的方式如下,通过config set命令,设置aof的功能
127.0.0.1:6379> CONFIG set appendonly yes
OK
127.0.0.1:6379> CONFIG SET save ""
OK
4.还得修改配置文件,以后永远都是aof
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dbmp.rdb
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
15.redis的主从复制的配置
1. 主从库的 redis.conf 的配置
redis-6379.conf 主库
port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
protected-mode no
redis-6380.conf 从库1
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no
slaveof 127.0.0.1 6379 # 这句话是关键,表示是从库,绑定主库的 ip 和 端口
2.创建数据库文件夹
mkdir -p /data/{6379,6380,6381}
3.分别启动三个redis数据库实例,默认已经是主从关系了
redis-server redis-6379.conf
redis-server redis-6380.conf
4.检查redis的主从关系
info指令用于查看redis的数据库详细信息
redis-cli -p 6379 info replication
redis-cli -p 6380 info replication
16.redis的主从复制故障修复
注意:现在是 三个 redis 服务
6379是主, 6380是从,6381是从
1.手动杀死主库,来模拟 主库意外死亡
kill 主库pid
2.选择一个从库为新的主库,假设 6380 变成主,6381 变成 6381的从
登录 6380数据库,输入
127.0.0.1:6380> slaveof no one
OK
去登录6381从库
127.0.0.1:6381> slaveof no one
OK
127.0.0.1:6381> slaveof 127.0.0.1 6380
3.此时就是6380是主库,6381是从库
17.redis配置高可用的哨兵功能
1.配置redis-sentinel
三个redis实例,准备一主两从的架构
redis-6379.conf
port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/opt/data/6379"
redis-6380.conf
redis-6381.conf
配置文件定义如下
sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf
sed "s/6379/6381/g" redis-6379.conf > redis-6381.conf
echo "slaveof 127.0.0.1 6379" >> redis-6380.conf
echo "slaveof 127.0.0.1 6379" >> redis-6381.conf
创建三个数据文件夹
mkdir -p /opt/data/{6379,6380,6381}
2.分别启动三个redis数据库
1030 redis-server redis-6379.conf
1031 redis-server redis-6380.conf
1032 redis-server redis-6381.conf
检查三个数据库redis的身份信息
redis-cli -p 6379 info replication
redis-cli -p 6380 info replication
redis-cli -p 6381 info replication
3.编辑三个redis-sentinel配置文件,运行三个哨兵进程
redis-sentinel-26379.conf
配置如下,其他节点,仅仅是端口的不同
port 26379
dir /opt/data/26379
logfile "26379.log"
sentinel monitor myredis(自定义名) 127.0.0.1 6379 1
sentinel down-after-milliseconds myredis 30000
sentinel parallel-syncs myredis 1
sentinel failover-timeout myredis 180000
daemonize yes
其他两个配置文件,创建如下
sed "s/26379/26380/g" redis-sentinel-26379.conf > redis-sentinel-26380.conf
sed "s/26379/26381/g" redis-sentinel-26379.conf > redis-sentinel-26381.conf
创建三个文件夹
mkdir -p /opt/data/{26379,26380,26381}
分别启动三个哨兵
redis-sentinel redis-sentinel-26379.conf
redis-sentinel redis-sentinel-26380.conf
redis-sentinel redis-sentinel-26381.conf
此时验证redis-sentinel是否成功
redis-cli -p 26379 info sentinel #查看哨兵是否成功
如果信息如下,则正确,找到了2个slave从,3个哨兵同伴
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=s19msredis,status=ok,address=127.0.0.1:6379, slaves=2,sentinels=3
4. 杀死redis主库,查看是否会自动的主从故障切换
18.redis-cluster集群搭建
1.环境准备6个redis节点配置文件
redis-7000.conf
port 7000
daemonize yes
dir "/opt/redis/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage no
redis-7001.conf
redis-7002.conf
redis-7003.conf
redis-7004.conf
redis-7005.conf
其他redis数据库节点,仅仅是端口的不同即可
替换生成配置文件如下
sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
sed "s/7000/7002/g" redis-7000.conf > redis-7002.conf
sed "s/7000/7003/g" redis-7000.conf > redis-7003.conf
sed "s/7000/7004/g" redis-7000.conf > redis-7004.conf
sed "s/7000/7005/g" redis-7000.conf > redis-7005.conf
生成数据文件夹
mkdir -p /opt/redis/data
分别启动6个节点
redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf
redis-server redis-7003.conf
redis-server redis-7004.conf
redis-server redis-7005.conf
2.此时redis的集群还未分配 槽位(slots),需要下载ruby的脚本,创建这个16384个槽位分配
1.下载ruby的源码包
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
2.解压缩
tar -zxvf ruby-2.3.1.tar.gz
3.进入ruby源码包目录
./configure --prefix=/opt/ruby-2-3-1/
make
make install
4.配置ruby的环境变量
PATH=".../opt/ruby-2-3-1/bin"
5.读取PATH环境变量
source /etc/profile
6.下载安装ruby操作redis的包
wget http://rubygems.org/downloads/redis-3.3.0.gem
#ruby安装操作redis的包模块
gem install -l redis-3.3.0.gem
7.分配redis集群的槽位
redis-trib.rb 命令,默认不会添加环境变量,直接用绝对路径去创建.
find /opt/ -name redis-trib.rb #查看这个脚本的绝对路径
/opt/redis-4.0.10/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
(--replicas 1这个意思是每一个主库,只有一个从库)
确定 yes
8.此时槽位已经分配好了,可以写入集群数据了
登录某一个节点,写入数据查看结果
redis-cli -p 7000 -c #-c 以集群方式运行
集群数据会经过重定向,计算出槽位,放入某一个节点
注意:当将某个一个槽位 范围的 主库以及它的从库都杀死了,如果配置文件 cluster-require-full-coverage 为 no,
则整个 集群并不会停止服务,只是 槽值 位于这个区间的 键全部都不可用