部署CentOS虛擬機集羣


一、在虛擬機中安裝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
相關文章
相關標籤/搜索