Linux 的配置操作

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, 
            則整個 集羣並不會停止服務,只是 槽值 位於這個區間的 鍵全部都不可用
        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章