1、在虚拟机中安装CentOS

(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就可以了。

(6)配置网络

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)配置hosts

vi /etc/hosts
配置本机的hostname到ip地址的映射

(8)配置SecureCRT

可以使用SecureCRT从本机连接到虚拟机进行操作了

一般来说,虚拟机管理软件,virtual box,可以用来创建和管理虚拟机,但是一般不会直接在virtualbox里面去操作,因为比较麻烦,没有办法复制粘贴

安装很多其他的一些东西,perl,java,redis,storm,复制一些命令直接去执行

SecureCRT,在windows宿主机中,去连接virtual box中的虚拟机

(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

  2、在每个CentOS中都安装Java和Perl

(1)安装JDK

1、将jdk-7u60-linux-i586.rpm通过WinSCP上传到虚拟机中
2、安装JDK:rpm -ivh jdk-7u65-linux-i586.rpm
3、配置jdk相关的环境变量
vi .bashrc
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin
source .bashrc
4、测试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

3、在另外一个虚拟机中安装CentOS集群

(1)按照上述步骤,再安装1台一模一样环境的linux机器
(2)另外三台机器的hostname分别设置为eshop-detail02
(3)安装好之后,在每台机器的hosts文件里面,配置好所有的机器的ip地址到hostname的映射关系

4、配置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

在实际生产环境中

1、部署第一个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)方便,相当于是上下线节点,集群扩容,运维工作,高可用自动切换,比较方便

3、twemproxy+redis

(1)上线下线节点,有一些手工维护集群的成本
(2)支持redis集群+读写分离,就是最基本的多个redis主实例,twemproxy这个中间件来决定的,java/nginx+lua客户端,
是连接twemproxy中间件的。每个redis主实例就挂载了多个redis从实例,高可用->哨兵,redis cluster读写都要落到主实例的限制
(3)支持redis cli协议,可以直接跟nginx+lua整合
(4)可以搭建树状集群结构

1、部署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

2、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

3、redis配置

redis.conf

port 6379
logfile ""
maxmemory 100mb
maxmemory-policy volatile-lru
maxmemory-samples 10

4、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

5、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

1、安装编译工具

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 2、安装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 3、安装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

  

最新文章

  1. [收藏]IntelliJ Idea快捷键
  2. Redhat Linux安装JDK 1.7
  3. Github使用指南-从新手到专家
  4. CSS:使用CSS媒体查询创建响应式布局
  5. HDU--1213--How Many Tables--并查集
  6. 使用NHibernate(8)-- 延迟加载
  7. 轻松架设时时监控工具Cacti
  8. Android Volley 框架的使用(一)
  9. W3C盒子与IE盒子模型
  10. zookeeper环境搭建及使用
  11. ajax 参数记录
  12. AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别(转载)
  13. BZOJ 2754 【SCOI2012】 喵星球上的点名
  14. sql根据最小值去重
  15. asp.net 不用控件,自动登录(用于和其他系统对接的时候,自动登录系统,用户体验好)
  16. 打造自己的Sublime使用环境
  17. KineticJS教程(3)
  18. IE8下使用asp.net core mvc+jquery ajaxSubmit问题
  19. Reactor模式和NIO(转载二)
  20. 转载:各种SQRT大比拼

热门文章

  1. Spark源码执行逻辑分析【基于案例SparkPi】
  2. SSISWMI-Watching for the Wql query caused the following system exception: "Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))"
  3. Wordpress 设置中文语言包
  4. ubuntu18 安装坑点记录(华硕飞行堡垒)
  5. DVWA的搭建
  6. react小项目
  7. IComparable和IComparer接口
  8. Python面向对象 | isinstance和issubclass
  9. java 多态(向上转型)
  10. 研究下vc++的abort函数