CentOS6.2 64位 Mysql版本mysql-5.5.35.tar.gz,編譯安裝 drbd yum安裝 drbd kmod-drbd84 heartbeat yum安裝 heartbeat-3.0.4-2.el6.x86_64 主:192.168.2.230 從:192.168.2.231 VIP:192.168.2.232 配置安裝編譯環境 yum groupinstall "Development Tools" -y yum -y install vim wget gcc-c++ ncurses ncurses-devel cmake make bison openssl openssl-devel gcc* libxml2 libxml2-devel curl-devel libjpeg* libpng* freetype* libxslt reboot rpm -ivh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm yum install drbd kmod-drbd84 chkconfig --add drbd chkconfig drbd on 檢查安裝是否成功: drbdadm 看是否以執行成功 cat /proc/drbd 是否可以看到版本信息 重啓後再次檢查cat /proc/drbd 查看drbd模塊信息 modinfo /lib/modules/2.6.32-358.el6.x86_64/updates/drbd.ko 在兩臺服務器中分出一個空分區或者添加一個空的硬盤,未格式化文件系統的 fdisk /dev/sda 配置服務器的hostname,在兩臺服務器中編輯hosts文件 vi /etc/hosts 添加: 192.168.2.230 www.a.com 192.168.2.231 www.b.com 在兩臺服務器上配置兩個drbd的源文件 vi /etc/drbd.d/mysqldata.res resource mysqldata { protocol C; on www.a.com { device /dev/drbd0; disk /dev/sda5; address 192.168.2.230:7789; meta-disk internal; } on www.b.com { device /dev/drbd0; disk /dev/sda5; address 192.168.2.231:7789; meta-disk internal; } } 往兩臺服務器的/dev/sda5設備寫入一些數據,否則drbd在create-md時會報錯 dd if=/dev/zero of=/dev/sda5 bs=1M count=128 drbdadm create-md all service drbd restart cat /proc/drbd 在主節點上執行 drbdadm -- --overwrite-data-of-peer primary all ========================= 上面執行的語句的所有橫線不能丟。如果第一次設置主節點時使用“/sbin/drbdadm primary mysqldata”命令,會提示如下錯誤: 0: State change failed: (-2) Need access to UpToDate data Command '/sbin/drbdsetup 0 primary' terminated with exit code 17 只要第一次用上面命令成功後,以後就可以用“/sbin/drbdadm primary mysqldata”命令了。 ======================== 用下面命令查看同步的進度 cat /proc/drbd 同步成功後,主從節點都會出現UpToDate/UpToDate的關鍵字 version: 8.4.4 (api:1/proto:86-101) GIT-hash: 599f286440bd633d15d5ff985204aff4bccffadd build by phil@Build64R6, 2013-10-14 15:33:06 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:8393532 nr:0 dw:0 dr:8394196 al:0 bm:513 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 由於mount操作只能在主節點進行,所以只有設置了主節點後才能格式化磁盤分區,然後掛載, 備機的DRBD設備無法被掛載,因爲它是用來接收主機數據的,由DRBD負責操作。 在主節點格式化/dev/drbd0 mkfs.ext4 /dev/drbd0 建立掛載點目錄,由於主從切換時都要有掛載點,所以都要建立該目錄 mkdir /mysqldata 掛載 mount /dev/drbd0 /mysqldata 測試drbd同步 先在主節點上寫入數據,隨便寫入什麼: touch /mysqldata/111 ll /mysqldata/ 然後,我們先卸載目錄/mysqldata,再把主節點的primary降級成secondary,然後把從節點的secondary提升成primary: umount /mysqldata drbdadm secondary mysqldata 把primary降級前,一定要先umount設備才行。 然後提升secondary 在從節點上執行: drbdadm primary mysqldata mount /dev/drbd0 /mysqldata ll /mysqldata 可以看到,數據已經完全同步過去了。 還原 在從節點上 umount /mysqldata drbdadm secondary mysqldata 在主節點上 drbdadm primary mysqldata mount /dev/drbd0 /mysqldata 安裝mysql 建立mysql所需賬號、目錄及權限 useradd -d /usr/local/mysql/ mysql #主從上創建一個Mysql用戶,指定家目錄到/use/local目錄下。 chown -R mysql:mysql /mysqldata/ #將主上面建立的mysqldata文件夾作爲mysql的data存放位置,並賦予mysql權限 chmod 750 /mysqldata 3、解壓並安裝mysql tar xf mysql-5.5.35.tar.gz cd mysql-5.5.35 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=all \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DMYSQL_DATADIR=/mysqldata \ -DMYSQL_USER=mysql \ -DMYSQL_TCP_PORT=3306 \ -DSYSCONFDIR=/etc \ -DWITH_SSL=yes make & make install 編譯註解: -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安裝目錄 -DDEFAULT_CHARSET=utf8 \ #默認字符 -DDEFAULT_COLLATION=utf8_general_ci \ #校驗字符 -DEXTRA_CHARSETS=all \ #安裝所有擴展字符集 -DWITH_MYISAM_STORAGE_ENGINE=1 \ #安裝myisam存儲引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安裝innodb存儲引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #安裝archive存儲引擎 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #安裝blackhole存儲引擎 -DWITH_MEMORY_STORAGE_ENGINE=1 \ #安裝memory存儲引擎 -DWITH_FEDERATED_STORAGE_ENGINE=1 \ #安裝frderated存儲引擎 -DWITH_READLINE=1 \ #快捷鍵功能 -DENABLED_LOCAL_INFILE=1 \ #允許從本地導入數據 -DMYSQL_DATADIR=/mysqldata \ #數據庫存放目錄 -DMYSQL_USER=mysql \ #數據庫屬主 -DMYSQL_TCP_PORT=3306 \ #數據庫端口 -DSYSCONFDIR=/etc \ #MySQL配輯文件 -DWITH_SSL=yes #數據庫SSL vim /etc/my.cnf [mysqld] datadir=/mysqldata socket=/mysqldata/mysql.sock port=3306 user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 default_storage_engine = InnoDB skip-external-locking # CACHES AND LIMITS # key_buffer_size = 256M max_allowed_packet = 32M sort_buffer_size = 16M read_buffer_size = 4M read_rnd_buffer_size = 16M thread_stack = 8M tmp_table_size = 32M max_heap_table_size = 32M query_cache_type = 1 query_cache_size = 128M query_cache_limit = 2M max_connections = 2048 thread_cache_size = 512 open_files_limit = 65535 table_definition_cache = 1024 table_open_cache = 2048 character_set_server = utf8 default-storage-engine = innodb init_connect="SET NAMES 'utf8'" skip-name-resolve wait_timeout=3600 interactive-timeout=3600 # INNODB # innodb_log_files_in_group = 2 innodb_log_file_size = 64M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 0 innodb_support_xa=0 innodb_file_per_table = 1 innodb_buffer_pool_size = 128M innodb_additional_mem_pool_size =64M innodb_data_file_path =ibdata1:1024M:autoextend innodb_autoextend_increment =50 # MyISAM # key_buffer_size = 32M myisam_recover = FORCE,BACKUP # LOGGING # log-error=/mysqldata/error.log general_log=1 general_log_file=/mysqldata/mysql.log slow_query_log=1 slow_query_log_file=/mysqldata/slowquery.log log-output=FILE # BINARY LOGGING # log-bin =/mysqldata/bin.log expire_logs_days = 30 sync_binlog =0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [client] socket=/mysqldata/mysql.sock 將mysql的庫文件路徑加入系統的庫文件搜索路徑中 利用ldconfig導入系統庫 echo "/usr/local/mysql/lib" >> /etc/ld.so.conf.d/mysql.conf ldconfig 輸出mysql的頭文件到系統頭文件 ln -s /usr/local/mysql/include/mysql /usr/include/mysql 進入安裝路徑,初始化配置腳本,只在主節點上執行,從節點不執行 cd /usr/local/mysql scripts/mysql_install_db --user=mysql --datadir=/mysqldata 複製mysql啓動腳本到系統服務目錄 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld 系統啓動項相關配置,主節點配置,從節點不配置 chkconfig --add mysqld #添加開機啓動服務 chkconfig mysqld on #設置mysql啓動 啓動mysql service mysqld start vim /etc/profile 配置mysql環境變量 export PATH=$PATH:/usr/local/mysql/bin 加載環境變量 . /etc/profile 設置初始賬戶,並登陸後臺: /usr/local/mysql/bin/mysqladmin -u root password 111111 進入mysql mysql -u root -p111111 安裝heartbeat rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm yum install heartbeat cd /etc/ha.d/ 該目錄下需要三個配置文件 vim authkeys # # Authentication file. Must be mode 600 # # # Must have exactly one auth directive at the front. # auth send authentication using this method-id # # Then, list the method and key that go with that method-id # # Available methods: crc sha1, md5. Crc doesn't need/want a key. # # You normally only have one authentication method-id listed in this file # # Put more than one to make a smooth transition when changing auth # methods and/or keys. # # # sha1 is believed to be the "best", md5 next best. # # crc adds no security, except from packet corruption. # Use only on physically secure networks. # auth 1 1 crc #2 sha1 HI! #3 md5 Hello! vim ha.cf debugfile /var/log/ha-debug logfacility local0 keepalive 2 deadtime 30 warntime 10 initdead 120 udpport 694 //upd監聽端口,iptables需要對各自開放 ucast eth0 192.168.2.230 //主從各自指向相對的ip, auto_failback on node www.a.com node www.b.com respawn root /usr/lib64/heartbeat/ipfail apiauth ipfail gid=root uid=root vim haresources 該文件主從需要保持一致,heartbeat根據該文件切換主從、啓動和掛載drbd以及mysqld程序,並使VIP地址生效。 www.a.com IPaddr::192.168.2.232/22/eth0 drbddisk::mysqldata Filesystem::/dev/drbd0::/mysqldata::ext4 mysqld 將主從的該文件權限進行修改 chmod 600 authkeys 默認heartbeat安裝後沒有切換drbd的腳本,需要在主從的/etc/ha.d/resource.d下建立drbddisk腳本,並賦予755執行權限 vim /etc/ha.d/resource.d/drbddisk #!/bin/bash # # This script is inteded to be used as resource script by heartbeat # # Copright 2003-2008 LINBIT Information Technologies # Philipp Reisner, Lars Ellenberg # ### DEFAULTFILE="/etc/default/drbd" DRBDADM="/sbin/drbdadm" if [ -f $DEFAULTFILE ]; then . $DEFAULTFILE fi if [ "$#" -eq 2 ]; then RES="$1" CMD="$2" else RES="all" CMD="$1" fi ## EXIT CODES # since this is a "legacy heartbeat R1 resource agent" script, # exit codes actually do not matter that much as long as we conform to # http://wiki.linux-ha.org/HeartbeatResourceAgent # but it does not hurt to conform to lsb init-script exit codes, # where we can. # http://refspecs.linux-foundation.org/LSB_3.1.0/ # LSB-Core-generic/LSB-Core-generic/iniscrptact.html #### drbd_set_role_from_proc_drbd() { local out if ! test -e /proc/drbd; then ROLE="Unconfigured" return fi dev=$( $DRBDADM sh-dev $RES ) minor=${dev#/dev/drbd} if [[ $minor = *[!0-9]* ]] ; then # sh-minor is only supported since drbd 8.3.1 minor=$( $DRBDADM sh-minor $RES ) fi if [[ -z $minor ]] || [[ $minor = *[!0-9]* ]] ; then ROLE=Unknown return fi if out=$(sed -ne "/^ *$minor: cs:/ { s/:/ /g; p; q; }" /proc/drbd); then set -- $out ROLE=${5%/**} : ${ROLE:=Unconfigured} # if it does not show up else ROLE=Unknown fi } case "$CMD" in start) # try several times, in case heartbeat deadtime # was smaller than drbd ping time try=6 while true; do $DRBDADM primary $RES && break let "--try" || exit 1 # LSB generic error sleep 1 done ;; stop) # heartbeat (haresources mode) will retry failed stop # for a number of times in addition to this internal retry. try=3 while true; do $DRBDADM secondary $RES && break # We used to lie here, and pretend success for anything != 11, # to avoid the reboot on failed stop recovery for "simple # config errors" and such. But that is incorrect. # Don't lie to your cluster manager. # And don't do config errors... let --try || exit 1 # LSB generic error sleep 1 done ;; status) if [ "$RES" = "all" ]; then echo "A resource name is required for status inquiries." exit 10 fi ST=$( $DRBDADM role $RES ) ROLE=${ST%/**} case $ROLE in Primary|Secondary|Unconfigured) # expected ;; *) # unexpected. whatever... # If we are unsure about the state of a resource, we need to # report it as possibly running, so heartbeat can, after failed # stop, do a recovery by reboot. # drbdsetup may fail for obscure reasons, e.g. if /var/lock/ is # suddenly readonly. So we retry by parsing /proc/drbd. drbd_set_role_from_proc_drbd esac case $ROLE in Primary) echo "running (Primary)" exit 0 # LSB status "service is OK" ;; Secondary|Unconfigured) echo "stopped ($ROLE)" exit 3 # LSB status "service is not running" ;; *) # NOTE the "running" in below message. # this is a "heartbeat" resource script, # the exit code is _ignored_. echo "cannot determine status, may be running ($ROLE)" exit 4 # LSB status "service status is unknown" ;; esac ;; *) echo "Usage: drbddisk [resource] {start|stop|status}" exit 1 ;; esac exit 0 chmod 755 /etc/ha.d/resource.d/drbddisk 啓動heartbeat。先啓動主,再啓動從。heartbeat啓動時會自動啓動drbd和mysql,並且會根據/etc/ha.d/haresources中的配置加載和掛載drbd的源 service heartbeat start 在主上查看VIP ip addr 查看主從的heartbeat日誌 tail -f /var/log/ha-debug 測試 首先現在主上查看/mysqldata是否掛載成功 ll /mysqldata 查看drbd狀態 cat /proc/drbd 查看mysql啓動狀態和進程 service mysqld status ps -ef|grep mysqld 本地登陸mysql查看數據庫和表是否正常 利用mysql客戶端工具連接VIP地址,看是否能通過VIP連接到mysql並且查看數據庫和表狀態 以上都成功後,測試切換 停止主上的heartbeat進程 在主上查看/mysqldata目錄內容,以及mysql進程是否關閉 在從上查看VIP地址是否切換成功 ip addr 在從上查看/mysqldata目錄內容,以及mysql進程是否啓動 本地登陸mysql查看數據庫和表是否正常 利用mysql客戶端工具連接VIP地址,看是否能通過VIP連接到mysql並且查看數據庫和表狀態
centos6.2+heartbeat+mysql5.5+drbd84高可用安裝
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.