zoukankan      html  css  js  c++  java
  • 部署CentOS虚拟机集群


    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
    

      

  • 相关阅读:
    5.5团队冲刺08
    5.6团队冲刺09
    5.4团队冲刺07
    5.3团队冲刺06
    5.2团队冲刺05
    第14 周作业
    CentOS Linux release 7.4 yum 安装mariadb-5.5.65 登录报错 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data/mysql/mysql.sock' (2)
    第13周作业
    解析函数
    npm模块安装机制
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/11631739.html
Copyright © 2011-2022 走看看