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
<s19_ob_crm RUNNING pid 10483, uptime 0:00:36 >
# 此時會進入一個 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,
則整個 集羣並不會停止服務,只是 槽值 位於這個區間的 鍵全部都不可用