LVS+keepalived+LNMP架構
DR模型原理:
客戶端請求負載均衡器,負載均衡器根據排程演算法,從後端realserver叢集中選擇一臺機器,然後更改請求報文MAC地址,將目的MAC地址改為後端伺服器的MAC地址,源MAC改為自己的MAC地址。後端伺服器收到請求報文,然後處理,最後直接響應給客戶端。
注意問題:
1.director和realserver都是同一個網段。 2.director和realserver都配置VIP地址。 3.director和realserver都配置routeaddVIP路由 4.director的vip配置在eth0:0上 5.realserver的vip配置在lo:0上。 6.realserver禁止響應arp資料包。
一:架構圖
二:Realserver安裝軟體
192.168.1.119 192.168.1.121
1)nginx-1.6.1.tar.gz安裝
http://yujianglei.blog.51cto.com/7215578/1725587
2)php-5.5.4.tar.gz安裝
A:安裝依賴包
cd/home/mcc/tools yum-yinstalllibmcrypt-develmhash-devellibxslt-devel\ libjpeglibjpeg-devellibpnglibpng-devel\ freetypefreetype-devellibxml2libxml2-devel\ zlibzlib-develglibcglibc-develglib2glib2-develbzip2\ bzip2-develncursesncurses-develcurlcurl-devel\ e2fsprogse2fsprogs-develkrb5krb5-devellibidn\ libidn-developensslopenssl-develbzip2-devellibcurl-devel
B:安裝第三方依賴包
wgethttp://www.atomicorp.com/installers/atomic sh./atomic yuminstallphp-mcryptlibmcryptlibmcrypt-devel-y
C:編譯安裝
./configure\ --prefix=/app/php\ --with-config-file-path=/app/php/etc\ --enable-sockets\ --with-openssl\ --with-mhash\ --with-mysql\ --with-mysqli\ --with-iconv-dir\ --with-freetype-dir\ --with-jpeg-dir\ --with-png-dir\ --with-zlib\ --with-curl\ --with-libxml-dir=/usr\ --enable-xml\ --with-xmlrpc\ --with-bz2\ --enable-fpm\ --enable-zip\ --enable-soap\ --enable-sysvsem\ --enable-inline-optimization\ --with-gd\ --with-gettext\ --with-mcrypt\ --disable-rpath\ --enable-mbstring\ --enable-ftp\ --enable-bcmath\ --enable-shmop\ --enable-pcntl\ --enable-gd-native-ttf\ --without-pear make&&makeinstall
cpsapi/fpm/init.d.php-fpm/etc/rc.d/init.d/php-fpm chmod+x/etc/rc.d/init.d/php-fpm chkconfig--addphp-fpm chkconfigphp-fpmon cp/app/php/etc/php-fpm.conf.default/app/php/etc/php-fpm.conf
D:配置php-fpm.conf
pm.max_children=150 pm.start_servers=8 pm.min_spare_servers=5 pm.max_spare_servers=10
E:啟動php-fpm
servicephp-fpmstart
F:配置nginx,整合php環境
兩臺機器nginx配置相同
worker_processes1; worker_rlimit_nofile655360; events{ useepoll; worker_connections1024; } http{ includemime.types; default_typeapplication/octet-stream; sendfileon; tcp_nopushon; tcp_nodelayon; server_tokensoff; keepalive_timeout65; server{ listen80; server_namelocalhost; location/{ roothtml; indexindex.htmlindex.htmindex.php; } location~.*\.(html|htm|gif|jpg|jpeg|bmp|ico|txt|js|css)${ roothtml; expires3d; } location~\.php${ roothtml; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; includefastcgi_params; } error_page500502503504/50x.html; location=/50.html{ roothtml; } } }
F:程式碼上線,先上一臺機器,安裝完成後在把安裝完成的discuz包拷貝到另外一臺機器上。
192.168.1.121 cd/app/nginx/html rz
安裝時:不要用VIP訪問。用192.168.1.121訪問。
三:配置Realserver的LVS功能
啟動指令碼:
#!/bin/bash # #chkconfig:-9010 #description:LVSDRRealServer ./etc/rc.d/init.d/functions VIP=192.168.1.200 case$1in start) /sbin/ifconfiglodown /sbin/ifconfigloup /sbin/ifconfiglo:0$VIPnetmask255.255.255.255broadcast$VIPup /sbin/routeadd-host$VIPdevlo:0 echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce echo"2">/proc/sys/net/ipv4/conf/all/arp_announce sysctl-p2>&1>/dev/null echo"RealServerStartOK!" ;; stop) /sbin/ifconfiglo:0down /sbin/routedel$VIP2>&1>/dev/null echo"0">/proc/sys/net/ipv4/conf/lo/arp_ignore echo"0">/proc/sys/net/ipv4/conf/all/arp_ignore echo"0">/proc/sys/net/ipv4/conf/lo/arp_announce echo"0">/proc/sys/net/ipv4/conf/all/arp_announce sysctl-p2>&1>/dev/null echo"RealServerStopOK!" ;; *) printf"Usage:$0{start|stop}\n" exit1 esac
2) 拷貝realserver指令碼到/etc/init.d/
cprealserver/etc/ini.d/
3)使用
serverrealserverstop serverrealserverstart
4)開啟啟動
chkconfig–addrealserver chkconfigrealserveron
啟動問題:
[[email protected]mcc]#./realserverstart error:"net.bridge.bridge-nf-call-ip6tables"isanunknownkey error:"net.bridge.bridge-nf-call-iptables"isanunknownkey error:"net.bridge.bridge-nf-call-arptables"isanunknownkey 解決: modprobebridge lsmod|grepbridge
四:Director安裝軟體
192.168.1.116 192.168.1.117
安裝ipvsadm-1.24.tar.gz
mkdir/home/mcc/tools wget-chttp://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz ln-s/usr/src/kernels/2.6.*/usr/src/linux tarxfipvsadm-1.24.tar.gz cdipvsadm-1.24 make makeinstall
安裝keepalived-1.2.12.tar.gz
http://yujianglei.blog.51cto.com/7215578/1725586
配置檔案:
192.168.1.116master 192.168.1.117bakcup
主配置檔案: !ConfigurationFileforkeepalived global_defs{ notification_email{ [email protected] } notification_email_from[email protected] smtp_serversmtp.163.com smtp_connect_timeout30 router_idLVS } vrrp_instanceVI_1{ stateMASTER interfaceeth0 virtual_router_id10 priority100 advert_int1 authentication{ auth_typePASS auth_passjidian123 } virtual_ipaddress{ 192.168.1.200 } } virtual_server192.168.1.20080{ delay_loop6 lb_algorr lb_kindDR nat_mask255.255.255.0 persistence_timeout50 protocolTCP real_server192.168.1.12180{ weight1 TCP_CHECK{ connect_timeout10 nb_get_retry3 delay_before_retry3 connect_port80 } } real_server192.168.1.11980{ weight1 TCP_CHECK{ connect_timeout10 nb_get_retry3 delay_before_retry3 connect_port80 } } }
從配置檔案: !ConfigurationFileforkeepalived global_defs{ notification_email{ [email protected] } notification_email_from[email protected] smtp_serversmtp.163.com smtp_connect_timeout30 router_idLVS } vrrp_instanceVI_1{ stateBACKUP interfaceeth0 virtual_router_id10 priority99 advert_int1 authentication{ auth_typePASS auth_passjidian123 } virtual_ipaddress{ 192.168.1.200 } } virtual_server192.168.1.20080{ delay_loop6 lb_algorr lb_kindDR nat_mask255.255.255.0 persistence_timeout50 protocolTCP real_server192.168.1.12180{ weight1 TCP_CHECK{ connect_timeout10 nb_get_retry3 delay_before_retry3 connect_port80 } } real_server192.168.1.11980{ weight1 TCP_CHECK{ connect_timeout10 nb_get_retry3 delay_before_retry3 connect_port80 } } }
五:配置Director的LVS功能
啟動指令碼:
#!/bin/bash # VIP=192.168.1.200 RIP1=192.168.1.119 RIP2=192.168.1.121 PORT=80 case$1in start) /sbin/ifconfigeth0:0$VIPbroadcast$VIPnetmask255.255.255.255up /sbin/routeadd-host$VIPdeveth0:0 echo"1">/proc/sys/net/ipv4/ip_forward /sbin/iptables-F /sbin/ipvsadm-C /sbin/ipvsadm-A-t$VIP:$PORT-srr /sbin/ipvsadm-a-t$VIP:$PORT-r$RIP1-g /sbin/ipvsadm-a-t$VIP:$PORT-r$RIP2-g touch/var/lock/subsys/director.lock echo"DirectorStartOK!" ;; stop) /sbin/ifconfigeth0:0down /sbin/ipvsadm-C echo"0">/proc/sys/net/ipv4/ip_forward rm-fr/var/lock/subsys/director.lock echo"DirectorStopOK!" ;; status) if[-e/var/lock/subsys/director.lock];then echo"DirectorisRunning!" else echo"DirectorisDown!" fi ;; *) printf"Usage:$0{start|stop}\n" exit1 esac
一:安裝MySQL需要依賴的包
yuminstallncurses-devel-y
二:建立資料庫啟動賬號
[[email protected]~]#cat/etc/passwd|grepmysql [[email protected]~]#groupaddmysql [[email protected]~]#useradd-s/sbin/nologin-gmysql-Mmysql
三:獲取MySQL軟體
dev.mysql.com獲取mysql-5.5.45.tar.gz、cmake-2.8.8.tar.gz
四:上傳MySQL軟體到伺服器
1.建立軟體包目錄
mkdir-p/home/mcc/tools cd/home/mcc/tools rz
五:建立MySQL例項的資料檔案目錄和日誌目錄
mkdir-p/mydata55/data mkdir-p/mydata55/{bin_log,error_log,relay_log} tree/mydata55
六:建立MySQL例項的安裝檔案目錄
mkdir/app55/mysql-5.5.45-pv
七:安裝MySQL軟體
1.解壓安裝cmake-2.8.8.tar.gz軟體包
tarxfcmake-2.8.8.tar.gz cdcmake-2.8.8 ./configure gmake gmakeinstall
2.解壓編譯安裝mysql-5.5.45.tar.gz軟體包
tarxfmysql-5.5.45.tar.gz cdmysql-5.5.45 cmake.-DCMAKE_INSTALL_PREFIX=/app55/mysql-5.5.45\ -DMYSQL_DATADIR=/mydata55/data\ -DMYSQL_UNIX_ADDR=/mydata55/mysql.sock\ -DDEFAULT_CHARSET=utf8\ -DDEFAULT_COLLATION=utf8_general_ci-DEXTRA_CHARSETS=all\ -DENABLED_LOCAL_INFILE=ON\ -DWITH_INNOBASE_STORAGE_ENGINE=1\ -DWITH_FEDERATED_STORAGE_ENGINE=1\ -DWITH_BLACKHOLE_STORAGE_ENGINE=1\ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1\ -DWITHOUT_PARTITION_STORAGE_ENGINE=1\ -DWITH_FAST_MUTEXES=1\ -DENABLED_LOCAL_INFILE=1\ -DWITH_READLINE=1\ -DWITH_EMBEDDED_SERVER=1\ -DWITH_DEBUG=0 make&&makeinstall
2.生成不帶版本號的軟連線/app/mysql,即mysql安裝路徑
cd/app55 ln-smysql-5.5.45mysql
八:準備配置檔案
[[email protected]app55]#cp/app55/mysql/support-files/my-small.cnf/etc/my.cnf cp:overwrite`/etc/my.cnf'?y
vi/etc/my.cnf
[client] port=3306 socket=/mydata55/mysql.sock default-character-set=utf8 [mysql] #No-auto-rehash default-character-set=utf8 [mysqld] user=mysql port=3306 socket=/mydata55/mysql.sock character-set-server=utf8 basedir=/app55/mysql datadir=/mydata55/data open_files_limit=1024 back_log=600 max_connections=800 max_connect_errors=3000 table_cache=614 external-locking=FALSE max_allowed_packet=8M sort_buffer_size=1M join_buffer_size=1M thread_cache_size=100 thread_concurrency=2 query_cache_size=2M query_cache_limit=1M query_cache_min_res_unit=2k default-storage-engine=InnoDB #default_table_type=InnoDB thread_stack=192k transaction_isolation=READ-COMMITTED tmp_table_size=2M max_heap_table_size=2M long_query_time=1 #log_long_format log-error=/mydata55/error_log/3306.err pid-file=/mydata55/3306.pid #二進位制日誌 log-bin=/mydata55/bin_log/mysql-bin log-bin-index=/mydata55/bin_log/mysql-bin.index binlog_format=mixed relay-log=/mydata55/relay_log/relay-bin relay-log-info-file=/mydata55/relay_log/relay-log.info binlog_cache_size=1M max_binlog_cache_size=1M max_binlog_size=2M expire_logs_days=10 #MyISAM引擎 key_buffer_size=16M read_buffer_size=1M #read_md_buffer_size=1M bulk_insert_buffer_size=1M myisam_sort_buffer_size=1M myisam_max_sort_file_size=10G #myisam_max_extra_sort_file_size=10G myisam_repair_threads=1 myisam_recover lower_case_table_names=1 skip-name-resolve slave-skip-errors=1032,1062 replicate-ignore-db=mysql server-id=1 #InnoDB引擎 innodb_additional_mem_pool_size=4M innodb_buffer_pool_size=32M innodb_data_file_path=ibdata1:128M:autoextend innodb_file_io_threads=4 innodb_thread_concurrency=8 innodb_flush_log_at_trx_commit=2 innodb_log_buffer_size=2M innodb_log_file_size=4M innodb_log_files_in_group=3 innodb_max_dirty_pages_pct=90 innodb_lock_wait_timeout=120 innodb_file_per_table=1 [mysqldump] quick max_allowed_packet=2M default-character-set=utf8 [mysqld_safe] log-error=/mydata55/error_log/3306.err pid-file=/mydata55/3306.pid default-character-set=utf8
九:配置環境變數
vi/etc/profile exportPATH=/app55/mysql/bin:$PATH source/etc/profile
提示:
在配置環境變數時,一定要將安裝路徑配置在PATH前面,否則系統中萬一存在rpm安裝的mysql。那麼系統就會去尋找/usr/local/bin/下關於mysql的有關命令。
十:更改許可權
chown-Rmysql.mysql/mydata55 chmod-R1777/tmp
十一:初始化資料庫
cd/app55/mysql/scripts ./mysql_install_db--basedir=/app55/mysql--datadir=/mydata55/data--user=mysql
十二:資料庫啟動指令碼
cd/app55/mysql/support-files cpmysql.server/etc/init.d/mysqld
十三:授權,加密,優化
/etc/init.d/mysqldstart mysql-uroot-p-e"grantallprivilegeson*.*to[email protected]'localhost'identifiedby'jidian123'withgrantoption" mysql-uroot-p-e"grantallprivilegeson*.*to[email protected]'%'identifiedby'jidian123'withgrantoption" mysql-uroot-p-e"flushprivileges;" mysql-uroot-p-e"dropdatabasetest;" mysql-uroot-p-e"deletefrommysql.userwhereUser='root'" mysql-uadmin-p'jidian123'-e"deletefrommysql.userwhereUser=''" mysql-uadmin-p'jidian123'-e"flushprivileges;"
十三:報錯解決
1、啟動報錯日誌:
1508193:12:24[ERROR]Plugin'InnoDB'initfunctionreturnederror. 1508193:12:24[ERROR]Plugin'InnoDB'registrationasaSTORAGEENGINEfailed. 1508193:12:24[ERROR]Unknown/unsupportedstorageengine:InnoDB 1508193:12:24[ERROR]Aborting
解決方案:
移除資料目錄下的ib_logfile0ib_logfile1 mv/mydata55/data/ib_logfile*/home
重新啟動:
/etc/init.d/mysqldstart
2、匯入報錯日誌
ERROR1665(HY000):Cannotexecutestatement: impossibletowritetobinarylogsinceBINLOG_FORMAT=STATEMENTandatleastonetableusesastorageenginelimitedtorow-basedlogging.
【報錯原因】
innodb的事務隔離級別是read commited或者read uncommited模式時,binlog不可以使用statement模式。
解決:
setglobalbinlog_format=mixed
轉載於:https://blog.51cto.com/yujianglei/1727378