部署CentOS虚拟机集群

网友投稿 634 2022-08-31

部署CentOS虚拟机集群

部署CentOS虚拟机集群

1、在虚拟机中安装CentOS

(6)配置网络

vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesBOOTPROTO=dhcpservice network restartifconfigBOOTPROTO=staticIPADDR=192.168.0.XNETMASK=255.255.255.0GATEWAY=192.168.0.1service 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 stopservice ip6tables stopchkconfig iptables offchkconfig ip6tables offvi /etc/selinux/configSELINUX=disabled

(10)配置yum

yum clean allyum makecacheyum install wget

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

(1)安装JDK

1、将jdk-7u60-linux-i586.rpm通过WinSCP上传到虚拟机中2、安装JDK:rpm -ivh jdk-7u65-linux-i586.rpm3、配置jdk相关的环境变量vi .bashrcexport JAVA_HOME=/usr/java/latestexport PATH=$PATH:$JAVA_HOME/binsource .bashrc4、测试jdk安装是否成功:java -version

(2)安装Perl

yum install -y gcc

wget -xzf perl-5.16.1.tar.gzcd perl-5.16.1./Configure -des -Dprefix=/usr/local/perlmake && make test && make installperl -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/.sshcp id_rsa.pub authorized_keys将公钥复制为authorized_keys文件,此时使用ssh连接本机就不需要输入密码了

(2)接着配置三台机器互相之间的ssh免密码登录使用ssh-copy-id -i hostname命令将本机的公钥拷贝到指定机器的authorized_keys文件中

部署nginx,虚拟机,每台机器上,部署两个nginx,一个是分发层nginx,一个是应用层nginx在实际生产环境中1、部署第一个nginx(1)部署openrestymkdir -p /usr/servers cd /usr/servers/yum install -y readline-devel pcre-devel openssl-devel gccwget 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/luajitcd bundle wget tar -xvf 2.3.tar.gz cd bundle wget tar -xvf v0.3.0.tar.gz cd /usr/servers/ngx_openresty-1.7.7.2 ./configure --prefix=/usr/servers --with- --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 worldvi /usr/servers/nginx/conf/nginx.conf在"/usr/servers/lualib/?.lua;;"; lua_package_cpath "/usr/servers/lualib/?.so;;"; /usr/servers/nginx/conf下,创建一个lua.confserver { listen 80; server_name _; } 在nginx.conf的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 访问/usr/servers/nginx/conf/lua/test.luangx.say("hello world"); 修改lua.conflocation /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.confworker_processes 2; error_log logs/error.log; events { worker_connections 1024; } { 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.confserver { 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.19make

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 v1get 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.gztar -zxvf autoconf-2.69.tar.gzcd autoconf-2.69 ./configure --prefix=/usrmake && make install

wget -zxvf automake-1.14.tar.gz cd automake-1.14./bootstrap.sh./configure --prefix=/usrmake && make install

wget -zxvf libtool-2.4.2.tar.gzcd libtool-2.4.2./configure --prefix=/usrmake && 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 k1set k1 v2get k1

3、redis配置

redis.conf

port 6379logfile ""maxmemory 100mbmaxmemory-policy volatile-lrumaxmemory-samples 10

4、redis主从

cp redis.conf redis_6379.confcp 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的话是memcachedservers: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 libtoolyum remove -y autoconf --直接将autoconf和automake、libtool都删除掉了wget ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gztar -zxvf autoconf-2.69.tar.gzcd autoconf-2.69 ./configure --prefix=/usrmake && make installwget -zxvf automake-1.14.tar.gz cd automake-1.14./bootstrap.sh./configure --prefix=/usrmake && make installwget -zxvf libtool-2.4.2.tar.gzcd libtool-2.4.2./configure --prefix=/usrmake && make installtar -zxvf twemproxy-0.4.0.tar.gzcd twemproxy-0.4.0autoreconf -fvi./configure && makevi 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 nutcrackersrc/redis-cli -p 1111 get k1set k1 v2get k1

安装rabbitmq

1、安装编译工具yum install -y ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-develyum install -y openssl-devel zlib-develyum install -y make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel2、安装erlang-erlang:-zxvf otp_src_20.0.tar.gzcd otp_src_20.0./configure --prefix=/usr/local/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javacmake && make installln -s /usr/local/erlang/bin/erl /usr/local/bin/erlvi ~/.bashrcERLANG_HOME=/usr/local/erlangPATH=$ERLANG_HOME/bin:$PATHsource ~/.bashrcerl3、安装rabbitmqinstall -y xzxz -d rabbitmq-server-generic-unix-3.6.12.tar.xztar -xvf rabbitmq-server-generic-unix-3.6.12.tarmv 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-serverchkconfig mysqld on service mysqld start mysql -u rootset password for root@localhost=password('root');mysql -uroot -proot

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python的基础语法(二)
下一篇:Go 语言:别再问我什么是反射(go的过去式)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~