<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 1.Linux基礎 ### 1.1 sudo 命令 > 場景:普通用戶在執行某些Linux命令時,由于權限的關系導致執行失敗。sudo 命令請求超級用戶權限來提升用戶的權限,使得Linux命令得以順利執行。 > * sudo的工作過程如下: > 1)當用戶執行sudo時,系統會主動尋找/etc/sudoers文件,判斷該用戶是否有執行sudo的權限 > 2)確認用戶具有可執行sudo的權限后,讓用戶輸入用戶自己的密碼確認 > 3)若密碼輸入成功,則開始執行sudo后續的命令 > 4)root執行sudo時不需要輸入密碼(eudoers文件中有配置root ALL=(ALL) ALL這樣一條規則) > 5)若欲切換的身份與執行者的身份相同,也不需要輸入密碼 ### 1.2 給用戶賦予執行sudo命令的權限 > * Linux對用戶執行sudo命令的權限配置是在 /etc/sudoers文件中,想要用戶可以執行sudo命令,需要經過一下幾部 > 1)chmod u+w /etc/sudoers ---------------這個文件為只讀文件 > 2)vi /etc/sudoers > 3)加入 用戶名 ALL=(ALL:ALL) ALL > 4)保存退出 > 5)chmod u-w /etc/sudoers ---------------將文件的權限改回來 ### 1.3 shell腳本 ~~~ #!/bin/bash ---定義變量 REDIS_PORT=6379 REDIS_ETC=/etc/redis REDIS_INITD=/etc/init.d ---創建對應得目錄 sudo mkdir $REDIS_ETC sudo mkdir -p ~/data/redis/$REDIS_PORT sudo mkdir -p /var/log/redis ---把redis得啟動腳本復制到/etc/init.d系統服務啟動文件中 sudo cp ./redis-3.2.5/utils/redis_init_script ${REDIS_INITD}/redis_${REDIS_PORT} sudo cp ./redis-3.2.5/redis.conf ${REDIS_ETC}/${REDIS_PORT}.conf ~~~ * * * * * ## 2.安裝redis ### 2.1 redis集群搭建 #### 2.1.1 單機安裝 1. 安裝環境 ubuntu14.04 server `wget http://download.redis.io/releases/redis-3.2.5.tar.gz` ~~~ tar -xzvf ./redis-3.2.5.tar.gz cd redis-3.2.5/ ~/redis-3.2.5$ sudo apt-get install gcc ~/redis-3.2.5$ sudo apt-get install make ~/redis-3.2.5$ make MALLOC=libc ~/redis-3.2.5$ sudo make install # 將可執行文件導入/usr/local/bin 目錄 ~~~ > 在執行了make install之后,查看默認安裝目錄:/usr/local/bin,包含如下文件: > redis-benchmark:性能測試工具,可以在自己本子運行,看看自己本子性能如何 服務啟動起來后執行 ~~~ redis-check-aof:修復有問題的AOF文件 redis-check-dump:修復有問題的dump.rdb文件 redis-cli:客戶端,操作入口 redis-sentinel:redis集群使用 redis-server:Redis服務器啟動命令 ~~~ 2. 修改redis.conf的配置 ~~~ bind 192.168.1.152 127.0.0.1 #綁定ip,原始只有127.0.0.1 port 6379 daemonize yes #是否常駐進程運行,原始是no dir /home/aexit1/data/redis/6379 #數據文件持久化存儲路徑,原始是./ logfile /var/log/redis/redis.log requirepass <改為你自己的登陸密碼> ~~~ linux系統下面redis常用初始化腳本 ~~~ #!/bin/bash REDIS_PORT=6379 REDIS_ETC=/etc/redis REDIS_INITD=/etc/init.d sudo mkdir $REDIS_ETC sudo mkdir -p ~/data/redis/$REDIS_PORT sudo mkdir -p /var/log/redis sudo cp ./redis-3.2.5/utils/redis_init_script ${REDIS_INITD}/redis_${REDIS_PORT} sudo cp ./redis-3.2.5/redis.conf ${REDIS_ETC}/${REDIS_PORT}.conf ~~~ 執行啟動命令,守護進程 ~~~ sudo /etc/init.d/redis_6379 start (還可以stop) #redis-server ./redis.conf (這種啟動方式,不是生產規范) ~~~ 測試一下基礎命令: redis-cli -h 192.168.1.152 -p 6379 redis> set foo bar OK redis> get foo "bar" 2.2.安裝之后需要知道的基礎知識 redis是單進程工作,利用IO多路復用技術 默認16個數據庫,類似數組下表從零開始,初始默認使用零號庫,使用select命令切換數據庫,如select 2 Redis索引都是從零開始 redis初始沒有密碼,可以使用統一密碼管理,16個庫都是同樣密碼,要么都OK要么一個也連接不上 默認端口是6379 * * * * * ### 2.2 主從配置(數據同步) * 數據的安全性 * 擴展主節點處理讀的請求 通過對數據的復制,解決redis的單點問題,保證數據的安全。Redis的復制機制是一個主從架構。 1)一個子節點只能有一個主節點,主節點可以有多個子節點。 2)數據復制的流行是單向的,只能有主節點復制到子節點。 #### 主從復制有三種方式: 1. 修改redis的配置文件 1)在充當slave節點的機器上, vi redis.conf 加入 slaveof <master節點IP> <master節點port> masterauth <密碼> -------如果主節點配置了 requirepass,這里要與主節點保持一致。 2)啟動redis 3)redis@ubuntu:~$ ps -aux|grep redis root 17926 0.1 0.1 34308 3576 ? Ssl 15:39 0:04 redis-server 127.0.0.1:6379 -----服務已經啟動 root 17967 0.1 0.3 105660 6636 ? Ss 16:50 0:00 sshd: redis [priv] redis 18040 0.0 0.2 105660 4256 ? S 16:50 0:00 sshd: redis@pts/0 redis 18041 0.4 0.2 22812 5132 pts/0 Ss 16:50 0:00 -bash redis 18055 0.0 0.1 18856 2652 pts/0 R+ 16:50 0:00 ps -aux redis 18056 0.0 0.1 12156 2300 pts/0 S+ 16:50 0:00 grep --color=auto redis 4)redis-cli -h 127.0.0.1 -p 6379 登錄redis客戶端 5)在每臺機器上執行 info命令得到以下界面表示成功 主節點: ![](https://box.kancloud.cn/ae4e2360c3d5537d028d32c4af37de7f_712x238.png) ---------------------------------------------從節點: ![](https://box.kancloud.cn/62b2160903d8a073d20eb2285f0c2800_365x245.png) 2. 在用redis-server啟動命令后,執行slaveof <masterhost> <masterport> 3. 直接執行slaveof <masterhost> <masterport>這條命令可以切換對應的主節點。 后兩種都是動態的指定。 * * * * * ### 2.3 主從拓撲結構 * 一主一從 當主節點出現故障,從節點提供服務 從節點可以開啟AOF,保證數據安全,減輕持久化對主節點造成的壓力 問題:但是在重啟時因為主節點沒有做持久化操作,導致主節點數據為空,導致子節點數據也被清空,所以再重啟之前進行 slaveof no one斷開與主節點的復制關系。 * 一主多從 讀寫分離,適用讀較多的場景,可以把讀命令發送給從節點來分擔主節點的壓力。如keys、sort命令這種消耗性能的查詢命令,可以交給一臺從節點執行,防止對主節點造成阻塞。 問題:在高并發寫入時,多個節點數據的同步會造成主節點性能的低下。 * 樹狀主從 樹形結構,一個節點既可以作為主節點又可以作為從節點。 通過數據復制中間層,數據向下傳遞,減少了主節點的壓力,彌補了一主多從的缺憾。 * * * * * ### 2.4 數據復制 #### 2.4.1 相關命令 1. slaveof: 是一個異步命令,執行時只保存節點信息后返回,復制流程異步地在節點執行。 2. info replication: 命令可以查看數據復制的狀態。 3. slaveof no one:解除主從關系、斷開數據復制、升級為主節點。這個命令任然會保存以前從主節點復制過來的數據。 4. info server:查看運行節點ID * * * * * #### 2.4.2 數據復制相關優化 * 從節點只讀模式 默認配置salve-read-only=yes 從節點默認為只讀模式,由于數據是單向的,主節點無法感知從節點數據的變化會造成數據的不一致。所以最好把從節點弄成只讀模式。 * 網絡傳輸延遲 配置repl-disable-tcp-nodelay,默認關閉。 1)關閉 數據復制低延遲 增加網絡帶寬消耗 使用于同機架或者同機房網絡較好的情況 2)開啟 主節點合并小數據包,節省帶寬 延遲較高 適用在跨機房的主從復雜網絡或者帶寬緊張的情況 * * * * * ### 2.5 數據復制原理 #### 2.5.1 復制過程 slaveof 數據復制開始,經過一下步驟。info replication命令查看復制狀態,包括主節點信息、發送slaveof命令的客戶端... 1. 保存主節點信息 slaveof保存主節點信息后直接返回,并未發生其他操作。 2. 子節點通過定時任務發送socket連接。 3. 子ping主 檢測網絡是否連接成功 檢測主節點是否可以接受和處理命令 如果主節點沒有回復ping,從節點斷開連接,下次定時任務開始時重新發起連接。 4. 權限驗證 配置文件中,如果主節點配置了密碼驗證(requirepass ),子節點必須配置masterauth,保證子節點能夠通過主節點的密碼驗證,保證數據復制正常執行。 5. 同步數據 主從可以正常通信后,開始數據同步,從節點發送同步命令: * redis2.8之前 sync * redis2.8之后 psync <主節點運行ID> <從節點復制偏移量> 1)第一次連接沒有主節點運行ID和復制偏移量,發送psync -1。 2)主節點根據psync -1解析出為全量復制,回復+FULLRESYNC響應。 3)從節點接收到主節點響應的數據得到主節點運行ID和偏移量。 4)主節點執行bgsave保存RDB文件到本地。 6. 命令持續復制 不斷地數據同步,保證數據的一致性。支持無盤復制repl-diskless-sync參數控制,RDB文件不保存到硬盤中,直接通過網絡傳輸給子節點。 #### 2.5.2 同步方式 1. 全量復制 早期redis支持全量復制,主節點一次性把數據同步給從節點,對主節點性能和網絡造成很大影響 2. 部分復制 用于處理數據丟失場景,在連接正常后,補發丟失的數據。 * psync需要以下支持 1)主從節點各自復制偏移量 2)主節點復制積壓緩沖區 3)主節點運行id * 復制偏移量 主從節點都會維護自身復制偏移量。主節點( master)在處理完寫入命令后,會把命令的字節長度 做累加記錄,統計信息在info relication中的master_ repl_ offset中。 從節點每分鐘上報給主節點自己的復制偏移量,子節點偏移量保存在info replication命令輸出的slave_repl_offset中。 * 復制的健康度 master_ repl_ offset-slave_repl_offset如果差值較大說明同步的狀況不是很好,注意網絡和阻塞的問題。 * 復制積壓緩沖區 主節點有子節點時創建的固定長度的隊列,某人為1MB。可以保存最近復制的數據,可以進行數據補救。 * 主節點運行ID 每個redis節點啟動后都會分配一個id(重啟改變),標識redis節點。info server命令可以查看運行id * * * * * ### 2.6 主從之哨兵 * 解決主節點發生故障時,從節點自動升級為主節點 * * * * * #### 2.6.1實現高可用 哨兵(sentinel)可以自動的發現故障,并且實現故障轉移,并且通知應用方。 * 哨兵是一個分布式架構,包含多個sentinel,如果發現某個sentinel不可達,切這個節點時主節點,則把主節點下架,并且和其他sentinel通信選舉主節點,并告知應用方。 ~~~ cd redis-3.2.5 vim sentinel.conf # 修改redis master IP和端口,最后邊的1,表示只要有1個哨兵認為master掛了,就定義master掛了,視哨兵數量而定 ~~~ ![](https://box.kancloud.cn/ba9b81f5d03cfafb3ce46f8bc45daa52_552x95.png) * 開啟哨兵服務 `redis-sentinel sentinel.conf &` * * * * * ## 3.集群搭建 * 目標搭建一個3個主節點,每個主節點都有一個從節點的redis集群 * 在一臺機器上開啟六個redis服務,對應端口 | 主(port) |從(port) | | --- | --- | | 6382 | 6385| | 6383| 6386| | 6384| 6387| 和單機安裝一樣,解壓編譯,接著執行以下步驟 1. 修改redis.conf,主要配置 ~~~ bind 127.0.0.1 192.168.33.130 port 6382 ---配置六個不同的端口 daemonize yes pidfile /var/run/redis_6382.pid logfile /var/log/redis/redis6382.log dir /home/tuna/data/redis/6382 cluster-enabled yes cluster-config-file nodes.conf ~~~ 2. 安裝ruby環境 ~~~ apt-get install -y ruby,contos執行yum install rubygems gem install redis ~~~ 3. 啟動六個redis實例 redis-server 6382.conf ... 4. 在src目錄下執行 ~~~ sudo ./redis-trib.rb create --replicas 1 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 127.0.0.1:6387 ~~~ ---這個腳本自動分配槽(slot) --replicas 代表給主節點分配幾個slave 后面緊接著的 <ip> <port>兩個為一組,前面是主,后面是從 5. 登錄redis客戶端 執行 cluster nodes 命令,得到以下信息 注意:redis-cli -c 集群模式客戶端,對不同的key跳轉到對應的redis主機操作 ![](https://box.kancloud.cn/b07784de5979ac2cb3c860a91a674dd6_794x462.png) 在執行這個命令之后,可以看到有三個主節點和三個從節點,并且三個主平均分配了16383個slot 6. 安裝中遇到的問題 問題一: /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in require': cannot load such file -- redis (LoadError) from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from /opt/cluster_test/redis-unstable/src/redis-trib.rb:25:in <main> 解決辦法: 執行命令 `gem install redis` 問題二: 如果在初始化集群時,由于粗心造成初識話錯誤,想要重新初始化集群,此時會提示你存在某些數據的問題 解決辦法: 刪除在你配置dir的路徑下的dump.rdb nodes.conf兩個文件,再去執行初始化命令(第四步中的腳本)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看