一、在虛擬機中安裝CentOShtml
(1)使用CentOS-6.5-i386-minimal.iso。
(2)建立虛擬機:打開Virtual Box,點擊「新建」按鈕,點擊「下一步」,輸入虛擬機名稱爲eshop-cache01,選擇操做系統爲Linux,選擇版本爲Red Hat,分配1024MB內存,後面的選項所有用默認,在Virtual Disk File location and size中,必定要本身選擇一個目錄來存放虛擬機文件,最後點擊「create」按鈕,開始建立虛擬機。
(3)設置虛擬機網卡:選擇建立好的虛擬機,點擊「設置」按鈕,在網絡一欄中,鏈接方式中,選擇「Bridged Adapter」。
(4)安裝虛擬機中的CentOS 6.5操做系統:選擇建立好的虛擬機,點擊「開始」按鈕,選擇安裝介質(即本地的CentOS 6.5鏡像文件),選擇第一項開始安裝-Skip-歡迎界面Next-選擇默認語言-Baisc Storage Devices-Yes, discard any data-主機名:spark2upgrade01-選擇時區-設置初始密碼爲hadoop-Replace Existing Linux System-Write changes to disk-CentOS 6.5本身開始安裝。
(5)安裝完之後,CentOS會提醒你要重啓一下,就是reboot,你就reboot就能夠了。java
(6)配置網絡mysql
vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=dhcp service network restart ifconfig BOOTPROTO=static IPADDR=192.168.0.X NETMASK=255.255.255.0 GATEWAY=192.168.0.1 service network restart
(7)配置hostslinux
vi /etc/hosts 配置本機的hostname到ip地址的映射
(8)配置SecureCRTnginx
可使用SecureCRT從本機鏈接到虛擬機進行操做了c++
通常來講,虛擬機管理軟件,virtual box,能夠用來建立和管理虛擬機,可是通常不會直接在virtualbox裏面去操做,由於比較麻煩,沒有辦法複製粘貼git
安裝不少其餘的一些東西,perl,java,redis,storm,複製一些命令直接去執行github
SecureCRT,在windows宿主機中,去鏈接virtual box中的虛擬機redis
(9)關閉防火牆算法
service iptables stop service ip6tables stop chkconfig iptables off chkconfig ip6tables off vi /etc/selinux/config SELINUX=disabled
(10)配置yum
yum clean all yum makecache yum install wget
二、在每一個CentOS中都安裝Java和Perl
(1)安裝JDK
一、將jdk-7u60-linux-i586.rpm經過WinSCP上傳到虛擬機中
二、安裝JDK:rpm -ivh jdk-7u65-linux-i586.rpm
三、配置jdk相關的環境變量
vi .bashrc
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin
source .bashrc
四、測試jdk安裝是否成功:java -version
(2)安裝Perl
yum install -y gcc
wget http://www.cpan.org/src/5.0/perl-5.16.1.tar.gz
tar -xzf perl-5.16.1.tar.gz
cd perl-5.16.1
./Configure -des -Dprefix=/usr/local/perl
make && make test && make install
perl -v
三、在另一個虛擬機中安裝CentOS集羣
(1)按照上述步驟,再安裝1臺如出一轍環境的linux機器
(2)另外三臺機器的hostname分別設置爲eshop-detail02
(3)安裝好以後,在每臺機器的hosts文件裏面,配置好全部的機器的ip地址到hostname的映射關係
四、配置2臺CentOS爲ssh免密碼互相通訊
(1)首先在三臺機器上配置對本機的ssh免密碼登陸
ssh-keygen -t rsa
生成本機的公鑰,過程當中不斷敲回車便可,ssh-keygen命令默認會將公鑰放在/root/.ssh目錄下
cd /root/.ssh
cp id_rsa.pub authorized_keys
將公鑰複製爲authorized_keys文件,此時使用ssh鏈接本機就不須要輸入密碼了
(2)接着配置三臺機器互相之間的ssh免密碼登陸
使用ssh-copy-id -i hostname命令將本機的公鑰拷貝到指定機器的authorized_keys文件中
部署nginx,虛擬機,每臺機器上,部署兩個nginx,一個是分發層nginx,一個是應用層nginx 在實際生產環境中 一、部署第一個nginx (1)部署openresty mkdir -p /usr/servers cd /usr/servers/ yum install -y readline-devel pcre-devel openssl-devel gcc wget http://openresty.org/download/ngx_openresty-1.7.7.2.tar.gz tar -xzvf ngx_openresty-1.7.7.2.tar.gz cd /usr/servers/ngx_openresty-1.7.7.2/ cd bundle/LuaJIT-2.1-20150120/ make clean && make && make install ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit cd bundle wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz tar -xvf 2.3.tar.gz cd bundle wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz tar -xvf v0.3.0.tar.gz cd /usr/servers/ngx_openresty-1.7.7.2 ./configure --prefix=/usr/servers --with-http_realip_module --with-pcre --with-luajit --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ -j2 make && make install cd /usr/servers/ ll /usr/servers/luajit /usr/servers/lualib /usr/servers/nginx /usr/servers/nginx/sbin/nginx -V 啓動nginx: /usr/servers/nginx/sbin/nginx (2)nginx+lua開發的hello world vi /usr/servers/nginx/conf/nginx.conf 在http部分添加: lua_package_path "/usr/servers/lualib/?.lua;;"; lua_package_cpath "/usr/servers/lualib/?.so;;"; /usr/servers/nginx/conf下,建立一個lua.conf server { listen 80; server_name _; } 在nginx.conf的http部分添加: include lua.conf; 驗證配置是否正確: /usr/servers/nginx/sbin/nginx -t 在lua.conf的server部分添加: location /lua { default_type 'text/html'; content_by_lua 'ngx.say("hello world")'; } /usr/servers/nginx/sbin/nginx -t 從新nginx加載配置 /usr/servers/nginx/sbin/nginx -s reload 訪問http: http://192.168.31.187/lua vi /usr/servers/nginx/conf/lua/test.lua ngx.say("hello world"); 修改lua.conf location /lua { default_type 'text/html'; content_by_lua_file conf/lua/test.lua; } 查看異常日誌 tail -f /usr/servers/nginx/logs/error.log (3)工程化的nginx+lua項目結構 項目工程結構 hello hello.conf lua hello.lua lualib *.lua *.so 放在/usr/hello目錄下 /usr/servers/nginx/conf/nginx.conf worker_processes 2; error_log logs/error.log; events { worker_connections 1024; } http { include mime.types; default_type text/html; lua_package_path "/usr/hello/lualib/?.lua;;"; lua_package_cpath "/usr/hello/lualib/?.so;;"; include /usr/hello/hello.conf; } /usr/hello/hello.conf server { listen 80; server_name _; location /lua { default_type 'text/html'; lua_code_cache off; content_by_lua_file /usr/example/lua/test.lua; } }
twemproxy+redis去作集羣,redis部署多個主實例,每一個主實例能夠掛載一些redis從實例,若是將不一樣的數據分片,寫入不一樣的redis主實例中,
twemproxy就是這麼一個緩存集羣的中間件
redis cluster
(1)很差作讀寫分離,讀寫請求所有落到主實例上的,若是要擴展寫QPS,或者是擴展讀QPS,都是須要擴展主實例的數量,從實例就是一個用作熱備+高可用
(2)很差跟nginx+lua直接整合,lua->redis的client api,可是不太支持redis cluster,中間就要走一箇中轉的java服務
(3)很差作樹狀集羣結構,好比redis主集羣一主三從雙機房架構,redis cluster不太好作成那種樹狀結構
(4)方便,至關因而上下線節點,集羣擴容,運維工做,高可用自動切換,比較方便
三、twemproxy+redis
(1)上線下線節點,有一些手工維護集羣的成本
(2)支持redis集羣+讀寫分離,就是最基本的多個redis主實例,twemproxy這個中間件來決定的,java/nginx+lua客戶端,
是鏈接twemproxy中間件的。每一個redis主實例就掛載了多個redis從實例,高可用->哨兵,redis cluster讀寫都要落到主實例的限制
(3)支持redis cli協議,能夠直接跟nginx+lua整合
(4)能夠搭建樹狀集羣結構
一、部署redis
tar -zxvf redis-2.8.19.tar.gz
cd redis-2.8.19
make
nohup /usr/local/redis-test/redis-2.8.19/src/redis-server /usr/local/redis-test/redis-2.8.19/redis.conf &
ps -aux | grep redis
/usr/local/redis-test/redis-2.8.19/src/redis-cli -p 6379
set k1 v1
get k1
二、twemproxy部署
yum install -y autoconf automake libtool
yum remove -y autoconf --直接將autoconf和automake、libtool都刪除掉了
wget ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar -zxvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr
make && make install
wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar -zxvf automake-1.14.tar.gz
cd automake-1.14
./bootstrap.sh
./configure --prefix=/usr
make && make install
wget http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz
tar -zxvf libtool-2.4.2.tar.gz
cd libtool-2.4.2
./configure --prefix=/usr
make && make install
tar -zxvf twemproxy-0.4.0.tar.gz
cd twemproxy-0.4.0
autoreconf -fvi
./configure && make
vi /usr/local/twemproxy-test/twemproxy-0.4.0/conf/nutcracker.yml
server1:
listen: 127.0.0.1:1111
hash: fnv1a_64
distribution: ketama
redis: true
servers:
- 127.0.0.1:6379:1
/usr/local/twemproxy-test/twemproxy-0.4.0/src/nutcracker -d -c /usr/local/twemproxy-test/twemproxy-0.4.0/conf/nutcracker.yml
ps -aux | grep nutcracker
/usr/local/redis-test/redis-2.8.19/src/redis-cli -p 1111
get k1
set k1 v2
get k1
三、redis配置
redis.conf
port 6379
logfile ""
maxmemory 100mb
maxmemory-policy volatile-lru
maxmemory-samples 10
四、redis主從
cp redis.conf redis_6379.conf
cp redis.conf redis_6380.conf
兩份文件分別將端口設置爲6379和6380
分別啓動兩個redis實例
nohup /usr/local/redis-2.8.19/src/redis-server /usr/local/redis-2.8.19/redis_6379.conf &
nohup /usr/local/redis-2.8.19/src/redis-server /usr/local/redis-2.8.19/redis_6380.conf &
ps -aux | grep redis
經過從實例客戶端掛載主從
/usr/local/redis-2.8.19/src/redis-cli -p 6380
slaveof 127.0.0.1 6379
info replication
/usr/local/redis-2.8.19/src/redis-cli -p 6379
set k2 v2
/usr/local/redis-2.8.19/src/redis-cli -p 6380
get k2
五、twemproxy:
eshop-detail-test:
listen: 127.0.0.1:1111
hash: fnv1a_64
distribution: ketama
timeout:1000
redis: true
servers:
- 127.0.0.1:6379:1 test-redis-01
- 127.0.0.1:6380:1 test-redis-02
eshop-detail-test: redis集羣的邏輯名稱
listen:twemproxy監聽的端口號
hash:hash散列算法
distribution:分片算法,一致性hash,取模,等等
timeout:跟redis鏈接的超時時長
redis:是不是redis,false的話是memcached
servers:redis實例列表,必定要加別名,不然默認使用ip:port:weight來計算分片,若是宕機後更換機器,那麼分片就不同了,所以加了別名後,能夠確保分片必定是準確的
你的客戶端,java/nginx+lua,鏈接twemproxy,寫數據的時候,twemproxy負責將數據分片,寫入不一樣的redis實例
若是某個redis機器宕機,須要自動從一致性hash環上摘掉,等恢復後自動上線
auto_eject_hosts: true,自動摘除故障節點
server_retry_timeout: 30000,每隔30秒判斷故障節點是否正常,若是正常則放回一致性hash環
server_failure_limit: 2,多少次無響應,就從一致性hash環中摘除
爲每一個機房的redis從集羣部署twemproxy中間件:
yum install -y autoconf automake libtool yum remove -y autoconf --直接將autoconf和automake、libtool都刪除掉了 wget ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz tar -zxvf autoconf-2.69.tar.gz cd autoconf-2.69 ./configure --prefix=/usr make && make install wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz tar -zxvf automake-1.14.tar.gz cd automake-1.14 ./bootstrap.sh ./configure --prefix=/usr make && make install wget http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz tar -zxvf libtool-2.4.2.tar.gz cd libtool-2.4.2 ./configure --prefix=/usr make && make install tar -zxvf twemproxy-0.4.0.tar.gz cd twemproxy-0.4.0 autoreconf -fvi ./configure && make vi conf/nutcracker.yml server1: listen: 127.0.0.1:1111 hash: fnv1a_64 distribution: ketama redis: true servers: - 127.0.0.1:6379:1 src/nutcracker -d -c ../conf/nutcracker.yml ps -aux | grep nutcracker src/redis-cli -p 1111 get k1 set k1 v2 get k1
安裝rabbitmq
一、安裝編譯工具 yum install -y ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel yum install -y openssl-devel zlib-devel yum install -y make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel 二、安裝erlang 下載erlang:http://erlang.org/download/otp_src_20.0.tar.gz tar -zxvf otp_src_20.0.tar.gz cd otp_src_20.0 ./configure --prefix=/usr/local/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac make && make install ln -s /usr/local/erlang/bin/erl /usr/local/bin/erl vi ~/.bashrc ERLANG_HOME=/usr/local/erlang PATH=$ERLANG_HOME/bin:$PATH source ~/.bashrc erl 三、安裝rabbitmq http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.12/rabbitmq-server-generic-unix-3.6.12.tar.xz yum install -y xz xz -d rabbitmq-server-generic-unix-3.6.12.tar.xz tar -xvf rabbitmq-server-generic-unix-3.6.12.tar mv rabbitmq_server-3.6.1 rabbitmq-3.6.12 開啓管理頁面的插件 cd rabbitmq-3.6.1/sbin/ ./rabbitmq-plugins enable rabbitmq_management 後臺啓動rabbitmq server ./rabbitmq-server -detached 關閉rabbitmq server ./rabbitmqctl stop 添加管理員帳號 ./rabbitmqctl add_user rabbitadmin 123456 ./rabbitmqctl set_user_tags rabbitadmin administrator 進入管理頁面 15672端口號,輸入用戶名和密碼
安裝mysql:
yum install -y mysql-server chkconfig mysqld on service mysqld start mysql -u root set password for root@localhost=password('root'); mysql -uroot -proot